用户下单和支付的业务逻辑

创建订单的核心业务逻辑

这个函数实现了电商系统的下单流程,包括:商品查询 → 价格计算 → 订单保存 → 库存扣减 → 购物车清理

详细步骤解析

1. 订单数据准备

// 1.1. 获取订单详情数据
List<OrderDetailDTO> detailDTOS = orderFormDTO.getDetails();

// 1.2. 转换为商品ID和数量的映射
Map<Long, Integer> itemNumMap = detailDTOS.stream()
    .collect(Collectors.toMap(OrderDetailDTO::getItemId, OrderDetailDTO::getNum));
// 例如:{1: 2, 2: 1} 表示商品1买2个,商品2买1个

// 1.3. 获取所有商品ID
Set<Long> itemIds = itemNumMap.keySet();

2. 商品验证和查询

// 1.3. 查询商品信息
List<ItemDTO> items = itemService.queryItemByIds(itemIds);

// 验证商品是否存在
if (items == null || items.size() < itemIds.size()) {
   
   
    throw new BadRequestException("商品不存在");
}

3. 价格计算

// 1.4. 计算订单总价
int total = 0;
for (ItemDTO item : items) {
   
   
    total += item.getPrice() * itemNumMap.get(item.getId());
}
order.setTotalFee(total);

4. 订单基本信息设置

// 1.5. 设置订单属性
order.setPaymentType(orderFormDTO.getPaymentType());  // 支付方式
order.setUserId(UserContext.getUser());               // 当前用户ID
order.setStatus(1);                                  // 订单状态(1=待支付)

5. 保存订单

// 1.6. 保存主订单
save(order);

6. 保存订单详情

// 2. 构建并保存订单详情
List<OrderDetail> details = buildDetails(order.getId(), items, itemNumMap);
detailService.saveBatch(details);

7. 清理购物车

// 3. 从购物车中移除已购买的商品
cartService.removeByItemIds(itemIds);

8. 扣减库存

// 4. 扣减商品库存
try {
   
   
    itemService.deductStock(detailDTOS);
} catch (Exception e) {
   
   
    throw new RuntimeException("库存不足!");
}

业务逻辑特点

1. 数据一致性</

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jessie_waverider

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值