From c2e8eee6cf751938f53d5839041d4ad2b9435ebf Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 15 Jan 2024 11:11:56 +0800
Subject: [PATCH] 修改联系人。异步更新所有用户的上下级关系

---
 src/main/java/cc/mrbird/febs/mall/service/AsyncService.java                    |   15 +++++++
 src/test/java/cc/mrbird/febs/ProfitTest.java                                   |   41 ++++++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java           |   54 +++++++++++++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java |    6 +++
 4 files changed, 115 insertions(+), 1 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/AsyncService.java b/src/main/java/cc/mrbird/febs/mall/service/AsyncService.java
new file mode 100644
index 0000000..8ca6dda
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/AsyncService.java
@@ -0,0 +1,15 @@
+package cc.mrbird.febs.mall.service;
+
+import cc.mrbird.febs.common.entity.FebsConstant;
+import cc.mrbird.febs.mall.entity.MallMember;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.scheduling.annotation.Async;
+
+/**
+ * 异步操作
+ */
+public interface AsyncService extends IService<MallMember> {
+
+    @Async(FebsConstant.ASYNC_POOL)
+    void updateAllMemberReferrerId();
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java
index 0b414a5..a1d3be2 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java
@@ -10,10 +10,12 @@
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.entity.MallNewsInfo;
 import cc.mrbird.febs.mall.mapper.*;
+import cc.mrbird.febs.mall.service.AsyncService;
 import cc.mrbird.febs.mall.service.IAdminMallMemberService;
 import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
 import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
 import cc.mrbird.febs.mall.vo.*;
+import cc.mrbird.febs.monitor.service.ILogService;
 import cc.mrbird.febs.pay.model.SinglePayDto;
 import cc.mrbird.febs.pay.service.UnipayService;
 import cn.hutool.core.collection.CollUtil;
@@ -590,6 +592,8 @@
         return this.baseMapper.selectInfoByInviteId(inviteId);
     }
 
+
+    private final AsyncService asyncService;
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void modifyReferer(MallMember member) {
@@ -616,6 +620,8 @@
             child.setReferrerIds(member.getInviteId() + "," + refererIds);
             this.baseMapper.updateById(child);
         }
+
+        asyncService.updateAllMemberReferrerId();
     }
 
     @Override
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java
new file mode 100644
index 0000000..1770c3a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AsyncServiceImpl.java
@@ -0,0 +1,54 @@
+package cc.mrbird.febs.mall.service.impl;
+
+import cc.mrbird.febs.mall.entity.MallMember;
+import cc.mrbird.febs.mall.mapper.MallMemberMapper;
+import cc.mrbird.febs.mall.service.AsyncService;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class AsyncServiceImpl extends ServiceImpl<MallMemberMapper, MallMember> implements AsyncService {
+    @Override
+    public void updateAllMemberReferrerId() {
+        log.info("异步更新用户信息");
+        List<MallMember> mallMembers = this.baseMapper.selectList(null);
+        if(CollUtil.isEmpty(mallMembers)){
+            return;
+        }
+        for(MallMember mallMember : mallMembers){
+            boolean flag = false;
+            String parentId = mallMember.getReferrerId();
+            if (StrUtil.isBlank(parentId)) {
+                flag = true;
+            }
+            String ids = "";
+            while (!flag) {
+                if (StrUtil.isBlank(ids)) {
+                    ids += parentId;
+                } else {
+                    ids += ("," + parentId);
+                }
+                MallMember parentMember = this.baseMapper.selectInfoByInviteId(parentId);
+                if (parentMember == null) {
+                    break;
+                }
+                parentId = parentMember.getReferrerId();
+                if (StrUtil.isBlank(parentMember.getReferrerId())) {
+                    flag = true;
+                }
+            }
+
+            if (StrUtil.isNotBlank(ids)) {
+                mallMember.setReferrerIds(ids);
+            }
+            this.baseMapper.updateById(mallMember);
+        }
+    }
+}
diff --git a/src/test/java/cc/mrbird/febs/ProfitTest.java b/src/test/java/cc/mrbird/febs/ProfitTest.java
index 1392c75..6b0c7ef 100644
--- a/src/test/java/cc/mrbird/febs/ProfitTest.java
+++ b/src/test/java/cc/mrbird/febs/ProfitTest.java
@@ -2,7 +2,9 @@
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.utils.MallUtils;
+import cc.mrbird.febs.mall.entity.MallMember;
 import cc.mrbird.febs.mall.entity.MallOrderItem;
+import cc.mrbird.febs.mall.mapper.MallMemberMapper;
 import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
 import cc.mrbird.febs.mall.mapper.MallOrderItemMapper;
 import cc.mrbird.febs.mall.quartz.OrderSettlementJob;
@@ -13,7 +15,9 @@
 import cc.mrbird.febs.pay.model.*;
 import cc.mrbird.febs.pay.service.UnipayService;
 import cc.mrbird.febs.rabbit.consumer.AgentConsumer;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -37,6 +41,8 @@
 //
     @Autowired
     private IAgentService agentService;
+    @Autowired
+    private MallMemberMapper mallMemberMapper;
 //
 //    @Autowired
 //    private IMemberProfitService memberProfitService;
@@ -47,8 +53,41 @@
     private IApiMallMemberWalletService walletService;
     @Test
     public void dynamicProfit() {
+        List<MallMember> mallMembers = mallMemberMapper.selectList(null);
+        if(CollUtil.isEmpty(mallMembers)){
+            return;
+        }
+        for(MallMember mallMember : mallMembers){
+            boolean flag = false;
+            String parentId = mallMember.getReferrerId();
+            if (StrUtil.isBlank(parentId)) {
+                flag = true;
+            }
+            String ids = "";
+            while (!flag) {
+                if (StrUtil.isBlank(ids)) {
+                    ids += parentId;
+                } else {
+                    ids += ("," + parentId);
+                }
+                MallMember parentMember = mallMemberMapper.selectInfoByInviteId(parentId);
+                if (parentMember == null) {
+                    break;
+                }
+                parentId = parentMember.getReferrerId();
+                if (StrUtil.isBlank(parentMember.getReferrerId())) {
+                    flag = true;
+                }
+            }
 
-        walletService.add(new BigDecimal(2000), 1L, "equityLimit");//减少权益积分
+            if (StrUtil.isNotBlank(ids)) {
+                mallMember.setReferrerIds(ids);
+            }
+            mallMemberMapper.updateById(mallMember);
+        }
+
+
+//        walletService.add(new BigDecimal(2000), 1L, "equityLimit");//减少权益积分
 //        agentService.returnMoneyToAgent(3323L);
 //        agentService.autoUpAgentLevel(640L);
     }

--
Gitblit v1.9.1