mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10:18:42 +08:00 
			
		
		
		
	Merge branch 'feature/mall_product' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into feature/mall_product_tmp
# Conflicts: # yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeBargainOrderHandler.java # yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationOrderHandler.java # yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeSeckillOrderHandler.java
This commit is contained in:
		| @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.trade.api.order.dto.TradeOrderSummaryRespDTO; | ||||
| import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; | ||||
| import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; | ||||
| import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; | ||||
| import org.springframework.context.annotation.Lazy; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
|  | ||||
| @@ -22,10 +23,11 @@ import java.util.List; | ||||
| @Validated | ||||
| public class TradeOrderApiImpl implements TradeOrderApi { | ||||
|  | ||||
|     @Resource | ||||
|     private TradeOrderQueryService tradeOrderQueryService; | ||||
|     @Resource | ||||
|     private TradeOrderUpdateService tradeOrderUpdateService; | ||||
|     @Resource | ||||
|     @Lazy | ||||
|     private TradeOrderQueryService tradeOrderQueryService; | ||||
|  | ||||
|     @Override | ||||
|     public List<TradeOrderRespDTO> getOrderList(Collection<Long> ids) { | ||||
|   | ||||
| @@ -110,4 +110,16 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> { | ||||
|         return selectOne(TradeOrderDO::getPickUpVerifyCode, pickUpVerifyCode); | ||||
|     } | ||||
|  | ||||
|     default TradeOrderDO selectByUserIdAndActivityIdAndStatus(Long userId, Long activityId, Integer status) { | ||||
|         return selectOne(new LambdaQueryWrapperX<TradeOrderDO>() | ||||
|                 .and(q -> q.eq(TradeOrderDO::getUserId, userId) | ||||
|                         .eq(TradeOrderDO::getStatus, status)) | ||||
|                 .and(q -> q.eq(TradeOrderDO::getCombinationActivityId, activityId) | ||||
|                         .or() | ||||
|                         .eq(TradeOrderDO::getSeckillActivityId, activityId) | ||||
|                         .or() | ||||
|                         .eq(TradeOrderDO::getBargainActivityId, activityId)) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -40,6 +40,16 @@ public interface TradeOrderQueryService { | ||||
|      */ | ||||
|     TradeOrderDO getOrder(Long userId, Long id); | ||||
|  | ||||
|     /** | ||||
|      * 获得指定用户,指定活动,指定状态的交易订单 | ||||
|      * | ||||
|      * @param userId     用户编号 | ||||
|      * @param activityId 活动编号 | ||||
|      * @param status     订单状态 | ||||
|      * @return 交易订单 | ||||
|      */ | ||||
|     TradeOrderDO getActivityOrderByUserIdAndActivityIdAndStatus(Long userId, Long activityId, Integer status); | ||||
|  | ||||
|     /** | ||||
|      * 获得订单列表 | ||||
|      * | ||||
| @@ -95,7 +105,7 @@ public interface TradeOrderQueryService { | ||||
|     /** | ||||
|      * 【会员】在指定秒杀活动下,用户购买的商品数量 | ||||
|      * | ||||
|      * @param userId 用户编号 | ||||
|      * @param userId     用户编号 | ||||
|      * @param activityId 活动编号 | ||||
|      * @return 秒杀商品数量 | ||||
|      */ | ||||
|   | ||||
| @@ -72,6 +72,11 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService { | ||||
|         return order; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public TradeOrderDO getActivityOrderByUserIdAndActivityIdAndStatus(Long userId, Long activityId, Integer status) { | ||||
|         return tradeOrderMapper.selectByUserIdAndActivityIdAndStatus(userId, activityId, status); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<TradeOrderDO> getOrderList(Collection<Long> ids) { | ||||
|         if (CollUtil.isEmpty(ids)) { | ||||
|   | ||||
| @@ -657,9 +657,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||||
|     public void updateOrderAddress(TradeOrderUpdateAddressReqVO reqVO) { | ||||
|         // 校验交易订单 | ||||
|         TradeOrderDO order = validateOrderExists(reqVO.getId()); | ||||
|         // 发货后,不允许修改; | ||||
|         // TODO @puhui999:只有待发货,可以执行 update | ||||
|         if (TradeOrderStatusEnum.isDelivered(order.getStatus())) { | ||||
|         // 只有待发货状态才可以修改订单收货地址; | ||||
|         if (!TradeOrderStatusEnum.isUndelivered(order.getStatus())) { | ||||
|             throw exception(ORDER_UPDATE_ADDRESS_FAIL_STATUS_NOT_DELIVERED); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package cn.iocoder.yudao.module.trade.service.order.handler; | ||||
|  | ||||
| import cn.hutool.core.lang.Assert; | ||||
| import cn.iocoder.yudao.module.promotion.api.bargain.BargainActivityApi; | ||||
| import cn.iocoder.yudao.module.promotion.api.bargain.BargainRecordApi; | ||||
| import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; | ||||
| @@ -28,6 +29,8 @@ public class TradeBargainOrderHandler implements TradeOrderHandler { | ||||
|         if (!TradeOrderTypeEnum.isBargain(order.getType())) { | ||||
|             return; | ||||
|         } | ||||
|         // 明确校验一下 | ||||
|         Assert.isTrue(orderItems.size() == 1, "砍价时,只允许选择一个商品"); | ||||
|  | ||||
|         // 扣减砍价活动的库存 | ||||
|         bargainActivityApi.updateBargainActivityStock(order.getBargainActivityId(), | ||||
| @@ -39,9 +42,24 @@ public class TradeBargainOrderHandler implements TradeOrderHandler { | ||||
|         if (!TradeOrderTypeEnum.isBargain(order.getType())) { | ||||
|             return; | ||||
|         } | ||||
|         // 明确校验一下 | ||||
|         Assert.isTrue(orderItems.size() == 1, "砍价时,只允许选择一个商品"); | ||||
|  | ||||
|         // 记录砍价记录对应的订单编号 | ||||
|         bargainRecordApi.updateBargainRecordOrderId(order.getBargainRecordId(), order.getId()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void cancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { | ||||
|         if (TradeOrderTypeEnum.isBargain(order.getType())) { | ||||
|             return; | ||||
|         } | ||||
|         // 明确校验一下 | ||||
|         Assert.isTrue(orderItems.size() == 1, "砍价时,只允许选择一个商品"); | ||||
|  | ||||
|         // 恢复砍价活动的库存 | ||||
|         bargainActivityApi.updateBargainActivityStock(order.getBargainActivityId(), | ||||
|                 orderItems.get(0).getCount()); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,11 +1,17 @@ | ||||
| package cn.iocoder.yudao.module.trade.service.order.handler; | ||||
|  | ||||
| import cn.hutool.core.lang.Assert; | ||||
| import cn.iocoder.yudao.framework.common.core.KeyValue; | ||||
| import cn.iocoder.yudao.framework.common.core.KeyValue; | ||||
| import cn.iocoder.yudao.module.promotion.api.combination.CombinationRecordApi; | ||||
| import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; | ||||
| import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; | ||||
| import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; | ||||
| import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; | ||||
| import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; | ||||
| import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; | ||||
| import cn.iocoder.yudao.module.trade.service.order.TradeOrderUpdateService; | ||||
| import org.springframework.context.annotation.Lazy; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| @@ -14,6 +20,9 @@ import java.util.List; | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_DELIVERY_FAIL_COMBINATION_RECORD_STATUS_NOT_SUCCESS; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_CREATE_FAIL_EXIST_UNPAID; | ||||
|  | ||||
| /** | ||||
|  * 拼团订单的 {@link TradeOrderHandler} 实现类 | ||||
|  * | ||||
| @@ -23,6 +32,14 @@ import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_DELIV | ||||
| public class TradeCombinationOrderHandler implements TradeOrderHandler { | ||||
|  | ||||
|     @Resource | ||||
|     @Lazy | ||||
|     private TradeOrderUpdateService orderUpdateService; | ||||
|     @Resource | ||||
|     @Lazy | ||||
|     private TradeOrderQueryService orderQueryService; | ||||
|  | ||||
|     @Resource | ||||
|     @Lazy | ||||
|     private CombinationRecordApi combinationRecordApi; | ||||
|  | ||||
|     @Override | ||||
| @@ -37,20 +54,30 @@ public class TradeCombinationOrderHandler implements TradeOrderHandler { | ||||
|         TradeOrderItemDO item = orderItems.get(0); | ||||
|         combinationRecordApi.validateCombinationRecord(order.getUserId(), order.getCombinationActivityId(), | ||||
|                 order.getCombinationHeadId(), item.getSkuId(), item.getCount()); | ||||
|         // TODO @puhui999:这里还要限制下,是不是已经 createOrder;就是还没支付的时候,重复下单了;需要校验下;不然的话,一个拼团可以下多个单子了; | ||||
|         // 校验该用户是否存在未支付的拼团活动订单;就是还没支付的时候,重复下单了;需要校验下;不然的话,一个拼团可以下多个单子了; | ||||
|         TradeOrderDO activityOrder = orderQueryService.getActivityOrderByUserIdAndActivityIdAndStatus( | ||||
|                 order.getUserId(), order.getCombinationActivityId(), TradeOrderStatusEnum.UNPAID.getStatus()); | ||||
|         if (activityOrder != null) { | ||||
|             throw exception(ORDER_CREATE_FAIL_EXIST_UNPAID); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { | ||||
|         // 如果不是拼团订单则结束 | ||||
|         if (!TradeOrderTypeEnum.isCombination(order.getType())) { | ||||
|         // 1.如果不是拼团订单则结束 | ||||
|         if (TradeOrderTypeEnum.isCombination(order.getType())) { | ||||
|             return; | ||||
|         } | ||||
|         Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品"); | ||||
|  | ||||
|         // 创建拼团记录 | ||||
|         // 2.获取商品信息 | ||||
|         TradeOrderItemDO item = orderItems.get(0); | ||||
|         combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, item)); | ||||
|         // 2.1.创建拼团记录 | ||||
|         KeyValue<Long, Long> recordIdAndHeadId = combinationRecordApi.createCombinationRecord( | ||||
|                 TradeOrderConvert.INSTANCE.convert(order, item)); | ||||
|         // 3.更新拼团相关信息到订单 | ||||
|         orderUpdateService.updateOrderCombinationInfo(order.getId(), order.getCombinationActivityId(), | ||||
|                 recordIdAndHeadId.getKey(), recordIdAndHeadId.getValue()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package cn.iocoder.yudao.module.trade.service.order.handler; | ||||
|  | ||||
| import cn.hutool.core.lang.Assert; | ||||
| import cn.iocoder.yudao.module.promotion.api.seckill.SeckillActivityApi; | ||||
| import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; | ||||
| import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; | ||||
| @@ -25,9 +26,24 @@ public class TradeSeckillOrderHandler implements TradeOrderHandler { | ||||
|         if (!TradeOrderTypeEnum.isSeckill(order.getType())) { | ||||
|             return; | ||||
|         } | ||||
|         // 明确校验一下 | ||||
|         Assert.isTrue(orderItems.size() == 1, "秒杀时,只允许选择一个商品"); | ||||
|  | ||||
|         // 扣减秒杀活动的库存 | ||||
|         seckillActivityApi.updateSeckillStock(order.getSeckillActivityId(), | ||||
|         seckillActivityApi.updateSeckillStockDecr(order.getSeckillActivityId(), | ||||
|                 orderItems.get(0).getSkuId(), orderItems.get(0).getCount()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void cancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { | ||||
|         if (TradeOrderTypeEnum.isSeckill(order.getType())) { | ||||
|             return; | ||||
|         } | ||||
|         // 明确校验一下 | ||||
|         Assert.isTrue(orderItems.size() == 1, "秒杀时,只允许选择一个商品"); | ||||
|  | ||||
|         // 恢复秒杀活动的库存 | ||||
|         seckillActivityApi.updateSeckillStockIncr(order.getSeckillActivityId(), | ||||
|                 orderItems.get(0).getSkuId(), orderItems.get(0).getCount()); | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV