Эх сурвалжийг харах

系统树增加展示权限

haoyu 2 жил өмнө
parent
commit
8a64c18056

+ 10 - 0
sql/Online.sql

@@ -0,0 +1,10 @@
+--  add by hy   2024-04-27 添加 用户系统树权限关联表
+DROP TABLE IF EXISTS `sys_user_tree_showlevel`;
+CREATE TABLE `sys_user_tree_showlevel`  (
+                                            `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+                                            `user_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+                                            `show_level` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+                                            `create_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+                                            `create_time` datetime(0) NULL DEFAULT NULL,
+                                            PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

+ 38 - 0
src/main/java/com/ydtech/constants/enums/dict/TreeShowLevelEnum.java

@@ -0,0 +1,38 @@
+package com.ydtech.constants.enums.dict;
+
+
+import com.ydtech.aop.request.DictEnum;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+@DictEnum(key = "treeShowLevelEnum", desc = "系统树展示等级")
+public enum TreeShowLevelEnum implements IBaseEnum{
+
+    ALL("all","全部",1,1),
+
+    SAME("same","本级",2,1),
+
+    SUBORDINATE("subordinate","本级及以下",3,1);
+
+    // 编号
+    private final String code;
+    //说明
+    private final String desc;
+    // 排序
+    private final Integer sort;
+    // 状态  0 启用  1 不启用
+    private final Integer status;
+
+    public static TreeShowLevelEnum getTreeShowLevelEnum(String code) {
+        for (TreeShowLevelEnum treeShowLevelEnum : TreeShowLevelEnum.values()) {
+            if (treeShowLevelEnum.getCode().equals(code)) {
+                return treeShowLevelEnum;
+            }
+        }
+        return null;
+    }
+
+
+}

+ 15 - 2
src/main/java/com/ydtech/modules/admin/controller/SysUserController.java

@@ -17,6 +17,7 @@ import com.ydtech.modules.admin.model.dto.AgentUserDto;
 import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
 import com.ydtech.modules.admin.model.dto.QuUserNumDto;
 import com.ydtech.modules.admin.model.dto.SysUserDto;
+import com.ydtech.modules.admin.model.po.SysUserTreeShowLevel;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.*;
 import com.ydtech.modules.base.controller.BaseController;
@@ -70,6 +71,8 @@ public class SysUserController extends BaseController {
 
     private final SysUserInfoService sysUserInfoService;
 
+    private final SysUserTreeShowLevelService sysUserTreeShowLevelService;
+
     private final EsmUserReferrerService esmUserReferrerService;
 
     private final SysRoleService sysRoleService;
@@ -145,15 +148,25 @@ public class SysUserController extends BaseController {
      */
     @PostMapping(value = "/saveUserRole")
     @Transactional
-    public HttpResult saveUserRole(@RequestParam String userId, @RequestParam String roleId) {
+    public HttpResult saveUserRole(@RequestParam String userId, @RequestParam String roleId, @RequestParam String showLevel) {
         SysUserRole userRole = new SysUserRole();
         sysUserRoleService.deleteByUserId(userId);
+        String userName = getUserName();
         userRole = new SysUserRole();
         userRole.setUserId(userId);
         userRole.setRoleId(Long.parseLong(roleId));
-        userRole.setCreateBy(getUserName());
+        userRole.setCreateBy(userName);
         userRole.setCreateTime(new Date());
         sysUserRoleService.save(userRole);
+        if (!"".equals(showLevel)) {
+            sysUserTreeShowLevelService.remove(new LambdaQueryWrapper<SysUserTreeShowLevel>().eq(SysUserTreeShowLevel::getUserId, userId));
+            SysUserTreeShowLevel sysUserTreeShowLevel = new SysUserTreeShowLevel();
+            sysUserTreeShowLevel.setUserId(userId);
+            sysUserTreeShowLevel.setShowLevel(showLevel);
+            sysUserTreeShowLevel.setCreateName(userName);
+            sysUserTreeShowLevel.setCreateTime(new Date());
+            sysUserTreeShowLevelService.save(sysUserTreeShowLevel);
+        }
         return HttpResult.ok();
     }
 

+ 9 - 0
src/main/java/com/ydtech/modules/admin/dao/SysUserTreeShowLevelMapper.java

@@ -0,0 +1,9 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.po.SysUserTreeShowLevel;
+
+public interface SysUserTreeShowLevelMapper extends BaseMapper<SysUserTreeShowLevel> {
+
+
+}

+ 3 - 0
src/main/java/com/ydtech/modules/admin/model/SysUser.java

@@ -166,6 +166,9 @@ public class SysUser extends BaseEntity {
     @Excel(name = "推荐人名称")
     private String referrerName;
 
+    @TableField(exist = false)
+    @Excel(name = "树权限等级")
+    private String showLevel;
 
     @TableField(exist = false)
     @ApiModelProperty("机构来源")

+ 53 - 0
src/main/java/com/ydtech/modules/admin/model/po/SysUserTreeShowLevel.java

@@ -0,0 +1,53 @@
+package com.ydtech.modules.admin.model.po;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.joda.time.DateTime;
+import org.joda.time.LocalDateTime;
+
+import java.util.Date;
+
+/**
+ * 用户展示树等级
+ * @TableName sys_user_tree_showlevel
+ */
+@TableName(value ="sys_user_tree_showlevel")
+@Data
+public class SysUserTreeShowLevel {
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id")
+    private String id;
+
+    /**
+     * 用户ID
+     */
+    @TableField(value = "user_id")
+    private String userId;
+
+    /**
+     * 查看等级
+     */
+    @TableField(value = "show_level")
+    private String showLevel;
+
+    /***
+     * 创建人名称
+     */
+    @TableField(value = "create_name")
+    private String createName;
+
+    /***
+     * 创建时间
+     */
+    @JsonFormat( pattern = "yyyy-MM-dd")
+    @TableField(value = "create_time")
+    private Date createTime;
+
+}

+ 8 - 0
src/main/java/com/ydtech/modules/admin/service/SysUserTreeShowLevelService.java

@@ -0,0 +1,8 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.po.SysUserTreeShowLevel;
+
+public interface SysUserTreeShowLevelService extends IService<SysUserTreeShowLevel> {
+
+}

+ 64 - 3
src/main/java/com/ydtech/modules/admin/service/impl/SysDeptServiceImpl.java

@@ -13,10 +13,14 @@ import com.ydtech.modules.admin.dao.SysAreaMapper;
 import com.ydtech.modules.admin.dao.SysDeptMapper;
 import com.ydtech.modules.admin.model.SysArea;
 import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.model.po.SysUserTreeShowLevel;
 import com.ydtech.modules.admin.model.vo.SysDeptVo;
 import com.ydtech.modules.admin.model.vo.TreeSysDeptVO;
 import com.ydtech.modules.admin.service.SysAreaService;
 import com.ydtech.modules.admin.service.SysDeptService;
+import com.ydtech.modules.admin.service.SysUserTreeShowLevelService;
+import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.utils.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -45,12 +49,54 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
     @Autowired
     private SysAreaMapper sysAreaMapper;
 
+    @Autowired
+    private SysUserTreeShowLevelService sysUserTreeShowLevelService;
+
+
+
+    /**
+     * 根据用户权限和指定部门ID,查询并构建部门树。
+     *
+     * @param deptId 部门ID,用于查询特定部门及其子部门,如果为空或特定值,则查询用户所在部门及其子部门。
+     * @param managementSource 管理范围来源标识,用于不同场景下的部门树构建。
+     * @return 返回符合用户权限和管理范围的部门树列表。
+     */
     @Override
-    public List<SysDept> findTree(String deptId,String managementSource) {
-        if(null == deptId || "".equals(deptId) || "undefined".equals(deptId)){
-            deptId = "9";
+    public List<SysDept> findTree(String deptId, String managementSource) {
+        // 获取当前操作用
+        SysUser user = BaseController.getUser();
+        String userId = user.getId();
+
+        // 根据用户ID查询用户的部门树展示级别
+        LambdaQueryWrapper<SysUserTreeShowLevel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(SysUserTreeShowLevel::getUserId, userId);
+        SysUserTreeShowLevel treeShowLevel = sysUserTreeShowLevelService.getOne(lambdaQueryWrapper);
+
+        List<SysDept> treeByShowLevel;
+        // 如果指定的部门ID为空或特定值,则使用当前用户所在部门ID
+        if (null == deptId || "".equals(deptId) || "undefined".equals(deptId)) {
+            deptId = user.getDeptId();
+        }
+
+        // 根据用户的部门树展示级别查询相应的部门树
+        switch (treeShowLevel.getShowLevel()) {
+            case "all":
+                treeByShowLevel = findTreeByShowLevel("9", managementSource, "all");
+                break;
+            case "same":
+                treeByShowLevel = findTreeByShowLevel(deptId, managementSource, "same");
+                break;
+            case "subordinate":
+                treeByShowLevel = findTreeByShowLevel(deptId, managementSource, "subordinate");
+                break;
+            default:
+                treeByShowLevel = findTreeByShowLevel("9", managementSource, "all");
+                break;
         }
+        return treeByShowLevel;
+    }
 
+    private List<SysDept> findTreeByShowLevel(String deptId, String managementSource, String showLevel) {
         SysDept sysDept = getById(deptId);
         LambdaQueryWrapper<SysDept> lqw = new LambdaQueryWrapper<>();
         lqw.eq(SysDept::getDelFlag, 0);
@@ -91,9 +137,24 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept>
             });
             sysDeptList = map.get(sysDept.getParentId());
         }
+
+        if (showLevel.equals("same")) {
+            if (null != managementSource && !"undefined".equals(managementSource) && !"".equals(managementSource)) {
+                if (sysDept.getManagementSource().equals(managementSource)){
+                    sysDeptList.clear();
+                    sysDeptList.add(sysDept);
+                }else {
+                    return new ArrayList<>();
+                }
+            }else {
+                sysDeptList.clear();
+                sysDeptList.add(sysDept);
+            }
+        }
         return sysDeptList;
     }
 
+
     private List<SysDept> recursion(List<SysDept> sysDeptList, Map<String, List<SysDept>> conditionMap) {
         List<SysDept> result = new ArrayList<>();
         sysDeptList.forEach(i ->

+ 96 - 46
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -18,8 +18,10 @@ import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
 import com.ydtech.modules.admin.model.dto.QuUserNumDto;
 import com.ydtech.modules.admin.model.dto.SysUserDto;
+import com.ydtech.modules.admin.model.po.SysUserTreeShowLevel;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.admin.service.*;
+import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
 import com.ydtech.modules.esm.model.EsmUserImage;
@@ -68,6 +70,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Autowired
     private SysAreaService sysAreaService;
 
+    @Autowired
+    private SysUserTreeShowLevelService sysUserTreeShowLevelService;
+
     @Override
     public IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto) {
         PageVo<SysUserBaseVO> pageVo = new PageVo();
@@ -317,7 +322,20 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      */
     @Override
     public IPage<SysUser> selectUserPage(Page page, SysUser sysUser, String containsSubDept) {
-        return baseMapper.selectUserPage(page, sysUser, containsSubDept);
+        IPage<SysUser> sysUserIPage = baseMapper.selectUserPage(page, sysUser, containsSubDept);
+        List<SysUser> records = sysUserIPage.getRecords();
+        List<String> ids = records.stream().map(SysUser::getId).collect(Collectors.toList());
+        LambdaQueryWrapper<SysUserTreeShowLevel> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(SysUserTreeShowLevel::getUserId, ids);
+        List<SysUserTreeShowLevel> list = sysUserTreeShowLevelService.list(wrapper);
+        for (SysUser record : records) {
+            for (SysUserTreeShowLevel showLevel : list) {
+                if (record.getId().equals(showLevel.getUserId())) {
+                    record.setShowLevel(showLevel.getShowLevel());
+                }
+            }
+        }
+        return sysUserIPage;
     }
 
     @Override
@@ -705,30 +723,67 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     /**
      * 查找组织结构树,返回所有层级的用户列表,其中每个用户包含其直接下级用户。
+     * 该方法首先根据当前用户获取其在组织结构展示中的级别,然后根据这个级别查询或构建相应的组织结构树。
      *
      * @return 返回组织结构树形式的用户列表,每个用户对象可能包含一个子用户列表。
      */
     @Override
     public List<SysUser> findTree() {
+        // 获取当前登录用户
+        SysUser user = BaseController.getUser();
+        String userId = user.getId();
+
+        // 根据当前用户ID查询其在组织结构展示中的级别
+        LambdaQueryWrapper<SysUserTreeShowLevel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(SysUserTreeShowLevel::getUserId, userId);
+        SysUserTreeShowLevel treeShowLevel = sysUserTreeShowLevelService.getOne(lambdaQueryWrapper);
+
         //获取领导字段不为空的人的ID
         List<SysUser> users = lambdaQuery().isNotNull(SysUser::getLeaderId).list();
+
         if (users == null || users.size() == 0) {
             return new ArrayList<>();
         }
-        List<SysUser> topUsers = new ArrayList<>(); //存放1级用户
+        List<SysUser> topUsers = new ArrayList<>(); //存放1级用户,即没有直接上级的用户
 
+        // 获取可能作为顶层节点的用户ID列表
         List<String> topUserId = users.stream().map(SysUser::getLeaderId).collect(Collectors.toList());
 
-        List<SysUser> list2 = lambdaQuery().in(SysUser::getId, topUserId).list();
-        // 从查询结果中筛选出没有上级的人员,作为组织结构树的顶层节点
-        for (SysUser sysUser : list2) {
-            if (Objects.isNull(sysUser.getLeaderId())) {
-                topUsers.add(sysUser);
-            }
+        List<SysUser> list2;
+        // 根据组织结构展示级别,筛选顶层节点并构建组织结构树
+        switch (treeShowLevel.getShowLevel()) {
+            case "all": // 展示所有级别的用户
+                list2 = lambdaQuery().in(SysUser::getId, topUserId).list();
+                // 从查询结果中筛选出没有上级的人员,作为组织结构树的顶层节点
+                for (SysUser sysUser : list2) {
+                    if (Objects.isNull(sysUser.getLeaderId())) {
+                        topUsers.add(sysUser);
+                    }
+                }
+                // 递归构建用户树结构
+                buildUserTree(topUsers, users);
+                break;
+            case "same": // 只展示当前用户
+                topUsers.add(user);
+                break;
+            case "subordinate": // 只展示当前用户及下属
+                for (String ids : topUserId) {
+                    if (ids.equals(userId)) {
+                        topUsers.add(user);
+                        // 递归构建用户树结构
+                        buildUserTree(topUsers, users);
+                    }
+                }
+                break;
+            default:// 默认展示所有级别的用户,与"all"情况处理相同
+                list2 = lambdaQuery().in(SysUser::getId, topUserId).list();
+                for (SysUser sysUser : list2) {
+                    if (Objects.isNull(sysUser.getLeaderId())) {
+                        topUsers.add(sysUser);
+                    }
+                }
+                break;
         }
-
-        // 递归构建用户树结构
-        buildUserTree(topUsers, users);
         return topUsers;
     }
 
@@ -832,21 +887,21 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                     }
                 }
 
-                    for (QuUserNum mainWaitAuditSum : mainWaitAuditSums) {
-                        if (quUserNum.getAreaCode().equals(mainWaitAuditSum.getAreaCode())) {
-                            quUserNum.setMainWaitAuditSum(mainWaitAuditSum.getMainWaitAuditSum());
-                        }
+                for (QuUserNum mainWaitAuditSum : mainWaitAuditSums) {
+                    if (quUserNum.getAreaCode().equals(mainWaitAuditSum.getAreaCode())) {
+                        quUserNum.setMainWaitAuditSum(mainWaitAuditSum.getMainWaitAuditSum());
                     }
-                    for (QuUserNum mainWaitPaySum : mainWaitPaySums) {
-                        if (quUserNum.getAreaCode().equals(mainWaitPaySum.getAreaCode())) {
-                            quUserNum.setMainWaitPaySum(mainWaitPaySum.getMainWaitPaySum());
-                        }
+                }
+                for (QuUserNum mainWaitPaySum : mainWaitPaySums) {
+                    if (quUserNum.getAreaCode().equals(mainWaitPaySum.getAreaCode())) {
+                        quUserNum.setMainWaitPaySum(mainWaitPaySum.getMainWaitPaySum());
                     }
-                    for (QuUserNum mainAcceptInsuranceSum : mainAcceptInsuranceSums) {
-                        if (quUserNum.getAreaCode().equals(mainAcceptInsuranceSum.getAreaCode())) {
-                            quUserNum.setMainAcceptInsuranceSum(mainAcceptInsuranceSum.getMainAcceptInsuranceSum());
-                        }
+                }
+                for (QuUserNum mainAcceptInsuranceSum : mainAcceptInsuranceSums) {
+                    if (quUserNum.getAreaCode().equals(mainAcceptInsuranceSum.getAreaCode())) {
+                        quUserNum.setMainAcceptInsuranceSum(mainAcceptInsuranceSum.getMainAcceptInsuranceSum());
                     }
+                }
 
                 quUserNums.add(quUserNum);
             }
@@ -907,7 +962,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             }
             // 设置查询条件中的用户ID列表
             quUserNumDto.setUserIds(strIds);
-        }else {
+        } else {
             // 设置查询条件中的用户ID列表
             quUserNumDto.setUserIds(Collections.singletonList(quUserNumDto.getUserId()));
         }
@@ -962,7 +1017,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
 
-
     private boolean exists(List<QuUserNum> quUserNums, SysArea sysArea) {
         boolean exist = true;
         for (QuUserNum quUserNum1 : quUserNums) {
@@ -1163,7 +1217,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             }
             // 设置查询条件中的用户ID列表
             quUserNumDto.setUserIds(strIds);
-        }else {
+        } else {
             // 设置查询条件中的用户ID列表
             quUserNumDto.setUserIds(Collections.singletonList(quUserNumDto.getUserId()));
         }
@@ -1224,7 +1278,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
             for (QuUserNum quUserNum : deptByCompany) {
                 for (QuUserNum mainWaitAuditSum : mainWaitAuditSums) {
-                    if (quUserNum.getUserId().equals(mainWaitAuditSum.getUserId()) ) {
+                    if (quUserNum.getUserId().equals(mainWaitAuditSum.getUserId())) {
                         quUserNum.setMainWaitAuditSum(mainWaitAuditSum.getMainWaitAuditSum());
                     }
                 }
@@ -1271,19 +1325,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
 
-
-
-
-
-
-
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/4/29 16:01
-     *  @Description: 查询当前登陆人管理的渠道人 即领导人为当前登陆人的用户需要递归查询
+     * @version
+     * @author: hxl
+     * @Date: 2024/4/29 16:01
+     * @Description: 查询当前登陆人管理的渠道人 即领导人为当前登陆人的用户需要递归查询
      */
-    public List<String> getUserIdsByLeaderId(String userId){
+    public List<String> getUserIdsByLeaderId(String userId) {
         // 获取系统中的所有用户
         LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(SysUser::getStatus, 1);
@@ -1297,21 +1345,23 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         findChildren(leadUsers, allUsers, strIds);
         return strIds;
     }
+
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/5/7 10:45
-     *  @Description:  通过部门id和角色id查询是否存在团队长
+     * @version
+     * @author: hxl
+     * @Date: 2024/5/7 10:45
+     * @Description: 通过部门id和角色id查询是否存在团队长
      */
     @Override
     public int getCountByDeptAndRoleId(SysUser sysUserVo) {
         return sysUserMapper.getCountByDeptAndRoleId(sysUserVo);
     }
+
     /**
-     *  @version
-     *  @author: hxl
-     *  @Date: 2024/5/7 11:44
-     *  @Description: 查询该部门的团队长
+     * @version
+     * @author: hxl
+     * @Date: 2024/5/7 11:44
+     * @Description: 查询该部门的团队长
      */
     @Override
     public String findTDZUserIdByDeptId(String deptId) {

+ 13 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysUserTreeShowLevelServiceImpl.java

@@ -0,0 +1,13 @@
+package com.ydtech.modules.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysUserTreeShowLevelMapper;
+import com.ydtech.modules.admin.model.po.SysUserTreeShowLevel;
+import com.ydtech.modules.admin.service.SysUserTreeShowLevelService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SysUserTreeShowLevelServiceImpl extends ServiceImpl<SysUserTreeShowLevelMapper, SysUserTreeShowLevel> implements SysUserTreeShowLevelService {
+
+
+}