middleware(['role:super-admin','permission:publish articles|edit articles']); $this->log = new LogModel([ 'module' => 'goods', 'action' => $request->getMethod(), 'target_type' => 'goods_sku', ]); } public function index(Request $request) { return new GoodsSkuResource(GoodsSku::query()->get(['id', 'title'])); } public function show($id) { return new GoodsSkuResource(GoodsSku::query() ->with(['goods' => function ($query) { $query->with(['type:id,name', 'brand:id,name']); }]) ->find($id)); } public function update($id, Request $request) { $data = $request->all(); $this->validateUpdate($data); $sku = GoodsSku::query()->find($id); $this->setBeforeUpdate($sku->toArray()); $sku->update($data); $this->setAfterUpdate($sku->toArray()); $this->addLog($id, 'update'); return new GoodsSkuResource($sku); } public function batchUpdate(Request $request) { $appendRules = [ '*.id' => [ 'required', Rule::exists('goods_skus', 'id'), ], ]; } public function updateField($id, Request $request) { $appendRules = [ 'updateField' => [ 'required', Rule::in(['reference_price', 'reserve', 'loss_num', 'status']) ], ]; if ($request->has('loss_num')) { $appendRules['reason'] = ['required', 'string']; } $this->validateUpdate($request->all(), $appendRules); $updateField = \request('updateField'); $sku = GoodsSku::query()->find($id); $this->setBeforeUpdate($sku->$updateField); $sku->$updateField = $request->$updateField; $sku->save(); $this->setAfterUpdate($sku->$updateField); $this->addLog($id, $updateField); return new GoodsSkuResource($sku); } public function updateStock($id, Request $request) { $this->validateUpdate($request->all()); $sku = GoodsSku::query()->where('id', $id)->get(['id', 'two_days_ago_num', 'yesterday_num']); if ($sku->two_days_ago_num != \request('t wo_days_ago_num') || $sku->yesterday_num != \request('yesterday_num')) { $this->setBeforeUpdate($sku->toArray()); } } private function validateUpdate($data, $appendRules = []) { $rules = [ '*.two_days_ago_num' => [ 'sometimes', 'integer', ], '*.yesterday_num' => [ 'sometimes', 'integer', ], '*.arrived_today_num' => [ 'sometimes', 'integer', ], '*.cost' => [ 'sometimes', 'numeric', 'gt:0' ], '*.reference_price' => [ 'sometimes', 'numeric', 'gt:0' ], '*.reserve' => [ 'sometimes', 'integer', ], '*.loss_num' => [ 'sometimes', 'integer', ], '*.inventory' => [ 'sometimes', 'integer', ], '*.status' => [ 'sometimes', 'integer', Rule::in([0, 1, 2]) ], ]; $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) { if (!$request->hasFile('goodsSkus')) { $this->res = [ 'httpCode' => 404, 'errorCode' => 404404, 'errorMessage' => 'not found goodsSkus file', ]; } try { $collection = Excel::import(new GoodsSkusImport(), $request->file('goodsSkus')); $this->setAfterUpdate($collection->toArray()); $this->addLog(0, 'import'); } catch (ValidationException $exception) { $this->setValidatorFailResponse($exception->validator->getMessageBag()->getMessages()); } return response($this->res, $this->res['httpCode']); } }