From 00bae666d8f117abe0e8f8613df428d236c92cef Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Mon, 20 Mar 2023 17:36:30 +0800
Subject: [PATCH] 后台修改

---
 src/main/java/cc/mrbird/febs/mall/entity/MallMqRecord.java                      |   20 ++++++
 src/main/resources/mapper/modules/MallMqRecordMapper.xml                        |   22 +++++++
 src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java            |    6 ++
 src/test/java/cc/mrbird/febs/ProfitTest.java                                    |    9 ++
 src/main/java/cc/mrbird/febs/mall/mapper/MallMqRecordMapper.java                |   14 ++++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |   10 +++
 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java     |   28 +++++++++
 src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java                         |    9 +++
 src/main/resources/application-dev.yml                                          |    6 +-
 src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java             |    2 
 10 files changed, 121 insertions(+), 5 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMqRecord.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMqRecord.java
new file mode 100644
index 0000000..f8255a7
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMqRecord.java
@@ -0,0 +1,20 @@
+package cc.mrbird.febs.mall.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("mall_mq_record")
+public class MallMqRecord {
+
+    private Long id;
+
+    private Long orderId;
+    /**
+     * 1:已处理 2:未处理
+     */
+    private Integer state;
+
+    private Integer retryTimes;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMqRecordMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMqRecordMapper.java
new file mode 100644
index 0000000..5a3ca69
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMqRecordMapper.java
@@ -0,0 +1,14 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.MallMqRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface MallMqRecordMapper extends BaseMapper<MallMqRecord> {
+
+    MallMqRecord selectByOrderId(@Param("orderId")long orderId);
+
+    List<MallMqRecord> selectByStateLimitTen(@Param("state")int i);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
index 4beac7f..63db4b2 100644
--- a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -82,6 +82,15 @@
         memberProfitService.teamEqualsPerkJob(null);
     }
 
+    /**
+     * 补贴消息--重试
+     *  一个小时运行一次
+     */
+    @Scheduled(cron = "0 0 * * * ?")
+    public void mqPerkRetryJob() {
+        memberProfitService.mqPerkRetryJob();
+    }
+
 
     /**
      * 静态分红
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java b/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
index 0512651..4d3e914 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
@@ -47,4 +47,6 @@
     void offLinePerkJob(Date profitDate);
 
     void teamEqualsPerkJob(Date profitDate);
+
+    void mqPerkRetryJob();
 }
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 9f34350..ff9da3d 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
@@ -47,6 +47,7 @@
     private final SqlSessionTemplate sqlSessionTemplate;
     private final IApiMallMemberWalletService memberWalletService;
     private final MallMoneyFlowMapper mallMoneyFlowMapper;
+    private final MallMqRecordMapper mallMqRecordMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -269,6 +270,11 @@
 
         long end = System.currentTimeMillis();
         log.info("============订单:{},时间:{}===========",mallOrderInfo.getOrderNo(),(end - start)/1000);
+        MallMqRecord mallMqRecord = mallMqRecordMapper.selectByOrderId(orderId);
+        if(ObjectUtil.isNotEmpty(mallMqRecord)){
+            mallMqRecord.setState(1);
+            mallMqRecordMapper.updateById(mallMqRecord);
+        }
     }
 
     /**
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 658d9fd..11f0189 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
@@ -78,6 +78,7 @@
     private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
     private final MallAchieveRecordMapper mallAchieveRecordMapper;
     private final MallMemberWalletMapper mallMemberWalletMapper;
+    private final MallMqRecordMapper mallMqRecordMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -343,6 +344,15 @@
                 orderInfo.setPayResult("1");
 
                 changeWallet(orderInfo.getId());
+                /**
+                 * 插入一条待处理记录
+                 * mq处理之后,更新状态
+                 */
+                MallMqRecord mallMqRecord = new MallMqRecord();
+                mallMqRecord.setOrderId(orderInfo.getId());
+                mallMqRecord.setState(2);
+                mallMqRecord.setRetryTimes(2);
+                mallMqRecordMapper.insert(mallMqRecord);
                 //发送补贴消息
                 agentProducer.sendPerkMoneyMsg(orderInfo.getId());
                 //发送代理自动升级消息
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
index d032da7..810a8b8 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -12,6 +12,7 @@
 import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.mall.service.*;
 import cc.mrbird.febs.mall.vo.AdminTeamEqualsPerkVo;
+import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
@@ -56,6 +57,8 @@
     private final MallMemberWalletMapper mallMemberWalletMapper;
     private final IAgentService iAgentService;
     private final IMallMoneyFlowService mallMoneyFlowService;
+    private final MallMqRecordMapper mallMqRecordMapper;
+    private final AgentProducer agentProducer;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -757,4 +760,29 @@
         }
     }
 
+
+    @Override
+    public void mqPerkRetryJob() {
+        /**
+         * 每次拿重试次数大于零
+         * 按ID asc排序的十条数据
+         */
+        List<MallMqRecord> mallMqRecords = mallMqRecordMapper.selectByStateLimitTen(2);
+        if(CollUtil.isEmpty(mallMqRecords)){
+            return;
+        }
+        for(MallMqRecord mallMqRecord : mallMqRecords){
+            Integer retryTimes = mallMqRecord.getRetryTimes();
+            if(retryTimes <= 0){
+                continue;
+            }
+            retryTimes = retryTimes - 1;
+            mallMqRecord.setRetryTimes(retryTimes);
+            mallMqRecordMapper.updateById(mallMqRecord);
+
+            Long orderId = mallMqRecord.getOrderId();
+            agentProducer.sendPerkMoneyMsg(orderId);
+        }
+    }
+
 }
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index ebd771f..2d0cf1a 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -46,10 +46,10 @@
     # 连接超时时间(毫秒)
     timeout: 5000
   rabbitmq:
-    host: 121.37.162.173
+    host: 47.111.90.145
     port: 5672
-    username: hibit
-    password: hibit123
+    username: zj_mall
+    password: zj_mall123
     publisher-confirm-type: correlated
 
 pay:
diff --git a/src/main/resources/mapper/modules/MallMqRecordMapper.xml b/src/main/resources/mapper/modules/MallMqRecordMapper.xml
new file mode 100644
index 0000000..5f928f9
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallMqRecordMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cc.mrbird.febs.mall.mapper.MallMqRecordMapper">
+
+    <select id="selectByOrderId" resultType="cc.mrbird.febs.mall.entity.MallMqRecord">
+        select a.* from mall_mq_record a where a.order_id = #{orderId}
+    </select>
+
+    <select id="selectByStateLimitTen" resultType="cc.mrbird.febs.mall.entity.MallMqRecord">
+        select
+               a.*
+        from
+             mall_mq_record a
+        where
+              a.state = #{state}
+            and a.retry_times > 0
+        order by a.id asc
+        limit 10
+
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/test/java/cc/mrbird/febs/ProfitTest.java b/src/test/java/cc/mrbird/febs/ProfitTest.java
index 35ecd41..acac296 100644
--- a/src/test/java/cc/mrbird/febs/ProfitTest.java
+++ b/src/test/java/cc/mrbird/febs/ProfitTest.java
@@ -15,6 +15,7 @@
 import cc.mrbird.febs.pay.model.*;
 import cc.mrbird.febs.pay.service.UnipayService;
 import cc.mrbird.febs.rabbit.consumer.AgentConsumer;
+import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
@@ -49,10 +50,14 @@
     @Autowired
     private MallMemberMapper memberMapper;
 
+    @Autowired
+    private AgentProducer agentProducer;
+
     @Test
     public void dynamicProfit() {
-        agentService.perkMoneyConsumer(665L);
-        memberProfitService.teamEqualsPerkJob(null);
+        agentProducer.sendPerkMoneyMsg(679L);
+//        agentService.perkMoneyConsumer(665L);
+//        memberProfitService.teamEqualsPerkJob(null);
 //        List<MallMember> mallMemberTeamPerk = new ArrayList<>();
 //        MallMember mallMember = memberMapper.selectById(233L);
 //        List<String> ids = StrUtil.split(mallMember.getReferrerIds(), ',');

--
Gitblit v1.9.1