|
|
|
@@ -72,32 +72,30 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { |
|
|
|
WxPayOrderMapper wxPayOrderMapper; |
|
|
|
|
|
|
|
private int updateOrderGroup(WxOrderGroup wxOrderGroup,WxOrder order, WxCoupon wxCoupon) { |
|
|
|
//锁住人数 |
|
|
|
long time = System.currentTimeMillis() + RedisLock.LONG_TIMEOUT; |
|
|
|
String timeStr = String.valueOf(time); |
|
|
|
boolean grouppeopleLock = redisLock.lock("grouppeopleLock_"+order.getOrderGroupId(), timeStr); |
|
|
|
if (!grouppeopleLock) { |
|
|
|
throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团锁定失败,请稍后再试。"); |
|
|
|
} |
|
|
|
//此处拼团数量应从订单总数查询,支付成功的就算一个,没支付成功的不算. 提高拼团的成功率 |
|
|
|
int ordercount = wxOrderService.countGroupOrder(order.getOrderGroupId(),true); |
|
|
|
Integer remainPeople = wxCoupon.getPressLimitNum()-ordercount-1; |
|
|
|
//Integer remainPeople = wxOrderGroup.getRemainPeople()-1; |
|
|
|
wxOrderGroup.setStatus(remainPeople <= 0 ? EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode() : wxOrderGroup.getStatus()); |
|
|
|
wxOrderGroup.setUpdateDate(new Date()); |
|
|
|
wxOrderGroup.setRemainPeople(remainPeople); |
|
|
|
logger.info("非首次拼团,更新拼团信息, 剩余人数-1"); |
|
|
|
int row = wxOrderGroupMapper.updateOrderGroup(wxOrderGroup); |
|
|
|
if (row != 1) { |
|
|
|
//错误,更新状态,定时任务会发起退款,回滚库存 |
|
|
|
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); |
|
|
|
wxOrderMapper.updateById(order); |
|
|
|
redisLock.unlock("grouppeopleLock_"+order.getOrderGroupId(), timeStr); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团失败,将稍后退款."); |
|
|
|
}else { |
|
|
|
redisLock.unlock("grouppeopleLock_"+order.getOrderGroupId(), timeStr); |
|
|
|
} |
|
|
|
return remainPeople; |
|
|
|
//TODO 并发处理 锁住人数 |
|
|
|
//此处拼团数量应从订单总数查询,支付成功的就算一个,没支付成功的不算. 提高拼团的成功率 |
|
|
|
if (null != order.getOrderGroupId() && (!order.getOrderGroupId().equals(0L))) { |
|
|
|
synchronized(order.getOrderGroupId()) { |
|
|
|
int ordercount = wxOrderService.countGroupOrder(order.getOrderGroupId(),true); |
|
|
|
Integer remainPeople = wxCoupon.getPressLimitNum()-ordercount-1; |
|
|
|
//Integer remainPeople = wxOrderGroup.getRemainPeople()-1; |
|
|
|
wxOrderGroup.setStatus(remainPeople <= 0 ? EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode() : wxOrderGroup.getStatus()); |
|
|
|
wxOrderGroup.setUpdateDate(new Date()); |
|
|
|
wxOrderGroup.setRemainPeople(remainPeople); |
|
|
|
logger.info("非首次拼团,更新拼团信息, 剩余人数-1"); |
|
|
|
int row = wxOrderGroupMapper.updateOrderGroup(wxOrderGroup); |
|
|
|
if (row != 1) { |
|
|
|
//错误,更新状态,定时任务会发起退款,回滚库存 |
|
|
|
order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); |
|
|
|
wxOrderMapper.updateById(order); |
|
|
|
throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD.getCode(),"参团失败,将稍后退款."); |
|
|
|
} |
|
|
|
return remainPeople; |
|
|
|
} |
|
|
|
}else { |
|
|
|
throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),"参团错误,非参团订单."); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
@@ -317,8 +315,7 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { |
|
|
|
orderList = orderList.parallelStream().filter(o -> { |
|
|
|
return o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING.getCode()) || |
|
|
|
o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_COMPLETE.getCode()) || |
|
|
|
o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode()) || |
|
|
|
o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_CANCEL.getCode()); |
|
|
|
o.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_OVERTIME.getCode()); |
|
|
|
}).sorted(Comparator.comparing(order -> order.getId())).collect(Collectors.toList()); |
|
|
|
if (!orderList.isEmpty()) { |
|
|
|
List<WxCUserBasicInfo> userList = new ArrayList<>(); |
|
|
|
|