✅P295_商城业务-订单服务-监听库存解锁
大约 2 分钟
库存解锁的两种场景
- 下单成功,订单过期没有支付被系统自动取消、被用户手动取消。都要解锁
- 下单成功,库存锁定成功,接下来的业务调用失败,导致订单回滚。之前锁定的库存就要自动解锁
加上全参和无参构造器注解
package com.gyz.cfmall.ware.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 库存工作单
*
* @author gong_yuzhuo
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName("wms_ware_order_task_detail")
public class WareOrderTaskDetailEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId
private Long id;
/**
* sku_id
*/
private Long skuId;
/**
* sku_name
*/
private String skuName;
/**
* 购买个数
*/
private Integer skuNum;
/**
* 工作单id
*/
private Long taskId;
/**
* 仓库id
*/
private Long wareId;
/**
* 锁定状态
*/
private Integer lockStatus;
}
保存工作单详情方便回溯
Common服务中创建To,方便MQ发送消息
package com.gyz.common.to.mq;
import lombok.Data;
@Data
public class StockLockedTo {
/**
* 库存工作单的id
*/
private Long id;
/**
* 库存工作单详情id
*/
private Long detailId;
}
如果To仅仅保存这个两个数据的话,会存在一些问题, 当1号订单在1号仓库扣减1件商品成功,2号订单在2号仓库扣减2件商品成功,3号订单在3号仓库扣减3件商品失败时,库存工作单的数据将会回滚,此时,数据库中将查不到1号和2号订单的库存工作单的数据,但是库存扣减是成功的,导致无法解锁库存。
解决方案: 保存库存工作详情To
package com.gyz.common.to.mq;
import lombok.Data;
@Data
public class StockDetailTo {
private Long id;
/**
* sku_id
*/
private Long skuId;
/**
* sku_name
*/
private String skuName;
/**
* 购买个数
*/
private Integer skuNum;
/**
* 工作单id
*/
private Long taskId;
/**
* 仓库id
*/
private Long wareId;
/**
* 1-锁定、2-已解锁、3-扣减
*/
private Integer lockStatus;
}
package com.gyz.common.to.mq;
import lombok.Data;
@Data
public class StockLockedTo {
/**
* 库存工作单的id
*/
private Long id;
/**
* 工作单详情的所有信息
*/
private StockDetailTo detailTo;
}
向MQ发送库存锁定成功的消息