diff --git a/app/Console/Commands/DeleteGoodsSku.php b/app/Console/Commands/DeleteGoodsSku.php index be910dd..caea401 100644 --- a/app/Console/Commands/DeleteGoodsSku.php +++ b/app/Console/Commands/DeleteGoodsSku.php @@ -46,18 +46,17 @@ class DeleteGoodsSku extends Command if (empty($code)) { reutrn; } - [$goodsCode, $skuCode] = explode('_', $code); DB::beginTransaction(); try { - $goods = Goods::query()->where('goods_code', $goodsCode)->first(); + $sku = GoodsSku::query()->where('external_sku_id', $code)->first(); + $goods = Goods::query()->find($sku->goods_id); $countSkus = GoodsSku::query()->where('goods_id', $goods->id)->count(); - $sku = GoodsSku::query()->where('goods_id', $goods->id)->where('sku_code', $skuCode)->first(); DailyStockRecord::query()->where('sku_id', $sku->id)->delete(); Log::query()->where('module', 'goods')->where('target_type', 'goods_sku')->where('target_id', $sku->id)->delete(); - $sku->delete(); if (1 === $countSkus) { $goods->delete(); } + $sku->delete(); DB::commit(); $this->info('删除成功'); } catch (\Exception $exception) { diff --git a/app/Console/Commands/Test.php b/app/Console/Commands/Test.php index f033a38..95df5fa 100644 --- a/app/Console/Commands/Test.php +++ b/app/Console/Commands/Test.php @@ -6,6 +6,7 @@ use App\Events\StockUpdateEvent; use App\Models\BusinessGoodsSku; use App\Models\BusinessOrder; use App\Models\GoodsSku; +use App\Models\GoodsType; use App\Models\Log; use App\Models\Shop; use App\Services\Business\BusinessFactory; @@ -13,6 +14,7 @@ use App\Utils\DateTimeUtils; use Illuminate\Console\Command; use Illuminate\Support\Facades\DB; use App\Jobs\BusinessGoodsSkuIncrQuantity; +use Illuminate\Database\Eloquent\Builder; class Test extends Command { diff --git a/app/Console/Commands/UpdateExternalSkuId.php b/app/Console/Commands/UpdateExternalSkuId.php new file mode 100644 index 0000000..f6a8786 --- /dev/null +++ b/app/Console/Commands/UpdateExternalSkuId.php @@ -0,0 +1,48 @@ +external_sku_id = $sku->goods->goods_code . '_' . $sku->sku_code; + $sku->save(); + } + }); + } +} diff --git a/app/Events/BusinessOrdersUpdate.php b/app/Events/BusinessOrdersUpdate.php index 3e595e9..38f7bff 100644 --- a/app/Events/BusinessOrdersUpdate.php +++ b/app/Events/BusinessOrdersUpdate.php @@ -35,11 +35,8 @@ class BusinessOrdersUpdate private function updateStock() { try { - [$goodsCode, $skuCode] = explode('_', $this->businessGoods['external_sku_id']); - $this->goodsSku = GoodsSku::query()->where('sku_code', $skuCode) - ->whereHas('goods', function ($query) use ($goodsCode) { - $query->where('goods_code', $goodsCode); - }) + $this->goodsSku = GoodsSku::query() + ->where('external_sku_id', $this->businessGoods['external_sku_id']) ->first(); } catch (\Exception $e) { Log::error('事件库存更新失败: ' . $e->getMessage()); diff --git a/app/Events/StockUpdateEvent.php b/app/Events/StockUpdateEvent.php index 5a81484..14b34a4 100644 --- a/app/Events/StockUpdateEvent.php +++ b/app/Events/StockUpdateEvent.php @@ -31,7 +31,7 @@ class StockUpdateEvent $this->isBatch = $isBatch; if (is_array($data)) { // ids集合 - $this->goodsSkus = GoodsSku::query()->whereIn('id', $data)->with(['goods:id,goods_code'])->get(); + $this->goodsSkus = GoodsSku::query()->whereIn('id', $data)->get(); } else { // GoodsSku Elo模型对象 $this->goodsSku = $data; diff --git a/app/Filters/BusinessGoodsSkuFilter.php b/app/Filters/BusinessGoodsSkuFilter.php index 052f92f..edf0535 100644 --- a/app/Filters/BusinessGoodsSkuFilter.php +++ b/app/Filters/BusinessGoodsSkuFilter.php @@ -6,16 +6,16 @@ class BusinessGoodsSkuFilter extends Filters { protected function externalSkuId($value) { - return $this->builder->where('external_sku_id', '=', trim($value)); + return $this->builder->where('external_sku_id', trim($value)); } protected function goodsName($value) { - return $this->builder->where('goods_name', '=', trim($value)); + return $this->builder->where('goods_name', trim($value)); } protected function shopId($value) { - return $this->builder->where('shop_id', '=', trim($value)); + return $this->builder->where('shop_id', trim($value)); } } diff --git a/app/Filters/BusinessOrderFilter.php b/app/Filters/BusinessOrderFilter.php index 071442c..f8c25b6 100644 --- a/app/Filters/BusinessOrderFilter.php +++ b/app/Filters/BusinessOrderFilter.php @@ -6,36 +6,36 @@ class BusinessOrderFilter extends Filters { protected function participateNo($value) { - return $this->builder->where('participate_no', '=', trim($value)); + return $this->builder->where('participate_no', trim($value)); } protected function shopId($value) { - return $this->builder->where('shop_id', '=', $value); + return $this->builder->where('shop_id', $value); } protected function activityNo($value) { - return $this->builder->where('activity_no', '=', $value); + return $this->builder->where('activity_no', $value); } protected function shippingStatus($value) { - return $this->builder->where('shipping_status', '=', $value); + return $this->builder->where('shipping_status', $value); } protected function isSupplier($value) { - return $this->builder->where('is_supplier', '=', $value); + return $this->builder->where('is_supplier', $value); } protected function cancelStatus($value) { - return $this->builder->where('cancel_status', '=', $value); + return $this->builder->where('cancel_status', $value); } protected function afterSalesStatus($value) { - return $this->builder->where('after_sales_status', '=', $value); + return $this->builder->where('after_sales_status', $value); } } diff --git a/app/Filters/GoodsFilter.php b/app/Filters/GoodsFilter.php index bc0e79f..1b698e6 100644 --- a/app/Filters/GoodsFilter.php +++ b/app/Filters/GoodsFilter.php @@ -12,14 +12,14 @@ class GoodsFilter extends Filters protected function typeId($value) { if($value){ - return $this->builder->where('type_id', '=', $value); + return $this->builder->where('type_id', $value); } } protected function brandId($value) { if($value){ - return $this->builder->where('brand_id', '=', $value); + return $this->builder->where('brand_id', $value); } } } diff --git a/app/Filters/GoodsSkuFilter.php b/app/Filters/GoodsSkuFilter.php index 9524260..38fe71b 100644 --- a/app/Filters/GoodsSkuFilter.php +++ b/app/Filters/GoodsSkuFilter.php @@ -6,16 +6,21 @@ class GoodsSkuFilter extends Filters { protected function skuTitle($value) { - return $this->builder->where('title', '=', $value); + return $this->builder->where('title', $value); } protected function status($value) { - return $this->builder->where('status', '=', $value); + return $this->builder->where('status', $value); } protected function excludeIds($value) { return $this->builder->whereNotIn('id', $value); } + + protected function externalSkuId($value) + { + return $this->builder->where('external_sku_id', $value); + } } diff --git a/app/Filters/GoodsSkuLocationFilter.php b/app/Filters/GoodsSkuLocationFilter.php index 3eba5fa..e44ee23 100644 --- a/app/Filters/GoodsSkuLocationFilter.php +++ b/app/Filters/GoodsSkuLocationFilter.php @@ -9,21 +9,21 @@ class GoodsSkuLocationFilter extends Filters { public function date($value) { - return $this->builder->where('date', '=', $value); + return $this->builder->where('date', $value); } public function goodsTitle($value) { $goodsId = Goods::query()->where('title', $value)->value('id'); - return $this->builder->where('goods_id', '=', $goodsId); + return $this->builder->where('goods_id', $goodsId); } public function goodsCode($value) { $goodsId = Goods::query()->where('goods_code', $value)->value('id'); - return $this->builder->where('goods_id', '=', $goodsId); + return $this->builder->where('goods_id', $goodsId); } public function externalSkuId($value) @@ -32,16 +32,16 @@ class GoodsSkuLocationFilter extends Filters $goodsId = Goods::query()->where('goods_code', $goodsCode)->value('id'); $skuId = GoodsSku::query()->where('sku_code', $skuCode)->value('id'); - return $this->builder->where('goods_sku_id', '=', $skuId)->where('goods_id', '=', $goodsId); + return $this->builder->where('goods_sku_id', $skuId)->where('goods_id', $goodsId); } public function location($value) { - return $this->builder->where('location', '=', $value); + return $this->builder->where('location', $value); } public function status($value) { - return $this->builder->where('status', '=', $value); + return $this->builder->where('status', $value); } } diff --git a/app/Filters/GroupGoodsFilter.php b/app/Filters/GroupGoodsFilter.php index 3c9c9eb..f0f82ca 100644 --- a/app/Filters/GroupGoodsFilter.php +++ b/app/Filters/GroupGoodsFilter.php @@ -11,11 +11,11 @@ class GroupGoodsFilter extends Filters protected function groupId($value) { - return $this->builder->where('group_id', '=', $value); + return $this->builder->where('group_id', $value); } protected function externalSkuId($value) { - return $this->builder->where('external_sku_id', '=', $value); + return $this->builder->where('external_sku_id', $value); } } diff --git a/app/Filters/GroupsFilter.php b/app/Filters/GroupsFilter.php index 56e76f4..68c70a3 100644 --- a/app/Filters/GroupsFilter.php +++ b/app/Filters/GroupsFilter.php @@ -12,12 +12,12 @@ class GroupsFilter extends Filters protected function shopId($value) { if ($value) { - return $this->builder->where('shop_id', '=', $value); + return $this->builder->where('shop_id', $value); } } protected function status($value) { - return $this->builder->where('status', '=', $value); + return $this->builder->where('status', $value); } } diff --git a/app/Filters/LogFilter.php b/app/Filters/LogFilter.php index ca5cb9f..b0d6e3b 100644 --- a/app/Filters/LogFilter.php +++ b/app/Filters/LogFilter.php @@ -6,32 +6,32 @@ class LogFilter extends Filters { protected function module($value) { - return $this->builder->where('module', '=', $value); + return $this->builder->where('module', $value); } protected function action($value) { - return $this->builder->where('action', '=', $value); + return $this->builder->where('action', $value); } protected function targetType($value) { - return $this->builder->where('target_type', '=', $value); + return $this->builder->where('target_type', $value); } protected function targetId($value) { - return $this->builder->where('target_id', '=', $value); + return $this->builder->where('target_id', $value); } protected function targetField($value) { - return $this->builder->where('target_field', '=', $value); + return $this->builder->where('target_field', $value); } protected function userId($value) { - return $this->builder->where('user_id', '=', $value); + return $this->builder->where('user_id', $value); } protected function startTime($value) diff --git a/app/Filters/ShopFilter.php b/app/Filters/ShopFilter.php index 813a52c..268a9d2 100644 --- a/app/Filters/ShopFilter.php +++ b/app/Filters/ShopFilter.php @@ -6,6 +6,6 @@ class ShopFilter extends Filters { protected function platId($value) { - return $this->builder->where('plat_id', '=', $value)->where('expires_at', '>', time()); + return $this->builder->where('plat_id', $value)->where('expires_at', '>', time()); } } diff --git a/app/Http/Controllers/Business/BusinessGoodsSkusController.php b/app/Http/Controllers/Business/BusinessGoodsSkusController.php index ee796c9..9a7f446 100644 --- a/app/Http/Controllers/Business/BusinessGoodsSkusController.php +++ b/app/Http/Controllers/Business/BusinessGoodsSkusController.php @@ -47,10 +47,10 @@ class BusinessGoodsSkusController extends Controller return response($this->res, $this->res['httpCode']); } $sku = BusinessGoodsSku::query()->find($id); - $this->setBeforeUpdate($sku->is_sync); + $this->setBeforeUpdateForLog($sku->is_sync); $sku->is_sync = $request->input('is_sync'); $sku->save(); - $this->setAfterUpdate($sku->is_sync); + $this->setAfterUpdateForLog($sku->is_sync); $this->addLog($id, 'status'); return response($this->res, $this->res['httpCode']); @@ -61,10 +61,10 @@ class BusinessGoodsSkusController extends Controller DB::beginTransaction(); try { $sku = BusinessGoodsSku::query()->find($id); - $this->setBeforeUpdate($sku->toArray()); + $this->setBeforeUpdateForLog($sku->toArray()); BusinessOrderItem::query()->where('goods_id', $sku->goods_id)->where('sku_id', $sku->sku_id)->delete(); $sku->delete(); - $this->setAfterUpdate(''); + $this->setAfterUpdateForLog(''); $this->addLog($id, ''); DB::commit(); } catch (Exception $exception) { @@ -79,11 +79,8 @@ class BusinessGoodsSkusController extends Controller public function syncStock($id, Request $request) { $businessGoodsSku = BusinessGoodsSku::query()->where('is_sync', 1)->find($id); - [$goodsCode, $skuCode] = explode('_', $businessGoodsSku->external_sku_id); - $sku = GoodsSku::query()->where('sku_code', $skuCode) - ->whereHas('goods', function ($query) use ($goodsCode) { - $query->where('goods_code', $goodsCode); - }) + $sku = GoodsSku::query() + ->where('external_sku_id', $businessGoodsSku->external_sku_id) ->first(); if (empty($sku)) { $this->setValidatorFailResponse('未找到对应的商品,请核实后再次同步或删除此平台商品'); diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index f737615..20b7eb9 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -29,12 +29,12 @@ class Controller extends BaseController ]; } - protected function setBeforeUpdate($data) + protected function setBeforeUpdateForLog($data) { $this->log->before_update = is_array($data) ? json_encode($data, 256) : $data; } - protected function setAfterUpdate($data) + protected function setAfterUpdateForLog($data) { $this->log->after_update = is_array($data) ? json_encode($data, 256) : $data; } diff --git a/app/Http/Controllers/Goods/GoodsBrandsController.php b/app/Http/Controllers/Goods/GoodsBrandsController.php index 7f100c8..eeb4c04 100644 --- a/app/Http/Controllers/Goods/GoodsBrandsController.php +++ b/app/Http/Controllers/Goods/GoodsBrandsController.php @@ -51,7 +51,7 @@ class GoodsBrandsController extends Controller 'errorMessage' => '批量添加失败', ]; } - $this->setAfterUpdate($goodsBrands); + $this->setAfterUpdateForLog($goodsBrands); $this->addLog(0, 'add'); return response($this->res, $this->res['httpCode']); @@ -78,10 +78,10 @@ class GoodsBrandsController extends Controller return response($this->res, $this->res['httpCode']); } $goodsBrand = GoodsBrand::query()->find($id); - $this->setBeforeUpdate($goodsBrand->name); + $this->setBeforeUpdateForLog($goodsBrand->name); $goodsBrand->name = request('name'); $goodsBrand->save(); - $this->setAfterUpdate($goodsBrand->name); + $this->setAfterUpdateForLog($goodsBrand->name); $this->addLog($id, 'name'); return new GoodsBrandResource($goodsBrand); diff --git a/app/Http/Controllers/Goods/GoodsController.php b/app/Http/Controllers/Goods/GoodsController.php index 26ab99c..2fd7402 100644 --- a/app/Http/Controllers/Goods/GoodsController.php +++ b/app/Http/Controllers/Goods/GoodsController.php @@ -60,10 +60,11 @@ class GoodsController extends Controller $item['goods_id'] = $goods->id; $item['stock'] = $item['num']; $item['reference_price'] = $item['cost'] * 1.5; + $item['external_sku_id'] = $goods->goods_code . '_' . $item['sku_code']; $goodsSkus[] = $item; } $collection = $goods->skus()->createMany($goodsSkus)->toArray(); - $this->setAfterUpdate($collection); + $this->setAfterUpdateForLog($collection); $this->addLog(0, 'add'); $newRecords = []; foreach ($collection as $sku) { diff --git a/app/Http/Controllers/Goods/GoodsSkusController.php b/app/Http/Controllers/Goods/GoodsSkusController.php index 338f744..b66022c 100644 --- a/app/Http/Controllers/Goods/GoodsSkusController.php +++ b/app/Http/Controllers/Goods/GoodsSkusController.php @@ -10,10 +10,12 @@ use App\Http\Requests\GoodsSkuRequest; use App\Imports\InventoryImport; use App\Models\BusinessOrderItem; use App\Models\Goods; +use App\Models\GoodsType; use App\Models\Log; use App\Models\Log as LogModel; use App\Utils\ArrayUtils; use App\Utils\DateTimeUtils; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; use App\Models\GoodsSku; use App\Http\Resources\GoodsSkuResource; @@ -39,41 +41,18 @@ class GoodsSkusController extends Controller public function index(Request $request) { - $goodsCode = $skuCode = ''; - if ($externalSkuId = $request->get('external_sku_id')) { - [$goodsCode, $skuCode] = explode('_', $externalSkuId); - } - $goods = Goods::query()->filter()->when($goodsCode, function ($query, $goodsCode) { - return $query->where('goods_code', $goodsCode); - })->get()->toArray(); - $goodsIds = array_column($goods, 'id'); - // 状态变更时间查询,日志 - $ids = []; - if ($request->get('keyword_type', '') && $request->get('keyword_value', '')) { - $ids = Log::query()->where('target_type', 'goods_sku') - ->where('target_field', $request->keyword_type) - ->whereBetween('created_at', explode(' - ', $request->keyword_value)) - ->pluck('target_id') - ->toArray(); - } + $builder = GoodsSku::query(); + $this->preparQueryGoodsSkus($request, $builder); $day = DateTimeUtils::getToday(); - $goodsSkus = GoodsSku::query() - ->whereIn('goods_id', $goodsIds) - ->when($ids, function ($query, $ids) { - return $query->whereIn('id', $ids); - }) - ->when($skuCode, function ($query, $skuCode) { - return $query->where('sku_code', $skuCode); - }) - ->filter() + $goodsSkus = $builder->filter() ->with(['goods' => function ($query) { $query->with(['type:id,name', 'brand:id,name']); }]) ->with(['daily' => function ($query) use ($day) { $query->where('day', $day); }]) - ->orderBy('updated_at', 'desc') - ->paginate($request->get('per_page')); + ->orderByDesc('updated_at') + ->paginate(10); $fields = implode(',', [ 'shop_id', 'external_sku_id', @@ -82,20 +61,19 @@ class GoodsSkusController extends Controller ]); $rolesName = $request->user()->getRoleNames()->toArray(); foreach ($goodsSkus as &$sku) { - $externalSkuId = $sku['goods']['goods_code'] . '_' . $sku['sku_code']; $lastInventoryTime = $sku['daily']['inventory_time']; $orderDetail = BusinessOrderItem::query() ->select(DB::raw($fields)) - ->where('external_sku_id', $externalSkuId) + ->with(['shop:id,name']) + ->where('external_sku_id', $sku['external_sku_id']) ->when($lastInventoryTime, function ($query) use ($lastInventoryTime) { $query->where('created_at', '>', $lastInventoryTime); }) ->groupBy(['shop_id', 'external_sku_id']) - ->with(['shop:id,name']) - ->get(); + ->get() + ->toArray(); $addOrderGoodsNum = $reduceOrderGoodsNum = 0; if ($orderDetail) { - $orderDetail = $orderDetail->toArray(); $addOrderGoodsNum = array_sum(array_column($orderDetail, 'number')); $reduceOrderGoodsNum = array_sum(array_column($orderDetail, 'cancel_number')); } @@ -110,6 +88,22 @@ class GoodsSkusController extends Controller return GoodsSkuResource::collection($goodsSkus); } + private function preparQueryGoodsSkus(Request $request, &$builder) + { + if ($request->get('keyword_type') && $request->get('keyword_value')) { + $skuIds = Log::query()->where('target_type', 'goods_sku') + ->where('target_field', $request->keyword_type) + ->whereBetween('created_at', explode(' - ', $request->keyword_value)) + ->pluck('target_id') + ->toArray(); + $builder->whereIn('id', $skuIds); + } + if ($request->get('goods_title') || $request->get('type_id') || $request->get('brand_id')) { + $goodsIds = Goods::query()->filter()->pluck('id')->toArray(); + $builder->whereIn('goods_id', $goodsIds); + } + } + public function show($id) { $sku = GoodsSku::query() @@ -146,9 +140,10 @@ class GoodsSkusController extends Controller try { // 商品规格更新 $sku = GoodsSku::query()->find($id); - $this->setBeforeUpdate($sku->toArray()); + $this->setBeforeUpdateForLog($sku->toArray()); + $request->sku['external_sku_id'] = $request->goods['goods_code'] . '_' . $request->sku['sku_code']; $sku->update($request->sku); - $this->setAfterUpdate($sku->toArray()); + $this->setAfterUpdateForLog($sku->toArray()); $this->addLog($id, 'update'); // 商品更新 $goods = Goods::query()->find($sku->goods_id); @@ -157,9 +152,9 @@ class GoodsSkusController extends Controller 'action' => $request->getMethod(), 'target_type' => 'goods', ]); - $this->setBeforeUpdate($goods->toArray()); + $this->setBeforeUpdateForLog($goods->toArray()); $goods->update($request->goods); - $this->setAfterUpdate($goods->toArray()); + $this->setAfterUpdateForLog($goods->toArray()); $this->addLog($sku->goods_id, 'update'); DB::commit(); } catch (\Exception $exception) { @@ -351,7 +346,7 @@ class GoodsSkusController extends Controller ->where('sku_id', $sku->id) ->where('day', DateTimeUtils::getToday()) ->first(); - $this->setBeforeUpdate([ + $this->setBeforeUpdateForLog([ 'two_days_ago_num' => $sku->two_days_ago_num, 'yesterday_num' => $sku->yesterday_num, 'arrived_today_num' => $record->arrived_today_num, @@ -366,7 +361,7 @@ class GoodsSkusController extends Controller $sku->save(); $record->arrived_today_num = $update['arrived_today_num']; $record->save(); - $this->setAfterUpdate([ + $this->setAfterUpdateForLog([ 'two_days_ago_num' => $sku->two_days_ago_num, 'yesterday_num' => $sku->yesterday_num, 'arrived_today_num' => $record->arrived_today_num, @@ -432,14 +427,14 @@ class GoodsSkusController extends Controller ->where('day', DateTimeUtils::getToday()) ->first(['id', 'loss_num']); $this->log->message = $request->get('reason'); - $this->setBeforeUpdate($record->loss_num); + $this->setBeforeUpdateForLog($record->loss_num); $record->loss_num += $request->loss_num; $record->save(); - $this->setAfterUpdate($record->loss_num); + $this->setAfterUpdateForLog($record->loss_num); $sku->stock -= $request->loss_num; $sku->save(); } else { - $this->setBeforeUpdate($sku->$updateField); + $this->setBeforeUpdateForLog($sku->$updateField); if ('reserve' === $updateField) { $changeNum = $sku->reserve - $request->reserve; if (0 > $changeNum + $sku->stock) { @@ -450,7 +445,7 @@ class GoodsSkusController extends Controller } $sku->$updateField = $request->$updateField; $sku->save(); - $this->setAfterUpdate($sku->$updateField); + $this->setAfterUpdateForLog($sku->$updateField); } if (in_array($updateField, ['reserve', 'loss_num'])) { event(new StockUpdateEvent($sku)); @@ -509,4 +504,24 @@ class GoodsSkusController extends Controller return response($this->res, $this->res['httpCode']); } + + public function stockNum() + { + $roseTypeId = GoodsType::query()->where('name', '玫瑰')->value('id'); + $totalNum = GoodsSku::query() + ->where('status', '>', 0) + ->sum('stock'); + $roseNum = GoodsSku::query() + ->whereHas('goods', function (Builder $query) use ($roseTypeId) { + $query->where('type_id', $roseTypeId); + }) + ->where('status', '>', 0) + ->sum('stock'); + + return response()->json([ + 'total_num' => $totalNum, + 'rose_num' => $roseNum, + 'other_num' => $totalNum - $roseNum, + ]); + } } diff --git a/app/Http/Controllers/Goods/GoodsTypesController.php b/app/Http/Controllers/Goods/GoodsTypesController.php index a85a110..8a4ae32 100644 --- a/app/Http/Controllers/Goods/GoodsTypesController.php +++ b/app/Http/Controllers/Goods/GoodsTypesController.php @@ -51,7 +51,7 @@ class GoodsTypesController extends Controller 'errorMessage' => '批量添加失败', ]; } - $this->setAfterUpdate($goodsTypes); + $this->setAfterUpdateForLog($goodsTypes); $this->addLog(0, 'add'); return response($this->res, $this->res['httpCode']); @@ -78,10 +78,10 @@ class GoodsTypesController extends Controller return response($this->res, $this->res['httpCode']); } $goodsType = GoodsType::query()->find($id); - $this->setBeforeUpdate($goodsType->name); + $this->setBeforeUpdateForLog($goodsType->name); $goodsType->name = request('name'); $goodsType->save(); - $this->setAfterUpdate($goodsType->name); + $this->setAfterUpdateForLog($goodsType->name); $this->addLog($id, 'name'); return new GoodsTypeResource($goodsType); diff --git a/app/Http/Controllers/Menu/MenusController.php b/app/Http/Controllers/Menu/MenusController.php index 1cf8b9e..9171667 100644 --- a/app/Http/Controllers/Menu/MenusController.php +++ b/app/Http/Controllers/Menu/MenusController.php @@ -76,7 +76,7 @@ class MenusController extends Controller $menu->parent_id = $request->parent_id; $menu->seq = $request->seq; $menu->save(); - $this->setAfterUpdate($menu->toArray()); + $this->setAfterUpdateForLog($menu->toArray()); $this->addLog($menu->id, 'add'); return response($this->res, $this->res['httpCode']); @@ -101,13 +101,13 @@ class MenusController extends Controller return response($this->res, $this->res['httpCode']); } $menu = Menu::query()->find($id); - $this->setBeforeUpdate($menu->toArray()); + $this->setBeforeUpdateForLog($menu->toArray()); $menu->name = $request->name; $menu->code = $request->code; $menu->parent_id = $request->parent_id; $menu->seq = $request->seq; $menu->save(); - $this->setAfterUpdate($menu->toArray()); + $this->setAfterUpdateForLog($menu->toArray()); $this->addLog($id, 'update'); return new MenusResource($menu); diff --git a/app/Http/Controllers/Permission/PermissionsController.php b/app/Http/Controllers/Permission/PermissionsController.php index 6ab89d1..9bba43f 100644 --- a/app/Http/Controllers/Permission/PermissionsController.php +++ b/app/Http/Controllers/Permission/PermissionsController.php @@ -53,7 +53,7 @@ class PermissionsController extends Controller $permission = new Permission(); $permission->name = $request->name; $permission->save(); - $this->setAfterUpdate($permission->name); + $this->setAfterUpdateForLog($permission->name); $this->addLog($permission->id, 'add'); return response($this->res, $this->res['httpCode']); @@ -75,10 +75,10 @@ class PermissionsController extends Controller return response($this->res, $this->res['httpCode']); } $permission = Permission::query()->find($id); - $this->setBeforeUpdate($permission->name); + $this->setBeforeUpdateForLog($permission->name); $permission->name = $request->name; $permission->save(); - $this->setAfterUpdate($permission->name); + $this->setAfterUpdateForLog($permission->name); $this->addLog($id, 'name'); return new PermissionsResource($permission); diff --git a/app/Http/Controllers/Role/RolesController.php b/app/Http/Controllers/Role/RolesController.php index 1e31ea2..7366460 100644 --- a/app/Http/Controllers/Role/RolesController.php +++ b/app/Http/Controllers/Role/RolesController.php @@ -56,7 +56,7 @@ class RolesController extends Controller $role = new Role(); $role->name = $request->name; $role->save(); - $this->setAfterUpdate($role->name); + $this->setAfterUpdateForLog($role->name); $this->addLog($role->id, 'add'); return new RolesResource($role); @@ -67,7 +67,7 @@ class RolesController extends Controller $role = Role::query()->findOrFail($id); $permissions = Permission::query()->findOrFail($request->permissionIds); $role->syncPermissions($permissions); - $this->setAfterUpdate($permissions->toArray()); + $this->setAfterUpdateForLog($permissions->toArray()); $this->addLog($id, 'set', 'permission'); return response($this->res, $this->res['httpCode']); @@ -89,10 +89,10 @@ class RolesController extends Controller return response($this->res, $this->res['httpCode']); } $role = Role::query()->find($id); - $this->setBeforeUpdate($role->name); + $this->setBeforeUpdateForLog($role->name); $role->name = $request->name; $role->save(); - $this->setAfterUpdate($role->name); + $this->setAfterUpdateForLog($role->name); $this->addLog($id, 'name'); return new RolesResource($role); diff --git a/app/Http/Controllers/Shop/ShopsController.php b/app/Http/Controllers/Shop/ShopsController.php index 4c3a0c0..858f3b2 100644 --- a/app/Http/Controllers/Shop/ShopsController.php +++ b/app/Http/Controllers/Shop/ShopsController.php @@ -150,11 +150,8 @@ class ShopsController extends Controller ->get(); $data = []; foreach ($res as $item) { - [$goodsCode, $skuCode] = explode('_', $item['external_sku_id']); - $sku = GoodsSku::query()->where('sku_code', $skuCode) - ->whereHas('goods', function ($query) use ($goodsCode) { - $query->where('goods_code', $goodsCode); - }) + $sku = GoodsSku::query() + ->where('external_sku_id', $item['external_sku_id']) ->first(); if (empty($sku)) { continue; @@ -189,4 +186,36 @@ class ShopsController extends Controller return response($this->res, $this->res['httpCode']); } + + public function syncStock(Request $request) + { + $shopId = $request->get('shop_id'); + $skus = GoodsSku::query() + ->where('status', '>', 0) + ->whereNotNull('external_sku_id') + ->pluck('stock', 'external_sku_id') + ->toArray(); + $builder = Shop::query()->where('expires_at', '>', time()); + if ('all' === $shopId) { + $shops = $builder->get(); + } else { + $shops = $builder->where('id', $shopId)->get(); + } + foreach ($shops as $shop) { + $business = BusinessFactory::init()->make($shop->plat_id); + $business->setShop($shop); + foreach ($skus as $externalSkuId => $stock) { + $businessGoodsSkus = BusinessGoodsSku::query() + ->select(['goods_id', 'sku_id', 'external_sku_id']) + ->where('shop_id', $shop->id) + ->where('is_sync', 1) + ->where('external_sku_id', $externalSkuId) + ->get() + ->toArray(); + $business->batchIncrQuantity($businessGoodsSkus, $stock, false); + } + } + + return response($this->res, $this->res['httpCode']); + } } diff --git a/app/Http/Controllers/User/UsersController.php b/app/Http/Controllers/User/UsersController.php index 2d82602..571333a 100644 --- a/app/Http/Controllers/User/UsersController.php +++ b/app/Http/Controllers/User/UsersController.php @@ -46,7 +46,7 @@ class UsersController extends Controller $user->password = $request->password; $user->api_token = Str::random(60); $user->save(); - $this->setAfterUpdate($user->toArray()); + $this->setAfterUpdateForLog($user->toArray()); $this->addLog($user->id, 'add'); $user->assignRole($request->role_name); diff --git a/app/Listeners/StockUpdateListener.php b/app/Listeners/StockUpdateListener.php index db6d708..433bf2b 100644 --- a/app/Listeners/StockUpdateListener.php +++ b/app/Listeners/StockUpdateListener.php @@ -58,7 +58,7 @@ class StockUpdateListener ->select(['goods_id', 'sku_id', 'external_sku_id']) ->where('shop_id', $shop->id) ->where('is_sync', 1) - ->where('external_sku_id', $goodsSku->goods['goods_code'] . '_' . $goodsSku->sku_code) + ->where('external_sku_id', $goodsSku->external_sku_id) ->get(); if ($event->isBatch) { BusinessFactory::init()->make($shop['plat_id'])->setShopWithId($shop['id'])->batchIncrQuantity($businessGoodsSkus->toArray(), $num, false); diff --git a/app/Models/GoodsSku.php b/app/Models/GoodsSku.php index 9e29289..75ef0a3 100644 --- a/app/Models/GoodsSku.php +++ b/app/Models/GoodsSku.php @@ -12,7 +12,8 @@ class GoodsSku extends Model public $fieldSearchable = [ 'sku_title', 'status', - 'exclude_ids' + 'exclude_ids', + 'external_sku_id' ]; protected $fillable = [ @@ -27,7 +28,8 @@ class GoodsSku extends Model 'yesterday_num', 'reference_price', 'reserve', - 'thumb_url' + 'thumb_url', + 'external_sku_id' ]; protected $hidden = ['created_at']; diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 73dd4f5..c8d074e 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -13,6 +13,9 @@ class CreateUsersTable extends Migration */ public function up() { + if (Schema::hasTable('users')) { + return; + } Schema::defaultStringLength(191); Schema::create('users', function (Blueprint $table) { $table->bigIncrements('id'); diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php index 0ee0a36..8e7bb30 100644 --- a/database/migrations/2014_10_12_100000_create_password_resets_table.php +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -13,6 +13,9 @@ class CreatePasswordResetsTable extends Migration */ public function up() { + if (Schema::hasTable('password_resets')) { + return; + } Schema::create('password_resets', function (Blueprint $table) { $table->string('email')->index(); $table->string('token'); diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php index 389bdf7..ddde3ff 100644 --- a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php +++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -13,6 +13,9 @@ class CreateFailedJobsTable extends Migration */ public function up() { + if (Schema::hasTable('failed_jobs')) { + return; + } Schema::create('failed_jobs', function (Blueprint $table) { $table->bigIncrements('id'); $table->text('connection'); diff --git a/database/migrations/2022_07_26_061712_create_goods_types_table.php b/database/migrations/2022_07_26_061712_create_goods_types_table.php index d923fa7..24eed28 100644 --- a/database/migrations/2022_07_26_061712_create_goods_types_table.php +++ b/database/migrations/2022_07_26_061712_create_goods_types_table.php @@ -13,6 +13,9 @@ class CreateGoodsTypesTable extends Migration */ public function up() { + if (Schema::hasTable('goods_types')) { + return; + } Schema::defaultStringLength(191); Schema::create('goods_types', function (Blueprint $table) { $table->bigIncrements('id'); diff --git a/database/migrations/2022_07_26_085847_create_goods_brands_table.php b/database/migrations/2022_07_26_085847_create_goods_brands_table.php index 482bd44..283b8d4 100644 --- a/database/migrations/2022_07_26_085847_create_goods_brands_table.php +++ b/database/migrations/2022_07_26_085847_create_goods_brands_table.php @@ -13,6 +13,9 @@ class CreateGoodsBrandsTable extends Migration */ public function up() { + if (Schema::hasTable('goods_brands')) { + return; + } Schema::defaultStringLength(191); Schema::create('goods_brands', function (Blueprint $table) { $table->bigIncrements('id'); diff --git a/database/migrations/2022_07_26_090143_create_goods_table.php b/database/migrations/2022_07_26_090143_create_goods_table.php index 71ad099..f4ff3ce 100644 --- a/database/migrations/2022_07_26_090143_create_goods_table.php +++ b/database/migrations/2022_07_26_090143_create_goods_table.php @@ -13,6 +13,9 @@ class CreateGoodsTable extends Migration */ public function up() { + if (Schema::hasTable('goods')) { + return; + } Schema::defaultStringLength(191); Schema::create('goods', function (Blueprint $table) { $table->bigIncrements('id'); diff --git a/database/migrations/2022_07_26_090150_create_goods_skus_table.php b/database/migrations/2022_07_26_090150_create_goods_skus_table.php index 630e970..34f1684 100644 --- a/database/migrations/2022_07_26_090150_create_goods_skus_table.php +++ b/database/migrations/2022_07_26_090150_create_goods_skus_table.php @@ -13,6 +13,9 @@ class CreateGoodsSkusTable extends Migration */ public function up() { + if (Schema::hasTable('goods_skus')) { + return; + } Schema::defaultStringLength(191); Schema::create('goods_skus', function (Blueprint $table) { $table->bigIncrements('id'); diff --git a/database/migrations/2022_07_26_103559_create_daily_stock_records_table.php b/database/migrations/2022_07_26_103559_create_daily_stock_records_table.php index f13e54e..432bed2 100644 --- a/database/migrations/2022_07_26_103559_create_daily_stock_records_table.php +++ b/database/migrations/2022_07_26_103559_create_daily_stock_records_table.php @@ -13,6 +13,9 @@ class CreateDailyStockRecordsTable extends Migration */ public function up() { + if (Schema::hasTable('daily_stock_records')) { + return; + } Schema::create('daily_stock_records', function (Blueprint $table) { $table->bigIncrements('id'); $table->bigInteger('sku_id'); diff --git a/database/migrations/2022_07_26_105818_create_logs_table.php b/database/migrations/2022_07_26_105818_create_logs_table.php index aa67ef1..ebdbffe 100644 --- a/database/migrations/2022_07_26_105818_create_logs_table.php +++ b/database/migrations/2022_07_26_105818_create_logs_table.php @@ -13,6 +13,9 @@ class CreateLogsTable extends Migration */ public function up() { + if (Schema::hasTable('logs')) { + return; + } Schema::create('logs', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('module')->comment('模块'); diff --git a/database/migrations/2022_07_28_095523_create_menus_table.php b/database/migrations/2022_07_28_095523_create_menus_table.php index 5019185..fcea8e0 100644 --- a/database/migrations/2022_07_28_095523_create_menus_table.php +++ b/database/migrations/2022_07_28_095523_create_menus_table.php @@ -13,6 +13,9 @@ class CreateMenusTable extends Migration */ public function up() { + if (Schema::hasTable('menus')) { + return; + } Schema::defaultStringLength(191); Schema::create('menus', function (Blueprint $table) { $table->bigIncrements('id'); diff --git a/database/migrations/2022_08_02_022448_create_shops_table.php b/database/migrations/2022_08_02_022448_create_shops_table.php index 4ff0b3f..dce80e6 100644 --- a/database/migrations/2022_08_02_022448_create_shops_table.php +++ b/database/migrations/2022_08_02_022448_create_shops_table.php @@ -13,6 +13,9 @@ class CreateShopsTable extends Migration */ public function up() { + if (Schema::hasTable('shops')) { + return; + } Schema::defaultStringLength(191); Schema::create('shops', function (Blueprint $table) { $table->bigIncrements('id'); diff --git a/database/migrations/2022_08_05_030834_create_business_goods_skus_table.php b/database/migrations/2022_08_05_030834_create_business_goods_skus_table.php index f295ee6..c4e5dfa 100644 --- a/database/migrations/2022_08_05_030834_create_business_goods_skus_table.php +++ b/database/migrations/2022_08_05_030834_create_business_goods_skus_table.php @@ -13,6 +13,9 @@ class CreateBusinessGoodsSkusTable extends Migration */ public function up() { + if (Schema::hasTable('business_goods_skus')) { + return; + } Schema::create('business_goods_skus', function (Blueprint $table) { $table->bigIncrements('id'); $table->bigInteger('shop_id'); diff --git a/database/migrations/2022_08_05_093629_create_business_orders_table.php b/database/migrations/2022_08_05_093629_create_business_orders_table.php index 31481fa..6aacac0 100644 --- a/database/migrations/2022_08_05_093629_create_business_orders_table.php +++ b/database/migrations/2022_08_05_093629_create_business_orders_table.php @@ -13,6 +13,9 @@ class CreateBusinessOrdersTable extends Migration */ public function up() { + if (Schema::hasTable('business_orders')) { + return; + } Schema::create('business_orders', function (Blueprint $table) { $table->bigIncrements('id'); $table->integer('shop_id'); diff --git a/database/migrations/2022_08_05_093658_create_business_order_items_table.php b/database/migrations/2022_08_05_093658_create_business_order_items_table.php index e4bc837..e98b050 100644 --- a/database/migrations/2022_08_05_093658_create_business_order_items_table.php +++ b/database/migrations/2022_08_05_093658_create_business_order_items_table.php @@ -13,6 +13,9 @@ class CreateBusinessOrderItemsTable extends Migration */ public function up() { + if (Schema::hasTable('business_order_items')) { + return; + } Schema::create('business_order_items', function (Blueprint $table) { $table->bigIncrements('id'); $table->bigInteger('shop_id'); diff --git a/database/migrations/2022_08_10_150657_create_jobs_table.php b/database/migrations/2022_08_10_150657_create_jobs_table.php index 1be9e8a..030f4dc 100644 --- a/database/migrations/2022_08_10_150657_create_jobs_table.php +++ b/database/migrations/2022_08_10_150657_create_jobs_table.php @@ -13,6 +13,9 @@ class CreateJobsTable extends Migration */ public function up() { + if (Schema::hasTable('jobs')) { + return; + } Schema::create('jobs', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('queue')->index(); diff --git a/database/migrations/2022_08_23_152332_add_fields_with_daily_stock_records_table.php b/database/migrations/2022_08_23_152332_add_fields_with_daily_stock_records_table.php index 6cfb130..6e1bb29 100644 --- a/database/migrations/2022_08_23_152332_add_fields_with_daily_stock_records_table.php +++ b/database/migrations/2022_08_23_152332_add_fields_with_daily_stock_records_table.php @@ -13,6 +13,9 @@ class AddFieldsWithDailyStockRecordsTable extends Migration */ public function up() { + if (Schema::hasColumns('daily_stock_records', ['order_goods_num', 'inventory_time'])) { + return; + } Schema::table('daily_stock_records', function (Blueprint $table) { $table->integer('order_goods_num')->default(0)->comment('截止盘点时间订单商品数量'); $table->timestamp('inventory_time')->nullable()->comment('盘点时间'); diff --git a/database/migrations/2022_09_02_181639_add_fields_with_business_goods_skus_table.php b/database/migrations/2022_09_02_181639_add_fields_with_business_goods_skus_table.php index 2cfce77..e30330a 100644 --- a/database/migrations/2022_09_02_181639_add_fields_with_business_goods_skus_table.php +++ b/database/migrations/2022_09_02_181639_add_fields_with_business_goods_skus_table.php @@ -13,6 +13,9 @@ class AddFieldsWithBusinessGoodsSkusTable extends Migration */ public function up() { + if (Schema::hasColumn('business_goods_skus', 'is_sync')) { + return; + } Schema::table('business_goods_skus', function (Blueprint $table) { $table->tinyInteger('is_sync')->default(1)->comment('是否同步'); }); diff --git a/database/migrations/2022_10_20_095356_create_groups_table.php b/database/migrations/2022_10_20_095356_create_groups_table.php index f644cbb..e1d0b5e 100644 --- a/database/migrations/2022_10_20_095356_create_groups_table.php +++ b/database/migrations/2022_10_20_095356_create_groups_table.php @@ -13,6 +13,9 @@ class CreateGroupsTable extends Migration */ public function up() { + if (Schema::hasTable('groups')) { + return; + } Schema::defaultStringLength(191); Schema::create('groups', function (Blueprint $table) { $table->bigIncrements('id'); diff --git a/database/migrations/2022_10_20_095419_create_group_goods_table.php b/database/migrations/2022_10_20_095419_create_group_goods_table.php index d116a62..98517f9 100644 --- a/database/migrations/2022_10_20_095419_create_group_goods_table.php +++ b/database/migrations/2022_10_20_095419_create_group_goods_table.php @@ -13,6 +13,9 @@ class CreateGroupGoodsTable extends Migration */ public function up() { + if (Schema::hasTable('group_goods')) { + return; + } Schema::defaultStringLength(191); Schema::create('group_goods', function (Blueprint $table) { $table->bigIncrements('id'); diff --git a/database/migrations/2023_04_03_165820_create_goods_sku_locations_table.php b/database/migrations/2023_04_03_165820_create_goods_sku_locations_table.php index cb82359..209605d 100644 --- a/database/migrations/2023_04_03_165820_create_goods_sku_locations_table.php +++ b/database/migrations/2023_04_03_165820_create_goods_sku_locations_table.php @@ -13,6 +13,9 @@ class CreateGoodsSkuLocationsTable extends Migration */ public function up() { + if (Schema::hasTable('goods_sku_locations')) { + return; + } Schema::defaultStringLength(191); Schema::create('goods_sku_locations', function (Blueprint $table) { $table->bigIncrements('id'); diff --git a/database/migrations/2023_04_17_160609_add_external_sku_id_to_goods_skus_table.php b/database/migrations/2023_04_17_160609_add_external_sku_id_to_goods_skus_table.php new file mode 100644 index 0000000..e111579 --- /dev/null +++ b/database/migrations/2023_04_17_160609_add_external_sku_id_to_goods_skus_table.php @@ -0,0 +1,38 @@ +string('external_sku_id')->nullable(); + $table->index('external_sku_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('goods_skus', function (Blueprint $table) { + $table->dropColumn('external_sku_id'); + $table->dropIndex('external_sku_id'); + }); + } +} diff --git a/resources/frontend/src/api/goods.js b/resources/frontend/src/api/goods.js index 0504059..f479d2c 100644 --- a/resources/frontend/src/api/goods.js +++ b/resources/frontend/src/api/goods.js @@ -127,3 +127,10 @@ export function deleteGoodsSkuLocation(params) { params, }); } + +export function getStockNum() { + return http({ + url: "/api/stock/goods_skus", + method: "get", + }) +} diff --git a/resources/frontend/src/api/shop.js b/resources/frontend/src/api/shop.js index 1712ef7..4b0a0fe 100644 --- a/resources/frontend/src/api/shop.js +++ b/resources/frontend/src/api/shop.js @@ -41,3 +41,11 @@ export function updateStore(id, params) { params, }); } + +export function syncStoreStock(params) { + return http({ + url: '/api/sync/shop/stock', + method: "put", + params, + }); +} diff --git a/resources/frontend/src/views/goods/goods.vue b/resources/frontend/src/views/goods/goods.vue index f459bd9..279c950 100644 --- a/resources/frontend/src/views/goods/goods.vue +++ b/resources/frontend/src/views/goods/goods.vue @@ -5,10 +5,6 @@
- - - - @@ -19,16 +15,16 @@ - - - - + + + + @@ -36,15 +32,13 @@ - - + + - + @@ -60,12 +54,13 @@
全部商品(共{{ total }}条) +  玫瑰合计: {{ rose_num }} +  其它合计: {{ other_num }}
上新 - + 盘点导入 新建商品 @@ -172,8 +167,7 @@
{{ scope.row.order_goods_num }}
- +
{{ j.shop.name }}:{{ j.number }}
@@ -231,9 +225,9 @@
{{ scope.row.daily.inventory }} @@ -375,7 +369,7 @@ diff --git a/resources/frontend/vue.config.js b/resources/frontend/vue.config.js index 63a7ba1..ac1d434 100644 --- a/resources/frontend/vue.config.js +++ b/resources/frontend/vue.config.js @@ -11,8 +11,8 @@ module.exports = { proxy: { // 配置代理 "/api": { - // target: "http://192.168.247.186:81", - target: "http://erp.chutang66.com", + target: "http://192.168.247.186:81", + // target: "http://erp.chutang66.com", changeOrigin: true, // 开启代理 pathRewrite: { // 重命名 diff --git a/resources/lang/zh-CN/permission.php b/resources/lang/zh-CN/permission.php index 9934a56..8b821bd 100644 --- a/resources/lang/zh-CN/permission.php +++ b/resources/lang/zh-CN/permission.php @@ -183,6 +183,11 @@ return [ 'name' => '商品下载', 'parent_id' => 5, ], + 'business.shop.sync_stock' => [ + 'id' => 56, + 'name' => '同步库存', + 'parent_id' => 5, + ], // 用户管理 'USER_MANAGE' => [ 'id' => 6, diff --git a/routes/api.php b/routes/api.php index 2698a17..26f131c 100644 --- a/routes/api.php +++ b/routes/api.php @@ -39,6 +39,7 @@ Route::middleware(['auth:api', 'check.permissions'])->group(function () { Route::resource('shops', 'Shop\ShopsController', ['only' => ['index', 'store', 'show', 'update', 'destroy']]); Route::get('count/orders/num', [ShopsController::class, 'countOrdersNumWithSkuCode'])->name('goods_sku.orders_num'); Route::get('download/{id}/goods', [ShopsController::class, 'downloadGoods'])->name('business.goods_sku.download'); + Route::put('sync/shop/stock', [ShopsController::class, 'syncStock'])->name('business.shop.sync_stock'); // 角色 Route::resource('roles', 'Role\RolesController', ['only' => ['index', 'store', 'show', 'update']]); Route::post('roles/{id}/permissions', [RolesController::class, 'addPermissions'])->name('roles.permission'); @@ -58,6 +59,7 @@ Route::middleware(['auth:api', 'check.permissions'])->group(function () { Route::put('goods_sku_location', [GoodsSkuLocationController::class, 'update'])->name('goods_sku_location.update'); Route::delete('goods_sku_location', [GoodsSkuLocationController::class, 'delete'])->name('goods_sku_location.delete'); }); +Route::get('stock/goods_skus', [GoodsSkusController::class, 'stockNum'])->middleware('auth:api'); // 登录 Route::post('/auth/login', [LoginController::class, 'login'])->name('auth.login');