erp/app/Http/Controllers/Shop/ShopsController.php

98 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers\Shop;
use App\Http\Controllers\Controller;
use App\Listeners\BindBusinessGoods;
use App\Listeners\UpdateBusinessGoodsStock;
use App\Models\Shop;
use App\Http\Resources\ShopsResource;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use App\Services\Business\BusinessFactory;
use Illuminate\Validation\Rule;
class ShopsController extends Controller
{
public function index()
{
$shops = Shop::query()->paginate();
foreach ($shops as $shop) {
$shop->authUrl = '';
if ('妙选' !== $shop->plat_id && '未授权' === $shop->status) {
$shop->authUrl = BusinessFactory::init()->make($shop->plat_id)->getAuthUrl($shop->id, $shop->getOriginal('plat_id'));
}
}
return ShopsResource::collection($shops);
}
public function getPlatList()
{
$shop = new Shop();
return new ShopsResource($shop->getPlatList());
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:191|unique:shops,name',
'plat_id' => 'required|integer',
]);
if ($validator->fails()) {
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
return response($this->res, $this->res['httpCode']);
}
$shop = new Shop();
$shop->name = $request->name;
$shop->plat_id = $request->plat_id;
$shop->save();
return response($this->res, $this->res['httpCode']);
}
public function authBind(Request $request)
{
[$shopId, $platId] = explode('_', $request->get('state'));
$shop = new Shop();
$platList = $shop->getPlatList();
$shop = $shop->find($shopId);
if ($platList[$platId] === $shop->plat_id) {
BusinessFactory::init()->make($shop->plat_id)->authCallback($request->get('code'), $shop);
} else {
$this->res = [
'httpCode' => 403,
'errorCode' => 403400,
'errorMessage' => '信息不匹配',
];
}
return response($this->res, $this->res['httpCode']);
}
public function business(Request $request)
{
$validator = Validator::make($request->all(), [
'type' => ['required', 'string', Rule::in(['goods', 'orders'])],
'erp_shop_id' => ['required', 'integer', 'exists:shops,id'],
]);
if ($validator->fails()) {
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
return response($this->res, $this->res['httpCode']);
}
$shop = new Shop();
$shop = $shop->find($request->get('erp_shop_id'));
$business = BusinessFactory::init()->make($shop->plat_id);
$business->setShop($shop);
if ('goods' === $request->get('type')) {
$business->bindGoods($request->get('data'));
}
if ('orders' === $request->get('type')) {
$business->saveOrders();
}
}
}