Browse Source

Merge remote-tracking branch 'origin/master' into prod

tanbin 1 year ago
parent
commit
b2d23aab4d

+ 56 - 19
authorize-api-service/src/main/java/com/xy/service/impl/SysWorkUserServiceImpl.java

@@ -2,6 +2,7 @@ package com.xy.service.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.SecureUtil;
 import cn.hutool.json.JSONUtil;
@@ -34,8 +35,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -161,6 +161,13 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
                     .setRoleId(roleId).setWorkUserId(sysWorkUser.getId()).setSysId(sysRolesJMaps.get(roleId).getSysId())).collect(Collectors.toList());
             // 保存用户角色绑定信息
             sysUserRoleService.saveBatch(sysUserRoleList);
+        } else {
+            if (roleIds != null && roleIds.size() == 0) {
+                // 清理角色
+                sysUserRoleService.remove(Wrappers.<SysUserRole>lambdaUpdate().eq(SysUserRole::getWorkUserId, sysWorkUser.getId()));
+                log.info("{},清理角色", sysWorkUser.getAccount());
+
+            }
         }
         // 更新部门信息
         List<Long> deptIds = updateDto.getDeptIds();
@@ -173,6 +180,13 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
                     .setDeptId(deptId).setWorkUserId(sysWorkUser.getId()).setSysId(sysDeptsJMaps.get(deptId).getSysId())).collect(Collectors.toList());
             // 保存用户部门绑定信息
             sysUserDeptService.saveBatch(newSysUserDeptList);
+        } else {
+            if (deptIds != null && deptIds.size() == 0) {
+                // 清理部门
+                sysUserDeptService.remove(Wrappers.<SysUserDept>lambdaUpdate()
+                        .eq(SysUserDept::getWorkUserId, sysWorkUser.getId()));
+                log.info("{},清理部门", sysWorkUser.getAccount());
+            }
         }
         return R.ok(Boolean.TRUE);
     }
