使用事务减少库存并创建出库订单问题

文档问题 · alijon · 于 3年前 发布 · 1488 次阅读
[
    {
        "goodsID": "663",
        "goodsName": "珍稀精油",
        "unitPrice": "128.00",
        "salePrice": "70.00",
        "picture": "uploads/customer/824411594377747.jpg",
        "goodsNumber": "6952360690626",
        "barCode": "6952360690626",
        "integral": "null",
        "colorName": "UZLA",
        "unitName": "个",
        "colorID": "18",
        "unitID": "20",
        "stockCount": "5",
        "buyCount": 1,
        "totalPrice": "128.00"
    },
    {
        "goodsID": "664",
        "goodsName": "KAQIER",
        "unitPrice": "68.00",
        "salePrice": "70.00",
        "picture": "uploads/customer/974681594377883.jpg",
        "goodsNumber": "0079",
        "barCode": "6943322100079",
        "integral": "null",
        "colorName": "UZLA",
        "unitName": "个",
        "colorID": "18",
        "unitID": "20",
        "stockCount": "10",
        "buyCount": 2,
        "totalPrice": "136.00"
    },
    {
        "goodsID": "693",
        "goodsName": "DETLLOU",
        "unitPrice": "68.00",
        "salePrice": "68.00",
        "picture": "uploads/customer/574191594376806.jpg",
        "goodsNumber": "6971223071549",
        "barCode": "6971223071549",
        "integral": "null",
        "colorName": "UZLA",
        "unitName": "个",
        "colorID": "18",
        "unitID": "22",
        "stockCount": "4",
        "buyCount": 3,
        "totalPrice": "204.00"
    }
]

提交订单参数

各位 你们好,我最近搞进销存 对减少库存 问题我有点头疼 麻烦你们 帮忙提出建议,有案例分享一下

1.对应的商品 判断库存 如果库存满足,不满足就提示库存不足某个商品的库存 做下一步 减少库存并 创建出库订单

  1. 出库过程 出现异常 滚回 事务 3.避免高并发数据功能
共收到 3 条回复 问题提问
Fecmall#13年前 0 个赞

1.有点看不明白,你这个是fecmall内部的功能,还是其他别的系统?

2.如果是fecmall系统,那么已经存在这个功能

https://github.com/fecshop/yii2_fecshop/blob/master/services/Order.php#L591

3.至于如何使用yii2事务,参看帖子:http://www.fecmall.com/topic/4080

4.至于扣除产品库存原理,避免高并发,这个很简单,就是在扣除的时候,加上库存条件即可

https://github.com/fecshop/yii2_fecshop/blob/master/services/product/Stock.php#L245

$updateColumns = $this->_flatQtyModel->updateAllCounters(
                    ['qty' => 0 - $sale_qty],
                    ['and', ['product_id' => $product_id], ['>=', 'qty', $sale_qty]]
                );
                if (empty($updateColumns)) {// 上面更新sql返回的更新行数如果为0,则说明更新失败,产品不存在,或者产品库存不够
                    Yii::$service->helper->errors->add('product: [ {product_name} ] is stock out', ['product_name' => $product_name]);
                    
                    return false;
                }

在条件里面加入库存大小判断,然后检测更新的行数即可

alijon#23年前 0 个赞
['qty' => 0 - $sale_qty],

这句话的意思是库存 是吧? 条件 0 - $sale_qty 为什么加0呢 有点不懂老师 加0 有什么好处? 谢谢

Fecmall#33年前 0 个赞
'qty' => 0 - $sale_qty

$sale_qty是正数, 0 - $sale_qty是负数,这里是扣除库存,肯定需要用负数

这个update的语句,大致为:

update stock set qty = qty - 6 where product_id = xxx and  qty >= 6
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics