From a1159976975857e0dfb48a45a9a848693bc0d262 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 20 Jul 2023 14:33:08 +0800
Subject: [PATCH] 支付返利,微信余额支付会有返利。发卷,赠送积分逻辑

---
 src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java             |    1 
 src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java                 |   10 ++
 src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java                  |    3 
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |   14 ++
 src/main/resources/mapper/modules/MallMemberMapper.xml                          |    9 ++
 src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java            |    2 
 src/main/java/cc/mrbird/febs/mall/dto/ApiMallRollPerkDto.java                   |   25 ++++++
 src/main/java/cc/mrbird/febs/mall/service/IAgentService.java                    |    2 
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java    |   13 +++
 src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java              |   18 ++++
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java       |   10 ++
 src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java            |   74 ++++++++++++++++++
 src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java          |    2 
 src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java               |    7 +
 src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java                |   11 ++
 src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java                      |    2 
 16 files changed, 199 insertions(+), 4 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
index 42e4064..3f42d91 100644
--- a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
+++ b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java
@@ -176,4 +176,22 @@
     }
     /** 新用户注册 end**/
 
+
+    /** 支付后同意验证 start**/
+    @Bean
+    public DirectExchange orderGetExchange() {
+        return new DirectExchange(RabbitQueueEnum.YWG_ORDER_GET.getExchange());
+    }
+
+    @Bean
+    public Queue orderGetQueue() {
+        return new Queue(RabbitQueueEnum.YWG_ORDER_GET.getQueue());
+    }
+
+    @Bean
+    public Binding orderGetBind() {
+        return BindingBuilder.bind(orderGetQueue()).to(orderGetExchange()).with(RabbitQueueEnum.YWG_ORDER_GET.getRoute());
+    }
+    /** 支付后同意验证 end**/
+
 }
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
index 8005fb8..bf7c74b 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -5,6 +5,8 @@
 
 @Getter
 public enum DataDictionaryEnum {
+    // 上级返佣金比例,返回到余额
+    MEMBER_RETURN_PERCENT("MEMBER_RETURN_PERCENT", "MEMBER_RETURN_PERCENT"),
     // 积分兑换比例  1,则1积分等于一元 2则2积分等于一元
     SCORE_CHANGE("SCORE_CHANGE", "SCORE_CHANGE"),
     //微信订阅模板ID,
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
index 40773f0..4da30b0 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
@@ -4,6 +4,7 @@
 import cc.mrbird.febs.mall.dto.*;
 import cc.mrbird.febs.mall.entity.MallMember;
 import cc.mrbird.febs.mall.entity.MallMemberPayment;
+import cc.mrbird.febs.mall.entity.MallRollPerk;
 import cc.mrbird.febs.mall.service.*;
 import cc.mrbird.febs.mall.vo.*;
 import io.swagger.annotations.Api;
@@ -220,4 +221,13 @@
         return memberService.activityInfo();
     }
 
+    @ApiOperation(value = "获取卷列表", notes = "获取卷列表")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = MallRollPerk.class)
+    })
+    @PostMapping(value = "/rollPerkList")
+    public FebsResponse rollPerkList(@RequestBody ApiMallRollPerkDto queryDto) {
+        return new FebsResponse().success().data(memberService.findMallRollPerkInPage(queryDto));
+    }
+
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiMallRollPerkDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiMallRollPerkDto.java
new file mode 100644
index 0000000..abfc5b2
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiMallRollPerkDto.java
@@ -0,0 +1,25 @@
+package cc.mrbird.febs.mall.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "ApiMallRollPerkDto", description = "参数接收类")
+public class ApiMallRollPerkDto {
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer pageNow;
+
+    @ApiModelProperty(value = "每页数量", example = "10")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "卷编码 1:课程卷 2:民宿卷", example = "123")
+    private Long rollId;
+
+    @ApiModelProperty(value = "状态1:未使用 2:已使用", example = "123")
+    private Integer state;
+
+    @ApiModelProperty(value = "用户ID", example = "123")
+    private Long memberId;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java b/src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java
index af48abd..76c0451 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java
@@ -14,7 +14,7 @@
     private Long memberId;
 
     private Long rollId;
