From 022a7ff7abf82cd2546e18071ade5228b4e2339f Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 08 七月 2024 14:07:49 +0800
Subject: [PATCH] 管理后台营销员列表职级展示问题修改

---
 meiya-admin/src/main/java/com/sinata/modular/member/dao/mapping/MemUserMapper.xml                |    4 
 meiya-admin/src/main/java/com/sinata/modular/member/service/IMemUserRelationService.java         |    2 
 meiya-admin/src/main/java/com/sinata/modular/member/controller/MemUserSalesController.java       |  119 +++++++++++++++++------
 meiya-rest/src/main/resources/cert/scs1716859795712_m.mymtmy.com_server.pfx                      |    0 
 meiya-admin/src/main/java/com/sinata/modular/member/service/impl/MemUserRelationServiceImpl.java |  116 +++++++++++++++++++----
 5 files changed, 186 insertions(+), 55 deletions(-)

diff --git a/meiya-admin/src/main/java/com/sinata/modular/member/controller/MemUserSalesController.java b/meiya-admin/src/main/java/com/sinata/modular/member/controller/MemUserSalesController.java
index fe11369..346bfdd 100644
--- a/meiya-admin/src/main/java/com/sinata/modular/member/controller/MemUserSalesController.java
+++ b/meiya-admin/src/main/java/com/sinata/modular/member/controller/MemUserSalesController.java
@@ -3,14 +3,16 @@
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.poi.excel.ExcelReader;
-import cn.hutool.poi.excel.ExcelUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.enums.SqlLike;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
-import com.sinata.common.enums.*;
+import com.sinata.common.enums.EnumAuditState;
+import com.sinata.common.enums.EnumCityRole;
+import com.sinata.common.enums.EnumIsDelete;
+import com.sinata.common.enums.EnumIsSystemNotice;
+import com.sinata.common.enums.EnumMemberGrade;
 import com.sinata.common.enums.mall.EnumMallGoodsGroupType;
 import com.sinata.common.enums.mall.EnumMallOrderState;
 import com.sinata.core.base.controller.BaseController;
@@ -19,8 +21,6 @@
 import com.sinata.core.common.annotion.BussinessLog;
 import com.sinata.core.common.annotion.Permission;
 import com.sinata.core.common.constant.factory.PageFactory;
-import com.sinata.core.common.exception.BizExceptionEnum;
-import com.sinata.core.exception.GunsException;
 import com.sinata.core.shiro.ShiroKit;
 import com.sinata.core.shiro.ShiroUser;
 import com.sinata.core.util.Convert;
@@ -40,10 +40,16 @@
 import com.sinata.modular.system.service.ISystemNoticeService;
 import com.sinata.modular.system.service.ITCityRegionService;
 import java.io.IOException;
