소스 검색

Merge branch 'fu-dev' of uskycloud/usky-cloud into system-165

fuyuchuan 9 달 전
부모
커밋
251d9e9ad1

+ 2 - 2
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysDeptController.java

@@ -79,11 +79,11 @@ public class SysDeptController extends BaseController {
     }
 
     /**
-     * 获取部门下拉树列表
+     * 获取部门人员下拉树列表
      */
     @GetMapping("/deptUserTreeSelect")
     public ApiResult treeselect(SysDept dept, SysUser user) {
-        List<SysDept> depts = deptService.selectDeptList(dept);
+        List<SysDept> depts = deptService.deptList(dept);
         List<SysUser> users = iSysUserService.selectUserList(user);
         return ApiResult.success(deptService.buildDeptUserTreeSelect(depts, users));
     }

+ 13 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysDept.java

@@ -3,6 +3,7 @@ package com.usky.system.domain;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.usky.common.core.bean.BaseEntity;
+import com.usky.system.service.vo.TreeNode;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
@@ -57,6 +58,18 @@ public class SysDept extends BaseEntity
     @TableField(exist = false)
     private String parentName;
 
+    /** 部门成员 */
+    @TableField(exist = false)
+    private List<SysUser> users;
+
+    public List<SysUser> getUsers() {
+        return users;
+    }
+
+    public void setUsers(List<SysUser> users) {
+        this.users = users;
+    }
+
     /**
      * 租户ID
      */

+ 12 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysUser.java

@@ -100,6 +100,18 @@ public class SysUser extends BaseEntity
     /** 姓名 */
     private String fullName;
 
+    /** 岗位 */
+    @TableField(exist = false)
+    private String post;
+
+    public String getPost() {
+        return post;
+    }
+
+    public void setPost(String post) {
+        this.post = post;
+    }
+
     public SysUser()
     {
 

+ 2 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysDeptMapper.java

@@ -24,6 +24,8 @@ public interface SysDeptMapper extends BaseMapper<SysDept>
      */
     public List<SysDept> selectDeptList(SysDept dept);
 
+    public List<SysDept> deptList(SysDept dept);
+
     /**
      * 根据角色ID查询部门树信息
      * 

+ 10 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysUserPostMapper.java

@@ -3,10 +3,13 @@ package com.usky.system.mapper;
 
 import com.usky.common.mybatis.core.CrudMapper;
 import com.usky.system.domain.SysUserPost;
+import com.usky.system.service.vo.UserPostVo;
+import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 用户与岗位关联表 数据层
@@ -47,4 +50,11 @@ public interface SysUserPostMapper extends CrudMapper<SysUserPost>
      * @return 结果
      */
     public int batchUserPost(List<SysUserPost> userPostList);
+
+    /**
+     * 查询users的职位
+     * @param userIds userIds
+     * @return
+     */
+    public List<UserPostVo> getUserPost(@Param("userIds") List<Long> userIds);
 }

+ 8 - 2
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysDeptService.java

@@ -4,6 +4,7 @@ package com.usky.system.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.usky.system.domain.SysDept;
 import com.usky.system.domain.SysUser;
+import com.usky.system.service.vo.TreeNode;
 import com.usky.system.service.vo.TreeSelect;
 
 import java.util.List;
@@ -23,7 +24,7 @@ public interface ISysDeptService extends IService<SysDept>
      */
     public List<SysDept> selectDeptList(SysDept dept);
 
-    public List<SysDept> selectDeptListByLamda(SysDept dept);
+    public List<SysDept> deptList(SysDept dept);
 
     /**
      * 构建前端所需要树结构
@@ -41,7 +42,12 @@ public interface ISysDeptService extends IService<SysDept>
      */
     public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts);
 
