From a93207ff4cc2681f936b696638bf33941d40c2c8 Mon Sep 17 00:00:00 2001 From: mkm <727897186@qq.com> Date: Mon, 6 Jan 2025 14:44:12 +0800 Subject: [PATCH] =?UTF-8?q?refactor(warehouse):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E4=BA=A7=E5=93=81=E6=95=B0=E9=87=8F=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构了 WarehouseProductLogic 类中的库存增减逻辑 - 新增 incProductDecStorege 和 decProductIncStorege 方法,用于处理库存变化 - 优化了 nums 更新方式,使用 bcsub 和 bcadd 进行精确计算 - 调整了 SqlChannelLog 的调用参数,确保日志记录准确性 - 移除了不必要的 find 和 save 操作,提高代码效率 --- .../WarehouseProductLogic.php | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/app/admin/logic/warehouse_product/WarehouseProductLogic.php b/app/admin/logic/warehouse_product/WarehouseProductLogic.php index 52e777971..81e521d8b 100644 --- a/app/admin/logic/warehouse_product/WarehouseProductLogic.php +++ b/app/admin/logic/warehouse_product/WarehouseProductLogic.php @@ -206,10 +206,14 @@ class WarehouseProductLogic extends BaseLogic $find = WarehouseOrder::where('id', $params['oid'])->find(); if ($find) { $res = WarehouseProduct::where('id', $params['id'])->withTrashed()->find(); - self::decStock($res,$admin_id); - self::incStock($res, $params,$admin_id); + if($params['nums']>$res['nums']){ + $nums=bcsub($params['nums'], $res['nums'],2); + self::incProductDecStorege($res, $nums,$admin_id); + }else{ + $nums=bcsub($res['nums'],$params['nums'],2); + self::decProductIncStorege($res, $nums,$admin_id); + } $datas = [ - 'nums' => $params['nums'], 'total_price' => $params['total_price'], ]; if ($find['financial_pm'] == 1) { @@ -306,8 +310,13 @@ class WarehouseProductLogic extends BaseLogic try { $res = WarehouseProduct::where('id', $params['id'])->find(); if ($res) { - self::decStock($res,$admin_id); - self::incStock($res, $params,$admin_id); + if($params['nums']>$res['nums']){ + $nums=bcsub($params['nums'], $res['nums'],2); + self::incProductDecStorege($res, $nums,$admin_id); + }else{ + $nums=bcsub($res['nums'],$params['nums'],2); + self::decProductIncStorege($res, $nums,$admin_id); + } $datas = [ 'nums' => $params['nums'], 'total_price' => bcmul($params['nums'], $res['price'], 2), @@ -344,28 +353,24 @@ class WarehouseProductLogic extends BaseLogic } //减少 - private static function decStock($res,$admin_id=0) + private static function decProductIncStorege($res,$nums,$admin_id=0) { $res1 = WarehouseProductStorege::where('warehouse_id', $res['warehouse_id']) - ->where('product_id', $res['product_id'])->find(); - $res1->save(['nums'=>bcsub($res1['nums'], $res['nums'],2)]); - SqlChannelLog('WarehouseProductStorege', $res1['id'], $res['nums'], -1, Request()->url(),$admin_id); - - $res->save(['nums'=>bcsub($res['nums'], $res['nums'],2)]); + ->where('product_id', $res['product_id'])->inc('nums',$nums)->update(); + SqlChannelLog('WarehouseProductStorege', $res1['id'], $nums, 1, Request()->url(),$admin_id); + + $res->dec('nums',$nums)->update(); SqlChannelLog('WarehouseProduct', $res['id'], $res['nums'], -1, Request()->url(),$admin_id); } //增加 - private static function incStock($res, $params,$admin_id=0) + private static function incProductDecStorege($res, $nums,$admin_id=0) { $res1 = WarehouseProductStorege::where('warehouse_id', $res['warehouse_id']) - ->where('product_id', $res['product_id']) - ->find(); - $res1->save(['nums'=>bcadd($res1['nums'], $params['nums'],2)]); + ->where('product_id', $res['product_id'])->dec('nums',$nums)->update(); + SqlChannelLog('WarehouseProductStorege', $res1['id'], $nums, -1, Request()->url(),$admin_id); - SqlChannelLog('WarehouseProductStorege', $res1['id'], $res['nums'], 1, Request()->url(),$admin_id); - - $res->save(['nums'=>bcadd($res['nums'], $params['nums'],2)]); + $res->inc('nums',$nums)->update(); SqlChannelLog('WarehouseProduct', $res['id'], $res['nums'], 1, Request()->url(),$admin_id); } }