From ab035947860915483421848437f0bddbe604e7eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=BB=BA=E7=82=8A?= <924182103@qq.com> Date: Tue, 30 Jul 2024 17:41:02 +0800 Subject: [PATCH] =?UTF-8?q?=E9=B2=9C=E8=8A=B12.0-=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E7=9B=98=E7=82=B9=E5=92=8C=E6=89=B9=E9=87=8F=E5=AF=BC=E5=85=A5?= =?UTF-8?q?+=E8=AE=A2=E5=8D=95=E5=BA=93=E5=AD=98=E6=89=A3=E5=87=8F?= =?UTF-8?q?=E4=B9=90=E8=A7=82=E9=94=81=E5=92=8C=E9=87=8D=E8=AF=95=E6=9C=BA?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Events/BusinessOrdersUpdate.php | 26 ++++++++++++++----- .../Supplier/DailyStockRecordController.php | 4 +-- .../Supplier/LossRecordController.php | 12 ++++----- .../Supplier/PurchaseRecordController.php | 4 +-- tests/Feature/BusinessOrderUpdateTest.php | 24 +++++++++++++++++ 5 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 tests/Feature/BusinessOrderUpdateTest.php diff --git a/app/Events/BusinessOrdersUpdate.php b/app/Events/BusinessOrdersUpdate.php index 64cf619..21a1bb6 100644 --- a/app/Events/BusinessOrdersUpdate.php +++ b/app/Events/BusinessOrdersUpdate.php @@ -34,7 +34,17 @@ class BusinessOrdersUpdate { $this->businessGoodSku = $businessGoodSku->toArray(); $this->num = $num; - $this->updateStock(); + $updateResult = false; + //暂时设定重试5次 + for ($i = 0; $i < 5; $i++) { + if ($this->updateStock()) { + $updateResult = true; + break; + } + } + if (!$updateResult) { + Log::error("sku 业务更新失败", (array)$this->businessGoodSku); + } } private function updateStock() @@ -45,18 +55,20 @@ class BusinessOrdersUpdate if (is_null($this->goodsSku)) { return false; } + $oldStock = $this->goodsSku->stock; $stock = $this->goodsSku->stock + $this->num; $saleStock = $this->goodsSku->sale_stock + $this->num; + $updateParam = ["stock" => $stock, "sale_stock" => $saleStock]; if (0 >= $saleStock) { - $this->goodsSku->status = GoodsSku::$STATUS_DOWN; + $updateParam['status'] = GoodsSku::$STATUS_DOWN; } else { - $this->goodsSku->status = GoodsSku::$STATUS_ON_SALE; + $updateParam['status'] = GoodsSku::$STATUS_ON_SALE; } - $this->goodsSku->sale_stock = $saleStock; - $this->goodsSku->stock = $stock; - Log::info("sku 业务订单库存更新", (array)$this->goodsSku); - $this->goodsSku->save(); + Log::info("sku 业务订单库存更新", $updateParam); + //乐观锁更新 + return GoodsSku::query()->where('external_sku_id', $this->businessGoodSku['external_sku_id'])-> + where("stock", "=", $oldStock)->update($updateParam); } /** diff --git a/app/Http/Controllers/Supplier/DailyStockRecordController.php b/app/Http/Controllers/Supplier/DailyStockRecordController.php index a54b7f7..4588929 100644 --- a/app/Http/Controllers/Supplier/DailyStockRecordController.php +++ b/app/Http/Controllers/Supplier/DailyStockRecordController.php @@ -30,10 +30,10 @@ class DailyStockRecordController extends Controller public function index(Request $request) { - $build = DailyStockRecord::query()->filter()->with("goodsSku:id,title"); + $build = DailyStockRecord::query()->filter()->with("goodsSku:id,name"); if (!empty($request->title)) { $build->whereHas('goodsSku', function ($query) use ($request) { - $query->where('title', 'like', '%' . $request->title . '%'); + $query->where('name', 'like', '%' . $request->title . '%'); }); } if (!empty($request->get('external_sku_id'))) { diff --git a/app/Http/Controllers/Supplier/LossRecordController.php b/app/Http/Controllers/Supplier/LossRecordController.php index 2d5b569..be54a64 100644 --- a/app/Http/Controllers/Supplier/LossRecordController.php +++ b/app/Http/Controllers/Supplier/LossRecordController.php @@ -25,13 +25,13 @@ class LossRecordController extends Controller public function index(Request $request) { - $builder = LossRecords::query()->filter()->with("goodsSku:title,external_sku_id"); + $builder = LossRecords::query()->filter()->with("goodsSku:name,external_sku_id"); 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('title', 'like', '%' . $request->title . '%'); + $query->where('name', 'like', '%' . $request->title . '%'); }); } $dailyStockRecord = $builder->paginate($request->get('per_page')); @@ -114,7 +114,8 @@ class LossRecordController extends Controller return response($this->res, $this->res['httpCode']); } - public function lossBatchStore(Request $request){ + public function lossBatchStore(Request $request) + { $validator = Validator::make($request->all(), [ 'lossOrders' => 'required|array', 'lossOrders.*.external_sku_id' => 'required|string', @@ -135,7 +136,7 @@ class LossRecordController extends Controller $content .= "以上sku编码数据库中不存在"; return response($content, $this->res['httpCode']); } - $goodsSkuMap = $goodsSku->pluck(null,'external_sku_id')->toArray(); + $goodsSkuMap = $goodsSku->pluck(null, 'external_sku_id')->toArray(); $updateIds = []; //开始保存数据 foreach ($lossOrders as $v) { @@ -150,7 +151,7 @@ class LossRecordController extends Controller $lossRecords->reason = $v['reason'] ?? ''; $lossRecords->save(); - $updateIds = GoodSkuService::computeSkuStock($goodsSkuItem,['num'=>0-$v['num'],"cost"=>$v['cost']]); + $updateIds = GoodSkuService::computeSkuStock($goodsSkuItem, ['num' => 0 - $v['num'], "cost" => $v['cost']]); } @@ -185,5 +186,4 @@ class LossRecordController extends Controller return response($this->res, $this->res['httpCode']); } - } diff --git a/app/Http/Controllers/Supplier/PurchaseRecordController.php b/app/Http/Controllers/Supplier/PurchaseRecordController.php index 773f3e6..5acd821 100644 --- a/app/Http/Controllers/Supplier/PurchaseRecordController.php +++ b/app/Http/Controllers/Supplier/PurchaseRecordController.php @@ -29,13 +29,13 @@ class PurchaseRecordController extends Controller public function index(Request $request) { - $builder = PurchaseRecords::query()->filter()->with("goodsSku:id,title,external_sku_id"); + $builder = PurchaseRecords::query()->filter()->with("goodsSku:id,name,external_sku_id"); 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('title', 'like', '%' . $request->title . '%'); + $query->where('name', 'like', '%' . $request->title . '%'); }); } $dailyStockRecord = $builder->paginate($request->get('per_page')); diff --git a/tests/Feature/BusinessOrderUpdateTest.php b/tests/Feature/BusinessOrderUpdateTest.php new file mode 100644 index 0000000..6c71a5e --- /dev/null +++ b/tests/Feature/BusinessOrderUpdateTest.php @@ -0,0 +1,24 @@ +