diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java index 4eac0847..0acdbadb 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java @@ -269,7 +269,7 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl oUw = new LambdaUpdateWrapper<>(); - oUw.eq(MallOrder::getId, orderId) + oUw.eq(MallOrder::getId, orderId).eq(MallOrder::getStatus, 2) .set(MallOrder::getNumberCode, orderSeqMap.get(orderId)) .set(MallOrder::getStatus, 3); mallOrderService.update(oUw); @@ -438,13 +438,31 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl orderIds = Arrays.asList(group.getGroupOrderIds().split(",")); //批量更新 LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>(); - oUw.in(MallOrder::getId, orderIds).set(MallOrder::getStatus, ORDER_STATUS_DELIVERING); + oUw.in(MallOrder::getId, orderIds) + .eq(MallOrder::getStatus, 3) + .set(MallOrder::getStatus, ORDER_STATUS_DELIVERING); mallOrderService.update(oUw); //更新缓存 for (String orderId : orderIds) { MallOrder orderInner = mallOrderService.getById(orderId); delivery.setGetTime(new Date()); delivery.setStatus(STATUS_DELIVERING); + if(orderInner.getStatus() == ORDER_STATUS_DELIVERING || orderInner.getStatus() == 3){ + MallOrderVO orderVO = buildVO(orderInner, null, null, delivery); + orderVO.setStatus(ORDER_STATUS_DELIVERING); + userPendingOrderCacheUtil.update(orderInner.getUserId(), orderVO); + } + } + }else{ + // 同步订单状态 -> 配送中 + if (StringUtils.isNotBlank(delivery.getOrderId())) { + LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>(); + oUw.eq(MallOrder::getId, delivery.getOrderId()) + .set(MallOrder::getStatus, ORDER_STATUS_DELIVERING); + mallOrderService.update(oUw); + MallOrder orderInner = mallOrderService.getById(delivery.getOrderId()); + delivery.setGetTime(new Date()); + delivery.setStatus(STATUS_DELIVERING); MallOrderVO orderVO = buildVO(orderInner, null, null, delivery); orderVO.setStatus(ORDER_STATUS_DELIVERING); userPendingOrderCacheUtil.update(orderInner.getUserId(), orderVO); @@ -500,35 +518,56 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl orderIdList = Arrays.asList(group.getGroupOrderIds().split(",")); - //更新缓存 - for (String orderId : orderIdList) { - MallOrder orderInner = mallOrderService.getById(orderId); - userPendingOrderCacheUtil.remove(orderInner.getUserId(),orderInner.getId()); - } - LambdaUpdateWrapper oqw = new LambdaUpdateWrapper<>(); - oqw.in(MallOrder::getId, orderIdList).set(MallOrder::getStatus,ORDER_STATUS_DONE); - mallOrderService.update(oqw); - - //更新优惠券已使用 - LambdaUpdateWrapper oqwCoupon = new LambdaUpdateWrapper<>(); - oqwCoupon.in(MallUserCoupon::getOrderId, orderIdList).set(MallUserCoupon::getStatus,2); - mallUserCouponService.update(oqwCoupon); + if(group.getIsFace() == 1){ + List orderIdList = Arrays.asList(group.getGroupOrderIds().split(",")); + //更新缓存 + for (String orderId : orderIdList) { + MallOrder orderInner = mallOrderService.getById(orderId); + if(orderInner.getStatus() == 4){ + userPendingOrderCacheUtil.remove(orderInner.getUserId(),orderInner.getId()); + }else{ + orderIdList.remove(orderId); + } + } + LambdaUpdateWrapper oqw = new LambdaUpdateWrapper<>(); + oqw.in(MallOrder::getId, orderIdList).set(MallOrder::getStatus,ORDER_STATUS_DONE); + mallOrderService.update(oqw); + + //更新优惠券已使用 + LambdaUpdateWrapper oqwCoupon = new LambdaUpdateWrapper<>(); + oqwCoupon.in(MallUserCoupon::getOrderId, orderIdList).set(MallUserCoupon::getStatus,2); + mallUserCouponService.update(oqwCoupon); + + // 面对面拼团:每个子订单单独计数(Key 按 regionId 隔离),避免多单只计 1 次 + if(freeOrderCacheUtil.exists(delivery.getRegionId())){ + String regionId = delivery.getRegionId(); + String orderNumber = String.valueOf(freeOrderCacheUtil.get(regionId).getOrderNumber()); + for (int i = 0; i < orderIdList.size(); i++) { + stringRedisTemplate.execute( + redisLuaScripts.getIncrementScript(), + Arrays.asList("free_order:count:" + regionId, "free_order:flag:" + regionId), + orderNumber + ); + } + } + }else{ + if (StringUtils.isNotBlank(delivery.getOrderId())) { + LambdaUpdateWrapper oUw = new LambdaUpdateWrapper<>(); + oUw.eq(MallOrder::getId, delivery.getOrderId()) + .set(MallOrder::getStatus, ORDER_STATUS_DONE); + mallOrderService.update(oUw); + //更新缓存 + MallOrder orderInner = mallOrderService.getById(delivery.getOrderId()); + userPendingOrderCacheUtil.remove(orderInner.getUserId(),orderInner.getId()); - // 面对面拼团:每个子订单单独计数(Key 按 regionId 隔离),避免多单只计 1 次 - if(freeOrderCacheUtil.exists(delivery.getRegionId())){ - String regionId = delivery.getRegionId(); - String orderNumber = String.valueOf(freeOrderCacheUtil.get(regionId).getOrderNumber()); - for (int i = 0; i < orderIdList.size(); i++) { - stringRedisTemplate.execute( - redisLuaScripts.getIncrementScript(), - Arrays.asList("free_order:count:" + regionId, "free_order:flag:" + regionId), - orderNumber - ); + if(orderInner.getOtherOrder() != null){ + isFantuan = false; + } + //优惠券变成已使用 + mallUserCouponService.useCoupon(delivery.getOrderId()); } } - isFantuan = false; // 已在上方逐单计数,跳过底部统一计数 - + //isFantuan = false; // 已在上方逐单计数,跳过底部统一计数 }else{ // 同步订单状态 -> 已完成 if (StringUtils.isNotBlank(delivery.getOrderId())) {