-
+    //1:未使用 2:已使用
     private Integer state;
 
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
index 8f83a2d..86db1ef 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
@@ -6,6 +6,7 @@
 import cc.mrbird.febs.mall.dto.RankListDto;
 import cc.mrbird.febs.mall.entity.AppVersion;
 import cc.mrbird.febs.mall.entity.MallMember;
+import cc.mrbird.febs.mall.entity.MallRollPerk;
 import cc.mrbird.febs.mall.vo.*;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -87,4 +88,6 @@
     List<MallMember> selectMemberWithLevel(String level);
 
     MallMember selectMemberByOpenId(@Param("openId")String openId);
+
+    IPage<MallRollPerk> findMallRollPerkInPage(Page<MallRollPerk> page, @Param("record")MallRollPerk mallRollPerk);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
index 875e530..ce1d17e 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
@@ -13,4 +13,6 @@
     void addMemberScan(String str);
 
     void updateMemberInfo(String str);
+
+    void orderGetMsg(String str);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
index 1565337..ca0bf13 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
@@ -83,4 +83,6 @@
     FebsResponse activityInfo();
 
     FebsResponse agentApplyInfo();
+
+    FebsResponse findMallRollPerkInPage(ApiMallRollPerkDto queryDto);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
index 6d41ec1..709dec4 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -2,6 +2,7 @@
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
+import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
 import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.utils.AppContants;
@@ -50,6 +51,11 @@
     private final MallMemberMapper memberMapper;
     private final MallMemberWalletMapper mallMemberWalletMapper;
     private final RestTemplate restTemplate;
+    private final MallOrderInfoMapper mallOrderInfoMapper;
+    private final MallOrderItemMapper mallOrderItemMapper;
+    private final MallGoodsMapper mallGoodsMapper;
+    private final IApiMallMemberWalletService memberWalletService;
+    private final MallRollPerkMapper mallRollPerkMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -328,6 +334,74 @@
         return;
     }
 
+
+    @Override
+    public void orderGetMsg(String str) {
+        /**
+         * String str : orderId@amount
+         */
+        String[] split = StrUtil.split(str, "@");
+        String orderId = split[0];
+        String amount = split[1];
+        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
+        if(ObjectUtil.isEmpty(mallOrderInfo)){
+            return;
+        }
+        Long memberId = mallOrderInfo.getMemberId();
+        MallMember mallMember = memberMapper.selectById(memberId);
+
+
+        List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(mallOrderInfo.getId());
+        if(CollUtil.isEmpty(mallOrderItemList)){
+            return;
+        }
+
+        /**
+         * 支付后同意验证
+         *  1:是否送券
+         *  2:是否送积分
+         *  3:是否返利
+         */
+        //是否返利
+        BigDecimal amountBigDecimal = new BigDecimal(StrUtil.isEmpty(amount) ? "0" : amount);
+        if(BigDecimal.ZERO.compareTo(amountBigDecimal) < 0){
+            if(ObjectUtil.isNotEmpty(mallMember.getReferrerId())){
+                String referrerId = mallMember.getReferrerId();
+                MallMember mallMemberParent = memberMapper.selectInfoByInviteId(referrerId);
+                Long id = mallMemberParent.getId();
+                DataDictionaryCustom returnPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                        DataDictionaryEnum.MEMBER_RETURN_PERCENT.getType(),
+                        DataDictionaryEnum.MEMBER_RETURN_PERCENT.getCode()
+                );
+                String returnPercentStr = StrUtil.isNotEmpty(returnPercentDic.getValue()) ? "1" : returnPercentDic.getValue();
+                BigDecimal returnPercent = new BigDecimal(returnPercentStr).divide(new BigDecimal(100), 2, BigDecimal.ROUND_DOWN);
+                BigDecimal amountActual = amountBigDecimal.multiply(returnPercent).setScale(2, BigDecimal.ROUND_DOWN);
+                memberWalletService.add(amountActual, id, "balance");
+            }
+        }
+        for(MallOrderItem mallOrderItem : mallOrderItemList){
+            Long goodsId = mallOrderItem.getGoodsId();
+            MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
+            if(ObjectUtil.isEmpty(mallGoods)){
+                break;
+            }
+            //是否送券 1:是 2:否
+            BigDecimal levelTwoPrice = mallGoods.getLevelTwoPrice();
+            if(BigDecimal.ONE.compareTo(levelTwoPrice) == 0){
+                MallRollPerk mallRollPerk = new MallRollPerk();
+                mallRollPerk.setMemberId(memberId);
+                mallRollPerk.setState(1);
+                mallRollPerk.setRollId(Long.parseLong(mallGoods.getLevelThreePrice().toString()));
+                mallRollPerkMapper.insert(mallRollPerk);
+            }
+            //赠送积分
+            BigDecimal levelOnePrice = mallGoods.getLevelOnePrice();
+            if(BigDecimal.ZERO.compareTo(levelOnePrice) <= 0){
+                memberWalletService.add(levelOnePrice, memberId, "score");
+            }
+        }
+    }
+
     public static void main(String[] args) {
 
         RestTemplate restTemplate = new RestTemplate();
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
index 37289ce..01f55dc 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -829,6 +829,19 @@
         return new FebsResponse().success().data(apiMallAgentRecordVo);
     }
 
