|
|
|
@ -13,6 +13,7 @@ import cc.hiver.mall.pojo.query.MallOrderPageQuery; |
|
|
|
import cc.hiver.mall.pojo.vo.MallOrderVO; |
|
|
|
import cc.hiver.mall.service.CommentService; |
|
|
|
import cc.hiver.mall.service.ShopService; |
|
|
|
import cc.hiver.mall.service.mybatis.MallDeliveryOrderService; |
|
|
|
import cc.hiver.mall.service.mybatis.MallOrderGroupService; |
|
|
|
import cc.hiver.mall.service.mybatis.MallOrderService; |
|
|
|
import cc.hiver.mall.utils.MerchantOrderSeqUtil; |
|
|
|
@ -83,6 +84,9 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
@Autowired |
|
|
|
private MallOrderGoodsMapper mallOrderGoodsMapper; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private MallDeliveryOrderService mallDeliveryOrderService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
JPushServiceImpl jPushService; |
|
|
|
|
|
|
|
@ -469,76 +473,89 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder |
|
|
|
|
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public void paySuccess(String orderId) { |
|
|
|
MallOrder order = this.getById(orderId); |
|
|
|
if (order == null) throw new RuntimeException("订单不存在"); |
|
|
|
if (order.getStatus() != STATUS_WAIT_PAY) { |
|
|
|
return; // 已经处理过或状态不对
|
|
|
|
} |
|
|
|
|
|
|
|
if (order.getOrderType() == ORDER_TYPE_NORMAL) { |
|
|
|
// 直购支付成功 -> 跳过待商家接单,直接进入待配送或待消费
|
|
|
|
if (DELIVERY_TYPE_EXPRESS == order.getDeliveryType()) { |
|
|
|
updateOrderStatus(orderId, STATUS_WAIT_DELIVERY); |
|
|
|
// 激活配送单,状态改为待接单(0)
|
|
|
|
Date createTime = new Timestamp(System.currentTimeMillis()); |
|
|
|
// 1. 获取当前时间 (LocalDateTime)
|
|
|
|
LocalDateTime now = LocalDateTime.now(); |
|
|
|
// 2. 加40分钟
|
|
|
|
LocalDateTime futureTime = now.plusMinutes(40); |
|
|
|
// 3. 如果需要转回 java.util.Date (为了兼容旧代码)
|
|
|
|
Date mustFinishTime = Date.from(futureTime.atZone(ZoneId.systemDefault()).toInstant()); |
|
|
|
LambdaUpdateWrapper<MallDeliveryOrder> duw = new LambdaUpdateWrapper<>(); |
|
|
|
duw.eq(MallDeliveryOrder::getOrderId, orderId) |
|
|
|
.set(MallDeliveryOrder::getStatus, 0).set(MallDeliveryOrder::getCreateTime, createTime).set(MallDeliveryOrder::getMustFinishTime, mustFinishTime); |
|
|
|
mallDeliveryOrderMapper.update(null, duw); |
|
|
|
|
|
|
|
// 触发异步推送和延迟监听流程
|
|
|
|
triggerDeliveryAsyncEvents(orderId); |
|
|
|
} else { |
|
|
|
String latestSeq = merchantOrderSeqUtil.generateOrderSequence(order.getShopId(), 2); |
|
|
|
LambdaUpdateWrapper<MallOrder> uw = new LambdaUpdateWrapper<>(); |
|
|
|
uw.eq(MallOrder::getId, orderId).set(MallOrder::getStatus, STATUS_WAIT_PICKUP).set(MallOrder::getNumberCode, latestSeq); |
|
|
|
this.update(uw); |
|
|
|
public void paySuccess(String orderId,BigDecimal totalFee) { |
|
|
|
if (orderId != null && orderId.startsWith("ORDER_")) { |
|
|
|
orderId = orderId.substring(6); |
|
|
|
MallOrder order = this.getById(orderId); |
|
|
|
if (order == null) throw new RuntimeException("订单不存在"); |
|
|
|
if (order.getStatus() != STATUS_WAIT_PAY) { |
|
|
|
return; // 已经处理过或状态不对
|
|
|
|
} |
|
|
|
} else if (order.getOrderType() == ORDER_TYPE_GROUP || order.getOrderType() == ORDER_TYPE_FACETOFACE) { |
|
|
|
// 拼团订单支付成功 -> 改为待成团
|
|
|
|
updateOrderStatus(orderId, STATUS_WAIT_GROUP); |
|
|
|
|
|
|
|
// 查找属于该订单的拼团并检查成团条件
|
|
|
|
LambdaQueryWrapper<MallOrderGroup> gq = new LambdaQueryWrapper<>(); |
|
|
|
gq.eq(MallOrderGroup::getHeadOrderId, orderId); |
|
|
|
MallOrderGroup group = mallOrderGroupMapper.selectOne(gq); |
|
|
|
if (group == null) { |
|
|
|
// 如果不是团长,按参团人查找
|
|
|
|
LambdaQueryWrapper<MallOrderGroup> gq2 = new LambdaQueryWrapper<>(); |
|
|
|
gq2.eq(MallOrderGroup::getShopId, order.getShopId()) |
|
|
|
.like(MallOrderGroup::getGroupOrderIds, order.getId()) |
|
|
|
.last("LIMIT 1"); |
|
|
|
group = mallOrderGroupMapper.selectOne(gq2); |
|
|
|
//更新参团人数+1
|
|
|
|
int newMembers = group.getCurrentMembers() + 1; |
|
|
|
LambdaUpdateWrapper<MallOrderGroup> guw = new LambdaUpdateWrapper<>(); |
|
|
|
guw.eq(MallOrderGroup::getId, group.getId()) |
|
|
|
.set(MallOrderGroup::getCurrentMembers, newMembers); |
|
|
|
mallOrderGroupMapper.update(group,guw); |
|
|
|
}else{ |
|
|
|
// 团长支付 且不是面对面团 状态改为待成团
|
|
|
|
int newMembers = 1; |
|
|
|
if(group.getIsFace() != 1){ |
|
|
|
LambdaUpdateWrapper<MallOrderGroup> guw = new LambdaUpdateWrapper<>(); |
|
|
|
guw.eq(MallOrderGroup::getId, group.getId()) |
|
|
|
.set(MallOrderGroup::getStatus, GROUP_STATUS_FORMING).set(MallOrderGroup::getCurrentMembers, newMembers); |
|
|
|
mallOrderGroupMapper.update(group,guw); |
|
|
|
}else{ |
|
|
|
|
|
|
|
if (order.getOrderType() == ORDER_TYPE_NORMAL) { |
|
|
|
// 直购支付成功 -> 跳过待商家接单,直接进入待配送或待消费
|
|
|
|
if (DELIVERY_TYPE_EXPRESS == order.getDeliveryType()) { |
|
|
|
updateOrderStatus(orderId, STATUS_WAIT_DELIVERY); |
|
|
|
// 激活配送单,状态改为待接单(0)
|
|
|
|
Date createTime = new Timestamp(System.currentTimeMillis()); |
|
|
|
// 1. 获取当前时间 (LocalDateTime)
|
|
|
|
LocalDateTime now = LocalDateTime.now(); |
|
|
|
// 2. 加40分钟
|
|
|
|
LocalDateTime futureTime = now.plusMinutes(40); |
|
|
|
// 3. 如果需要转回 java.util.Date (为了兼容旧代码)
|
|
|
|
Date mustFinishTime = Date.from(futureTime.atZone(ZoneId.systemDefault()).toInstant()); |
|
|
|
LambdaUpdateWrapper<MallDeliveryOrder> duw = new LambdaUpdateWrapper<>(); |
|
|
|
duw.eq(MallDeliveryOrder::getOrderId, orderId) |
|
|
|
.set(MallDeliveryOrder::getStatus, 0).set(MallDeliveryOrder::getCreateTime, createTime).set(MallDeliveryOrder::getMustFinishTime, mustFinishTime); |
|
|
|
mallDeliveryOrderMapper.update(null, duw); |
|
|
|
|
|
|
|
// 触发异步推送和延迟监听流程
|
|
|
|
triggerDeliveryAsyncEvents(orderId); |
|
|
|
} else { |
|
|
|
String latestSeq = merchantOrderSeqUtil.generateOrderSequence(order.getShopId(), 2); |
|
|
|
LambdaUpdateWrapper<MallOrder> uw = new LambdaUpdateWrapper<>(); |
|
|
|
uw.eq(MallOrder::getId, orderId).set(MallOrder::getStatus, STATUS_WAIT_PICKUP).set(MallOrder::getNumberCode, latestSeq); |
|
|
|
this.update(uw); |
|
|
|
} |
|
|
|
} else if (order.getOrderType() == ORDER_TYPE_GROUP || order.getOrderType() == ORDER_TYPE_FACETOFACE) { |
|
|
|
// 拼团订单支付成功 -> 改为待成团
|
|
|
|
updateOrderStatus(orderId, STATUS_WAIT_GROUP); |
|
|
|
|
|
|
|
// 查找属于该订单的拼团并检查成团条件
|
|
|
|
LambdaQueryWrapper<MallOrderGroup> gq = new LambdaQueryWrapper<>(); |
|
|
|
gq.eq(MallOrderGroup::getHeadOrderId, orderId); |
|
|
|
MallOrderGroup group = mallOrderGroupMapper.selectOne(gq); |
|
|
|
if (group == null) { |
|
|
|
// 如果不是团长,按参团人查找
|
|
|
|
LambdaQueryWrapper<MallOrderGroup> gq2 = new LambdaQueryWrapper<>(); |
|
|
|
gq2.eq(MallOrderGroup::getShopId, order.getShopId()) |
|
|
|
.like(MallOrderGroup::getGroupOrderIds, order.getId()) |
|
|
|
.last("LIMIT 1"); |
|
|
|
group = mallOrderGroupMapper.selectOne(gq2); |
|
|
|
//更新参团人数+1
|
|
|
|
int newMembers = group.getCurrentMembers() + 1; |
|
|
|
LambdaUpdateWrapper<MallOrderGroup> guw = new LambdaUpdateWrapper<>(); |
|
|
|
guw.eq(MallOrderGroup::getId, group.getId()) |
|
|
|
.set(MallOrderGroup::getCurrentMembers, newMembers); |
|
|
|
mallOrderGroupMapper.update(group,guw); |
|
|
|
}else{ |
|
|
|
// 团长支付 且不是面对面团 状态改为待成团
|
|
|
|
int newMembers = 1; |
|
|
|
if(group.getIsFace() != 1){ |
|
|
|
LambdaUpdateWrapper<MallOrderGroup> guw = new LambdaUpdateWrapper<>(); |
|
|
|
guw.eq(MallOrderGroup::getId, group.getId()) |
|
|
|
.set(MallOrderGroup::getStatus, GROUP_STATUS_FORMING).set(MallOrderGroup::getCurrentMembers, newMembers); |
|
|
|
mallOrderGroupMapper.update(group,guw); |
|
|
|
}else{ |
|
|
|
LambdaUpdateWrapper<MallOrderGroup> guw = new LambdaUpdateWrapper<>(); |
|
|
|
guw.eq(MallOrderGroup::getId, group.getId()) |
|
|
|
.set(MallOrderGroup::getCurrentMembers, newMembers); |
|
|
|
mallOrderGroupMapper.update(group,guw); |
|
|
|
} |
|
|
|
} |
|
|
|
if (group != null) { |
|
|
|
mallOrderGroupService.checkAndActivateGroup(group.getId()); |
|
|
|
} |
|
|
|
} |
|
|
|
if (group != null) { |
|
|
|
mallOrderGroupService.checkAndActivateGroup(group.getId()); |
|
|
|
}else if(orderId != null && orderId.startsWith("ORDERDE_")){ |
|
|
|
orderId = orderId.substring(8); |
|
|
|
MallOrder order = this.getById(orderId); |
|
|
|
if(order.getOrderType() == ORDER_TYPE_FACETOFACE){ |
|
|
|
MallDeliveryOrder delivery = mallDeliveryOrderMapper.selectByGroupId(orderId); |
|
|
|
mallDeliveryOrderService.addDeliveryFee(order,delivery, totalFee,order.getDeliveryFee()); |
|
|
|
}else{ |
|
|
|
MallDeliveryOrder delivery = mallDeliveryOrderMapper.selectById(orderId); |
|
|
|
mallDeliveryOrderService.addDeliveryFee(order,delivery, totalFee,order.getDeliveryFee()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|