From ada42eaae66641ea3d3d38a438dd4c71e4c20b15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=B8=96=E7=95=8C?= <642747453@qq.com> Date: Wed, 3 Aug 2022 11:14:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20#20220803=20=E5=95=86=E5=93=81=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Goods/GoodsController.php | 53 ++++++++++--------- .../Controllers/Goods/GoodsSkusController.php | 31 ++++++++--- routes/api.php | 2 + 3 files changed, 53 insertions(+), 33 deletions(-) diff --git a/app/Http/Controllers/Goods/GoodsController.php b/app/Http/Controllers/Goods/GoodsController.php index 4498091..b50aa0f 100644 --- a/app/Http/Controllers/Goods/GoodsController.php +++ b/app/Http/Controllers/Goods/GoodsController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Goods; use App\Http\Controllers\Controller; +use App\Http\Resources\GoodsResource; use App\Http\Resources\GoodsSkuResource; use App\Models\Log as LogModel; use Illuminate\Http\Request; @@ -25,39 +26,35 @@ class GoodsController extends Controller public function index(Request $request) { - $goods = Goods::query()->filter()->get()->toArray(); - $goodsIds = array_column($goods, 'id'); - // 状态变更时间查询,日志 - $day = date('Y-m-d'); //早上7点之前是昨天,7点之后是今天 - $goodsSkus = GoodsSku::query() - ->whereIn('goods_id', $goodsIds) - ->filter() - ->with(['goods' => function ($query) { - $query->with(['type:id,name', 'brand:id,name']); - }]) - ->with(['daily' => function ($query) use ($day){ - $query->where('day', $day)->with(['daily:id,sku_id,day,arrived_today_num,loss_num,inventory']); - }]) - ->paginate(); + $goods = Goods::query()->get(['id', 'title', 'img_url', 'type_id', 'brand_id', 'goods_code']); - return GoodsSkuResource::collection($goodsSkus); + return GoodsResource::collection($goods); } public function store(Request $request) { - $validator = Validator::make($request->all(), [ + $goodsRules = [ 'title' => ['required', 'string', 'max:255'], 'img_url' => ['required', 'string', 'max:255'], 'type_id' => ['required', 'integer', 'exists:goods_types,id'], 'brand_id' => ['integer', 'exists:goods_brands,id'], 'goods_code' => ['required', 'alpha_dash', 'max:32', 'unique:goods,goods_code'], + ]; + + if ($useGoods = !empty($request->goods_id)) { + $goodsRules = [ + 'goods_id' => ['required', 'integer', 'exists:goods,id'], + ]; + } + $skuRules = [ 'skus' => ['required', 'array'], 'skus.*.title' => ['required', 'string', 'max:255'], 'skus.*.sku_code' => ['required', 'distinct', 'alpha_dash', 'max:32'], 'skus.*.status' => ['required', 'integer', Rule::in([0, 1, 2])], - 'skus.*.num' => ['required', 'integer', 'max:10'], - 'skus.*.cost' => ['required', 'numeric', 'max:10'], - ]); + 'skus.*.num' => ['required', 'integer'], + 'skus.*.cost' => ['required', 'numeric'], + ]; + $validator = Validator::make($request->all(), array_merge($goodsRules, $skuRules)); if ($validator->fails()) { $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); @@ -65,13 +62,17 @@ class GoodsController extends Controller } DB::beginTransaction(); try { - $goods = new Goods(); - $goods->title = $request->title; - $goods->img_url = $request->img_url; - $goods->type_id = $request->type_id; - $goods->brand_id = $request->brand_id; - $goods->goods_code = $request->goods_code; - $goods->save(); + if ($useGoods) { + $goods = Goods::query()->find($request->goods_id); + } else { + $goods = new Goods(); + $goods->title = $request->title; + $goods->img_url = $request->img_url; + $goods->type_id = $request->type_id; + $goods->brand_id = $request->brand_id; + $goods->goods_code = $request->goods_code; + $goods->save(); + } $goodsSkus = []; foreach ($request->skus as $item) { $item['goods_id'] = $goods->id; diff --git a/app/Http/Controllers/Goods/GoodsSkusController.php b/app/Http/Controllers/Goods/GoodsSkusController.php index ff4a3fa..fa8af86 100644 --- a/app/Http/Controllers/Goods/GoodsSkusController.php +++ b/app/Http/Controllers/Goods/GoodsSkusController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Goods; use App\Http\Controllers\Controller; +use App\Models\Goods; use App\Models\Log as LogModel; use Illuminate\Http\Request; use App\Models\GoodsSku; @@ -27,7 +28,22 @@ class GoodsSkusController extends Controller public function index(Request $request) { - return new GoodsSkuResource(GoodsSku::query()->get(['id', 'title'])); + $goods = Goods::query()->filter()->get()->toArray(); + $goodsIds = array_column($goods, 'id'); + // 状态变更时间查询,日志 + $day = date('Y-m-d'); //早上7点之前是昨天,7点之后是今天 + $goodsSkus = GoodsSku::query() + ->whereIn('goods_id', $goodsIds) + ->filter() + ->with(['goods' => function ($query) { + $query->with(['type:id,name', 'brand:id,name']); + }]) + ->with(['daily' => function ($query) use ($day){ + $query->where('day', $day)->with(['daily:id,sku_id,day,arrived_today_num,loss_num,inventory']); + }]) + ->paginate(); + + return GoodsSkuResource::collection($goodsSkus); } public function show($id) @@ -55,11 +71,16 @@ class GoodsSkusController extends Controller public function batchUpdate(Request $request) { $appendRules = [ - '*.id' => [ + 'skus' => ['required', 'array'], + 'skus.*.id' => [ 'required', Rule::exists('goods_skus', 'id'), ], ]; + $data = $request->all(); + $this->validateUpdate($data, $appendRules); + GoodsSku::whereIn('id', array_column($data, 'id')) + ->update($data); } public function updateField($id, Request $request) @@ -138,12 +159,8 @@ class GoodsSkusController extends Controller Rule::in([0, 1, 2]) ], ]; +// $validator = Validator::make($data, array_merge($rules, $appendRules))->validate(); $validator = Validator::make($data, array_merge($rules, $appendRules)); - if ($validator->fails()) { - $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); - - return response($this->res, $this->res['httpCode']); - } } public function store(Request $request) diff --git a/routes/api.php b/routes/api.php index 7ae0b39..c6b756b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -4,6 +4,7 @@ use App\Http\Controllers\Auth\LoginController; use App\Http\Controllers\Role\RolesController; use App\Http\Controllers\UploadController; use App\Http\Controllers\Shop\ShopsController; +use App\Http\Controllers\Goods\GoodsSkusController; /* |-------------------------------------------------------------------------- @@ -28,6 +29,7 @@ Route::middleware('auth:api')->group(function () { Route::resource('goods', 'Goods\GoodsController', ['only' => ['index', 'store']]); // 商品规格 Route::resource('goods_skus', 'Goods\GoodsSkusController', ['only' => ['index', 'show', 'update', 'store']]); + Route::patch('batch/goods_skus', [GoodsSkusController::class, 'batchUpdate'])->name('goods_sku.batch_update'); // 店铺 Route::resource('shops', 'Shop\ShopsController', ['only' => ['index', 'store', 'show', 'update', 'destroy']]); Route::get('shop_platforms', [ShopsController::class, 'getPlatList'])->name('plat.list');