+    @Override
+    public FebsResponse findMallRollPerkInPage(ApiMallRollPerkDto queryDto) {
+        Page<MallRollPerk> page = new Page<>(queryDto.getPageNow(), queryDto.getPageSize());
+        MallRollPerk mallRollPerk = new MallRollPerk();
+        if(ObjectUtil.isNotEmpty(queryDto.getState())){
+            mallRollPerk.setState(queryDto.getState());
+        }
+        mallRollPerk.setRollId(queryDto.getRollId());
+        mallRollPerk.setMemberId(queryDto.getMemberId());
+        IPage<MallRollPerk> mallGoodsCommentVoIPage = this.baseMapper.findMallRollPerkInPage(page,mallRollPerk);
+        return new FebsResponse().success().data(mallGoodsCommentVoIPage);
+    }
+
     private  String getXcxLoginUrl(String code) {
         String wechatLoginUrl =xcxProperties.getWecharLoginUrl();
         return String.format(wechatLoginUrl, xcxProperties.getXcxAppid(), xcxProperties.getXcxSecret(), code);
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 7656e4d..bd00e59 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -322,6 +322,7 @@
 
         String payResultStr = "";
         String wxResultStr = "";
+        String amountActualMsg = "";
         switch (payOrderDto.getType()) {
             case "1":
                 BrandWCPayRequestData brandWCPayRequestData = null;
@@ -333,6 +334,7 @@
                 wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestData);
                 payResultStr = brandWCPayRequestData.getPrepay_id();
                 orderInfo.setPayMethod("微信支付");
+                amountActualMsg = orderInfo.getAmount().toString();
                 break;
             case "2":
                 payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
@@ -346,6 +348,8 @@
 
                 mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(),
                         orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
+
+                amountActualMsg = orderInfo.getAmount().toString();
                 break;
             case "3":
                 /**
@@ -396,6 +400,7 @@
                     mallMoneyFlowService.addMoneyFlow(member.getId(), amountActual.negate(), MoneyFlowTypeEnum.PAY.getValue(),
                             orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
                 }
+                amountActualMsg = amountActual.toString();
                 if(scoreActual.compareTo(BigDecimal.ZERO) > 0){
                     mallMoneyFlowService.addMoneyFlow(member.getId(), scoreActual.negate(),
                             MoneyFlowTypeEnum.SCORE_PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue(),"积分支付",2);
@@ -413,7 +418,7 @@
 
                 payResultStr = orderInfo.getOrderNo();
 
-                orderInfo.setPayOrderNo(orderInfo.getOrderNo());
+                orderInfo.setPayOrderNo(payOrderDto.getRollId().toString());
                 orderInfo.setPayMethod("兑换券支付");
                 orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                 orderInfo.setPayTime(new Date());
@@ -430,8 +435,11 @@
         String takeCode = ShareCodeUtil.toSerialCode(orderInfo.getId());
         orderInfo.setTakeCode(takeCode);
         this.baseMapper.updateById(orderInfo);
-
-
+        StringBuffer stringBuffer = new StringBuffer();
+        stringBuffer.append(orderInfo.getId().toString());
+        stringBuffer.append("@");
+        stringBuffer.append(amountActualMsg);
+        agentProducer.sendOrderGetMsg(stringBuffer.toString());
 
 //        OrderStateDto orderStateDto = new OrderStateDto();
 //        orderStateDto.setOrderNo(orderInfo.getOrderNo());
diff --git a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
index a8fd333..b72a74e 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java
@@ -16,4 +16,11 @@
     public static final String YWG_MEMBER_SUB = "queue_ywg_member_sub";
     public static final String YWG_MEMBER_SUB_SCAN = "queue_ywg_member_sub_scan";
     public static final String YWG_MEMBER_INFO = "queue_ywg_member_info";
+    /**
+     * 支付后同意验证
+     *  1:是否送券
+     *  2:是否送积分
+     *  3:是否返利
+     */
+    public static final String YWG_ORDER_GET = "queue_ywg_order_get";
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
index 6026574..bcdb7d9 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
@@ -102,4 +102,14 @@
             log.error("收到用户信息:", e);
         }
     }