-    List<TreeSelect> buildDeptUserTreeSelect(List<SysDept> depts, List<SysUser> users);
+    /**
+     * 构建前端所需要下拉树结构(部门+人员)
+     * @param depts 部门列表
+     * @return
+     */
+    public List<TreeNode> buildDeptUserTreeSelect(List<SysDept> depts, List<SysUser> users);
 
     /**
      * 根据角色ID查询部门树信息

+ 76 - 27
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysDeptServiceImpl.java

@@ -4,7 +4,6 @@ package com.usky.system.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.common.datascope.annotation.DataScope;
-import com.ruoyi.common.datascope.context.DataScopeContextHolder;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.common.core.exception.BusinessException;
@@ -13,21 +12,21 @@ import com.usky.common.core.util.StringUtils;
 import com.usky.system.domain.SysDept;
 import com.usky.system.domain.SysRole;
 import com.usky.system.domain.SysUser;
+import com.usky.system.domain.SysUserPost;
 import com.usky.system.domain.constants.UserConstants;
-import com.usky.system.factory.RemoteLogFallbackFactory;
 import com.usky.system.mapper.SysDeptMapper;
 import com.usky.system.mapper.SysRoleMapper;
+import com.usky.system.mapper.SysUserPostMapper;
 import com.usky.system.service.ISysDeptService;
+import com.usky.system.service.vo.TreeNode;
 import com.usky.system.service.vo.TreeSelect;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.usky.system.service.vo.UserPostVo;
+import org.omg.CORBA.StringHolder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -38,14 +37,15 @@ import java.util.stream.Collectors;
  */
 @Service
 public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDept> implements ISysDeptService {
-    private static final Logger log = LoggerFactory.getLogger(SysDeptServiceImpl.class);
-
     @Autowired
     private SysDeptMapper deptMapper;
 
     @Autowired
     private SysRoleMapper roleMapper;
 
+    @Autowired
+    private SysUserPostMapper sysUserPostMapper;
+
     /**
      * 查询部门管理数据
      *
@@ -56,29 +56,78 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
     @DataScope(deptAlias = "d")
     public List<SysDept> selectDeptList(SysDept dept) {
         dept.setTenantId(SecurityUtils.getTenantId());
-        log.debug(DataScopeContextHolder.getDataScopeSql());
         return deptMapper.selectDeptList(dept);
     }
 
     @Override
-    @DataScope(deptAlias = "d")
-    public List<SysDept> selectDeptListByLamda(SysDept dept) {
-        LambdaQueryWrapper<SysDept> deptQuery = Wrappers.lambdaQuery();
-        deptQuery.eq(SysDept::getDelFlag, 0);
-        if (dept.getParentId() != null && dept.getParentId() != 0) {
-            deptQuery.eq(SysDept::getParentId, dept.getParentId());
+    public List<SysDept> deptList(SysDept dept) {
+        dept.setTenantId(SecurityUtils.getTenantId());
+        return deptMapper.deptList(dept);
+    }
+
+
+    @Override
+    public List<TreeNode> buildDeptUserTreeSelect(List<SysDept> depts, List<SysUser> users) {
+        List<Long> userIds = new ArrayList<>();
+        for (SysUser user : users){
+            userIds.add(user.getUserId());
         }
-        if (StringUtils.isNotBlank(dept.getDeptName())){
-            deptQuery.like(SysDept::getDeptName, dept.getDeptName());
+        List<UserPostVo> userPost = sysUserPostMapper.getUserPost(userIds);
+        Map<Long, String> userIdToPostMap = userPost.stream()
+                .collect(Collectors.toMap(UserPostVo::getUserId, UserPostVo::getPostName));
+        users.forEach(user -> user.setPost(userIdToPostMap.get(user.getUserId())));
+        List<SysDept> deptTrees = buildDeptTree2(depts);
+        fillUsersToDepts(deptTrees, users);
+        return deptTrees.stream().map(TreeNode::new).collect(Collectors.toList());
+    }
+
+    private void fillUsersToDepts(List<SysDept> depts, List<SysUser> users) {
+        for (SysDept dept : depts) {
+            if (dept.getChildren() == null || dept.getChildren().isEmpty()) {
+                List<SysUser> deptUsers = filterUsersByDept(users, dept.getDeptId());
+                if (!deptUsers.isEmpty()) {
+                    dept.setUsers(deptUsers);
+                }
+            }
+            if (dept.getChildren() != null) {
+                fillUsersToDepts(dept.getChildren(), users);
+            }
         }
-        if (StringUtils.isNotBlank(dept.getStatus())){
-            deptQuery.eq(SysDept::getStatus, dept.getStatus());
+    }
+
+    private List<SysUser> filterUsersByDept(List<SysUser> users, Long deptId) {
+        return users.stream()
+                .filter(user -> user.getDeptId().equals(deptId))
+                .collect(Collectors.toList());
+    }
+
+    private List<SysDept> buildDeptTree2(List<SysDept> depts) {
+        List<SysDept> returnList = new ArrayList<SysDept>();
+        List<Long> tempList = new ArrayList<Long>();
+        for (SysDept dept : depts) {
+            tempList.add(dept.getDeptId());
         }
-        deptQuery.orderByAsc(SysDept::getParentId, SysDept::getOrderNum)
-                .apply(DataScopeContextHolder.getDataScopeSql());
-        log.debug(DataScopeContextHolder.getDataScopeSql());
+        for (Iterator<SysDept> iterator = depts.iterator(); iterator.hasNext(); ) {
+            SysDept dept = (SysDept) iterator.next();
+            if (!tempList.contains(dept.getParentId())) {
+                recursionFn2(depts, dept);
+                returnList.add(dept);
+            }
+        }
+        if (returnList.isEmpty()) {
+            returnList = depts;
+        }
+        return returnList;
+    }
 
-        return deptMapper.selectList(deptQuery);
+    private void recursionFn2(List<SysDept> list, SysDept t) {
+        List<SysDept> childList = getChildList(list, t);
+        t.setChildren(childList);
+        for (SysDept tChild : childList) {
+            if (hasChild(list, tChild)) {
+                recursionFn(list, tChild);
+            }
+        }
     }
 
     /**
@@ -120,7 +169,7 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
         return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
     }
 
-    @Override
+/*    @Override
     public List<TreeSelect> buildDeptUserTreeSelect(List<SysDept> depts, List<SysUser> users) {
         List<SysDept> deptTrees = buildDeptTree(depts);
         List<TreeSelect> treeSelectList = new ArrayList<>();
@@ -141,7 +190,7 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
             treeSelectList.add(treeSelect);
         }
         return treeSelectList;
-    }
+    }*/
 
 
     /**

+ 79 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/TreeNode.java

@@ -0,0 +1,79 @@
+package com.usky.system.service.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.usky.system.domain.SysDept;
+import com.usky.system.domain.SysUser;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @description:TODO
+ * @author: fu
+ * @create: 2024-07-12 13:37
+ */
+@Data
+public class TreeNode implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 节点ID
+     */
+    private Long id;
+
+    /**
+     * 节点名称
+     */
+    private String label;
+
+    /**
+     * 用户头像
+     */
+    private String avatar;
+
+    /**
+     * 用户职位
+     */
+    private String post;
+
+    /**
+     * 子节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<TreeNode> children;
+
+    public TreeNode() {
+    }
+
+    public TreeNode(Long id, String label, List<TreeNode> children) {
+        this.id = id;
+        this.label = label;
+        this.children = children;
+    }
+
+    public TreeNode(SysUser user) {
+        this.id = user.getUserId();
+        this.label = user.getNickName();
+        this.avatar = user.getAvatar();
+        this.post = user.getPost();
+        this.children = new ArrayList<>();
+    }
+
+    public TreeNode(SysDept dept) {
+        this.id = dept.getDeptId();
+        this.label = dept.getDeptName();
+        this.children = new ArrayList<>();
+        if (dept.getChildren() != null && !dept.getChildren().isEmpty()) {
+            this.children = dept.getChildren().stream().map(TreeNode::new).collect(Collectors.toList());
+        } else if (dept.getUsers() != null && !dept.getUsers().isEmpty()) {
+            this.children = dept.getUsers().stream().map(TreeNode::new).collect(Collectors.toList());
+        }
+    }
+}
+
+
+

+ 15 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/UserPostVo.java

@@ -0,0 +1,15 @@
+package com.usky.system.service.vo;
+
+import lombok.Data;
+
+/**
+ * @description:TODO
+ * @author: fu
+ * @create: 2024-07-15 18:37
+ */
+@Data
+public class UserPostVo {
+    private Long userId;
+    private String postName;
+}
+

+ 9 - 0
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysDeptMapper.xml

@@ -49,6 +49,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		${params.dataScope}
 		order by d.parent_id, d.order_num
     </select>
+
+	<select id="deptList" parameterType="com.usky.system.domain.SysDept" resultMap="SysDeptResult">
+		<include refid="selectDeptVo"/>
+		where d.del_flag = '0'
+		<if test="tenantId != null and tenantId != '' and tenantId != 0">
+			AND tenant_id = #{tenantId}
+		</if>
+		order by d.parent_id, d.order_num
+	</select>
     
     <select id="selectDeptListByRoleId" resultType="Integer">
 		select d.dept_id

+ 22 - 5
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysUserPostMapper.xml

@@ -12,23 +12,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<delete id="deleteUserPostByUserId" parameterType="Long">
 		delete from sys_user_post where user_id=#{userId}
 	</delete>
-	
+
 	<select id="countUserPostById" resultType="Integer">
 	    select count(1) from sys_user_post where post_id=#{postId}  
 	</select>
-	
+
 	<delete id="deleteUserPost" parameterType="Long">
  		delete from sys_user_post where user_id in
  		<foreach collection="ids" item="ids" open="(" separator="," close=")">
  			#{ids}
-        </foreach> 
+        </foreach>
  	</delete>
-	
+
 	<insert id="batchUserPost">
 		insert into sys_user_post(user_id, post_id) values
 		<foreach item="item" index="index" collection="list" separator=",">
 			(#{item.userId},#{item.postId})
 		</foreach>
 	</insert>
-	
+
+
+	<select id="getUserPost" resultType="com.usky.system.service.vo.UserPostVo">
+        SELECT
+        u.user_id AS userId,
+        p.post_name AS postName
+        FROM
+        sys_user_post u
+        INNER JOIN
+        sys_post p ON u.post_id = p.post_id
+        WHERE
+        u.user_id IN
+        <foreach collection="userIds" item="userId" open="(" separator="," close=")">
+            #{userId}
+        </foreach>
+    </select>
+
+
 </mapper>