src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
@@ -122,4 +122,20 @@ return BindingBuilder.bind(orderReturnMoneyQueue()).to(orderReturnMoneyExchange()).with(RabbitQueueEnum.ORDER_RETURN_MONEY.getRoute()); } @Bean public DirectExchange orderCouponExchange() { return new DirectExchange(RabbitQueueEnum.ORDER_COUPON.getExchange()); } @Bean public Queue orderCouponQueue() { return new Queue(QueueConstants.ORDER_COUPON); } @Bean public Binding orderCouponBind() { return BindingBuilder.bind(orderCouponQueue()).to(orderCouponExchange()).with(RabbitQueueEnum.ORDER_COUPON.getRoute()); } } src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
@@ -41,6 +41,9 @@ @ApiModelProperty(value = "1-普通订单/2-积分订单") private Integer orderType; @ApiModelProperty(value = "会员优惠卷ID") private Long memberCouponId; @ApiModelProperty(value = "商品明细") private List<AddOrderItemDto> items; src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java
@@ -19,6 +19,8 @@ private Long skuId; private Long memberCouponId; private Long goodsId; private String goodsName; src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
@@ -39,4 +39,6 @@ * 店补/董事 */ void storeAndDirectorProfit(Date profitDate); void getOrderCoupon(Long orderId); } src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -45,6 +45,7 @@ import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * @author wzy @@ -82,6 +83,8 @@ private final IApiMallTeamLeaderService iApiMallTeamLeaderService; private final IMallElectronicFenceService iMallElectronicFenceService; private final MallElectronicFenceMapper mallElectronicFenceMapper; private final MallMemberCouponMapper mallMemberCouponMapper; private final MallGoodsCouponMapper mallGoodsCouponMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -183,6 +186,36 @@ } BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt())); //是否使用优惠卷 if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){ Long memberCouponId = addOrderDto.getMemberCouponId(); MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId); if(ObjectUtil.isEmpty(mallMemberCoupon)){ throw new FebsException(mallMemberCoupon.getCouponName()+"无法使用"); } Integer state = mallMemberCoupon.getState(); if(1 != state){ throw new FebsException(mallMemberCoupon.getCouponName()+"无法使用"); } Long goodsId = mallMemberCoupon.getGoodsId(); if(goodsId != sku.getGoodsId()){ throw new FebsException(sku.getGoodsName()+"无法使用"+mallMemberCoupon.getCouponName()); } MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(mallMemberCoupon.getCouponId()); if(ObjectUtil.isEmpty(mallGoodsCoupon)){ throw new FebsException(mallGoodsCoupon.getName()+"无法使用"); } Integer stateCoupon = mallGoodsCoupon.getState(); if(2 != stateCoupon){ throw new FebsException(mallGoodsCoupon.getName()+"无法使用"); } BigDecimal costAmount = mallGoodsCoupon.getCostAmount(); BigDecimal realAmount = mallGoodsCoupon.getRealAmount(); if(amount.compareTo(costAmount) >= 0){ amount = amount.subtract(realAmount); orderItem.setMemberCouponId(memberCouponId); } } orderItem.setAmount(amount); orderItem.setCnt(item.getCnt()); orderItem.setOrderId(orderInfo.getId()); @@ -366,6 +399,8 @@ orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue()); mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2); agentProducer.sendOrderCoupon(orderInfo.getId()); break; case "4": if (orderInfo.getOrderType() != 2) { src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -27,6 +27,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; /** * @author wzy @@ -46,6 +47,7 @@ private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final MallMoneyFlowMapper mallMoneyFlowMapper; private final MallAchieveRecordMapper mallAchieveRecordMapper; private final MallMemberCouponMapper mallMemberCouponMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -477,4 +479,19 @@ } log.info("#####==店补/董事==end==######"); } @Override public void getOrderCoupon(Long orderId) { List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderId); if(CollUtil.isNotEmpty(mallOrderItemList)){ List<Long> memberCouponIds = mallOrderItemList.stream().map(MallOrderItem::getMemberCouponId).collect(Collectors.toList()); if(CollUtil.isNotEmpty(memberCouponIds)){ for(Long memberCouponId : memberCouponIds){ MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId); mallMemberCoupon.setState(2); mallMemberCouponMapper.updateById(mallMemberCoupon); } } } } } src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java
@@ -21,6 +21,7 @@ import cc.mrbird.febs.pay.util.Signature; import cc.mrbird.febs.pay.util.Util; import cc.mrbird.febs.pay.util.WechatConfigure; import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONObject; @@ -72,6 +73,8 @@ private IApiMallMemberService mallMemberService; @Autowired private MallAgentRecordMapper mallAgentRecordMapper; @Autowired private AgentProducer agentProducer; @Autowired private IXcxPayService iXcxPayService; @@ -306,6 +309,8 @@ order.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue()); mallOrderInfoMapper.updateById(order); agentProducer.sendOrderCoupon(order.getId()); mallMoneyFlowService.addMoneyFlow( order.getMemberId(), order.getAmount().negate(), src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
@@ -10,4 +10,6 @@ public static final String AGENT_AUTO_LEVEL_UP = "queue_agent_auto_level_up_qay"; public static final String AGENT_RETURN_MONEY = "queue_agent_return_money_qay"; public static final String ORDER_RETURN_MONEY = "queue_order_return_money_qay"; public static final String ORDER_COUPON = "queue_order_coupon"; } src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
@@ -72,4 +72,14 @@ log.error("订单返利异常:", e); } } @RabbitListener(queues = QueueConstants.ORDER_COUPON) public void getOrderCoupon(Long orderId) { log.info("收到使用优惠卷消息:{}", orderId); try { memberProfitService.getOrderCoupon(orderId); } catch (Exception e) { log.error("使用优惠卷异常:", e); } } } src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
@@ -1,5 +1,6 @@ package cc.mrbird.febs.rabbit.enumerates; import cc.mrbird.febs.rabbit.constants.QueueConstants; import lombok.Getter; @Getter @@ -12,7 +13,9 @@ AGENT_REUTRN_MONEY("exchange_agent_return_money_qay", "route_key_agent_return_money_qay", "queue_agent_return_money_qay"), ORDER_RETURN_MONEY("exchange_order_return_money_qay", "route_key_order_return_money_qay", "queue_order_return_money_qay"); ORDER_RETURN_MONEY("exchange_order_return_money_qay", "route_key_order_return_money_qay", "queue_order_return_money_qay"), ORDER_COUPON("exchange_order_coupon", "route_key_order_coupon", QueueConstants.ORDER_COUPON); private String exchange; src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
@@ -76,4 +76,11 @@ log.info("发送返利消息:{}", orderId); rabbitTemplate.convertAndSend(RabbitQueueEnum.AGENT_REUTRN_MONEY.getExchange(), RabbitQueueEnum.AGENT_REUTRN_MONEY.getRoute(), orderId); } public void sendOrderCoupon(Long id) { log.info("发送使用优惠卷消息:{}", id); CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend(RabbitQueueEnum.ORDER_COUPON.getExchange(), RabbitQueueEnum.ORDER_COUPON.getRoute(), id, correlationData); } }