第四章 交易模块开发
4.1 交易模型管理–交易模型创建
1. 创建用户下单模型OrderModel
//用户下单的交易模型
public class OrderModel {
//交易单号,例如2019052100001212,使用string类型
private String id;
//购买的用户id
private Integer userId;
//购买的商品id
private Integer itemId;
//购买时商品的单价
private BigDecimal itemPrice;
//购买数量
private Integer amount;
//购买总金额
private BigDecimal orderPrice;
}
2. 数据库创建order_info表
名 | 类型 | 说明 |
---|---|---|
id | String | 交易号 |
userId | Integer | 购买用户id |
itemId | Integer | 购买商品id |
itemPrice | BigDecimal | 购买商品单价 |
amount | Integer | 购买数量 |
orderPrice | BigDecimal | 购买总金额 |
3. mybatis generator生成数据库映射
mybatis generator生成order_info表及OrderDO
运行 mvn mybatis-generator:generate
<table tableName="order_info" domainObjectName="OrderDO"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false" ></table>
4.2 交易模型管理-交易下单
1.OrderService接口部分
实现createOrder函数,通过用户id,商品id以及购买数量创建订单
OrderModel createOrder(Integer userId, Integer itemId, Integer amount) throws BusinessException;
2.OrderServiceImpl实现类
用户下单的流程主要包括:
- 校验下单状态,包括下单商品是否存在,用户是否合法,购买数量是否正确
- 减少库存量(落单减库存)
- 订单入库
- 返回前端
1. 校验下单状态
校验下单商品是否存在是通过商品id在itemService查询itemModel,校验用户是否合法是用userId在userService里查找userModel,校验购买数量我们规定一个用户最少购买1件最多不超过100
//1.校验下单状态,下单的商品是否存在,用户是否合法,购买数量是否正确
ItemModel itemModel = itemService.getItemById(itemId);
if (itemModel == null) {
throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR, "商品信息不存在");
}
UserModel userModel = userService.getUserById(userId);
if (userModel == null) {
throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR, "用户信息不存在");
}
if (amount <= 0 || amount > 99) {
throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR, "数量信息不存在");
}
2. 落单减库存
减少库存量有两种方式:落单减库存以及支付减库存。
对应的就是在用户下单成功还是支付成功后减少库存,支付成功后减库存因为支付时未加库存锁,所以会出现支付成功但因库存不够退单情况。而落单减库存则可能出现恶意刷单的情况。这里我们采取落单减库存的方式。
ItemStockMapper增加对item_stock数据库减操作
ItemStockMapper.xml
<update id="decreaseStock"></