xiaoyong931011
2023-03-20 00bae666d8f117abe0e8f8613df428d236c92cef
后台修改
3 files added
7 files modified
126 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/entity/MallMqRecord.java 20 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallMqRecordMapper.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java 9 ●●●●● 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/AgentServiceImpl.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java 28 ●●●●● patch | view | raw | blame | history
src/main/resources/application-dev.yml 6 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallMqRecordMapper.xml 22 ●●●●● patch | view | raw | blame | history
src/test/java/cc/mrbird/febs/ProfitTest.java 9 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallMqRecord.java
New file
@@ -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;
}
src/main/java/cc/mrbird/febs/mall/mapper/MallMqRecordMapper.java
New file
@@ -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);
}
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();
    }
    /**
     * 静态分红
src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
@@ -47,4 +47,6 @@
    void offLinePerkJob(Date profitDate);
    void teamEqualsPerkJob(Date profitDate);
    void mqPerkRetryJob();
}
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);
        }
    }
    /**
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());
                //发送代理自动升级消息
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);
        }
    }
}
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:
src/main/resources/mapper/modules/MallMqRecordMapper.xml
New file
@@ -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>
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(), ',');