Переглянути джерело

Merge branch 'master' into prod

hechunping 1 рік тому
батько
коміт
c7533ce53b

+ 106 - 46
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;
 
 
@@ -65,13 +65,15 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
 
     private final SysDeptMapper sysDeptMapper;
 
+    private final SysDeptRoleMapper sysDeptRoleMapper;
+
     private final CaptchaService captchaService;
 
     @Override
     @ApiOperation(value = "注册", notes = "注册")
     @Transactional(rollbackFor = Exception.class)
     public R<Long> register(AddDto addDto) {
-        //校验
+        // 校验
         LambdaQueryWrapper<SysWorkUser> lambdaQueryWrapper = new LambdaQueryWrapper<SysWorkUser>()
                 .eq(SysWorkUser::getAccount, addDto.getAccount());
         long count = count(lambdaQueryWrapper);
@@ -80,7 +82,7 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
         }
         long count2 = count(new LambdaQueryWrapper<SysWorkUser>().eq(SysWorkUser::getPhone, addDto.getPhone()));
         long count3 = count(new LambdaQueryWrapper<SysWorkUser>().eq(SysWorkUser::getEmail, addDto.getEmail()));
-        //新增业务用户
+        // 新增业务用户
         SysWorkUser sysWorkUser = Beans.copy(SysWorkUser.class, addDto)
                 .create(RedisCache.getLoginId(Long.class))
                 .setPassword(SecureUtil.md5(addDto.getPassword()))
@@ -93,17 +95,17 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
             JMap<Long, SysRole> sysRolesJMaps = new JArrayList<>(sysRoles).toMap(SysRole::getId).cover();
             List<SysUserRole> sysUserRoleList = roleIds.stream().map(roleId -> new SysUserRole().createId()
                     .setRoleId(roleId).setWorkUserId(sysWorkUser.getId()).setSysId(sysRolesJMaps.get(roleId).getSysId())).collect(Collectors.toList());
-            //保存用户角色绑定信息
+            // 保存用户角色绑定信息
             sysUserRoleService.saveBatch(sysUserRoleList);
         }
         List<Long> deptIds = addDto.getDeptIds();
         if (CollUtil.isNotEmpty(deptIds)) {
             List<SysDept> sysDepts = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().in(SysDept::getId, deptIds));
             JMap<Long, SysDept> sysDeptsJMaps = new JArrayList<>(sysDepts).toMap(SysDept::getId).cover();
-            //关联部门
+            // 关联部门
             List<SysUserDept> sysUserDeptList = deptIds.stream().map(deptId -> new SysUserDept().createId()
                     .setDeptId(deptId).setWorkUserId(sysWorkUser.getId()).setSysId(sysDeptsJMaps.get(deptId).getSysId())).collect(Collectors.toList());
-            //保存用户部门 绑定信息
+            // 保存用户部门 绑定信息
             sysUserDeptService.saveBatch(sysUserDeptList);
         }
         return R.ok(sysWorkUser.getId());
@@ -115,7 +117,7 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
     public R<Boolean> update(UpdateDto updateDto) {
         String account = updateDto.getAccount();
         log.info("权限用户信息修改:{}", JSONUtil.toJsonPrettyStr(updateDto));
-        //校验
+        // 校验
         SysWorkUser byId = getById(updateDto.getId());
         if (StrUtil.isNotEmpty(updateDto.getPassword())) {
             updateById(new SysWorkUser().setId(updateDto.getId()).setPassword(SecureUtil.md5(updateDto.getPassword())));
@@ -144,12 +146,12 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
                 }
             }
         }
-        //更新用户信息
+        // 更新用户信息
         SysWorkUser sysWorkUser = Beans.copy(SysWorkUser.class, updateDto)
                 .update(RedisCache.getLoginId(Long.class))
                 .setPassword(StringUtils.isNotEmpty(updateDto.getPassword()) ? SecureUtil.md5(updateDto.getPassword()) : null);
         updateById(sysWorkUser);
