log = new LogModel([ 'module' => 'supplier', 'action' => $request->getMethod(), 'target_type' => 'loss_record', ]); } public function index(Request $request) { $builder = LossRecords::query()->filter()->with("goodsSku: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', 'reason' => 'sometimes|string', 'buyer_name' => 'sometimes|string' ]); 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)) { $buyerUserId = User::query()->where("name", $allParams['buyer_name'] ?? '') ->pluck("id")->first(); $today = DateTimeUtils::getToday(); //保存記錄 $lossRecords = new LossRecords(); $lossRecords->external_sku_id = $allParams['external_sku_id']; $lossRecords->num = $allParams['num']; $lossRecords->cost = $allParams['cost']; $lossRecords->date = $today; $lossRecords->buyer_user_id = $allParams['buyer_user_id'] ?? ($buyerUserId ?? 0); $lossRecords->buyer_name = $allParams['buyer_name'] ?? ''; $lossRecords->reason = $allParams['reason'] ?? ''; $lossRecords->save(); $updateIds = GoodSkuService::computeSkuStock($goodsSku->toArray(), ['num' => 0 - $allParams['num'], "cost" => $allParams['cost']]); 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, [ 'reason' => 'sometimes|string', 'buyer_name' => 'sometimes|string', 'buyer_user_id' => 'sometimes|integer' ]); if ($validator->fails()) { //校验失败返回异常 $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); return response($this->res, $this->res['httpCode']); } $lossRecords = LossRecords::query()->find($id); if (!empty($lossRecords)) { //更新記錄 $lossRecords->buyer_name = $allParams['buyer_name'] ?? ''; $lossRecords->buyer_user_id = $allParams['buyer_user_id'] ?? 0; $lossRecords->reason = $allParams['reason'] ?? ''; $lossRecords->save(); } else { $this->res = [ 'httpCode' => 400, 'message' => '查询不到sku信息', 'errorCode' => "ERP001", 'errorMessage' => '查询不到sku信息', ]; } return response($this->res, $this->res['httpCode']); } public function lossBatchStore(Request $request) { $validator = Validator::make($request->all(), [ 'lossOrders' => 'required|array', 'lossOrders.*.external_sku_id' => 'required|string', 'lossOrders.*.num' => 'required|integer', 'lossOrders.*.reason' => 'sometimes|string', 'lossOrders.*.buyer_name' => 'sometimes|string',//采购商 ]); //参数校验 if ($validator->fails()) { $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); return response($this->res, $this->res['httpCode']); } $lossOrders = $request->input('lossOrders') ?? []; $externalSkuIds = collect($lossOrders)->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 = []; //开始保存数据 foreach ($lossOrders as $v) { $goodsSkuItem = $goodsSkuMap[$v['external_sku_id']]; //保存記錄 $lossRecords = new LossRecords(); $lossRecords->external_sku_id = $v['external_sku_id']; $lossRecords->num = $v['num']; $lossRecords->cost = $v['cost']; $lossRecords->buyer_user_id = $v['buyer_user_id'] ?? 0; $lossRecords->buyer_name = $v['buyer_name'] ?? ''; $lossRecords->reason = $v['reason'] ?? ''; $lossRecords->save(); $updateIds = GoodSkuService::computeSkuStock($goodsSkuItem, ['num' => 0 - $v['num'], "cost" => $v['cost']]); } 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 lossImport(Request $request) { if (!$request->hasFile(ExcelKeyEnum::LOSS_KEY)) { $this->res = [ 'httpCode' => 404, 'errorCode' => 404404, 'errorMessage' => 'not found loss file', ]; } try { $import = new LossImport(); $path = $request->file(ExcelKeyEnum::LOSS_KEY); Excel::import($import, $path); $this->addLog(0, 'import', ExcelKeyEnum::LOSS_KEY); } catch (ValidationException $exception) { $this->setValidatorFailResponse($exception->validator->getMessageBag()->getMessages()); } return response($this->res, $this->res['httpCode']); } }