log = new LogModel([ 'module' => 'supplier', 'action' => $request->getMethod(), 'target_type' => 'purchase_record', ]); } public function index(Request $request) { $builder = PurchaseRecords::query()->filter()->with("goodsSku:id,name,external_sku_id,title"); if (!empty($request->start_time) && !empty($request->end_time)) { $builder->whereBetween('created_at', [$request->start_time, $request->end_time]); } if (!empty($request->title)) { $builder->whereHas('goodsSku', function ($query) use ($request) { $query->where('name', 'like', '%' . $request->title . '%'); }); } $dailyStockRecord = $builder->orderByDesc("id")->paginate($request->get('per_page')); return JsonResource::collection($dailyStockRecord); } public function store(Request $request) { //获取所有参数 $allParams = $request->all(); //进行校验验证 $validator = Validator::make($allParams, [ 'external_sku_id' => 'required|string', 'num' => 'required|integer', ]); if ($validator->fails()) { //校验失败返回异常 $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); return response($this->res, $this->res['httpCode']); } $goodsSku = GoodsSku::query()->where('external_sku_id', "=", $request->external_sku_id)->first(); if (!empty($goodsSku)) { $expireDay = DeveloperConfigService::getDefaultExpireDay(); $today = DateTimeUtils::getToday(); if (empty($allParams['buyer_user_id'])) { $buyerUserId = User::query()->where("name", $allParams['buyer_name'] ?? '') ->pluck("id")->first(); } if (empty($allParams['supplier_id'])) { $supplierId = Suppliers::query()->where("supplier_name", $allParams['supplier_name'] ?? '') ->pluck("id")->first(); } //保存記錄 $purchaseRecords = new PurchaseRecords(); $purchaseRecords->external_sku_id = $allParams['external_sku_id']; $purchaseRecords->num = $allParams['num']; $purchaseRecords->cost = $allParams['cost']; $purchaseRecords->date = $today; $purchaseRecords->buyer_user_id = $allParams['buyer_user_id'] ?? ($buyerUserId ?? 0); $purchaseRecords->buyer_name = $allParams['buyer_name'] ?? ''; $purchaseRecords->supplier_name = $allParams['supplier_name'] ?? ''; $purchaseRecords->supplier_id = $allParams['supplier_id'] ?? ($supplierId ?? 0); if (!empty($allParams['expire_time'])) { $purchaseRecords->expire_time = Carbon::parse($allParams['expire_time'])->toDateTimeString(); } else { $purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString(); } $purchaseRecords->save(); $updateIds = GoodSkuService::computeSkuStock($goodsSku->toArray(), $allParams); event(new BatchStockUpdateEvent($updateIds)); } else { $this->res = [ 'httpCode' => 400, 'message' => '查询不到sku信息', 'errorCode' => "ERP001", 'errorMessage' => '查询不到sku信息', ]; } return response($this->res, $this->res['httpCode']); } public function update($id, Request $request) { //获取所有参数 $allParams = $request->all(); //进行校验验证 $validator = Validator::make($allParams, [ 'buyer_name' => 'sometimes|string', 'supplier_name' => 'sometimes|string', "expire_time" => 'sometimes|string' ]); if ($validator->fails()) { //校验失败返回异常 $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); return response($this->res, $this->res['httpCode']); } $goodsSku = GoodsSku::query()->where('id', "=", $id)->get(); if (!empty($goodsSku)) { //可以修改的記錄 $purchaseRecords = PurchaseRecords::query()->find($id); $purchaseRecords->buyer_user_id = $allParams['buyer_user_id'] ?? 0; $purchaseRecords->buyer_name = $allParams['buyer_name'] ?? ''; $purchaseRecords->supplier_name = $allParams['supplier_name'] ?? ''; $purchaseRecords->supplier_id = $allParams['supplier_id'] ?? 0; if (!empty($allParams['expire_time'])) { $purchaseRecords->expire_time = Carbon::parse($allParams['expire_time'])->toDateTimeString(); } $purchaseRecords->save(); } else { $this->res = [ 'httpCode' => 400, 'message' => '查询不到sku信息', 'errorCode' => "ERP001", 'errorMessage' => '查询不到sku信息', ]; } return response($this->res, $this->res['httpCode']); } /** * 采购单后台批量存储 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|void */ public function purchaseBatchStore(Request $request) { $validator = Validator::make($request->all(), [ 'purchaseOrders' => 'required|array', 'purchaseOrders.*.external_sku_id' => 'required|string', 'purchaseOrders.*.num' => 'required|integer']); //参数校验 if ($validator->fails()) { $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); return response($this->res, $this->res['httpCode']); } $purchaseOrders = $request->input('purchaseOrders') ?? []; $externalSkuIds = collect($purchaseOrders)->pluck("external_sku_id")->toArray(); $goodsSku = GoodsSku::query()->whereIn('external_sku_id', $externalSkuIds)->get(); if ($goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->isNotEmpty()) { $content = implode(',', $goodsSku->pluck("external_sku_id")->diff($externalSkuIds)->toArray()); $content .= "以上sku编码数据库中不存在"; return response($content, $this->res['httpCode']); } $goodsSkuMap = $goodsSku->pluck(null, 'external_sku_id')->toArray(); $updateIds = []; $expireDay = DeveloperConfigService::getDefaultExpireDay(); $today = DateTimeUtils::getToday(); //开始保存数据 foreach ($purchaseOrders as $v) { $goodsSkuItem = $goodsSkuMap[$v['external_sku_id']]; //保存記錄 $purchaseRecords = new PurchaseRecords(); $purchaseRecords->external_sku_id = $v['external_sku_id']; $purchaseRecords->num = $v['num']; $purchaseRecords->cost = $v['cost']; $purchaseRecords->date = $today; $purchaseRecords->buyer_user_id = $allParams['buyer_user_id'] ?? 0; $purchaseRecords->buyer_name = $v['buyer_name'] ?? ''; $purchaseRecords->supplier_name = $v['supplier_name'] ?? ''; $purchaseRecords->supplier_id = $v['supplier_id'] ?? 0; $purchaseRecords->expire_time = Carbon::now()->addDays($expireDay)->toDateTimeString(); $purchaseRecords->save(); $updateIds = GoodSkuService::computeSkuStock($goodsSkuItem, $v); } //如果是組合商品会触发重算逻辑 event(new BatchStockUpdateEvent($updateIds)); return response($this->res, $this->res['httpCode']); } /** * 报损单后台批量存储 * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response|void */ public function purchaseImport(Request $request) { if (!$request->hasFile(ExcelKeyEnum::PURCHASE_KEY)) { $this->res = [ 'httpCode' => 404, 'errorCode' => 404404, 'errorMessage' => 'not found purchase file', ]; } try { $import = new PurchaseImport(); $path = $request->file(ExcelKeyEnum::PURCHASE_KEY); Excel::import($import, $path); $this->addLog(0, 'import', ExcelKeyEnum::PURCHASE_KEY); } catch (ValidationException $exception) { $this->setValidatorFailResponse($exception->validator->getMessageBag()->getMessages()); } return response($this->res, $this->res['httpCode']); } }