-        //更新角色信息
+        // 更新角色信息
         List<Long> roleIds = updateDto.getRoleIds();
         if (CollUtil.isNotEmpty(roleIds)) {
             List<SysRole> sysRoles = sysRoleMapper.selectList(new LambdaQueryWrapper<SysRole>().in(SysRole::getId, roleIds));
@@ -157,10 +159,17 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
             sysUserRoleService.remove(Wrappers.<SysUserRole>lambdaUpdate().eq(SysUserRole::getWorkUserId, sysWorkUser.getId()));
             List<SysUserRole> sysUserRoleList = roleIds.stream().map(roleId -> new SysUserRole().createId()
                     .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();
         if (CollUtil.isNotEmpty(deptIds)) {
             List<SysDept> sysDepts = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().in(SysDept::getId, deptIds));
@@ -169,8 +178,15 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
                     .eq(SysUserDept::getWorkUserId, sysWorkUser.getId()));
             List<SysUserDept> newSysUserDeptList = deptIds.stream().map(deptId -> new SysUserDept().createId()
                     .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);
     }
@@ -179,11 +195,11 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
     @ApiOperation(value = "删除", notes = "删除")
     @Transactional(rollbackFor = Exception.class)
     public R del(DelDto delDto) {
-        //删除用户角色
+        // 删除用户角色
         sysUserRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getWorkUserId, delDto.getId()));
-        //删除用户部门
+        // 删除用户部门
         sysUserDeptMapper.delete(new LambdaQueryWrapper<SysUserDept>().in(SysUserDept::getWorkUserId, delDto.getId()));
-        //删除用户
+        // 删除用户
         removeBatchByIds(delDto.getId());
         return R.ok();
     }
