log = new LogModel([ 'module' => 'goods', 'action' => $request->getMethod(), 'target_type' => 'goods_sku', ]); } public function index(Request $request) { $goods = Goods::query()->get(['id', 'title', 'img_url', 'type_id', 'brand_id', 'goods_code']); return GoodsResource::collection($goods); } public function store(Request $request) { $goodsRules = (new GoodsRequest())->rules(); $skuRules = (new GoodsSkuRequest())->arrayRules('skus.*.'); $validator = Validator::make($request->all(), array_merge($goodsRules, ['skus' => ['required', 'array']], $skuRules)); if ($validator->fails()) { $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); return response($this->res, $this->res['httpCode']); } DB::beginTransaction(); try { $goodService = new GoodService(); $goods = $goodService->saveDefaultGoodsByGoodType($request->type_id); $goodsSkus = []; foreach ($request->skus as $item) { $item['goods_id'] = $goods->id; $item['stock'] = $item['num'] ?? 0; $item['reference_price'] = $item['cost'] * 1.5; $item['sku_code'] = !empty($item['sku_code']) ? $item['sku_code'] : $goodService->getRandomCode(); $item['external_sku_id'] = $goods->goods_code . '_' .$item['sku_code']; $item['name'] = $goods->title . $item['title']; $goodsSkus[] = $item; } $collection = $goods->skus()->createMany($goodsSkus)->toArray(); $this->setAfterUpdateForLog($collection); $this->addLog(0, 'add'); $newRecords = []; foreach ($collection as $sku) { $newRecords[] = [ 'sku_id' => $sku['id'], 'day' => DateTimeUtils::getToday(), ]; } $record = new DailyStockRecord(); $record->batchInsert($newRecords); DB::commit(); } catch (\Exception $exception) { DB::rollBack(); $this->res = [ 'httpCode' => 400, 'errorCode' => 400416, 'errorMessage' => $exception->getMessage(), ]; } return response($this->res, $this->res['httpCode']); } public function download() { $file = resource_path('templates/goods_skus_import.xlsx'); $headers = [ 'Content-Type: application/xlsx', ]; return response()->download($file, 'goods_skus_import.xlsx', $headers); } }