-import java.net.URLEncoder;
-import javax.servlet.ServletOutputStream;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -52,11 +58,6 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.servlet.http.HttpServletResponse;
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
 import org.springframework.web.multipart.MultipartFile;
 
 /**
@@ -201,15 +202,20 @@
 
         List<MemUser> v4UserList = memUserService.getUserListByGrade(EnumMemberGrade.G_4.index);
         List<MemUser> v5UserList = memUserService.getUserListByGrade(EnumMemberGrade.G_5.index);
-
+        List<MemUserRelation> userRelationList = memUserRelationService.selectList(null);
+        Map<Integer, Integer> userRelationMap = userRelationList.stream().collect(Collectors
+                .toMap(u -> u.getId(), p -> p.getParentId()));
         // 封装数据
-        for (Map<String, Object> map : list) {
-            map.put("cityCode",
-                    cityRegionService.getProvinceCityCountyNameByAll(cityAll, Convert.toStr(map.get("agent_county_code"))).stream()
+       /* for (Map<String, Object> map : list) {
+             map.put("cityCode",
+                    cityRegionService.getProvinceCityCountyNameByAll(cityAll,
+                                    Convert.toStr(map.get("agent_county_code"))).stream()
                             .map(TCityRegion::getName)
                             .collect(Collectors.joining("-"))
             );
-            map.put("audit_time", DateUtil.format(DateUtil.parse(Convert.toStr(map.get("audit_time"))), "yyyy-MM-dd"));
+            map.put("audit_time",
+                    DateUtil.format(DateUtil.parse(Convert.toStr(map.get("audit_time"))),
+                            "yyyy-MM-dd"));
 
 //            // 权益人信息
 //            MemUser equityUser = equityUserUserList.stream().filter(o -> {
@@ -241,27 +247,30 @@
             }).findFirst().orElse(new MemUser());
             map.put("equityUserShowId", parentUser.getShowId());
             map.put("equityUserRealName", parentUser.getRealName());
-            map.put("equityUserCityCode", cityRegionService.getProvinceCityCountyNameByAll(cityAll, parentUser.getCityCode()).stream()
+            map.put("equityUserCityCode", cityRegionService.getProvinceCityCountyNameByAll(cityAll,
+                            parentUser.getCityCode()).stream()
                     .map(TCityRegion::getName)
                     .collect(Collectors.joining("-")));
 
             // 用户等级
-            Integer userMemberGradeId = map.get("member_grade_id") == null ? null : (Integer) map.get("member_grade_id");
+            Integer userMemberGradeId = map.get("member_grade_id") == null ? null
+                    : (Integer) map.get("member_grade_id");
             // 查询上级城市合伙人、市场总监信息
-            MemUser[] parentV4V5User = memUserRelationService.getParentV4V5ByRelationPath2(
+          MemUser[] parentV4V5User = memUserRelationService.getParentV4V5ByRelationPath2(
                     map.get("relation_path") == null ? null : map.get("relation_path").toString(),
                     userMemberGradeId
             );
-                if (parentV4V5User[0] != null) {
-                map.put("v4ShowId", parentV4V5User[0].getShowId());
-                map.put("v4Team", parentV4V5User[0].getRealName());
-            }
-            if (parentV4V5User[1] != null) {
-                map.put("v5ShowId", parentV4V5User[1].getShowId());
-                map.put("v5Team", parentV4V5User[1].getRealName());
-            }
 
-            // 本人是城市合伙人或市场总监时,城市合伙人工号/团队、市场总监工号/团队,显示本人的信息
+        if (parentV4V5User[0] != null) {
+            map.put("v4ShowId", parentV4V5User[0].getShowId());
+            map.put("v4Team", parentV4V5User[0].getRealName());
+        }
+        if (parentV4V5User[1] != null) {
+            map.put("v5ShowId", parentV4V5User[1].getShowId());
+            map.put("v5Team", parentV4V5User[1].getRealName());
+        }
+
+        // 本人是城市合伙人或市场总监时,城市合伙人工号/团队、市场总监工号/团队,显示本人的信息
             if (userMemberGradeId == EnumMemberGrade.G_4.index) {
                 map.put("v4ShowId", map.get("show_id"));
                 map.put("v4Team", map.get("real_name"));
@@ -273,8 +282,54 @@
                 map.put("v5ShowId", map.get("show_id"));
                 map.put("v5Team", map.get("real_name"));
             }
-        }
-        return list;
+        }*/
+        List<Map<String, Object>> result = list.stream().peek(map -> {
+            map.put("cityCode",
+                    cityRegionService.getProvinceCityCountyNameByAll(cityAll,
+                                    Convert.toStr(map.get("agent_county_code"))).stream()
+                            .map(TCityRegion::getName)
+                            .collect(Collectors.joining("-"))
+            );
+            map.put("audit_time",
+                    DateUtil.format(DateUtil.parse(Convert.toStr(map.get("audit_time"))),
+                            "yyyy-MM-dd"));
+            // 推荐人信息
+            Integer[] parentUserId = new Integer[]{0};
+            for (MemUserRelation ur : parentUserRelationList) {
+                if (ur.getId().equals(Convert.toInt(map.get("id")))) {
+                    parentUserId[0] = ur.getParentId();
+                    break;
+                }
+            }
+            MemUser parentUser = parentUserList.stream().filter(o -> {
+                if (o.getId().equals(parentUserId[0])) {
+                    return true;
+                }
+                return false;
+            }).findFirst().orElse(new MemUser());
+            map.put("equityUserShowId", parentUser.getShowId());
+            map.put("equityUserRealName", parentUser.getRealName());
+            map.put("equityUserCityCode", cityRegionService.getProvinceCityCountyNameByAll(cityAll,
+                            parentUser.getCityCode()).stream()
+                    .map(TCityRegion::getName)
+                    .collect(Collectors.joining("-")));
+
+            // 用户等级
+            Integer userMemberGradeId = map.get("member_grade_id") == null ? null
+                    : (Integer) map.get("member_grade_id");
+            // 查询上级城市合伙人、市场总监信息
+            MemUser[] parentV4V5User = memUserRelationService.getParentV4V5ByRelationPath3(
+                    Integer.valueOf(map.get("id").toString()), userRelationMap);
+            if (parentV4V5User[0] != null) {
+                map.put("v4ShowId", parentV4V5User[0].getShowId());
+                map.put("v4Team", parentV4V5User[0].getRealName());
+            }
+            if (parentV4V5User[1] != null) {
+                map.put("v5ShowId", parentV4V5User[1].getShowId());
+                map.put("v5Team", parentV4V5User[1].getRealName());
+            }
+        }).collect(Collectors.toList());
+        return result;
     }
 
     /**
diff --git a/meiya-admin/src/main/java/com/sinata/modular/member/dao/mapping/MemUserMapper.xml b/meiya-admin/src/main/java/com/sinata/modular/member/dao/mapping/MemUserMapper.xml
index ab1eb16..e277d7e 100644
--- a/meiya-admin/src/main/java/com/sinata/modular/member/dao/mapping/MemUserMapper.xml
+++ b/meiya-admin/src/main/java/com/sinata/modular/member/dao/mapping/MemUserMapper.xml
@@ -55,7 +55,7 @@
     <select id="getMapList" resultType="java.util.Map">
         SELECT
             o.*,
-            ur.relation_path
+            ur.relation_path,ur.parent_id
         FROM
             mem_user o
                 LEFT JOIN mem_user_relation ur ON ur.id = o.id
@@ -67,7 +67,7 @@
     <select id="getMapListAuth" resultType="java.util.Map">
         SELECT
             o.*,
-            ur.relation_path
+            ur.relation_path,ur.parent_id
         FROM
             mem_user o
                 LEFT JOIN mem_user_relation ur ON ur.id = o.id
diff --git a/meiya-admin/src/main/java/com/sinata/modular/member/service/IMemUserRelationService.java b/meiya-admin/src/main/java/com/sinata/modular/member/service/IMemUserRelationService.java
index de90cec..facab9e 100644
--- a/meiya-admin/src/main/java/com/sinata/modular/member/service/IMemUserRelationService.java
+++ b/meiya-admin/src/main/java/com/sinata/modular/member/service/IMemUserRelationService.java
@@ -54,4 +54,6 @@
 
     MemUser[] getParentV4V5ByRelationPath(List<MemUser> v4UserList, List<MemUser> v5UserList, String relationPath, Integer memberGradeId);
     MemUser[] getParentV4V5ByRelationPath2(String relationPath, Integer memberGradeId);
+
+    MemUser[] getParentV4V5ByRelationPath3(Integer id,Map<Integer, Integer> userRelationMap);
 }
diff --git a/meiya-admin/src/main/java/com/sinata/modular/member/service/impl/MemUserRelationServiceImpl.java b/meiya-admin/src/main/java/com/sinata/modular/member/service/impl/MemUserRelationServiceImpl.java
index 68ad142..b18fa11 100644
--- a/meiya-admin/src/main/java/com/sinata/modular/member/service/impl/MemUserRelationServiceImpl.java
+++ b/meiya-admin/src/main/java/com/sinata/modular/member/service/impl/MemUserRelationServiceImpl.java
@@ -4,19 +4,21 @@
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.sinata.common.enums.EnumMemberGrade;
 import com.sinata.modular.member.dao.MemUserRelationMapper;
 import com.sinata.modular.member.model.MemUser;
 import com.sinata.modular.member.model.MemUserRelation;
 import com.sinata.modular.member.service.IMemUserRelationService;
 import com.sinata.modular.member.service.IMemUserService;
-import org.apache.commons.collections.CollectionUtils;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
 import java.util.stream.Collectors;
+import javax.annotation.Resource;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.stereotype.Service;
 
 /**
  * <p>
@@ -158,31 +160,103 @@
         }
         return array;
     }
-    private void findParents(MemUser user, String[] pathArray, MemUser[] array) {
-        if (user != null) {
-            Integer memberGradeId = user.getMemberGradeId();
+
+    private void findParents(MemUser parent, String[] pathArray, MemUser[] array) {
+        if (parent != null) {
+            List<MemUser> memUserList = memUserService.selectList(null);
+            Integer memberGradeId = parent.getMemberGradeId();
             if (memberGradeId == EnumMemberGrade.G_3.index) {
                 String grandParentId = pathArray[pathArray.length - 3];
                 MemUser grandParent = memUserService.selectById(grandParentId);
-                if (grandParent != null && grandParent.getMemberGradeId() == EnumMemberGrade.G_4.index) {
-                    array[0] = grandParent;
-                    String greatGrandParentId = pathArray[pathArray.length - 3];
-                    MemUser greatGrandParent = memUserService.selectById(greatGrandParentId);
-                    if (greatGrandParent != null && greatGrandParent.getMemberGradeId() == EnumMemberGrade.G_5.index) {
-                        array[1] = greatGrandParent;
-                    }
-                }
+                memUserList.stream().filter(u -> u.getId().equals(Integer.valueOf(grandParentId)))
+                        .findFirst().ifPresent(p -> {
+                            if (grandParent.getMemberGradeId() == EnumMemberGrade.G_4.index) {
+                                array[0] = grandParent;
+                                String greatGrandParentId = pathArray[pathArray.length - 3];
+                                MemUser greatGrandParent = memUserService.selectById(greatGrandParentId);
+                                if (greatGrandParent != null && greatGrandParent.getMemberGradeId()
+                                        == EnumMemberGrade.G_5.index) {
+                                    array[1] = greatGrandParent;
+                                }
+                            }
+                        });
+
             } else if (memberGradeId == EnumMemberGrade.G_4.index) {
-                array[0] = user;
+                array[0] = parent;
                 String parentId = pathArray[pathArray.length - 3];
-                MemUser parent = memUserService.selectById(parentId);
-                if (parent != null && parent.getMemberGradeId() == EnumMemberGrade.G_5.index) {
-                    array[1] = parent;
+                MemUser grandParent = memUserService.selectById(parentId);
+                if (grandParent != null
+                        && grandParent.getMemberGradeId() == EnumMemberGrade.G_5.index) {
+                    array[1] = grandParent;
                 }
             } else if (memberGradeId == EnumMemberGrade.G_5.index) {
-                array[0] = user;
-                array[1] = user;
+                array[0] = parent;
+                array[1] = parent;
             }
         }
     }
+
+    @Override
+    public MemUser[] getParentV4V5ByRelationPath3(Integer id,
+            Map<Integer, Integer> userRelationMap) {
+        MemUser[] array = new MemUser[]{null, null};
+        MemUser memUser = memUserService.selectById(id);
+        List<MemUser> userList = memUserService.selectList(new EntityWrapper<MemUser>()
+                .setSqlSelect("id, show_id, nick_name, real_name, member_grade_id")
+                .in("member_grade_id",
+                        Lists.newArrayList(EnumMemberGrade.G_3.index, EnumMemberGrade.G_4.index,
+                                EnumMemberGrade.G_5.index)));
+        Map<Integer, MemUser> userMap = userList.stream()
+                .collect(Collectors.toMap(u -> u.getId(), Function.identity()));
+        Integer parentId = userRelationMap.get(id);
+        if (memUser.getMemberGradeId() == EnumMemberGrade.G_5.index) {
+            array[0] = memUser;
+            array[1] = memUser;
+        }
+        MemUser memUserG5 = getUserByParentId(parentId, EnumMemberGrade.G_5.index, userMap,
+                userRelationMap);
+        if (memUser.getMemberGradeId() == EnumMemberGrade.G_4.index) {
+            array[0] = memUser;
+            array[1] = memUserG5;
+        }
+        if (memUser.getMemberGradeId() == EnumMemberGrade.G_3.index) {
+            MemUser memUserG4 = getUserByParentId(parentId, EnumMemberGrade.G_4.index, userMap,
+                    userRelationMap);
+            if (Objects.isNull(memUserG4)) {
+                array[0] = memUserG5;
+                array[1] = memUserG5;
+            } else {
+                array[0] = memUserG4;
+                array[1] = memUserG5;
+            }
+        }
+        return array;
+    }
+
+    /**
+     * @param parentId        父id
+     * @param level           需要获取职级
+     * @param userMap         用户列表
+     * @param userRelationMap 用户关系列表
+     * @return
+     */
+    private MemUser getUserByParentId(Integer parentId, Integer level,
+            Map<Integer, MemUser> userMap,
+            Map<Integer, Integer> userRelationMap) {
+        MemUser memUser = userMap.get(parentId);
+        if (memUser == null) {
+            return null;
+        }
+        if (memUser.getMemberGradeId().equals(level)) {
+            return memUser;
+        }
+
+        Integer nextParentId = userRelationMap.get(memUser.getId());
+        if (nextParentId == null || nextParentId.equals(parentId)) {
+            return null;  // 如果 nextParentId 是 null 或导致循环,返回 null 终止递归
+        }
+
+        return getUserByParentId(nextParentId, level, userMap, userRelationMap);
+    }
+
 }
diff --git a/meiya-rest/src/main/resources/cert/scs1716859795712_m.mymtmy.com_server.pfx b/meiya-rest/src/main/resources/cert/scs1716859795712_m.mymtmy.com_server.pfx
new file mode 100644
index 0000000..d3d3bd1
--- /dev/null
+++ b/meiya-rest/src/main/resources/cert/scs1716859795712_m.mymtmy.com_server.pfx
Binary files differ

--
Gitblit v1.7.1