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();
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);
->where('product_id', $res['product_id'])->inc('nums',$nums)->update();
SqlChannelLog('WarehouseProductStorege', $res1['id'], $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);
}
//增加
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);
}
}