refactor(warehouse): 优化仓库产品数量变更逻辑

- 重构了 WarehouseProductLogic 类中的库存增减逻辑
- 新增 incProductDecStorege 和 decProductIncStorege 方法,用于处理库存变化
- 优化了 nums 更新方式,使用 bcsub 和 bcadd 进行精确计算
- 调整了 SqlChannelLog 的调用参数,确保日志记录准确性
- 移除了不必要的 find 和 save 操作,提高代码效率
This commit is contained in:
mkm 2025-01-06 14:44:12 +08:00
parent 1caae07bb9
commit a93207ff4c

View File

@ -206,10 +206,14 @@ class WarehouseProductLogic extends BaseLogic
$find = WarehouseOrder::where('id', $params['oid'])->find(); $find = WarehouseOrder::where('id', $params['oid'])->find();
if ($find) { if ($find) {
$res = WarehouseProduct::where('id', $params['id'])->withTrashed()->find(); $res = WarehouseProduct::where('id', $params['id'])->withTrashed()->find();
self::decStock($res,$admin_id); if($params['nums']>$res['nums']){
self::incStock($res, $params,$admin_id); $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 = [ $datas = [
'nums' => $params['nums'],
'total_price' => $params['total_price'], 'total_price' => $params['total_price'],
]; ];
if ($find['financial_pm'] == 1) { if ($find['financial_pm'] == 1) {
@ -306,8 +310,13 @@ class WarehouseProductLogic extends BaseLogic
try { try {
$res = WarehouseProduct::where('id', $params['id'])->find(); $res = WarehouseProduct::where('id', $params['id'])->find();
if ($res) { if ($res) {
self::decStock($res,$admin_id); if($params['nums']>$res['nums']){
self::incStock($res, $params,$admin_id); $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 = [ $datas = [
'nums' => $params['nums'], 'nums' => $params['nums'],
'total_price' => bcmul($params['nums'], $res['price'], 2), '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']) $res1 = WarehouseProductStorege::where('warehouse_id', $res['warehouse_id'])
->where('product_id', $res['product_id'])->find(); ->where('product_id', $res['product_id'])->inc('nums',$nums)->update();
$res1->save(['nums'=>bcsub($res1['nums'], $res['nums'],2)]); SqlChannelLog('WarehouseProductStorege', $res1['id'], $nums, 1, Request()->url(),$admin_id);
SqlChannelLog('WarehouseProductStorege', $res1['id'], $res['nums'], -1, Request()->url(),$admin_id);
$res->save(['nums'=>bcsub($res['nums'], $res['nums'],2)]); $res->dec('nums',$nums)->update();
SqlChannelLog('WarehouseProduct', $res['id'], $res['nums'], -1, Request()->url(),$admin_id); 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']) $res1 = WarehouseProductStorege::where('warehouse_id', $res['warehouse_id'])
->where('product_id', $res['product_id']) ->where('product_id', $res['product_id'])->dec('nums',$nums)->update();
->find(); SqlChannelLog('WarehouseProductStorege', $res1['id'], $nums, -1, Request()->url(),$admin_id);
$res1->save(['nums'=>bcadd($res1['nums'], $params['nums'],2)]);
SqlChannelLog('WarehouseProductStorege', $res1['id'], $res['nums'], 1, Request()->url(),$admin_id); $res->inc('nums',$nums)->update();
$res->save(['nums'=>bcadd($res['nums'], $params['nums'],2)]);
SqlChannelLog('WarehouseProduct', $res['id'], $res['nums'], 1, Request()->url(),$admin_id); SqlChannelLog('WarehouseProduct', $res['id'], $res['nums'], 1, Request()->url(),$admin_id);
} }
} }