@@ -193,18 +209,18 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
     @LogOperate(logType = LogEnum.LogType.V1, optType = LogEnum.OptType.V3, logContent = "登录")
     public R<String> login(LoginDto loginDto) {
         SysWorkUser sysWorkUser;
-        //手机短信登录
+        // 手机短信登录
         if (!StringUtils.isEmpty(loginDto.getCode())) {
-            //todo 验证短信
+            // todo 验证短信
             if (false) {
                 return R.fail("短信验证码错误");
             }
             sysWorkUser = getOne(new LambdaQueryWrapper<SysWorkUser>().eq(SysWorkUser::getPhone, loginDto.getLoginName()));
         } else {
             String clientType = loginDto.getClientType();
-            //TODO 暂定类型1需要滑块验证码,这里后续定义好类型了需要改为枚举
+            // TODO 暂定类型1需要滑块验证码,这里后续定义好类型了需要改为枚举
             if ("1".equals(clientType)) {
-                //验证码滑块二次校验后端
+                // 验证码滑块二次校验后端
                 String pointJson = loginDto.getPointJson();
                 log.info("滑块验证点坐标信息:{}", pointJson);
                 if (StrUtil.isEmpty(pointJson)) {
@@ -213,11 +229,11 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
                 R<String> reVerification = captchaService.reVerification(pointJson);
                 String msg = reVerification.getMsg();
                 if (200 != reVerification.getCode() && StrUtil.isNotEmpty(msg)) {
-                    //交易错误信息发送给前端
+                    // 交易错误信息发送给前端
                     return reVerification;
                 }
             }
-            //账号、邮箱、手机、密码登录
+            // 账号、邮箱、手机、密码登录
             LambdaQueryWrapper<SysWorkUser> lambdaQueryWrapper = new LambdaQueryWrapper<SysWorkUser>()
                     .and(sysWorkUserLambdaQueryWrapper -> sysWorkUserLambdaQueryWrapper
                             .eq(SysWorkUser::getAccount, loginDto.getLoginName())
@@ -234,16 +250,16 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
         if (!sysWorkUser.getStatus()) {
             return R.fail("账号已被封禁");
         }
-        //生成token
+        // 生成token
         StpUtil.login(sysWorkUser.getId(), loginDto.getClientType());
-        //更新登录信息
+        // 更新登录信息
         SysWorkUser workUser = new SysWorkUser()
                 .setId(sysWorkUser.getId())
                 .setLastLoginId(loginDto.getLoginName())
                 .setLastLoginTime(LocalDateTime.now())
                 .setLoginNum(sysWorkUser.getLoginNum() + 1);
         updateById(workUser);
-        //缓存权限相关到redis
+        // 缓存权限相关到redis
         RedisCache.workCache(sysWorkUser.getId());
         return R.ok(StpUtil.getTokenValue()).setLogMsg("登录名:" + loginDto.getLoginName());
     }
@@ -258,25 +274,37 @@ 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)
                 .in(SysWorkUser::getId, listDto.getId())
-                .leftJoin(SysUserRole.class, SysUserRole::getWorkUserId, SysWorkUser::getId).eq(sysId != null, SysUserRole::getSysId, sysId)
+                // .leftJoin(SysUserRole.class, SysUserRole::getWorkUserId, SysWorkUser::getId).eq(sysId != null, SysUserRole::getSysId, sysId)
+                .leftJoin(SysUserRole.class, SysUserRole::getWorkUserId, SysWorkUser::getId)
                 .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) {
-            //查询角色信息
+            // 查询角色信息
             JList<List<Long>> roleIdss = new JArrayList<>(sysWorkVos).getProperty(SysWorkVo::getRoleIds);
             List<Long> roleIds = new ArrayList<>();
             roleIdss.forEach(longs -> roleIds.addAll(longs));
@@ -285,18 +313,22 @@ public class SysWorkUserServiceImpl extends ServiceImpl<SysWorkUserMapper, SysWo
                 List<SysRole> sysRoles = sysRoleMapper.selectList(new LambdaQueryWrapper<SysRole>().in(SysRole::getId, roleIds));
                 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) {
                 List<SysDept> sysDepts = sysDeptMapper.selectList(new LambdaQueryWrapper<SysDept>().in(SysDept::getId, deptIds));
                 sysDeptJMap = new JArrayList<>(sysDepts).toMap(SysDept::getId).cover();
             }
-            //处理结果值
+            // 处理结果值
             for (SysWorkVo sysWorkVo : sysWorkVos) {
                 List<Long> workVoRoleIds = sysWorkVo.getRoleIds();
                 sysWorkVo.setRoleNames(new ArrayList<>());
@@ -309,17 +341,45 @@ 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<>());
+                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.setDeptIds(CollUtil.newArrayList(userDeptIds));
+                sysWorkVo.setDeptNames(CollUtil.newArrayList(userDeptNames));
+                List<Long> deptRoleIds = new ArrayList<>();
+                List<String> deptRoleNames = new ArrayList<>();
                 if (CollUtil.isNotEmpty(workVoDeptIds)) {
-                    for (Long workVoDeptId : workVoDeptIds) {
-                        SysDept sysDept = sysDeptJMap.get(workVoDeptId);
-                        if (sysDept == null) {
-                            break;
+                    // 部门角色
+                    List<SysDeptRole> sysDeptRoles = sysDeptRoleMapper.selectList(Wrappers.<SysDeptRole>lambdaQuery()
+                            .eq(sysId != null, SysDeptRole::getSysId, sysId)
+                            .in(SysDeptRole::getDeptId, workVoDeptIds)
+                    );
+                    if (CollUtil.isNotEmpty(sysDeptRoles)) {
+                        deptRoleIds = sysDeptRoles.stream().map(SysDeptRole::getRoleId).distinct().collect(Collectors.toList());
+                        List<SysRole> sysRoles = sysRoleMapper.selectList(new LambdaQueryWrapper<SysRole>().in(SysRole::getId, deptRoleIds));
+                        if (CollUtil.isNotEmpty(sysRoles)) {
+                            deptRoleNames = sysRoles.stream().map(SysRole::getName).distinct().collect(Collectors.toList());
                         }
-                        sysWorkVo.getDeptNames().add(sysDept.getName());
                     }
                 }
+                sysWorkVo.setDeptRoleIds(deptRoleIds);
+                sysWorkVo.setDeptRoleNames(deptRoleNames);
 
             }
         }

+ 6 - 0
authorize-api/src/main/java/com/xy/dto/SysWorkUser/SysWorkVo.java

@@ -69,4 +69,10 @@ public class SysWorkVo {
 
     @ApiModelProperty("部门名称")
     private List<String> deptNames;
+
+    @ApiModelProperty("部门角色名称")
+    private List<String> deptRoleNames;
+
+    @ApiModelProperty("部门角色ID")
+    private List<Long> deptRoleIds;
 }