@@ -260,8 +274,6 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
     @ApiOperation("集合查询")
     public R<List<SysWorkVo>> list(ListDto listDto) {
         Long sysId = listDto.getSysId();
-        // 部门分配为可选,先判断是否存在
-        List<SysUserDept> sysUserDepts = sysUserDeptService.list(Wrappers.<SysUserDept>lambdaQuery().eq(sysId != null, SysUserDept::getSysId, sysId).in(SysUserDept::getWorkUserId, listDto.getId()));
 
         // 条件构造
         JoinLambdaWrapper<SysWorkUser> joinLambdaWrapper = new JoinLambdaWrapper<>(SysWorkUser.class)
@@ -269,12 +281,25 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
                 .leftJoin(SysUserRole.class, SysUserRole::getWorkUserId, SysWorkUser::getId).eq(sysId != null, SysUserRole::getSysId, sysId)
                 .manyToManySelect(SysWorkVo::getRoleIds, Long.class, cb -> cb.add(SysUserRole::getRoleId))
                 .end();
-        if (CollUtil.isNotEmpty(sysUserDepts)) {
-            joinLambdaWrapper.leftJoin(SysUserDept.class, SysUserDept::getWorkUserId, SysWorkUser::getId).eq(sysId != null, SysUserDept::getSysId, sysId)
-                    .manyToManySelect(SysWorkVo::getDeptIds, Long.class, cb -> cb.add(SysUserDept::getDeptId))
-                    .end();
+        List<Long> wUserIds = listDto.getId();
+        Map<Long, List<SysUserDept>> deptUserMap = MapUtil.newHashMap();
+        List<SysUserDept> sysUserDepts = new ArrayList<>();
+        if (CollUtil.isNotEmpty(wUserIds)) {
+            // 部门分配为可选,先判断是否存在
+            sysUserDepts = sysUserDeptService.list(Wrappers.<SysUserDept>lambdaQuery().eq(sysId != null, SysUserDept::getSysId, sysId).in(SysUserDept::getWorkUserId, listDto.getId()));
+            // 存在部门的
+            if (CollUtil.isNotEmpty(sysUserDepts)) {
+                deptUserMap = sysUserDepts.stream().collect(Collectors.groupingBy(SysUserDept::getWorkUserId));
+            }
+
         }
 
+        // if (CollUtil.isNotEmpty(sysUserDepts)) {
+        //     joinLambdaWrapper.leftJoin(SysUserDept.class, SysUserDept::getWorkUserId, SysWorkUser::getId).eq(sysId != null, SysUserDept::getSysId, sysId)
+        //             .manyToManySelect(SysWorkVo::getDeptIds, Long.class, cb -> cb.add(SysUserDept::getDeptId))
+        //             .end();
+        // }
+
         // 查询数据
         List<SysWorkVo> sysWorkVos = baseMapper.joinSelectList(joinLambdaWrapper, SysWorkVo.class);
         if (sysWorkVos.size() > 0) {
@@ -288,10 +313,14 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
                 sysRoleJMap = new JArrayList<>(sysRoles).toMap(SysRole::getId).cover();
             }
             // 查询部门信息
-            JList<List<Long>> deptIdss = new JArrayList<>(sysWorkVos).getProperty(SysWorkVo::getDeptIds);
+            // JList<List<Long>> deptIdss = new JArrayList<>(sysWorkVos).getProperty(SysWorkVo::getDeptIds);
             List<Long> deptIds = new ArrayList<>();
-            if (CollUtil.isNotEmpty(deptIdss) && CollUtil.isNotEmpty(sysUserDepts)) {
-                deptIdss.forEach(longs -> deptIds.addAll(longs));
+            // if (CollUtil.isNotEmpty(deptIdss)) {
+            //     deptIdss.forEach(longs -> deptIds.addAll(longs));
+            // }
+            if (!deptUserMap.isEmpty()) {
+                List<Long> departmentIds = sysUserDepts.stream().map(SysUserDept::getDeptId).distinct().collect(Collectors.toList());
+                deptIds.addAll(departmentIds);
             }
             JMap<Long, SysDept> sysDeptJMap = new JHashMap<>();
             if (deptIds.size() > 0) {
@@ -311,19 +340,27 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
                     sysWorkVo.getRoleNames().add(sysRole.getName());
                     sysWorkVo.getRoleCodes().add(sysRole.getCode());
                 }
-                List<Long> workVoDeptIds = sysWorkVo.getDeptIds();
+                // List<Long> workVoDeptIds = sysWorkVo.getDeptIds();
                 sysWorkVo.setDeptNames(new ArrayList<>());
                 sysWorkVo.setDeptIds(new ArrayList<>());
-                if (CollUtil.isNotEmpty(workVoDeptIds)) {
-                    for (Long workVoDeptId : workVoDeptIds) {
-                        SysDept sysDept = sysDeptJMap.get(workVoDeptId);
-                        if (sysDept == null) {
-                            break;
+                Set<Long> workVoDeptIds = new HashSet<>();
+                Set<String> userDeptNames = new HashSet<>();
+                Set<Long> userDeptIds = new HashSet<>();
+                if (!deptUserMap.isEmpty()) {
+                    List<SysUserDept> sysUserDeptList = deptUserMap.get(sysWorkVo.getId());
+                    if (CollUtil.isNotEmpty(sysUserDeptList)) {
+                        for (SysUserDept sysUserDept : sysUserDeptList) {
+                            SysDept sysDept = sysDeptJMap.get(sysUserDept.getDeptId());
+                            if (sysDept != null) {
+                                workVoDeptIds.add(sysDept.getId());
+                                userDeptNames.add(sysDept.getName());
+                                userDeptIds.add(sysDept.getId());
+                            }
                         }
-                        sysWorkVo.getDeptNames().add(sysDept.getName());
-                        sysWorkVo.getDeptIds().add(sysDept.getId());
                     }
                 }
+                sysWorkVo.setDeptIds(CollUtil.newArrayList(userDeptIds));
+                sysWorkVo.setDeptNames(CollUtil.newArrayList(userDeptNames));
                 List<Long> deptRoleIds = new ArrayList<>();
                 List<String> deptRoleNames = new ArrayList<>();
                 if (CollUtil.isNotEmpty(workVoDeptIds)) {