xiaoyong931011
2023-09-11 3e9ce32124446cd42c1d50f0bbc9876dd4299b3d
优惠卷
11 files modified
104 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java 16 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 35 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java 5 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java 7 ●●●●● patch | view | raw | blame | history
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);
    }
}