|
@@ -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);
|
|
|
|
|
|
}
|
|
|
}
|