创建订单 - 扣除商品库存与订单状态保存
生活随笔
收集整理的這篇文章主要介紹了
创建订单 - 扣除商品库存与订单状态保存
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*** @Description: 訂單狀態 枚舉*/
public enum OrderStatusEnum {WAIT_PAY(10, "待付款"),WAIT_DELIVER(20, "已付款,待發貨"),WAIT_RECEIVE(30, "已發貨,待收貨"),SUCCESS(40, "交易成功"),CLOSE(50, "交易關閉");public final Integer type;public final String value;OrderStatusEnum(Integer type, String value){this.type = type;this.value = value;}}
/*** 減少庫存* @param specId* @param buyCounts*/
public void decreaseItemSpecStock(String specId, int buyCounts);
@Transactional(propagation = Propagation.REQUIRED)
@Override
public void decreaseItemSpecStock(String specId, int buyCounts) {// synchronized 不推薦使用,集群下無用,性能低下// 鎖數據庫: 不推薦,導致數據庫性能低下// 分布式鎖 zookeeper redis// lockUtil.getLock(); -- 加鎖// 1. 查詢庫存
// int stock = 10;// 2. 判斷庫存,是否能夠減少到0以下
// if (stock - buyCounts < 0) {// 提示用戶庫存不夠
// 10 - 3 -3 - 5 = -1
// }// lockUtil.unLock(); -- 解鎖int result = itemsMapperCustom.decreaseItemSpecStock(specId, buyCounts);if (result != 1) {throw new RuntimeException("訂單創建失敗,原因:庫存不足!");}
}
<update id="decreaseItemSpecStock">updateitems_specsetstock = stock - #{pendingCounts}whereid = #{specId}andstock >= #{pendingCounts}</update>
public int decreaseItemSpecStock(@Param("specId") String specId,@Param("pendingCounts") int pendingCounts);
// 2.4 在用戶提交訂單以后,規格表中需要扣除庫存
itemService.decreaseItemSpecStock(itemSpecId, buyCounts);
?
總結
以上是生活随笔為你收集整理的创建订单 - 扣除商品库存与订单状态保存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创建订单 - 保存订单与子订单数据
- 下一篇: 创建订单 - 创建订单后前端的业务处理讲