+
+    @RabbitListener(queues = QueueConstants.YWG_ORDER_GET)
+    public void orderGetMsg(String str) {
+        log.info("支付后同意验证:{}", str);
+        try {
+            agentService.orderGetMsg(str);
+        } catch (Exception e) {
+            log.error("支付后同意验证:", e);
+        }
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
index a46e1a5..ce13aaa 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java
@@ -6,6 +6,7 @@
 @Getter
 public enum RabbitQueueEnum {
 
+    YWG_ORDER_GET("exchange_ywg_order_get", "route_key_ywg_order_get",QueueConstants.YWG_ORDER_GET),
     YWG_MEMBER_INFO("exchange_ywg_member_info", "route_key_ywg_member_info",QueueConstants.YWG_MEMBER_INFO),
     YWG_MEMBER_SUB_SCAN("exchange_ywg_member_sub_scan", "route_key_ywg_member_sub_scan",QueueConstants.YWG_MEMBER_SUB_SCAN),
     YWG_MEMBER_SUB("exchange_ywg_member_sub", "route_key_ywg_member_sub",QueueConstants.YWG_MEMBER_SUB),
diff --git a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
index d4832e7..1cdaf61 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producter/AgentProducer.java
@@ -89,6 +89,17 @@
 
     public void sendMemberInfoMsg(String str) {
         log.info("更新用户信息:{}", str);
+        /**
+         * String str:accessToken|openId
+         */
         rabbitTemplate.convertAndSend(RabbitQueueEnum.YWG_MEMBER_INFO.getExchange(), RabbitQueueEnum.YWG_MEMBER_INFO.getRoute(), str);
     }
+
+    public void sendOrderGetMsg(String str) {
+        log.info("支付后同意验证:{}", str);
+        /**
+         * String str : orderId@amount
+         */
+        rabbitTemplate.convertAndSend(RabbitQueueEnum.YWG_ORDER_GET.getExchange(), RabbitQueueEnum.YWG_ORDER_GET.getRoute(), str);
+    }
 }
diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml
index dd74bb6..4ae63c4 100644
--- a/src/main/resources/mapper/modules/MallMemberMapper.xml
+++ b/src/main/resources/mapper/modules/MallMemberMapper.xml
@@ -407,4 +407,13 @@
         where a.open_id = #{openId} limit 1
     </select>
 
+    <select id="findMallRollPerkInPage" resultType="cc.mrbird.febs.mall.entity.MallRollPerk">
+        select * from mall_roll_perk
+        where member_id = #{record.memberId}
+          and roll_id = #{record.rollId}
+        <if test="record.state != null and record.state != ''">
+            and state = #{record.state}
+        </if>
+    </select>
+
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1