|
@@ -68,2024 +68,2146 @@ import org.springframework.web.multipart.MultipartFile;
|
|
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
|
|
|
|
-
|
|
|
- * <p>
|
|
|
- * 用户表 服务实现类
|
|
|
- * </p>
|
|
|
- *
|
|
|
- * @Author: scott
|
|
|
- * @Date: 2018-12-20
|
|
|
- */
|
|
|
+
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
-public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private SysUserMapper userMapper;
|
|
|
- @Autowired
|
|
|
- private SysPermissionMapper sysPermissionMapper;
|
|
|
- @Autowired
|
|
|
- private SysUserRoleMapper sysUserRoleMapper;
|
|
|
- @Autowired
|
|
|
- private SysUserDepartMapper sysUserDepartMapper;
|
|
|
- @Autowired
|
|
|
- private SysDepartMapper sysDepartMapper;
|
|
|
- @Autowired
|
|
|
- private SysRoleMapper sysRoleMapper;
|
|
|
- @Autowired
|
|
|
- private SysDepartRoleUserMapper departRoleUserMapper;
|
|
|
- @Autowired
|
|
|
- private SysDepartRoleMapper sysDepartRoleMapper;
|
|
|
- @Resource
|
|
|
- private BaseCommonService baseCommonService;
|
|
|
- @Autowired
|
|
|
- private SysThirdAccountMapper sysThirdAccountMapper;
|
|
|
- @Autowired
|
|
|
- ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
|
|
|
- @Autowired
|
|
|
- ThirdAppDingtalkServiceImpl dingtalkService;
|
|
|
- @Autowired
|
|
|
- ISysRoleIndexService sysRoleIndexService;
|
|
|
- @Autowired
|
|
|
- SysTenantMapper sysTenantMapper;
|
|
|
- @Autowired
|
|
|
- private SysUserTenantMapper relationMapper;
|
|
|
- @Autowired
|
|
|
- private SysUserTenantMapper userTenantMapper;
|
|
|
- @Autowired
|
|
|
- private SysUserPositionMapper sysUserPositionMapper;
|
|
|
- @Autowired
|
|
|
- private SysPositionMapper sysPositionMapper;
|
|
|
- @Autowired
|
|
|
- private SystemSendMsgHandle systemSendMsgHandle;
|
|
|
- @Autowired
|
|
|
- private ISysUserRoleService userRoleService;
|
|
|
- @Autowired
|
|
|
- private ISysThirdAccountService sysThirdAccountService;
|
|
|
- @Autowired
|
|
|
- private ISysRoleService sysRoleService;
|
|
|
- @Autowired
|
|
|
- private ISysUserRoleService sysUserRoleService;
|
|
|
- @Autowired
|
|
|
- private RedisUtil redisUtil;
|
|
|
-
|
|
|
- @Override
|
|
|
- public Result<IPage<SysUser>> queryPageList(HttpServletRequest req, QueryWrapper<SysUser> queryWrapper, Integer pageSize, Integer pageNo) {
|
|
|
- Result<IPage<SysUser>> result = new Result<IPage<SysUser>>();
|
|
|
-
|
|
|
-
|
|
|
- String departId = req.getParameter("departId");
|
|
|
- if (oConvertUtils.isNotEmpty(departId)) {
|
|
|
- LambdaQueryWrapper<SysUserDepart> query = new LambdaQueryWrapper<>();
|
|
|
- query.eq(SysUserDepart::getDepId, departId);
|
|
|
- List<SysUserDepart> list = sysUserDepartMapper.selectList(query);
|
|
|
- List<String> userIds = list.stream().map(SysUserDepart::getUserId).collect(Collectors.toList());
|
|
|
-
|
|
|
- if (oConvertUtils.listIsNotEmpty(userIds)) {
|
|
|
- queryWrapper.in("id", userIds);
|
|
|
- } else {
|
|
|
- return Result.OK();
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- String code = req.getParameter("code");
|
|
|
- if (oConvertUtils.isNotEmpty(code)) {
|
|
|
- queryWrapper.in("id", Arrays.asList(code.split(",")));
|
|
|
- pageSize = code.split(",").length;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- String roleIds = req.getParameter("role");
|
|
|
- if (oConvertUtils.isNotEmpty(roleIds)) {
|
|
|
-
|
|
|
- QueryWrapper<SysUserRole> queryWrapperRole = new QueryWrapper<>();
|
|
|
- queryWrapperRole.in("role_id", roleIds);
|
|
|
- List<SysUserRole> sysUserRoles = sysUserRoleService.getBaseMapper().selectList(queryWrapperRole);
|
|
|
- List<String> userIds = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toList());
|
|
|
- if (oConvertUtils.listIsNotEmpty(userIds)) {
|
|
|
- queryWrapper.in("id", userIds);
|
|
|
- } else {
|
|
|
- return Result.OK();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- String status = req.getParameter("status");
|
|
|
- if (oConvertUtils.isNotEmpty(status)) {
|
|
|
- queryWrapper.eq("status", Integer.parseInt(status));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- String tenantId = TokenUtils.getTenantIdByRequest(req);
|
|
|
- String lowAppId = TokenUtils.getLowAppIdByRequest(req);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- queryWrapper.ne("username", "_reserve_user_external");
|
|
|
- Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
|
|
|
- IPage<SysUser> pageList = this.page(page, queryWrapper);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- List<String> userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList());
|
|
|
- if (userIds != null && userIds.size() > 0) {
|
|
|
- Map<String, String> useDepNames = this.getDepNamesByUserIds(userIds);
|
|
|
- pageList.getRecords().forEach(item -> {
|
|
|
+public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
|
|
|
+ implements ISysUserService {
|
|
|
+
|
|
|
+ @Autowired private SysUserMapper userMapper;
|
|
|
+ @Autowired private SysPermissionMapper sysPermissionMapper;
|
|
|
+ @Autowired private SysUserRoleMapper sysUserRoleMapper;
|
|
|
+ @Autowired private SysUserDepartMapper sysUserDepartMapper;
|
|
|
+ @Autowired private SysDepartMapper sysDepartMapper;
|
|
|
+ @Autowired private SysRoleMapper sysRoleMapper;
|
|
|
+ @Autowired private SysDepartRoleUserMapper departRoleUserMapper;
|
|
|
+ @Autowired private SysDepartRoleMapper sysDepartRoleMapper;
|
|
|
+ @Resource private BaseCommonService baseCommonService;
|
|
|
+ @Autowired private SysThirdAccountMapper sysThirdAccountMapper;
|
|
|
+ @Autowired ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
|
|
|
+ @Autowired ThirdAppDingtalkServiceImpl dingtalkService;
|
|
|
+ @Autowired ISysRoleIndexService sysRoleIndexService;
|
|
|
+ @Autowired SysTenantMapper sysTenantMapper;
|
|
|
+ @Autowired private SysUserTenantMapper relationMapper;
|
|
|
+ @Autowired private SysUserTenantMapper userTenantMapper;
|
|
|
+ @Autowired private SysUserPositionMapper sysUserPositionMapper;
|
|
|
+ @Autowired private SysPositionMapper sysPositionMapper;
|
|
|
+ @Autowired private SystemSendMsgHandle systemSendMsgHandle;
|
|
|
+ @Autowired private ISysUserRoleService userRoleService;
|
|
|
+ @Autowired private ISysThirdAccountService sysThirdAccountService;
|
|
|
+ @Autowired private ISysRoleService sysRoleService;
|
|
|
+ @Autowired private ISysUserRoleService sysUserRoleService;
|
|
|
+ @Autowired private RedisUtil redisUtil;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Result<IPage<SysUser>> queryPageList(
|
|
|
+ HttpServletRequest req,
|
|
|
+ QueryWrapper<SysUser> queryWrapper,
|
|
|
+ Integer pageSize,
|
|
|
+ Integer pageNo) {
|
|
|
+ Result<IPage<SysUser>> result = new Result<IPage<SysUser>>();
|
|
|
+
|
|
|
+
|
|
|
+ String departId = req.getParameter("departId");
|
|
|
+ if (oConvertUtils.isNotEmpty(departId)) {
|
|
|
+ LambdaQueryWrapper<SysUserDepart> query = new LambdaQueryWrapper<>();
|
|
|
+ query.eq(SysUserDepart::getDepId, departId);
|
|
|
+ List<SysUserDepart> list = sysUserDepartMapper.selectList(query);
|
|
|
+ List<String> userIds =
|
|
|
+ list.stream().map(SysUserDepart::getUserId).collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ if (oConvertUtils.listIsNotEmpty(userIds)) {
|
|
|
+ queryWrapper.in("id", userIds);
|
|
|
+ } else {
|
|
|
+ return Result.OK();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ String code = req.getParameter("code");
|
|
|
+ if (oConvertUtils.isNotEmpty(code)) {
|
|
|
+ queryWrapper.in("id", Arrays.asList(code.split(",")));
|
|
|
+ pageSize = code.split(",").length;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ List<String> roleIds = new ArrayList<>();
|
|
|
+ if (oConvertUtils.isNotEmpty(req.getParameter("role"))) {
|
|
|
+ roleIds = Arrays.asList(req.getParameter("role").split(","));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ String status = req.getParameter("status");
|
|
|
+ if (oConvertUtils.isNotEmpty(status)) {
|
|
|
+ queryWrapper.eq("status", Integer.parseInt(status));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ String tenantId = TokenUtils.getTenantIdByRequest(req);
|
|
|
+ String lowAppId = TokenUtils.getLowAppIdByRequest(req);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ queryWrapper.ne("username", "_reserve_user_external");
|
|
|
+
|
|
|
+ IPage<SysUser> pageList = null;
|
|
|
+ Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
|
|
|
+
|
|
|
+ if (sysUserRoleService.isAdmin()) {
|
|
|
+ pageList = this.page(page, queryWrapper);
|
|
|
+ } else {
|
|
|
+ pageList = userMapper.selectUserList(page, roleIds, "", Integer.valueOf(tenantId), null);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<String> userIds =
|
|
|
+ pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList());
|
|
|
+ if (userIds != null && userIds.size() > 0) {
|
|
|
+ Map<String, String> useDepNames = this.getDepNamesByUserIds(userIds);
|
|
|
+ pageList
|
|
|
+ .getRecords()
|
|
|
+ .forEach(
|
|
|
+ item -> {
|
|
|
item.setOrgCodeTxt(useDepNames.get(item.getId()));
|
|
|
-
|
|
|
+
|
|
|
List<String> tenantStatus = new ArrayList<>();
|
|
|
tenantStatus.add("1");
|
|
|
- List<SysUserTenantVo> list = userTenantMapper.getTenantListByUserId(item.getId(), tenantStatus);
|
|
|
+ List<SysUserTenantVo> list =
|
|
|
+ userTenantMapper.getTenantListByUserId(item.getId(), tenantStatus);
|
|
|
if (oConvertUtils.isNotEmpty(list)) {
|
|
|
- item.setRelTenantIds(list.stream().map(SysUserTenantVo::getTenantUserId).collect(Collectors.joining(SymbolConstant.COMMA)));
|
|
|
- item.setRelTenantNames(list.stream().map(SysUserTenantVo::getName).collect(Collectors.joining(SymbolConstant.COMMA)));
|
|
|
+ item.setRelTenantIds(
|
|
|
+ list.stream()
|
|
|
+ .map(SysUserTenantVo::getTenantUserId)
|
|
|
+ .collect(Collectors.joining(SymbolConstant.COMMA)));
|
|
|
+ item.setRelTenantNames(
|
|
|
+ list.stream()
|
|
|
+ .map(SysUserTenantVo::getName)
|
|
|
+ .collect(Collectors.joining(SymbolConstant.COMMA)));
|
|
|
} else {
|
|
|
- item.setRelTenantIds("");
|
|
|
- item.setRelTenantNames("");
|
|
|
+ item.setRelTenantIds("");
|
|
|
+ item.setRelTenantNames("");
|
|
|
}
|
|
|
|
|
|
|
|
|
- List<SysUserRole> sysUserRoleList = userRoleService.list(new LambdaQueryWrapper<SysUserRole>()
|
|
|
- .eq(SysUserRole::getUserId, item.getId()));
|
|
|
+ List<SysUserRole> sysUserRoleList =
|
|
|
+ userRoleService.list(
|
|
|
+ new LambdaQueryWrapper<SysUserRole>()
|
|
|
+ .eq(SysUserRole::getUserId, item.getId()));
|
|
|
if (CollectionUtils.isNotEmpty(sysUserRoleList)) {
|
|
|
- List<String> userRoles = new ArrayList<>();
|
|
|
-
|
|
|
- for (SysUserRole sysUserRole : sysUserRoleList) {
|
|
|
- String roleId = sysUserRole.getRoleId();
|
|
|
- if (StringUtils.isNotBlank(roleId)) {
|
|
|
- SysRole sysRole = sysRoleService.getOne(new LambdaQueryWrapper<SysRole>()
|
|
|
- .eq(SysRole::getId, roleId));
|
|
|
- if (sysRole != null) {
|
|
|
- userRoles.add(sysRole.getRoleName());
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ List<String> userRoles = new ArrayList<>();
|
|
|
+
|
|
|
+ for (SysUserRole sysUserRole : sysUserRoleList) {
|
|
|
+ String roleId = sysUserRole.getRoleId();
|
|
|
+ if (StringUtils.isNotBlank(roleId)) {
|
|
|
+ SysRole sysRole =
|
|
|
+ sysRoleService.getOne(
|
|
|
+ new LambdaQueryWrapper<SysRole>().eq(SysRole::getId, roleId));
|
|
|
+ if (sysRole != null) {
|
|
|
+ userRoles.add(sysRole.getRoleName());
|
|
|
+ }
|
|
|
}
|
|
|
- item.setRoleNames(StringUtils.join(userRoles, SymbolConstant.COMMA));
|
|
|
+ }
|
|
|
+ item.setRoleNames(StringUtils.join(userRoles, SymbolConstant.COMMA));
|
|
|
}
|
|
|
|
|
|
Integer posTenantId = null;
|
|
|
if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
- posTenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
|
|
|
- ;
|
|
|
+ posTenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
|
|
|
+ ;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- List<String> positionList = sysUserPositionMapper.getPositionIdByUserTenantId(item.getId(), posTenantId);
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+ List<String> positionList =
|
|
|
+ sysUserPositionMapper.getPositionIdByUserTenantId(item.getId(), posTenantId);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
item.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA));
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
-
|
|
|
- LambdaQueryWrapper<SysThirdAccount> query = new LambdaQueryWrapper<>();
|
|
|
- query.eq(SysThirdAccount::getSysUserId, item.getId());
|
|
|
- query.eq(SysThirdAccount::getTenantId, tenantId);
|
|
|
-
|
|
|
- query.eq(SysThirdAccount::getThirdType, MessageTypeEnum.DD.getType());
|
|
|
-
|
|
|
- List<SysThirdAccount> account = sysThirdAccountService.list(query);
|
|
|
- if (CollectionUtil.isNotEmpty(account)) {
|
|
|
- item.setIzBindThird(true);
|
|
|
- }
|
|
|
+
|
|
|
+ LambdaQueryWrapper<SysThirdAccount> query = new LambdaQueryWrapper<>();
|
|
|
+ query.eq(SysThirdAccount::getSysUserId, item.getId());
|
|
|
+ query.eq(SysThirdAccount::getTenantId, tenantId);
|
|
|
+
|
|
|
+ query.eq(SysThirdAccount::getThirdType, MessageTypeEnum.DD.getType());
|
|
|
+
|
|
|
+ List<SysThirdAccount> account = sysThirdAccountService.list(query);
|
|
|
+ if (CollectionUtil.isNotEmpty(account)) {
|
|
|
+ item.setIzBindThird(true);
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- result.setSuccess(true);
|
|
|
- result.setResult(pageList);
|
|
|
-
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
|
|
|
- public Result<?> resetPassword(String username, String oldpassword, String newpassword, String confirmpassword) {
|
|
|
- SysUser user = userMapper.getUserByName(username);
|
|
|
- String passwordEncode = PasswordUtil.encrypt(username, oldpassword, user.getSalt());
|
|
|
- if (!user.getPassword().equals(passwordEncode)) {
|
|
|
- return Result.error("旧密码输入错误!");
|
|
|
- }
|
|
|
- if (oConvertUtils.isEmpty(newpassword)) {
|
|
|
- return Result.error("新密码不允许为空!");
|
|
|
- }
|
|
|
- if (!newpassword.equals(confirmpassword)) {
|
|
|
- return Result.error("两次输入密码不一致!");
|
|
|
- }
|
|
|
- String password = PasswordUtil.encrypt(username, newpassword, user.getSalt());
|
|
|
- this.userMapper.update(new SysUser().setPassword(password), new LambdaQueryWrapper<SysUser>().eq(SysUser::getId, user.getId()));
|
|
|
- return Result.ok("密码重置成功!");
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
|
|
|
- public Result<?> changePassword(SysUser sysUser) {
|
|
|
- String salt = oConvertUtils.randomGen(8);
|
|
|
- sysUser.setSalt(salt);
|
|
|
- String password = sysUser.getPassword();
|
|
|
- String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
|
|
|
- sysUser.setPassword(passwordEncode);
|
|
|
- this.userMapper.updateById(sysUser);
|
|
|
- return Result.ok("密码修改成功!");
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public boolean deleteUser(String userId) {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- this.checkUserAdminRejectDel(userId);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- this.removeById(userId);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public boolean deleteBatchUsers(String userIds) {
|
|
|
-
|
|
|
- this.checkUserAdminRejectDel(userIds);
|
|
|
-
|
|
|
- this.removeByIds(Arrays.asList(userIds.split(",")));
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public SysUser getUserByName(String username) {
|
|
|
- SysUser sysUser = userMapper.getUserByName(username);
|
|
|
-
|
|
|
- if (sysUser != null) {
|
|
|
- List<Integer> list = userTenantMapper.getTenantIdsByUserId(sysUser.getId());
|
|
|
- if (oConvertUtils.isNotEmpty(list)) {
|
|
|
- sysUser.setRelTenantIds(StringUtils.join(list.toArray(), SymbolConstant.COMMA));
|
|
|
- } else {
|
|
|
- sysUser.setRelTenantIds("");
|
|
|
- }
|
|
|
- }
|
|
|
- return sysUser;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public void addUserWithRole(SysUser user, String roles) {
|
|
|
- this.save(user);
|
|
|
- if (oConvertUtils.isNotEmpty(roles)) {
|
|
|
- String[] arr = roles.split(",");
|
|
|
- for (String roleId : arr) {
|
|
|
- SysUserRole userRole = new SysUserRole(user.getId(), roleId);
|
|
|
- sysUserRoleMapper.insert(userRole);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public void editUserWithRole(SysUser user, String roles) {
|
|
|
- this.updateById(user);
|
|
|
-
|
|
|
- sysUserRoleMapper.delete(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
|
|
|
- if (oConvertUtils.isNotEmpty(roles)) {
|
|
|
- String[] arr = roles.split(",");
|
|
|
- for (String roleId : arr) {
|
|
|
- SysUserRole userRole = new SysUserRole(user.getId(), roleId);
|
|
|
- sysUserRoleMapper.insert(userRole);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<String> getRole(String username) {
|
|
|
- return sysUserRoleMapper.getRoleByUserName(username);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 获取动态首页路由配置
|
|
|
- *
|
|
|
- * @param username
|
|
|
- * @param version
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public SysRoleIndex getDynamicIndexByUserRole(String username, String version) {
|
|
|
- List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
|
|
|
- String componentUrl = RoleIndexConfigEnum.getIndexByRoles(roles);
|
|
|
- SysRoleIndex roleIndex = new SysRoleIndex(componentUrl);
|
|
|
- boolean isV3 = CommonConstant.VERSION_V3.equals(version);
|
|
|
-
|
|
|
- if (isV3 && CollectionUtils.isNotEmpty(roles)) {
|
|
|
- LambdaQueryWrapper<SysRoleIndex> routeIndexQuery = new LambdaQueryWrapper<>();
|
|
|
-
|
|
|
- routeIndexQuery.in(SysRoleIndex::getRoleCode, roles);
|
|
|
-
|
|
|
- routeIndexQuery.eq(SysRoleIndex::getStatus, CommonConstant.STATUS_1);
|
|
|
-
|
|
|
- routeIndexQuery.orderByAsc(SysRoleIndex::getPriority);
|
|
|
- List<SysRoleIndex> list = sysRoleIndexService.list(routeIndexQuery);
|
|
|
- if (CollectionUtils.isNotEmpty(list)) {
|
|
|
- roleIndex = list.get(0);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (oConvertUtils.isEmpty(roleIndex.getComponent())) {
|
|
|
- if (isV3) {
|
|
|
-
|
|
|
- return sysRoleIndexService.queryDefaultIndex();
|
|
|
- } else {
|
|
|
-
|
|
|
- return null;
|
|
|
- }
|
|
|
- }
|
|
|
- return roleIndex;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 通过用户名获取用户角色集合
|
|
|
- *
|
|
|
- * @param username 用户名
|
|
|
- * @return 角色集合
|
|
|
- */
|
|
|
- @Override
|
|
|
- public Set<String> getUserRolesSet(String username) {
|
|
|
-
|
|
|
- List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
|
|
|
- log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size()));
|
|
|
- return new HashSet<>(roles);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 通过用户名获取用户角色集合
|
|
|
- *
|
|
|
- * @param userId 用户ID
|
|
|
- * @return 角色集合
|
|
|
- */
|
|
|
- @Override
|
|
|
- public Set<String> getUserRoleSetById(String userId) {
|
|
|
-
|
|
|
- List<String> roles = sysUserRoleMapper.getRoleCodeByUserId(userId);
|
|
|
- log.info("-------通过数据库读取用户拥有的角色Rules------userId: " + userId + ",Roles size: " + (roles == null ? 0 : roles.size()));
|
|
|
- return new HashSet<>(roles);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 通过用户名获取用户权限集合
|
|
|
- *
|
|
|
- * @param userId 用户ID
|
|
|
- * @return 权限集合
|
|
|
- */
|
|
|
- @Override
|
|
|
- public Set<String> getUserPermissionsSet(String userId) {
|
|
|
- Set<String> permissionSet = new HashSet<>();
|
|
|
- List<SysPermission> permissionList = sysPermissionMapper.queryByUser(userId);
|
|
|
-
|
|
|
- if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
- if (permissionList == null) {
|
|
|
- permissionList = new ArrayList<>();
|
|
|
- }
|
|
|
- List<SysPermission> testRoleList = sysPermissionMapper.queryPermissionByTestRoleId();
|
|
|
- permissionList.addAll(testRoleList);
|
|
|
- }
|
|
|
-
|
|
|
- for (SysPermission po : permissionList) {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(po.getPerms())) {
|
|
|
- permissionSet.add(po.getPerms());
|
|
|
- }
|
|
|
- }
|
|
|
- log.info("-------通过数据库读取用户拥有的权限Perms------userId: " + userId + ",Perms size: " + (permissionSet == null ? 0 : permissionSet.size()));
|
|
|
- return permissionSet;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 升级SpringBoot2.6.6,不允许循环依赖
|
|
|
- *
|
|
|
- * @param username
|
|
|
- * @return
|
|
|
- * @author:qinfeng
|
|
|
- * @update: 2022-04-07
|
|
|
- */
|
|
|
- @Override
|
|
|
- public SysUserCacheInfo getCacheUser(String username) {
|
|
|
- SysUserCacheInfo info = new SysUserCacheInfo();
|
|
|
- info.setOneDepart(true);
|
|
|
- if (oConvertUtils.isEmpty(username)) {
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- SysUser sysUser = userMapper.getUserByName(username);
|
|
|
- if (sysUser != null) {
|
|
|
- info.setSysUserCode(sysUser.getUsername());
|
|
|
- info.setSysUserName(sysUser.getRealname());
|
|
|
- info.setSysOrgCode(sysUser.getOrgCode());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- List<SysDepart> list = sysDepartMapper.queryUserDeparts(sysUser.getId());
|
|
|
- List<String> sysMultiOrgCode = new ArrayList<String>();
|
|
|
- if (list == null || list.size() == 0) {
|
|
|
-
|
|
|
-
|
|
|
- } else if (list.size() == 1) {
|
|
|
- sysMultiOrgCode.add(list.get(0).getOrgCode());
|
|
|
- } else {
|
|
|
- info.setOneDepart(false);
|
|
|
- for (SysDepart dpt : list) {
|
|
|
- sysMultiOrgCode.add(dpt.getOrgCode());
|
|
|
- }
|
|
|
- }
|
|
|
- info.setSysMultiOrgCode(sysMultiOrgCode);
|
|
|
-
|
|
|
- return info;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 根据部门Id查询
|
|
|
- *
|
|
|
- * @param page
|
|
|
- * @param departId 部门id
|
|
|
- * @param username 用户账户名称
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public IPage<SysUser> getUserByDepId(Page<SysUser> page, String departId, String username) {
|
|
|
- return userMapper.getUserByDepId(page, departId, username);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public IPage<SysUser> getUserByDepIds(Page<SysUser> page, List<String> departIds, String username) {
|
|
|
- return userMapper.getUserByDepIds(page, departIds, username);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public Map<String, String> getDepNamesByUserIds(List<String> userIds) {
|
|
|
- List<SysUserDepVo> list = this.baseMapper.getDepNamesByUserIds(userIds);
|
|
|
-
|
|
|
- Map<String, String> res = new HashMap(5);
|
|
|
- list.forEach(item -> {
|
|
|
- if (res.get(item.getUserId()) == null) {
|
|
|
- res.put(item.getUserId(), item.getDepartName());
|
|
|
- } else {
|
|
|
- res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName());
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- return res;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- public IPage<SysUser> getUserByDepartIdAndQueryWrapper(Page<SysUser> page, String departId, QueryWrapper<SysUser> queryWrapper) {
|
|
|
- LambdaQueryWrapper<SysUser> lambdaQueryWrapper = queryWrapper.lambda();
|
|
|
-
|
|
|
- lambdaQueryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0);
|
|
|
- lambdaQueryWrapper.inSql(SysUser::getId, "SELECT user_id FROM sys_user_depart WHERE dep_id = '" + departId + "'");
|
|
|
-
|
|
|
- return userMapper.selectPage(page, lambdaQueryWrapper);
|
|
|
- }*/
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public IPage<SysUserSysDepartModel> queryUserByOrgCode(String orgCode, SysUser userParams, IPage page) {
|
|
|
- List<SysUserSysDepartModel> list = baseMapper.getUserByOrgCode(page, orgCode, userParams);
|
|
|
-
|
|
|
- for (SysUserSysDepartModel model : list) {
|
|
|
- List<String> positionList = sysUserPositionMapper.getPositionIdByUserId(model.getId());
|
|
|
- model.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA));
|
|
|
- }
|
|
|
- Integer total = baseMapper.getUserByOrgCodeTotal(orgCode, userParams);
|
|
|
-
|
|
|
- IPage<SysUserSysDepartModel> result = new Page<>(page.getCurrent(), page.getSize(), total);
|
|
|
- result.setRecords(list);
|
|
|
-
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 根据角色Id查询
|
|
|
- *
|
|
|
- * @param page
|
|
|
- * @param roleId 角色id
|
|
|
- * @param username 用户账户名称
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username) {
|
|
|
-
|
|
|
- IPage<SysUser> userRoleList = userMapper.getUserByRoleId(page, roleId, username);
|
|
|
- List<SysUser> records = userRoleList.getRecords();
|
|
|
- if (null != records && records.size() > 0) {
|
|
|
- List<String> userIds = records.stream().map(SysUser::getId).collect(Collectors.toList());
|
|
|
- Map<String, String> useDepNames = this.getDepNamesByUserIds(userIds);
|
|
|
- for (SysUser sysUser : userRoleList.getRecords()) {
|
|
|
-
|
|
|
- sysUser.setOrgCodeTxt(useDepNames.get(sysUser.getId()));
|
|
|
-
|
|
|
- this.userPositionId(sysUser);
|
|
|
- }
|
|
|
- }
|
|
|
- return userRoleList;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, key = "#username")
|
|
|
- public void updateUserDepart(String username, String orgCode, Integer loginTenantId) {
|
|
|
- baseMapper.updateUserDepart(username, orgCode, loginTenantId);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public SysUser getUserByPhone(String phone) {
|
|
|
- return userMapper.getUserByPhone(phone);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public SysUser getUserByEmail(String email) {
|
|
|
- return userMapper.getUserByEmail(email);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public void addUserWithDepart(SysUser user, String selectedParts) {
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(selectedParts)) {
|
|
|
- String[] arr = selectedParts.split(",");
|
|
|
- for (String deaprtId : arr) {
|
|
|
- SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
|
|
|
- sysUserDepartMapper.insert(userDeaprt);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
|
|
|
- public void editUserWithDepart(SysUser user, String departs) {
|
|
|
-
|
|
|
- this.updateById(user);
|
|
|
- String[] arr = {};
|
|
|
- if (oConvertUtils.isNotEmpty(departs)) {
|
|
|
- arr = departs.split(",");
|
|
|
- }
|
|
|
-
|
|
|
- List<SysUserDepart> userDepartList = sysUserDepartMapper.selectList(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
|
|
|
- if (userDepartList != null && userDepartList.size() > 0) {
|
|
|
- for (SysUserDepart depart : userDepartList) {
|
|
|
-
|
|
|
- if (!Arrays.asList(arr).contains(depart.getDepId())) {
|
|
|
- List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList(
|
|
|
- new QueryWrapper<SysDepartRole>().lambda().eq(SysDepartRole::getDepartId, depart.getDepId()));
|
|
|
- List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
|
|
|
- if (roleIds != null && roleIds.size() > 0) {
|
|
|
- departRoleUserMapper.delete(new QueryWrapper<SysDepartRoleUser>().lambda().eq(SysDepartRoleUser::getUserId, user.getId())
|
|
|
- .in(SysDepartRoleUser::getDroleId, roleIds));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
|
|
|
- if (oConvertUtils.isNotEmpty(departs)) {
|
|
|
- for (String departId : arr) {
|
|
|
- SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
|
|
|
- sysUserDepartMapper.insert(userDepart);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- * 校验用户是否有效
|
|
|
- *
|
|
|
- * @param sysUser
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public Result<?> checkUserIsEffective(SysUser sysUser) {
|
|
|
- Result<?> result = new Result<Object>();
|
|
|
-
|
|
|
- if (sysUser == null) {
|
|
|
- result.error500("该用户不存在,请注册");
|
|
|
- baseCommonService.addLog("用户登录失败,用户不存在!", CommonConstant.LOG_TYPE_1, null);
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) {
|
|
|
-
|
|
|
- baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已注销!", CommonConstant.LOG_TYPE_1, null);
|
|
|
- result.error500("该用户已注销");
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) {
|
|
|
- baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已冻结!", CommonConstant.LOG_TYPE_1, null);
|
|
|
- result.error500("该用户已冻结");
|
|
|
- return result;
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<SysUser> queryLogicDeleted() {
|
|
|
-
|
|
|
- LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
|
|
|
- wrapper.ne(SysUser::getStatus, CommonConstant.USER_QUIT);
|
|
|
- return this.queryLogicDeleted(wrapper);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<SysUser> queryLogicDeleted(LambdaQueryWrapper<SysUser> wrapper) {
|
|
|
- if (wrapper == null) {
|
|
|
- wrapper = new LambdaQueryWrapper<>();
|
|
|
- }
|
|
|
- wrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_1);
|
|
|
- return userMapper.selectLogicDeleted(wrapper);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
|
|
|
- public boolean revertLogicDeleted(List<String> userIds, SysUser updateEntity) {
|
|
|
- return userMapper.revertLogicDeleted(userIds, updateEntity) > 0;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public boolean removeLogicDeleted(List<String> userIds) {
|
|
|
-
|
|
|
- int line = userMapper.deleteLogicDeleted(userIds);
|
|
|
-
|
|
|
- line += sysUserDepartMapper.delete(new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getUserId, userIds));
|
|
|
-
|
|
|
- line += sysUserRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds));
|
|
|
-
|
|
|
- try {
|
|
|
- dingtalkService.removeThirdAppUser(userIds);
|
|
|
- wechatEnterpriseService.removeThirdAppUser(userIds);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("同步删除第三方App的用户失败:", e);
|
|
|
- }
|
|
|
-
|
|
|
- line += sysThirdAccountMapper.delete(new LambdaQueryWrapper<SysThirdAccount>().in(SysThirdAccount::getSysUserId, userIds));
|
|
|
-
|
|
|
-
|
|
|
- line += userTenantMapper.delete(new LambdaQueryWrapper<SysUserTenant>().in(SysUserTenant::getUserId, userIds));
|
|
|
-
|
|
|
- return line != 0;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public boolean updateNullPhoneEmail() {
|
|
|
- userMapper.updateNullByEmptyString("email");
|
|
|
- userMapper.updateNullByEmptyString("phone");
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void saveThirdUser(SysUser sysUser) {
|
|
|
-
|
|
|
- String userid = UUIDGenerator.generate();
|
|
|
- sysUser.setId(userid);
|
|
|
- baseMapper.insert(sysUser);
|
|
|
-
|
|
|
- SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleCode, "third_role"));
|
|
|
-
|
|
|
- SysUserRole userRole = new SysUserRole();
|
|
|
- userRole.setRoleId(sysRole.getId());
|
|
|
- userRole.setUserId(userid);
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ result.setSuccess(true);
|
|
|
+ result.setResult(pageList);
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ allEntries = true)
|
|
|
+ public Result<?> resetPassword(
|
|
|
+ String username, String oldpassword, String newpassword, String confirmpassword) {
|
|
|
+ SysUser user = userMapper.getUserByName(username);
|
|
|
+ String passwordEncode = PasswordUtil.encrypt(username, oldpassword, user.getSalt());
|
|
|
+ if (!user.getPassword().equals(passwordEncode)) {
|
|
|
+ return Result.error("旧密码输入错误!");
|
|
|
+ }
|
|
|
+ if (oConvertUtils.isEmpty(newpassword)) {
|
|
|
+ return Result.error("新密码不允许为空!");
|
|
|
+ }
|
|
|
+ if (!newpassword.equals(confirmpassword)) {
|
|
|
+ return Result.error("两次输入密码不一致!");
|
|
|
+ }
|
|
|
+ String password = PasswordUtil.encrypt(username, newpassword, user.getSalt());
|
|
|
+ this.userMapper.update(
|
|
|
+ new SysUser().setPassword(password),
|
|
|
+ new LambdaQueryWrapper<SysUser>().eq(SysUser::getId, user.getId()));
|
|
|
+ return Result.ok("密码重置成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ allEntries = true)
|
|
|
+ public Result<?> changePassword(SysUser sysUser) {
|
|
|
+ String salt = oConvertUtils.randomGen(8);
|
|
|
+ sysUser.setSalt(salt);
|
|
|
+ String password = sysUser.getPassword();
|
|
|
+ String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
|
|
|
+ sysUser.setPassword(passwordEncode);
|
|
|
+ this.userMapper.updateById(sysUser);
|
|
|
+ return Result.ok("密码修改成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ allEntries = true)
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean deleteUser(String userId) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ this.checkUserAdminRejectDel(userId);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ this.removeById(userId);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ allEntries = true)
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean deleteBatchUsers(String userIds) {
|
|
|
+
|
|
|
+ this.checkUserAdminRejectDel(userIds);
|
|
|
+
|
|
|
+ this.removeByIds(Arrays.asList(userIds.split(",")));
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public SysUser getUserByName(String username) {
|
|
|
+ SysUser sysUser = userMapper.getUserByName(username);
|
|
|
+
|
|
|
+ if (sysUser != null) {
|
|
|
+ List<Integer> list = userTenantMapper.getTenantIdsByUserId(sysUser.getId());
|
|
|
+ if (oConvertUtils.isNotEmpty(list)) {
|
|
|
+ sysUser.setRelTenantIds(StringUtils.join(list.toArray(), SymbolConstant.COMMA));
|
|
|
+ } else {
|
|
|
+ sysUser.setRelTenantIds("");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sysUser;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void addUserWithRole(SysUser user, String roles) {
|
|
|
+ this.save(user);
|
|
|
+ if (oConvertUtils.isNotEmpty(roles)) {
|
|
|
+ String[] arr = roles.split(",");
|
|
|
+ for (String roleId : arr) {
|
|
|
+ SysUserRole userRole = new SysUserRole(user.getId(), roleId);
|
|
|
sysUserRoleMapper.insert(userRole);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<SysUser> queryByDepIds(List<String> departIds, String username) {
|
|
|
- return userMapper.queryByDepIds(departIds, username);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public void saveUser(SysUser user, String selectedRoles, String selectedDeparts, String relTenantIds) {
|
|
|
-
|
|
|
- this.save(user);
|
|
|
-
|
|
|
- this.saveUserTenant(user.getId(), relTenantIds);
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(selectedRoles)) {
|
|
|
- String[] arr = selectedRoles.split(",");
|
|
|
- for (String roleId : arr) {
|
|
|
- SysUserRole userRole = new SysUserRole(user.getId(), roleId);
|
|
|
- sysUserRoleMapper.insert(userRole);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(selectedDeparts)) {
|
|
|
- String[] arr = selectedDeparts.split(",");
|
|
|
- for (String deaprtId : arr) {
|
|
|
- SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
|
|
|
- sysUserDepartMapper.insert(userDeaprt);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- this.saveUserPosition(user.getId(), user.getPost());
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
|
|
|
- public void editUser(SysUser user, String roles, String departs, String relTenantIds) {
|
|
|
-
|
|
|
- this.editUserTenants(user.getId(), relTenantIds);
|
|
|
-
|
|
|
- this.updateById(user);
|
|
|
-
|
|
|
-
|
|
|
- sysUserRoleMapper.delete(new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
|
|
|
- if (oConvertUtils.isNotEmpty(roles)) {
|
|
|
- String[] arr = roles.split(",");
|
|
|
- for (String roleId : arr) {
|
|
|
- SysUserRole userRole = new SysUserRole(user.getId(), roleId);
|
|
|
- sysUserRoleMapper.insert(userRole);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- String[] arr = {};
|
|
|
- if (oConvertUtils.isNotEmpty(departs)) {
|
|
|
- arr = departs.split(",");
|
|
|
- }
|
|
|
-
|
|
|
- List<SysUserDepart> userDepartList = sysUserDepartMapper.selectList(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
|
|
|
- if (userDepartList != null && userDepartList.size() > 0) {
|
|
|
- for (SysUserDepart depart : userDepartList) {
|
|
|
-
|
|
|
- if (!Arrays.asList(arr).contains(depart.getDepId())) {
|
|
|
- List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList(
|
|
|
- new QueryWrapper<SysDepartRole>().lambda().eq(SysDepartRole::getDepartId, depart.getDepId()));
|
|
|
- List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
|
|
|
- if (roleIds != null && roleIds.size() > 0) {
|
|
|
- departRoleUserMapper.delete(new QueryWrapper<SysDepartRoleUser>().lambda().eq(SysDepartRoleUser::getUserId, user.getId())
|
|
|
- .in(SysDepartRoleUser::getDroleId, roleIds));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- sysUserDepartMapper.delete(new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
|
|
|
- if (oConvertUtils.isNotEmpty(departs)) {
|
|
|
- for (String departId : arr) {
|
|
|
- SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
|
|
|
- sysUserDepartMapper.insert(userDepart);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- userMapper.updateNullByEmptyString("email");
|
|
|
- userMapper.updateNullByEmptyString("phone");
|
|
|
-
|
|
|
-
|
|
|
- this.editUserPosition(user.getId(), user.getPost());
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<String> userIdToUsername(Collection<String> userIdList) {
|
|
|
- LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
- queryWrapper.in(SysUser::getId, userIdList);
|
|
|
- List<SysUser> userList = super.list(queryWrapper);
|
|
|
- return userList.stream().map(SysUser::getUsername).collect(Collectors.toList());
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @Cacheable(cacheNames = CacheConstant.SYS_USERS_CACHE, key = "#username")
|
|
|
- @SensitiveEncode
|
|
|
- public LoginUser getEncodeUserInfo(String username) {
|
|
|
- if (oConvertUtils.isEmpty(username)) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- LoginUser loginUser = new LoginUser();
|
|
|
- SysUser sysUser = userMapper.getUserByName(username);
|
|
|
-
|
|
|
- this.setUserTenantIds(sysUser);
|
|
|
-
|
|
|
- this.userPositionId(sysUser);
|
|
|
- if (sysUser == null) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- BeanUtils.copyProperties(sysUser, loginUser);
|
|
|
-
|
|
|
- loginUser.setOrgId(this.getDepartIdByOrCode(sysUser.getOrgCode()));
|
|
|
-
|
|
|
- loginUser.setRoleCode(this.getJoinRoleCodeByUserId(sysUser.getId()));
|
|
|
- return loginUser;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- public void userQuit(String username) {
|
|
|
- SysUser sysUser = userMapper.getUserByName(username);
|
|
|
- if (null == sysUser) {
|
|
|
- throw new JeecgBootException("离职失败,该用户已不存在");
|
|
|
- }
|
|
|
-
|
|
|
- int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
|
|
|
-
|
|
|
- if (tenantId == 0) {
|
|
|
- throw new JeecgBootException("离职失败,租户不存在");
|
|
|
- }
|
|
|
- LambdaQueryWrapper<SysUserTenant> query = new LambdaQueryWrapper<>();
|
|
|
- query.eq(SysUserTenant::getUserId, sysUser.getId());
|
|
|
- query.eq(SysUserTenant::getTenantId, tenantId);
|
|
|
- SysUserTenant userTenant = new SysUserTenant();
|
|
|
- userTenant.setStatus(CommonConstant.USER_TENANT_QUIT);
|
|
|
- userTenantMapper.update(userTenant, query);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<SysUser> getQuitList(Integer tenantId) {
|
|
|
- return userMapper.getTenantQuitList(tenantId);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void updateStatusAndFlag(List<String> userIds, SysUser sysUser) {
|
|
|
- userMapper.updateStatusAndFlag(userIds, sysUser);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 设置登录租户
|
|
|
- *
|
|
|
- * @param sysUser
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public Result<JSONObject> setLoginTenant(SysUser sysUser, JSONObject obj, String username, Result<JSONObject> result) {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- List<SysTenant> tenantList = relationMapper.getTenantNoCancel(sysUser.getId());
|
|
|
- obj.put("tenantList", tenantList);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- if (tenantList != null && tenantList.size() > 0) {
|
|
|
- if (tenantList.size() == 1) {
|
|
|
- sysUser.setLoginTenantId(tenantList.get(0).getId());
|
|
|
- } else {
|
|
|
- List<SysTenant> listAfterFilter = tenantList.stream().filter(s -> s.getId().equals(sysUser.getLoginTenantId())).collect(Collectors.toList());
|
|
|
- if (listAfterFilter == null || listAfterFilter.size() == 0) {
|
|
|
-
|
|
|
- sysUser.setLoginTenantId(tenantList.get(0).getId());
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
-
|
|
|
- sysUser.setLoginTenantId(0);
|
|
|
- }
|
|
|
-
|
|
|
- this.updateUserDepart(username, null, sysUser.getLoginTenantId());
|
|
|
- log.info(" 登录接口用户的租户ID = {}", sysUser.getLoginTenantId());
|
|
|
- if (sysUser.getLoginTenantId() != null) {
|
|
|
-
|
|
|
- TenantContext.setTenant(sysUser.getLoginTenantId() + "");
|
|
|
- }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ allEntries = true)
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void editUserWithRole(SysUser user, String roles) {
|
|
|
+ this.updateById(user);
|
|
|
+
|
|
|
+ sysUserRoleMapper.delete(
|
|
|
+ new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
|
|
|
+ if (oConvertUtils.isNotEmpty(roles)) {
|
|
|
+ String[] arr = roles.split(",");
|
|
|
+ for (String roleId : arr) {
|
|
|
+ SysUserRole userRole = new SysUserRole(user.getId(), roleId);
|
|
|
+ sysUserRoleMapper.insert(userRole);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<String> getRole(String username) {
|
|
|
+ return sysUserRoleMapper.getRoleByUserName(username);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 获取动态首页路由配置
|
|
|
+ *
|
|
|
+ * @param username
|
|
|
+ * @param version
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public SysRoleIndex getDynamicIndexByUserRole(String username, String version) {
|
|
|
+ List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
|
|
|
+ String componentUrl = RoleIndexConfigEnum.getIndexByRoles(roles);
|
|
|
+ SysRoleIndex roleIndex = new SysRoleIndex(componentUrl);
|
|
|
+ boolean isV3 = CommonConstant.VERSION_V3.equals(version);
|
|
|
+
|
|
|
+ if (isV3 && CollectionUtils.isNotEmpty(roles)) {
|
|
|
+ LambdaQueryWrapper<SysRoleIndex> routeIndexQuery = new LambdaQueryWrapper<>();
|
|
|
+
|
|
|
+ routeIndexQuery.in(SysRoleIndex::getRoleCode, roles);
|
|
|
+
|
|
|
+ routeIndexQuery.eq(SysRoleIndex::getStatus, CommonConstant.STATUS_1);
|
|
|
+
|
|
|
+ routeIndexQuery.orderByAsc(SysRoleIndex::getPriority);
|
|
|
+ List<SysRoleIndex> list = sysRoleIndexService.list(routeIndexQuery);
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
+ roleIndex = list.get(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (oConvertUtils.isEmpty(roleIndex.getComponent())) {
|
|
|
+ if (isV3) {
|
|
|
+
|
|
|
+ return sysRoleIndexService.queryDefaultIndex();
|
|
|
+ } else {
|
|
|
+
|
|
|
return null;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- * 获取租户id
|
|
|
- *
|
|
|
- * @param sysUser
|
|
|
- */
|
|
|
- private void setUserTenantIds(SysUser sysUser) {
|
|
|
- if (ObjectUtils.isNotEmpty(sysUser)) {
|
|
|
- List<Integer> list = relationMapper.getTenantIdsNoStatus(sysUser.getId());
|
|
|
- if (null != list && list.size() > 0) {
|
|
|
- sysUser.setRelTenantIds(StringUtils.join(list.toArray(), ","));
|
|
|
- } else {
|
|
|
- sysUser.setRelTenantIds("");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 保存租户
|
|
|
- *
|
|
|
- * @param userId
|
|
|
- * @param relTenantIds
|
|
|
- */
|
|
|
- private void saveUserTenant(String userId, String relTenantIds) {
|
|
|
- if (oConvertUtils.isNotEmpty(relTenantIds)) {
|
|
|
- String[] tenantIds = relTenantIds.split(SymbolConstant.COMMA);
|
|
|
- for (String tenantId : tenantIds) {
|
|
|
- SysUserTenant relation = new SysUserTenant();
|
|
|
- relation.setUserId(userId);
|
|
|
- relation.setTenantId(Integer.valueOf(tenantId));
|
|
|
- relation.setStatus(CommonConstant.STATUS_1);
|
|
|
-
|
|
|
- LambdaQueryWrapper sysUserTenantQueryWrapper = new LambdaQueryWrapper<SysUserTenant>()
|
|
|
- .eq(SysUserTenant::getUserId, userId)
|
|
|
- .eq(SysUserTenant::getTenantId, Integer.valueOf(tenantId));
|
|
|
- SysUserTenant tenantPresent = relationMapper.selectOne(sysUserTenantQueryWrapper);
|
|
|
- if (tenantPresent != null) {
|
|
|
- tenantPresent.setStatus(CommonConstant.STATUS_1);
|
|
|
- relationMapper.updateById(tenantPresent);
|
|
|
- } else {
|
|
|
- relationMapper.insert(relation);
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
-
|
|
|
- if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
-
|
|
|
- String tenantId = TenantContext.getTenant();
|
|
|
- if (oConvertUtils.isNotEmpty(tenantId)) {
|
|
|
- Integer count = relationMapper.userTenantIzExist(userId, Integer.parseInt(tenantId));
|
|
|
- if (count == 0) {
|
|
|
- SysUserTenant relation = new SysUserTenant();
|
|
|
- relation.setUserId(userId);
|
|
|
- relation.setTenantId(Integer.parseInt(tenantId));
|
|
|
- relation.setStatus(CommonConstant.STATUS_1);
|
|
|
- relationMapper.insert(relation);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 编辑租户
|
|
|
- *
|
|
|
- * @param userId
|
|
|
- * @param relTenantIds
|
|
|
- */
|
|
|
- private void editUserTenants(String userId, String relTenantIds) {
|
|
|
- LambdaQueryWrapper<SysUserTenant> query = new LambdaQueryWrapper<>();
|
|
|
- query.eq(SysUserTenant::getUserId, userId);
|
|
|
-
|
|
|
- List<Integer> oldTenantIds = relationMapper.getTenantIdsByUserId(userId);
|
|
|
-
|
|
|
- if (oConvertUtils.isEmpty(relTenantIds) && CollectionUtils.isNotEmpty(oldTenantIds)) {
|
|
|
- this.deleteTenantByUserId(userId, null);
|
|
|
- } else if (oConvertUtils.isNotEmpty(relTenantIds) && CollectionUtils.isEmpty(oldTenantIds)) {
|
|
|
-
|
|
|
- this.saveUserTenant(userId, relTenantIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return roleIndex;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 通过用户名获取用户角色集合
|
|
|
+ *
|
|
|
+ * @param username 用户名
|
|
|
+ * @return 角色集合
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Set<String> getUserRolesSet(String username) {
|
|
|
+
|
|
|
+ List<String> roles = sysUserRoleMapper.getRoleByUserName(username);
|
|
|
+ log.info(
|
|
|
+ "-------通过数据库读取用户拥有的角色Rules------username: "
|
|
|
+ + username
|
|
|
+ + ",Roles size: "
|
|
|
+ + (roles == null ? 0 : roles.size()));
|
|
|
+ return new HashSet<>(roles);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 通过用户名获取用户角色集合
|
|
|
+ *
|
|
|
+ * @param userId 用户ID
|
|
|
+ * @return 角色集合
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Set<String> getUserRoleSetById(String userId) {
|
|
|
+
|
|
|
+ List<String> roles = sysUserRoleMapper.getRoleCodeByUserId(userId);
|
|
|
+ log.info(
|
|
|
+ "-------通过数据库读取用户拥有的角色Rules------userId: "
|
|
|
+ + userId
|
|
|
+ + ",Roles size: "
|
|
|
+ + (roles == null ? 0 : roles.size()));
|
|
|
+ return new HashSet<>(roles);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 通过用户名获取用户权限集合
|
|
|
+ *
|
|
|
+ * @param userId 用户ID
|
|
|
+ * @return 权限集合
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Set<String> getUserPermissionsSet(String userId) {
|
|
|
+ Set<String> permissionSet = new HashSet<>();
|
|
|
+ List<SysPermission> permissionList = sysPermissionMapper.queryByUser(userId);
|
|
|
+
|
|
|
+ if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
+ if (permissionList == null) {
|
|
|
+ permissionList = new ArrayList<>();
|
|
|
+ }
|
|
|
+ List<SysPermission> testRoleList = sysPermissionMapper.queryPermissionByTestRoleId();
|
|
|
+ permissionList.addAll(testRoleList);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (SysPermission po : permissionList) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(po.getPerms())) {
|
|
|
+ permissionSet.add(po.getPerms());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info(
|
|
|
+ "-------通过数据库读取用户拥有的权限Perms------userId: "
|
|
|
+ + userId
|
|
|
+ + ",Perms size: "
|
|
|
+ + (permissionSet == null ? 0 : permissionSet.size()));
|
|
|
+ return permissionSet;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 升级SpringBoot2.6.6,不允许循环依赖
|
|
|
+ *
|
|
|
+ * @param username
|
|
|
+ * @return
|
|
|
+ * @author:qinfeng
|
|
|
+ * @update: 2022-04-07
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public SysUserCacheInfo getCacheUser(String username) {
|
|
|
+ SysUserCacheInfo info = new SysUserCacheInfo();
|
|
|
+ info.setOneDepart(true);
|
|
|
+ if (oConvertUtils.isEmpty(username)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ SysUser sysUser = userMapper.getUserByName(username);
|
|
|
+ if (sysUser != null) {
|
|
|
+ info.setSysUserCode(sysUser.getUsername());
|
|
|
+ info.setSysUserName(sysUser.getRealname());
|
|
|
+ info.setSysOrgCode(sysUser.getOrgCode());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ List<SysDepart> list = sysDepartMapper.queryUserDeparts(sysUser.getId());
|
|
|
+ List<String> sysMultiOrgCode = new ArrayList<String>();
|
|
|
+ if (list == null || list.size() == 0) {
|
|
|
+
|
|
|
+
|
|
|
+ } else if (list.size() == 1) {
|
|
|
+ sysMultiOrgCode.add(list.get(0).getOrgCode());
|
|
|
+ } else {
|
|
|
+ info.setOneDepart(false);
|
|
|
+ for (SysDepart dpt : list) {
|
|
|
+ sysMultiOrgCode.add(dpt.getOrgCode());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ info.setSysMultiOrgCode(sysMultiOrgCode);
|
|
|
+
|
|
|
+ return info;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 根据部门Id查询
|
|
|
+ *
|
|
|
+ * @param page
|
|
|
+ * @param departId 部门id
|
|
|
+ * @param username 用户账户名称
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public IPage<SysUser> getUserByDepId(Page<SysUser> page, String departId, String username) {
|
|
|
+ return userMapper.getUserByDepId(page, departId, username);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPage<SysUser> getUserByDepIds(
|
|
|
+ Page<SysUser> page, List<String> departIds, String username) {
|
|
|
+ return userMapper.getUserByDepIds(page, departIds, username);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, String> getDepNamesByUserIds(List<String> userIds) {
|
|
|
+ List<SysUserDepVo> list = this.baseMapper.getDepNamesByUserIds(userIds);
|
|
|
+
|
|
|
+ Map<String, String> res = new HashMap(5);
|
|
|
+ list.forEach(
|
|
|
+ item -> {
|
|
|
+ if (res.get(item.getUserId()) == null) {
|
|
|
+ res.put(item.getUserId(), item.getDepartName());
|
|
|
+ } else {
|
|
|
+ res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return res;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public IPage<SysUser> getUserByDepartIdAndQueryWrapper(Page<SysUser> page, String departId, QueryWrapper<SysUser> queryWrapper) {
|
|
|
+ LambdaQueryWrapper<SysUser> lambdaQueryWrapper = queryWrapper.lambda();
|
|
|
+
|
|
|
+ lambdaQueryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0);
|
|
|
+ lambdaQueryWrapper.inSql(SysUser::getId, "SELECT user_id FROM sys_user_depart WHERE dep_id = '" + departId + "'");
|
|
|
+
|
|
|
+ return userMapper.selectPage(page, lambdaQueryWrapper);
|
|
|
+ }*/
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPage<SysUserSysDepartModel> queryUserByOrgCode(
|
|
|
+ String orgCode, SysUser userParams, IPage page) {
|
|
|
+ List<SysUserSysDepartModel> list = baseMapper.getUserByOrgCode(page, orgCode, userParams);
|
|
|
+
|
|
|
+ for (SysUserSysDepartModel model : list) {
|
|
|
+ List<String> positionList = sysUserPositionMapper.getPositionIdByUserId(model.getId());
|
|
|
+ model.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA));
|
|
|
+ }
|
|
|
+ Integer total = baseMapper.getUserByOrgCodeTotal(orgCode, userParams);
|
|
|
+
|
|
|
+ IPage<SysUserSysDepartModel> result = new Page<>(page.getCurrent(), page.getSize(), total);
|
|
|
+ result.setRecords(list);
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 根据角色Id查询
|
|
|
+ *
|
|
|
+ * @param page
|
|
|
+ * @param roleId 角色id
|
|
|
+ * @param username 用户账户名称
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public IPage<SysUser> getUserByRoleId(Page<SysUser> page, String roleId, String username) {
|
|
|
+
|
|
|
+
|
|
|
+ IPage<SysUser> userRoleList = userMapper.getUserByRoleId(page, roleId, username);
|
|
|
+ List<SysUser> records = userRoleList.getRecords();
|
|
|
+ if (null != records && records.size() > 0) {
|
|
|
+ List<String> userIds = records.stream().map(SysUser::getId).collect(Collectors.toList());
|
|
|
+ Map<String, String> useDepNames = this.getDepNamesByUserIds(userIds);
|
|
|
+ for (SysUser sysUser : userRoleList.getRecords()) {
|
|
|
+
|
|
|
+ sysUser.setOrgCodeTxt(useDepNames.get(sysUser.getId()));
|
|
|
+
|
|
|
+ this.userPositionId(sysUser);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return userRoleList;
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ key = "#username")
|
|
|
+ public void updateUserDepart(String username, String orgCode, Integer loginTenantId) {
|
|
|
+ baseMapper.updateUserDepart(username, orgCode, loginTenantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public SysUser getUserByPhone(String phone) {
|
|
|
+ return userMapper.getUserByPhone(phone);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public SysUser getUserByEmail(String email) {
|
|
|
+ return userMapper.getUserByEmail(email);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void addUserWithDepart(SysUser user, String selectedParts) {
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(selectedParts)) {
|
|
|
+ String[] arr = selectedParts.split(",");
|
|
|
+ for (String deaprtId : arr) {
|
|
|
+ SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
|
|
|
+ sysUserDepartMapper.insert(userDeaprt);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ allEntries = true)
|
|
|
+ public void editUserWithDepart(SysUser user, String departs) {
|
|
|
+
|
|
|
+ this.updateById(user);
|
|
|
+ String[] arr = {};
|
|
|
+ if (oConvertUtils.isNotEmpty(departs)) {
|
|
|
+ arr = departs.split(",");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<SysUserDepart> userDepartList =
|
|
|
+ sysUserDepartMapper.selectList(
|
|
|
+ new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
|
|
|
+ if (userDepartList != null && userDepartList.size() > 0) {
|
|
|
+ for (SysUserDepart depart : userDepartList) {
|
|
|
+
|
|
|
+ if (!Arrays.asList(arr).contains(depart.getDepId())) {
|
|
|
+ List<SysDepartRole> sysDepartRoleList =
|
|
|
+ sysDepartRoleMapper.selectList(
|
|
|
+ new QueryWrapper<SysDepartRole>()
|
|
|
+ .lambda()
|
|
|
+ .eq(SysDepartRole::getDepartId, depart.getDepId()));
|
|
|
+ List<String> roleIds =
|
|
|
+ sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
|
|
|
+ if (roleIds != null && roleIds.size() > 0) {
|
|
|
+ departRoleUserMapper.delete(
|
|
|
+ new QueryWrapper<SysDepartRoleUser>()
|
|
|
+ .lambda()
|
|
|
+ .eq(SysDepartRoleUser::getUserId, user.getId())
|
|
|
+ .in(SysDepartRoleUser::getDroleId, roleIds));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ sysUserDepartMapper.delete(
|
|
|
+ new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
|
|
|
+ if (oConvertUtils.isNotEmpty(departs)) {
|
|
|
+ for (String departId : arr) {
|
|
|
+ SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
|
|
|
+ sysUserDepartMapper.insert(userDepart);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 校验用户是否有效
|
|
|
+ *
|
|
|
+ * @param sysUser
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Result<?> checkUserIsEffective(SysUser sysUser) {
|
|
|
+ Result<?> result = new Result<Object>();
|
|
|
+
|
|
|
+ if (sysUser == null) {
|
|
|
+ result.error500("该用户不存在,请注册");
|
|
|
+ baseCommonService.addLog("用户登录失败,用户不存在!", CommonConstant.LOG_TYPE_1, null);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) {
|
|
|
+
|
|
|
+ baseCommonService.addLog(
|
|
|
+ "用户登录失败,用户名:" + sysUser.getUsername() + "已注销!", CommonConstant.LOG_TYPE_1, null);
|
|
|
+ result.error500("该用户已注销");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) {
|
|
|
+ baseCommonService.addLog(
|
|
|
+ "用户登录失败,用户名:" + sysUser.getUsername() + "已冻结!", CommonConstant.LOG_TYPE_1, null);
|
|
|
+ result.error500("该用户已冻结");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SysUser> queryLogicDeleted() {
|
|
|
+
|
|
|
+ LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.ne(SysUser::getStatus, CommonConstant.USER_QUIT);
|
|
|
+ return this.queryLogicDeleted(wrapper);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SysUser> queryLogicDeleted(LambdaQueryWrapper<SysUser> wrapper) {
|
|
|
+ if (wrapper == null) {
|
|
|
+ wrapper = new LambdaQueryWrapper<>();
|
|
|
+ }
|
|
|
+ wrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_1);
|
|
|
+ return userMapper.selectLogicDeleted(wrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ allEntries = true)
|
|
|
+ public boolean revertLogicDeleted(List<String> userIds, SysUser updateEntity) {
|
|
|
+ return userMapper.revertLogicDeleted(userIds, updateEntity) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean removeLogicDeleted(List<String> userIds) {
|
|
|
+
|
|
|
+ int line = userMapper.deleteLogicDeleted(userIds);
|
|
|
+
|
|
|
+ line +=
|
|
|
+ sysUserDepartMapper.delete(
|
|
|
+ new LambdaQueryWrapper<SysUserDepart>().in(SysUserDepart::getUserId, userIds));
|
|
|
+
|
|
|
+ line +=
|
|
|
+ sysUserRoleMapper.delete(
|
|
|
+ new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds));
|
|
|
+
|
|
|
+ try {
|
|
|
+ dingtalkService.removeThirdAppUser(userIds);
|
|
|
+ wechatEnterpriseService.removeThirdAppUser(userIds);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("同步删除第三方App的用户失败:", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ line +=
|
|
|
+ sysThirdAccountMapper.delete(
|
|
|
+ new LambdaQueryWrapper<SysThirdAccount>().in(SysThirdAccount::getSysUserId, userIds));
|
|
|
+
|
|
|
+
|
|
|
+ line +=
|
|
|
+ userTenantMapper.delete(
|
|
|
+ new LambdaQueryWrapper<SysUserTenant>().in(SysUserTenant::getUserId, userIds));
|
|
|
+
|
|
|
+ return line != 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean updateNullPhoneEmail() {
|
|
|
+ userMapper.updateNullByEmptyString("email");
|
|
|
+ userMapper.updateNullByEmptyString("phone");
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void saveThirdUser(SysUser sysUser) {
|
|
|
+
|
|
|
+ String userid = UUIDGenerator.generate();
|
|
|
+ sysUser.setId(userid);
|
|
|
+ baseMapper.insert(sysUser);
|
|
|
+
|
|
|
+ SysRole sysRole =
|
|
|
+ sysRoleMapper.selectOne(
|
|
|
+ new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleCode, "third_role"));
|
|
|
+
|
|
|
+ SysUserRole userRole = new SysUserRole();
|
|
|
+ userRole.setRoleId(sysRole.getId());
|
|
|
+ userRole.setUserId(userid);
|
|
|
+ sysUserRoleMapper.insert(userRole);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SysUser> queryByDepIds(List<String> departIds, String username) {
|
|
|
+ return userMapper.queryByDepIds(departIds, username);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void saveUser(
|
|
|
+ SysUser user, String selectedRoles, String selectedDeparts, String relTenantIds) {
|
|
|
+
|
|
|
+ this.save(user);
|
|
|
+
|
|
|
+ this.saveUserTenant(user.getId(), relTenantIds);
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(selectedRoles)) {
|
|
|
+ String[] arr = selectedRoles.split(",");
|
|
|
+ for (String roleId : arr) {
|
|
|
+ SysUserRole userRole = new SysUserRole(user.getId(), roleId);
|
|
|
+ sysUserRoleMapper.insert(userRole);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(selectedDeparts)) {
|
|
|
+ String[] arr = selectedDeparts.split(",");
|
|
|
+ for (String deaprtId : arr) {
|
|
|
+ SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId);
|
|
|
+ sysUserDepartMapper.insert(userDeaprt);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ this.saveUserPosition(user.getId(), user.getPost());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ allEntries = true)
|
|
|
+ public void editUser(SysUser user, String roles, String departs, String relTenantIds) {
|
|
|
+
|
|
|
+ this.editUserTenants(user.getId(), relTenantIds);
|
|
|
+
|
|
|
+ this.updateById(user);
|
|
|
+
|
|
|
+
|
|
|
+ sysUserRoleMapper.delete(
|
|
|
+ new QueryWrapper<SysUserRole>().lambda().eq(SysUserRole::getUserId, user.getId()));
|
|
|
+ if (oConvertUtils.isNotEmpty(roles)) {
|
|
|
+ String[] arr = roles.split(",");
|
|
|
+ for (String roleId : arr) {
|
|
|
+ SysUserRole userRole = new SysUserRole(user.getId(), roleId);
|
|
|
+ sysUserRoleMapper.insert(userRole);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ String[] arr = {};
|
|
|
+ if (oConvertUtils.isNotEmpty(departs)) {
|
|
|
+ arr = departs.split(",");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<SysUserDepart> userDepartList =
|
|
|
+ sysUserDepartMapper.selectList(
|
|
|
+ new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
|
|
|
+ if (userDepartList != null && userDepartList.size() > 0) {
|
|
|
+ for (SysUserDepart depart : userDepartList) {
|
|
|
+
|
|
|
+ if (!Arrays.asList(arr).contains(depart.getDepId())) {
|
|
|
+ List<SysDepartRole> sysDepartRoleList =
|
|
|
+ sysDepartRoleMapper.selectList(
|
|
|
+ new QueryWrapper<SysDepartRole>()
|
|
|
+ .lambda()
|
|
|
+ .eq(SysDepartRole::getDepartId, depart.getDepId()));
|
|
|
+ List<String> roleIds =
|
|
|
+ sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
|
|
|
+ if (roleIds != null && roleIds.size() > 0) {
|
|
|
+ departRoleUserMapper.delete(
|
|
|
+ new QueryWrapper<SysDepartRoleUser>()
|
|
|
+ .lambda()
|
|
|
+ .eq(SysDepartRoleUser::getUserId, user.getId())
|
|
|
+ .in(SysDepartRoleUser::getDroleId, roleIds));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ sysUserDepartMapper.delete(
|
|
|
+ new QueryWrapper<SysUserDepart>().lambda().eq(SysUserDepart::getUserId, user.getId()));
|
|
|
+ if (oConvertUtils.isNotEmpty(departs)) {
|
|
|
+ for (String departId : arr) {
|
|
|
+ SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
|
|
|
+ sysUserDepartMapper.insert(userDepart);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ userMapper.updateNullByEmptyString("email");
|
|
|
+ userMapper.updateNullByEmptyString("phone");
|
|
|
+
|
|
|
+
|
|
|
+ this.editUserPosition(user.getId(), user.getPost());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<String> userIdToUsername(Collection<String> userIdList) {
|
|
|
+ LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.in(SysUser::getId, userIdList);
|
|
|
+ List<SysUser> userList = super.list(queryWrapper);
|
|
|
+ return userList.stream().map(SysUser::getUsername).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Cacheable(cacheNames = CacheConstant.SYS_USERS_CACHE, key = "#username")
|
|
|
+ @SensitiveEncode
|
|
|
+ public LoginUser getEncodeUserInfo(String username) {
|
|
|
+ if (oConvertUtils.isEmpty(username)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ LoginUser loginUser = new LoginUser();
|
|
|
+ SysUser sysUser = userMapper.getUserByName(username);
|
|
|
+
|
|
|
+ this.setUserTenantIds(sysUser);
|
|
|
+
|
|
|
+ this.userPositionId(sysUser);
|
|
|
+ if (sysUser == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ BeanUtils.copyProperties(sysUser, loginUser);
|
|
|
+
|
|
|
+ loginUser.setOrgId(this.getDepartIdByOrCode(sysUser.getOrgCode()));
|
|
|
+
|
|
|
+ loginUser.setRoleCode(this.getJoinRoleCodeByUserId(sysUser.getId()));
|
|
|
+ return loginUser;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ allEntries = true)
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void userQuit(String username) {
|
|
|
+ SysUser sysUser = userMapper.getUserByName(username);
|
|
|
+ if (null == sysUser) {
|
|
|
+ throw new JeecgBootException("离职失败,该用户已不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ int tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
|
|
|
+
|
|
|
+ if (tenantId == 0) {
|
|
|
+ throw new JeecgBootException("离职失败,租户不存在");
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<SysUserTenant> query = new LambdaQueryWrapper<>();
|
|
|
+ query.eq(SysUserTenant::getUserId, sysUser.getId());
|
|
|
+ query.eq(SysUserTenant::getTenantId, tenantId);
|
|
|
+ SysUserTenant userTenant = new SysUserTenant();
|
|
|
+ userTenant.setStatus(CommonConstant.USER_TENANT_QUIT);
|
|
|
+ userTenantMapper.update(userTenant, query);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SysUser> getQuitList(Integer tenantId) {
|
|
|
+ return userMapper.getTenantQuitList(tenantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void updateStatusAndFlag(List<String> userIds, SysUser sysUser) {
|
|
|
+ userMapper.updateStatusAndFlag(userIds, sysUser);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 设置登录租户
|
|
|
+ *
|
|
|
+ * @param sysUser
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Result<JSONObject> setLoginTenant(
|
|
|
+ SysUser sysUser, JSONObject obj, String username, Result<JSONObject> result) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ List<SysTenant> tenantList = relationMapper.getTenantNoCancel(sysUser.getId());
|
|
|
+ obj.put("tenantList", tenantList);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (tenantList != null && tenantList.size() > 0) {
|
|
|
+ if (tenantList.size() == 1) {
|
|
|
+ sysUser.setLoginTenantId(tenantList.get(0).getId());
|
|
|
+ } else {
|
|
|
+ List<SysTenant> listAfterFilter =
|
|
|
+ tenantList.stream()
|
|
|
+ .filter(s -> s.getId().equals(sysUser.getLoginTenantId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (listAfterFilter == null || listAfterFilter.size() == 0) {
|
|
|
+
|
|
|
+ sysUser.setLoginTenantId(tenantList.get(0).getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+
|
|
|
+ sysUser.setLoginTenantId(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.updateUserDepart(username, null, sysUser.getLoginTenantId());
|
|
|
+ log.info(" 登录接口用户的租户ID = {}", sysUser.getLoginTenantId());
|
|
|
+ if (sysUser.getLoginTenantId() != null) {
|
|
|
+
|
|
|
+ TenantContext.setTenant(sysUser.getLoginTenantId() + "");
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 获取租户id
|
|
|
+ *
|
|
|
+ * @param sysUser
|
|
|
+ */
|
|
|
+ private void setUserTenantIds(SysUser sysUser) {
|
|
|
+ if (ObjectUtils.isNotEmpty(sysUser)) {
|
|
|
+ List<Integer> list = relationMapper.getTenantIdsNoStatus(sysUser.getId());
|
|
|
+ if (null != list && list.size() > 0) {
|
|
|
+ sysUser.setRelTenantIds(StringUtils.join(list.toArray(), ","));
|
|
|
+ } else {
|
|
|
+ sysUser.setRelTenantIds("");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 保存租户
|
|
|
+ *
|
|
|
+ * @param userId
|
|
|
+ * @param relTenantIds
|
|
|
+ */
|
|
|
+ private void saveUserTenant(String userId, String relTenantIds) {
|
|
|
+ if (oConvertUtils.isNotEmpty(relTenantIds)) {
|
|
|
+ String[] tenantIds = relTenantIds.split(SymbolConstant.COMMA);
|
|
|
+ for (String tenantId : tenantIds) {
|
|
|
+ SysUserTenant relation = new SysUserTenant();
|
|
|
+ relation.setUserId(userId);
|
|
|
+ relation.setTenantId(Integer.valueOf(tenantId));
|
|
|
+ relation.setStatus(CommonConstant.STATUS_1);
|
|
|
+
|
|
|
+ LambdaQueryWrapper sysUserTenantQueryWrapper =
|
|
|
+ new LambdaQueryWrapper<SysUserTenant>()
|
|
|
+ .eq(SysUserTenant::getUserId, userId)
|
|
|
+ .eq(SysUserTenant::getTenantId, Integer.valueOf(tenantId));
|
|
|
+ SysUserTenant tenantPresent = relationMapper.selectOne(sysUserTenantQueryWrapper);
|
|
|
+ if (tenantPresent != null) {
|
|
|
+ tenantPresent.setStatus(CommonConstant.STATUS_1);
|
|
|
+ relationMapper.updateById(tenantPresent);
|
|
|
} else {
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(relTenantIds) && CollectionUtils.isNotEmpty(oldTenantIds)) {
|
|
|
-
|
|
|
- String[] relTenantIdArray = relTenantIds.split(SymbolConstant.COMMA);
|
|
|
- List<String> relTenantIdList = Arrays.asList(relTenantIdArray);
|
|
|
-
|
|
|
- List<Integer> deleteTenantIdList = oldTenantIds.stream().filter(item -> !relTenantIdList.contains(item.toString())).collect(Collectors.toList());
|
|
|
- for (Integer tenantId : deleteTenantIdList) {
|
|
|
- this.deleteTenantByUserId(userId, tenantId);
|
|
|
- }
|
|
|
-
|
|
|
- String tenantIds = relTenantIdList.stream().filter(item -> !oldTenantIds.contains(Integer.valueOf(item))).collect(Collectors.joining(","));
|
|
|
- this.saveUserTenant(userId, tenantIds);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 删除租户通过用户id
|
|
|
- *
|
|
|
- * @param tenantId
|
|
|
- * @param userId
|
|
|
- */
|
|
|
- private void deleteTenantByUserId(String userId, Integer tenantId) {
|
|
|
- LambdaQueryWrapper<SysUserTenant> query = new LambdaQueryWrapper<>();
|
|
|
- query.eq(SysUserTenant::getUserId, userId);
|
|
|
+ relationMapper.insert(relation);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+
|
|
|
+ if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
+
|
|
|
+
|
|
|
+ String tenantId = TenantContext.getTenant();
|
|
|
if (oConvertUtils.isNotEmpty(tenantId)) {
|
|
|
- query.eq(SysUserTenant::getTenantId, tenantId);
|
|
|
- }
|
|
|
- relationMapper.delete(query);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public void batchEditUsers(JSONObject json) {
|
|
|
- String userIds = json.getString("userIds");
|
|
|
- List<String> idList = JSONArray.parseArray(userIds, String.class);
|
|
|
-
|
|
|
- String selecteddeparts = json.getString("selecteddeparts");
|
|
|
-
|
|
|
- String post = json.getString("post");
|
|
|
-
|
|
|
- String workAddress = json.getString("workAddress");
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(post)) {
|
|
|
-
|
|
|
-
|
|
|
- for (String userId : idList) {
|
|
|
- this.editUserPosition(userId, post);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- if (oConvertUtils.isNotEmpty(selecteddeparts)) {
|
|
|
-
|
|
|
- Integer currentTenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
|
|
|
- LambdaQueryWrapper<SysDepart> departQuery = new LambdaQueryWrapper<SysDepart>()
|
|
|
- .eq(SysDepart::getTenantId, currentTenantId);
|
|
|
- List<SysDepart> departList = sysDepartMapper.selectList(departQuery);
|
|
|
- if (departList == null || departList.size() == 0) {
|
|
|
- log.error("batchEditUsers 根据租户ID没有找到部门>" + currentTenantId);
|
|
|
- return;
|
|
|
- }
|
|
|
- List<String> departIdList = new ArrayList<String>();
|
|
|
- for (SysDepart depart : departList) {
|
|
|
- if (depart != null) {
|
|
|
- String id = depart.getId();
|
|
|
- if (oConvertUtils.isNotEmpty(id)) {
|
|
|
- departIdList.add(id);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- LambdaQueryWrapper<SysUserDepart> query = new LambdaQueryWrapper<SysUserDepart>()
|
|
|
- .in(SysUserDepart::getUserId, idList)
|
|
|
- .in(SysUserDepart::getDepId, departIdList);
|
|
|
- sysUserDepartMapper.delete(query);
|
|
|
-
|
|
|
- String[] arr = selecteddeparts.split(",");
|
|
|
-
|
|
|
-
|
|
|
- for (String deaprtId : arr) {
|
|
|
- for (String userId : idList) {
|
|
|
- SysUserDepart userDepart = new SysUserDepart(userId, deaprtId);
|
|
|
- sysUserDepartMapper.insert(userDepart);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public DepartAndUserInfo searchByKeyword(String keyword) {
|
|
|
- DepartAndUserInfo departAndUserInfo = new DepartAndUserInfo();
|
|
|
- if (oConvertUtils.isNotEmpty(keyword)) {
|
|
|
- LambdaQueryWrapper<SysUser> query1 = new LambdaQueryWrapper<SysUser>()
|
|
|
- .like(SysUser::getRealname, keyword);
|
|
|
- String str = oConvertUtils.getString(TenantContext.getTenant(), "0");
|
|
|
- Integer tenantId = Integer.valueOf(str);
|
|
|
- if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
- List<String> userIds = userTenantMapper.getUserIdsByTenantId(tenantId);
|
|
|
- if (oConvertUtils.listIsNotEmpty(userIds)) {
|
|
|
- query1.in(SysUser::getId, userIds);
|
|
|
- } else {
|
|
|
- query1.eq(SysUser::getId, "");
|
|
|
- }
|
|
|
- }
|
|
|
- List<SysUser> list1 = this.baseMapper.selectList(query1);
|
|
|
- if (list1 != null && list1.size() > 0) {
|
|
|
- List<UserAvatar> userList = list1.stream().map(v -> new UserAvatar(v)).collect(Collectors.toList());
|
|
|
- departAndUserInfo.setUserList(userList);
|
|
|
- }
|
|
|
-
|
|
|
- LambdaQueryWrapper<SysDepart> query2 = new LambdaQueryWrapper<SysDepart>()
|
|
|
- .like(SysDepart::getDepartName, keyword);
|
|
|
- if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
- query2.eq(SysDepart::getTenantId, tenantId);
|
|
|
- }
|
|
|
- List<SysDepart> list2 = sysDepartMapper.selectList(query2);
|
|
|
- if (list2 != null && list2.size() > 0) {
|
|
|
- List<DepartInfo> departList = new ArrayList<>();
|
|
|
- for (SysDepart depart : list2) {
|
|
|
- List<String> orgName = new ArrayList<>();
|
|
|
- List<String> orgId = new ArrayList<>();
|
|
|
- getParentDepart(depart, orgName, orgId);
|
|
|
- DepartInfo departInfo = new DepartInfo();
|
|
|
- departInfo.setId(depart.getId());
|
|
|
- departInfo.setOrgId(orgId);
|
|
|
- departInfo.setOrgName(orgName);
|
|
|
- departList.add(departInfo);
|
|
|
- }
|
|
|
- departAndUserInfo.setDepartList(departList);
|
|
|
- }
|
|
|
- }
|
|
|
- return departAndUserInfo;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public UpdateDepartInfo getUpdateDepartInfo(String departId) {
|
|
|
- SysDepart depart = sysDepartMapper.selectById(departId);
|
|
|
+ Integer count = relationMapper.userTenantIzExist(userId, Integer.parseInt(tenantId));
|
|
|
+ if (count == 0) {
|
|
|
+ SysUserTenant relation = new SysUserTenant();
|
|
|
+ relation.setUserId(userId);
|
|
|
+ relation.setTenantId(Integer.parseInt(tenantId));
|
|
|
+ relation.setStatus(CommonConstant.STATUS_1);
|
|
|
+ relationMapper.insert(relation);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 编辑租户
|
|
|
+ *
|
|
|
+ * @param userId
|
|
|
+ * @param relTenantIds
|
|
|
+ */
|
|
|
+ private void editUserTenants(String userId, String relTenantIds) {
|
|
|
+ LambdaQueryWrapper<SysUserTenant> query = new LambdaQueryWrapper<>();
|
|
|
+ query.eq(SysUserTenant::getUserId, userId);
|
|
|
+
|
|
|
+ List<Integer> oldTenantIds = relationMapper.getTenantIdsByUserId(userId);
|
|
|
+
|
|
|
+ if (oConvertUtils.isEmpty(relTenantIds) && CollectionUtils.isNotEmpty(oldTenantIds)) {
|
|
|
+ this.deleteTenantByUserId(userId, null);
|
|
|
+ } else if (oConvertUtils.isNotEmpty(relTenantIds) && CollectionUtils.isEmpty(oldTenantIds)) {
|
|
|
+
|
|
|
+ this.saveUserTenant(userId, relTenantIds);
|
|
|
+ } else {
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(relTenantIds) && CollectionUtils.isNotEmpty(oldTenantIds)) {
|
|
|
+
|
|
|
+ String[] relTenantIdArray = relTenantIds.split(SymbolConstant.COMMA);
|
|
|
+ List<String> relTenantIdList = Arrays.asList(relTenantIdArray);
|
|
|
+
|
|
|
+ List<Integer> deleteTenantIdList =
|
|
|
+ oldTenantIds.stream()
|
|
|
+ .filter(item -> !relTenantIdList.contains(item.toString()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ for (Integer tenantId : deleteTenantIdList) {
|
|
|
+ this.deleteTenantByUserId(userId, tenantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ String tenantIds =
|
|
|
+ relTenantIdList.stream()
|
|
|
+ .filter(item -> !oldTenantIds.contains(Integer.valueOf(item)))
|
|
|
+ .collect(Collectors.joining(","));
|
|
|
+ this.saveUserTenant(userId, tenantIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 删除租户通过用户id
|
|
|
+ *
|
|
|
+ * @param tenantId
|
|
|
+ * @param userId
|
|
|
+ */
|
|
|
+ private void deleteTenantByUserId(String userId, Integer tenantId) {
|
|
|
+ LambdaQueryWrapper<SysUserTenant> query = new LambdaQueryWrapper<>();
|
|
|
+ query.eq(SysUserTenant::getUserId, userId);
|
|
|
+ if (oConvertUtils.isNotEmpty(tenantId)) {
|
|
|
+ query.eq(SysUserTenant::getTenantId, tenantId);
|
|
|
+ }
|
|
|
+ relationMapper.delete(query);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void batchEditUsers(JSONObject json) {
|
|
|
+ String userIds = json.getString("userIds");
|
|
|
+ List<String> idList = JSONArray.parseArray(userIds, String.class);
|
|
|
+
|
|
|
+ String selecteddeparts = json.getString("selecteddeparts");
|
|
|
+
|
|
|
+ String post = json.getString("post");
|
|
|
+
|
|
|
+ String workAddress = json.getString("workAddress");
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(post)) {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ for (String userId : idList) {
|
|
|
+ this.editUserPosition(userId, post);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ if (oConvertUtils.isNotEmpty(selecteddeparts)) {
|
|
|
+
|
|
|
+ Integer currentTenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
|
|
|
+ LambdaQueryWrapper<SysDepart> departQuery =
|
|
|
+ new LambdaQueryWrapper<SysDepart>().eq(SysDepart::getTenantId, currentTenantId);
|
|
|
+ List<SysDepart> departList = sysDepartMapper.selectList(departQuery);
|
|
|
+ if (departList == null || departList.size() == 0) {
|
|
|
+ log.error("batchEditUsers 根据租户ID没有找到部门>" + currentTenantId);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<String> departIdList = new ArrayList<String>();
|
|
|
+ for (SysDepart depart : departList) {
|
|
|
if (depart != null) {
|
|
|
- UpdateDepartInfo info = new UpdateDepartInfo(depart);
|
|
|
- List<SysDepart> subList = sysDepartMapper.queryDeptByPid(departId);
|
|
|
- if (subList != null && subList.size() > 0) {
|
|
|
- info.setHasSub(true);
|
|
|
- }
|
|
|
-
|
|
|
- LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<SysUser>()
|
|
|
- .eq(SysUser::getUserIdentity, 2)
|
|
|
- .like(SysUser::getDepartIds, depart.getId());
|
|
|
- List<SysUser> userList = this.baseMapper.selectList(query);
|
|
|
- if (userList != null && userList.size() > 0) {
|
|
|
- List<String> idList = userList.stream().map(i -> i.getId()).collect(Collectors.toList());
|
|
|
- info.setChargePersonList(idList);
|
|
|
- }
|
|
|
- return info;
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void doUpdateDepartInfo(UpdateDepartInfo info) {
|
|
|
- String departId = info.getDepartId();
|
|
|
- SysDepart depart = sysDepartMapper.selectById(departId);
|
|
|
- if (depart != null) {
|
|
|
-
|
|
|
- if (!depart.getParentId().equals(info.getParentId())) {
|
|
|
- String pid = info.getParentId();
|
|
|
- SysDepart parentDepart = sysDepartMapper.selectById(pid);
|
|
|
- if (parentDepart != null) {
|
|
|
- String orgCode = getNextOrgCode(pid);
|
|
|
- depart.setOrgCode(orgCode);
|
|
|
- depart.setParentId(pid);
|
|
|
- }
|
|
|
- }
|
|
|
- depart.setDepartName(info.getDepartName());
|
|
|
- sysDepartMapper.updateById(depart);
|
|
|
-
|
|
|
- List<SysUser> departChargeUsers = queryDepartChargePersons(departId);
|
|
|
- List<String> departChargeUserIdList = departChargeUsers.stream().map(i -> i.getId()).collect(Collectors.toList());
|
|
|
-
|
|
|
- List<String> userIdList = info.getChargePersonList();
|
|
|
- if (userIdList != null && userIdList.size() > 0) {
|
|
|
- for (String userId : userIdList) {
|
|
|
- SysUser user = this.baseMapper.selectById(userId);
|
|
|
- if (user != null) {
|
|
|
- departChargeUserIdList.remove(user.getId());
|
|
|
- user.setUserIdentity(2);
|
|
|
- String departIds = user.getDepartIds();
|
|
|
- if (oConvertUtils.isEmpty(departIds)) {
|
|
|
- user.setDepartIds(departId);
|
|
|
- } else {
|
|
|
- List<String> list = new ArrayList<String>(Arrays.asList(departIds.split(",")));
|
|
|
- if (list.indexOf(departId) >= 0) {
|
|
|
- continue;
|
|
|
- } else {
|
|
|
- list.add(departId);
|
|
|
- String newDepartIds = String.join(",", list);
|
|
|
- user.setDepartIds(newDepartIds);
|
|
|
- }
|
|
|
- }
|
|
|
- this.baseMapper.updateById(user);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- this.removeDepartmentManager(departChargeUserIdList, departChargeUsers, departId);
|
|
|
+ String id = depart.getId();
|
|
|
+ if (oConvertUtils.isNotEmpty(id)) {
|
|
|
+ departIdList.add(id);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ LambdaQueryWrapper<SysUserDepart> query =
|
|
|
+ new LambdaQueryWrapper<SysUserDepart>()
|
|
|
+ .in(SysUserDepart::getUserId, idList)
|
|
|
+ .in(SysUserDepart::getDepId, departIdList);
|
|
|
+ sysUserDepartMapper.delete(query);
|
|
|
+
|
|
|
+ String[] arr = selecteddeparts.split(",");
|
|
|
+
|
|
|
+
|
|
|
+ for (String deaprtId : arr) {
|
|
|
+ for (String userId : idList) {
|
|
|
+ SysUserDepart userDepart = new SysUserDepart(userId, deaprtId);
|
|
|
+ sysUserDepartMapper.insert(userDepart);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public DepartAndUserInfo searchByKeyword(String keyword) {
|
|
|
+ DepartAndUserInfo departAndUserInfo = new DepartAndUserInfo();
|
|
|
+ if (oConvertUtils.isNotEmpty(keyword)) {
|
|
|
+ LambdaQueryWrapper<SysUser> query1 =
|
|
|
+ new LambdaQueryWrapper<SysUser>().like(SysUser::getRealname, keyword);
|
|
|
+ String str = oConvertUtils.getString(TenantContext.getTenant(), "0");
|
|
|
+ Integer tenantId = Integer.valueOf(str);
|
|
|
+ if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
+ List<String> userIds = userTenantMapper.getUserIdsByTenantId(tenantId);
|
|
|
+ if (oConvertUtils.listIsNotEmpty(userIds)) {
|
|
|
+ query1.in(SysUser::getId, userIds);
|
|
|
+ } else {
|
|
|
+ query1.eq(SysUser::getId, "");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<SysUser> list1 = this.baseMapper.selectList(query1);
|
|
|
+ if (list1 != null && list1.size() > 0) {
|
|
|
+ List<UserAvatar> userList =
|
|
|
+ list1.stream().map(v -> new UserAvatar(v)).collect(Collectors.toList());
|
|
|
+ departAndUserInfo.setUserList(userList);
|
|
|
+ }
|
|
|
+
|
|
|
+ LambdaQueryWrapper<SysDepart> query2 =
|
|
|
+ new LambdaQueryWrapper<SysDepart>().like(SysDepart::getDepartName, keyword);
|
|
|
+ if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
+ query2.eq(SysDepart::getTenantId, tenantId);
|
|
|
+ }
|
|
|
+ List<SysDepart> list2 = sysDepartMapper.selectList(query2);
|
|
|
+ if (list2 != null && list2.size() > 0) {
|
|
|
+ List<DepartInfo> departList = new ArrayList<>();
|
|
|
+ for (SysDepart depart : list2) {
|
|
|
+ List<String> orgName = new ArrayList<>();
|
|
|
+ List<String> orgId = new ArrayList<>();
|
|
|
+ getParentDepart(depart, orgName, orgId);
|
|
|
+ DepartInfo departInfo = new DepartInfo();
|
|
|
+ departInfo.setId(depart.getId());
|
|
|
+ departInfo.setOrgId(orgId);
|
|
|
+ departInfo.setOrgName(orgName);
|
|
|
+ departList.add(departInfo);
|
|
|
+ }
|
|
|
+ departAndUserInfo.setDepartList(departList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return departAndUserInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public UpdateDepartInfo getUpdateDepartInfo(String departId) {
|
|
|
+ SysDepart depart = sysDepartMapper.selectById(departId);
|
|
|
+ if (depart != null) {
|
|
|
+ UpdateDepartInfo info = new UpdateDepartInfo(depart);
|
|
|
+ List<SysDepart> subList = sysDepartMapper.queryDeptByPid(departId);
|
|
|
+ if (subList != null && subList.size() > 0) {
|
|
|
+ info.setHasSub(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ LambdaQueryWrapper<SysUser> query =
|
|
|
+ new LambdaQueryWrapper<SysUser>()
|
|
|
+ .eq(SysUser::getUserIdentity, 2)
|
|
|
+ .like(SysUser::getDepartIds, depart.getId());
|
|
|
+ List<SysUser> userList = this.baseMapper.selectList(query);
|
|
|
+ if (userList != null && userList.size() > 0) {
|
|
|
+ List<String> idList = userList.stream().map(i -> i.getId()).collect(Collectors.toList());
|
|
|
+ info.setChargePersonList(idList);
|
|
|
+ }
|
|
|
+ return info;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void doUpdateDepartInfo(UpdateDepartInfo info) {
|
|
|
+ String departId = info.getDepartId();
|
|
|
+ SysDepart depart = sysDepartMapper.selectById(departId);
|
|
|
+ if (depart != null) {
|
|
|
+
|
|
|
+ if (!depart.getParentId().equals(info.getParentId())) {
|
|
|
+ String pid = info.getParentId();
|
|
|
+ SysDepart parentDepart = sysDepartMapper.selectById(pid);
|
|
|
+ if (parentDepart != null) {
|
|
|
+ String orgCode = getNextOrgCode(pid);
|
|
|
+ depart.setOrgCode(orgCode);
|
|
|
+ depart.setParentId(pid);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ depart.setDepartName(info.getDepartName());
|
|
|
+ sysDepartMapper.updateById(depart);
|
|
|
+
|
|
|
+ List<SysUser> departChargeUsers = queryDepartChargePersons(departId);
|
|
|
+ List<String> departChargeUserIdList =
|
|
|
+ departChargeUsers.stream().map(i -> i.getId()).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<String> userIdList = info.getChargePersonList();
|
|
|
+ if (userIdList != null && userIdList.size() > 0) {
|
|
|
+ for (String userId : userIdList) {
|
|
|
+ SysUser user = this.baseMapper.selectById(userId);
|
|
|
+ if (user != null) {
|
|
|
+ departChargeUserIdList.remove(user.getId());
|
|
|
+ user.setUserIdentity(2);
|
|
|
+ String departIds = user.getDepartIds();
|
|
|
+ if (oConvertUtils.isEmpty(departIds)) {
|
|
|
+ user.setDepartIds(departId);
|
|
|
} else {
|
|
|
- if (CollectionUtil.isNotEmpty(departChargeUsers)) {
|
|
|
-
|
|
|
- this.removeDepartmentManager(departChargeUserIdList, departChargeUsers, departId);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
+ List<String> list = new ArrayList<String>(Arrays.asList(departIds.split(",")));
|
|
|
+ if (list.indexOf(departId) >= 0) {
|
|
|
+ continue;
|
|
|
+ } else {
|
|
|
+ list.add(departId);
|
|
|
+ String newDepartIds = String.join(",", list);
|
|
|
+ user.setDepartIds(newDepartIds);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private List<SysUser> queryDepartChargePersons(String departId) {
|
|
|
- List<SysUser> result = new ArrayList<>();
|
|
|
-
|
|
|
- LambdaQueryWrapper<SysUser> userQuery = new LambdaQueryWrapper<>();
|
|
|
- userQuery.like(SysUser::getDepartIds, departId);
|
|
|
- List<SysUser> userList = userMapper.selectList(userQuery);
|
|
|
- if (userList != null && userList.size() > 0) {
|
|
|
- for (SysUser user : userList) {
|
|
|
- Integer identity = user.getUserIdentity();
|
|
|
- String deps = user.getDepartIds();
|
|
|
- if (identity != null && identity == 2) {
|
|
|
- if (oConvertUtils.isNotEmpty(deps)) {
|
|
|
- if (deps.indexOf(departId) >= 0) {
|
|
|
- result.add(user);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
+ this.baseMapper.updateById(user);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.removeDepartmentManager(departChargeUserIdList, departChargeUsers, departId);
|
|
|
+ } else {
|
|
|
+ if (CollectionUtil.isNotEmpty(departChargeUsers)) {
|
|
|
+
|
|
|
+ this.removeDepartmentManager(departChargeUserIdList, departChargeUsers, departId);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<SysUser> queryDepartChargePersons(String departId) {
|
|
|
+ List<SysUser> result = new ArrayList<>();
|
|
|
+
|
|
|
+ LambdaQueryWrapper<SysUser> userQuery = new LambdaQueryWrapper<>();
|
|
|
+ userQuery.like(SysUser::getDepartIds, departId);
|
|
|
+ List<SysUser> userList = userMapper.selectList(userQuery);
|
|
|
+ if (userList != null && userList.size() > 0) {
|
|
|
+ for (SysUser user : userList) {
|
|
|
+ Integer identity = user.getUserIdentity();
|
|
|
+ String deps = user.getDepartIds();
|
|
|
+ if (identity != null && identity == 2) {
|
|
|
+ if (oConvertUtils.isNotEmpty(deps)) {
|
|
|
+ if (deps.indexOf(departId) >= 0) {
|
|
|
+ result.add(user);
|
|
|
}
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 变更父级部门 修改编码
|
|
|
- *
|
|
|
- * @param parentId
|
|
|
- * @return
|
|
|
- */
|
|
|
- private String getNextOrgCode(String parentId) {
|
|
|
- JSONObject formData = new JSONObject();
|
|
|
- formData.put("parentId", parentId);
|
|
|
- String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART, formData);
|
|
|
- return codeArray[0];
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void changeDepartChargePerson(JSONObject json) {
|
|
|
- String userId = json.getString("userId");
|
|
|
- String departId = json.getString("departId");
|
|
|
- boolean status = json.getBoolean("status");
|
|
|
- SysUser user = this.getById(userId);
|
|
|
- if (user != null) {
|
|
|
- String ids = user.getDepartIds();
|
|
|
- if (status == true) {
|
|
|
-
|
|
|
- if (oConvertUtils.isEmpty(ids)) {
|
|
|
-
|
|
|
- user.setUserIdentity(CommonConstant.USER_IDENTITY_2);
|
|
|
- user.setDepartIds(departId);
|
|
|
- } else {
|
|
|
- List<String> list = new ArrayList<String>(Arrays.asList(ids.split(",")));
|
|
|
- if (list.indexOf(departId) >= 0) {
|
|
|
-
|
|
|
- } else {
|
|
|
- list.add(departId);
|
|
|
- String newIds = String.join(",", list);
|
|
|
-
|
|
|
- user.setUserIdentity(CommonConstant.USER_IDENTITY_2);
|
|
|
- user.setDepartIds(newIds);
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(ids)) {
|
|
|
- List<String> list = new ArrayList<String>();
|
|
|
- for (String temp : ids.split(",")) {
|
|
|
- if (oConvertUtils.isEmpty(temp)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (!temp.equals(departId)) {
|
|
|
- list.add(temp);
|
|
|
- }
|
|
|
- }
|
|
|
- String newIds = "";
|
|
|
- if (list.size() > 0) {
|
|
|
- newIds = String.join(",", list);
|
|
|
- } else {
|
|
|
-
|
|
|
- user.setUserIdentity(CommonConstant.USER_IDENTITY_1);
|
|
|
- }
|
|
|
- user.setDepartIds(newIds);
|
|
|
- }
|
|
|
- }
|
|
|
- this.updateById(user);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 找上级部门
|
|
|
- *
|
|
|
- * @param depart
|
|
|
- * @param orgName
|
|
|
- * @param orgId
|
|
|
- */
|
|
|
- private void getParentDepart(SysDepart depart, List<String> orgName, List<String> orgId) {
|
|
|
- String pid = depart.getParentId();
|
|
|
- orgName.add(0, depart.getDepartName());
|
|
|
- orgId.add(0, depart.getId());
|
|
|
- if (oConvertUtils.isNotEmpty(pid)) {
|
|
|
- SysDepart temp = sysDepartMapper.selectById(pid);
|
|
|
- getParentDepart(temp, orgName, orgId);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
|
|
|
- public void editTenantUser(SysUser sysUser, String tenantId, String departs, String roles) {
|
|
|
- SysUser user = new SysUser();
|
|
|
- user.setWorkNo(sysUser.getWorkNo());
|
|
|
- user.setId(sysUser.getId());
|
|
|
- this.updateById(user);
|
|
|
-
|
|
|
- if (oConvertUtils.isEmpty(departs)) {
|
|
|
-
|
|
|
- sysUserDepartMapper.deleteUserDepart(user.getId(), tenantId);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 变更父级部门 修改编码
|
|
|
+ *
|
|
|
+ * @param parentId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String getNextOrgCode(String parentId) {
|
|
|
+ JSONObject formData = new JSONObject();
|
|
|
+ formData.put("parentId", parentId);
|
|
|
+ String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART, formData);
|
|
|
+ return codeArray[0];
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void changeDepartChargePerson(JSONObject json) {
|
|
|
+ String userId = json.getString("userId");
|
|
|
+ String departId = json.getString("departId");
|
|
|
+ boolean status = json.getBoolean("status");
|
|
|
+ SysUser user = this.getById(userId);
|
|
|
+ if (user != null) {
|
|
|
+ String ids = user.getDepartIds();
|
|
|
+ if (status == true) {
|
|
|
+
|
|
|
+ if (oConvertUtils.isEmpty(ids)) {
|
|
|
+
|
|
|
+ user.setUserIdentity(CommonConstant.USER_IDENTITY_2);
|
|
|
+ user.setDepartIds(departId);
|
|
|
} else {
|
|
|
-
|
|
|
- this.updateTenantDepart(user, tenantId, departs);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- this.editUserPosition(sysUser.getId(), sysUser.getPost());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 修改账号状态
|
|
|
- *
|
|
|
- * @param id 账号id
|
|
|
- * @param status 账号状态
|
|
|
- */
|
|
|
- @Override
|
|
|
- @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
|
|
|
- public void updateStatus(String id, String status) {
|
|
|
- userMapper.update(new SysUser().setStatus(Integer.parseInt(status)),
|
|
|
- new UpdateWrapper<SysUser>().lambda().eq(SysUser::getId, id));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 修改租户下的部门
|
|
|
- *
|
|
|
- * @param departs
|
|
|
- */
|
|
|
- public void updateTenantDepart(SysUser user, String tenantId, String departs) {
|
|
|
- List<String> departList = new ArrayList<>();
|
|
|
- long startTime = System.currentTimeMillis();
|
|
|
- if (oConvertUtils.isNotEmpty(departs)) {
|
|
|
-
|
|
|
- departList = sysUserDepartMapper.getTenantDepart(Arrays.asList(departs.split(SymbolConstant.COMMA)), tenantId);
|
|
|
- }
|
|
|
- long endTime = System.currentTimeMillis();
|
|
|
- System.out.println("查询用户部门用时:" + (endTime - startTime) + "ms");
|
|
|
-
|
|
|
- List<SysUserDepart> userDepartList = sysUserDepartMapper.getTenantUserDepart(user.getId(), tenantId);
|
|
|
- if (userDepartList != null && userDepartList.size() > 0 && departList.size() > 0) {
|
|
|
- for (SysUserDepart depart : userDepartList) {
|
|
|
-
|
|
|
- if (!departList.contains(depart.getDepId())) {
|
|
|
- List<SysDepartRole> sysDepartRoleList = sysDepartRoleMapper.selectList(
|
|
|
- new QueryWrapper<SysDepartRole>().lambda().eq(SysDepartRole::getDepartId, depart.getDepId()));
|
|
|
- List<String> roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
|
|
|
- if (roleIds.size() > 0) {
|
|
|
- departRoleUserMapper.delete(new QueryWrapper<SysDepartRoleUser>().lambda().eq(SysDepartRoleUser::getUserId, user.getId())
|
|
|
- .in(SysDepartRoleUser::getDroleId, roleIds));
|
|
|
- }
|
|
|
- }
|
|
|
+ List<String> list = new ArrayList<String>(Arrays.asList(ids.split(",")));
|
|
|
+ if (list.indexOf(departId) >= 0) {
|
|
|
+
|
|
|
+ } else {
|
|
|
+ list.add(departId);
|
|
|
+ String newIds = String.join(",", list);
|
|
|
+
|
|
|
+ user.setUserIdentity(CommonConstant.USER_IDENTITY_2);
|
|
|
+ user.setDepartIds(newIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(ids)) {
|
|
|
+ List<String> list = new ArrayList<String>();
|
|
|
+ for (String temp : ids.split(",")) {
|
|
|
+ if (oConvertUtils.isEmpty(temp)) {
|
|
|
+ continue;
|
|
|
}
|
|
|
- }
|
|
|
- long endTime1 = System.currentTimeMillis();
|
|
|
- System.out.println("修改部门角色用时:" + (endTime1 - startTime) + "ms");
|
|
|
-
|
|
|
- if (departList.size() > 0) {
|
|
|
-
|
|
|
- sysUserDepartMapper.deleteUserDepart(user.getId(), tenantId);
|
|
|
- for (String departId : departList) {
|
|
|
-
|
|
|
- SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
|
|
|
- sysUserDepartMapper.insert(userDepart);
|
|
|
+ if (!temp.equals(departId)) {
|
|
|
+ list.add(temp);
|
|
|
}
|
|
|
- }
|
|
|
- long endTime2 = System.currentTimeMillis();
|
|
|
- System.out.println("修改用户部门用时:" + (endTime2 - startTime) + "ms");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 保存用户职位
|
|
|
- *
|
|
|
- * @param userId
|
|
|
- * @param positionIds
|
|
|
- */
|
|
|
- private void saveUserPosition(String userId, String positionIds) {
|
|
|
- if (oConvertUtils.isNotEmpty(positionIds)) {
|
|
|
- String[] positionIdArray = positionIds.split(SymbolConstant.COMMA);
|
|
|
- for (String postId : positionIdArray) {
|
|
|
- SysUserPosition userPosition = new SysUserPosition();
|
|
|
- userPosition.setUserId(userId);
|
|
|
- userPosition.setPositionId(postId);
|
|
|
- sysUserPositionMapper.insert(userPosition);
|
|
|
+ }
|
|
|
+ String newIds = "";
|
|
|
+ if (list.size() > 0) {
|
|
|
+ newIds = String.join(",", list);
|
|
|
+ } else {
|
|
|
+
|
|
|
+ user.setUserIdentity(CommonConstant.USER_IDENTITY_1);
|
|
|
+ }
|
|
|
+ user.setDepartIds(newIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.updateById(user);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 找上级部门
|
|
|
+ *
|
|
|
+ * @param depart
|
|
|
+ * @param orgName
|
|
|
+ * @param orgId
|
|
|
+ */
|
|
|
+ private void getParentDepart(SysDepart depart, List<String> orgName, List<String> orgId) {
|
|
|
+ String pid = depart.getParentId();
|
|
|
+ orgName.add(0, depart.getDepartName());
|
|
|
+ orgId.add(0, depart.getId());
|
|
|
+ if (oConvertUtils.isNotEmpty(pid)) {
|
|
|
+ SysDepart temp = sysDepartMapper.selectById(pid);
|
|
|
+ getParentDepart(temp, orgName, orgId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ allEntries = true)
|
|
|
+ public void editTenantUser(SysUser sysUser, String tenantId, String departs, String roles) {
|
|
|
+ SysUser user = new SysUser();
|
|
|
+ user.setWorkNo(sysUser.getWorkNo());
|
|
|
+ user.setId(sysUser.getId());
|
|
|
+ this.updateById(user);
|
|
|
+
|
|
|
+ if (oConvertUtils.isEmpty(departs)) {
|
|
|
+
|
|
|
+ sysUserDepartMapper.deleteUserDepart(user.getId(), tenantId);
|
|
|
+ } else {
|
|
|
+
|
|
|
+ this.updateTenantDepart(user, tenantId, departs);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ this.editUserPosition(sysUser.getId(), sysUser.getPost());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 修改账号状态
|
|
|
+ *
|
|
|
+ * @param id 账号id
|
|
|
+ * @param status 账号状态
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @CacheEvict(
|
|
|
+ value = {CacheConstant.SYS_USERS_CACHE},
|
|
|
+ allEntries = true)
|
|
|
+ public void updateStatus(String id, String status) {
|
|
|
+ userMapper.update(
|
|
|
+ new SysUser().setStatus(Integer.parseInt(status)),
|
|
|
+ new UpdateWrapper<SysUser>().lambda().eq(SysUser::getId, id));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 修改租户下的部门
|
|
|
+ *
|
|
|
+ * @param departs
|
|
|
+ */
|
|
|
+ public void updateTenantDepart(SysUser user, String tenantId, String departs) {
|
|
|
+ List<String> departList = new ArrayList<>();
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ if (oConvertUtils.isNotEmpty(departs)) {
|
|
|
+
|
|
|
+ departList =
|
|
|
+ sysUserDepartMapper.getTenantDepart(
|
|
|
+ Arrays.asList(departs.split(SymbolConstant.COMMA)), tenantId);
|
|
|
+ }
|
|
|
+ long endTime = System.currentTimeMillis();
|
|
|
+ System.out.println("查询用户部门用时:" + (endTime - startTime) + "ms");
|
|
|
+
|
|
|
+ List<SysUserDepart> userDepartList =
|
|
|
+ sysUserDepartMapper.getTenantUserDepart(user.getId(), tenantId);
|
|
|
+ if (userDepartList != null && userDepartList.size() > 0 && departList.size() > 0) {
|
|
|
+ for (SysUserDepart depart : userDepartList) {
|
|
|
+
|
|
|
+ if (!departList.contains(depart.getDepId())) {
|
|
|
+ List<SysDepartRole> sysDepartRoleList =
|
|
|
+ sysDepartRoleMapper.selectList(
|
|
|
+ new QueryWrapper<SysDepartRole>()
|
|
|
+ .lambda()
|
|
|
+ .eq(SysDepartRole::getDepartId, depart.getDepId()));
|
|
|
+ List<String> roleIds =
|
|
|
+ sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList());
|
|
|
+ if (roleIds.size() > 0) {
|
|
|
+ departRoleUserMapper.delete(
|
|
|
+ new QueryWrapper<SysDepartRoleUser>()
|
|
|
+ .lambda()
|
|
|
+ .eq(SysDepartRoleUser::getUserId, user.getId())
|
|
|
+ .in(SysDepartRoleUser::getDroleId, roleIds));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ long endTime1 = System.currentTimeMillis();
|
|
|
+ System.out.println("修改部门角色用时:" + (endTime1 - startTime) + "ms");
|
|
|
+
|
|
|
+ if (departList.size() > 0) {
|
|
|
+
|
|
|
+ sysUserDepartMapper.deleteUserDepart(user.getId(), tenantId);
|
|
|
+ for (String departId : departList) {
|
|
|
+
|
|
|
+ SysUserDepart userDepart = new SysUserDepart(user.getId(), departId);
|
|
|
+ sysUserDepartMapper.insert(userDepart);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ long endTime2 = System.currentTimeMillis();
|
|
|
+ System.out.println("修改用户部门用时:" + (endTime2 - startTime) + "ms");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 保存用户职位
|
|
|
+ *
|
|
|
+ * @param userId
|
|
|
+ * @param positionIds
|
|
|
+ */
|
|
|
+ private void saveUserPosition(String userId, String positionIds) {
|
|
|
+ if (oConvertUtils.isNotEmpty(positionIds)) {
|
|
|
+ String[] positionIdArray = positionIds.split(SymbolConstant.COMMA);
|
|
|
+ for (String postId : positionIdArray) {
|
|
|
+ SysUserPosition userPosition = new SysUserPosition();
|
|
|
+ userPosition.setUserId(userId);
|
|
|
+ userPosition.setPositionId(postId);
|
|
|
+ sysUserPositionMapper.insert(userPosition);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 编辑用户职位
|
|
|
+ *
|
|
|
+ * @param userId
|
|
|
+ * @param positionIds
|
|
|
+ */
|
|
|
+ private void editUserPosition(String userId, String positionIds) {
|
|
|
+
|
|
|
+ LambdaQueryWrapper<SysUserPosition> query = new LambdaQueryWrapper<>();
|
|
|
+ query.eq(SysUserPosition::getUserId, userId);
|
|
|
+ sysUserPositionMapper.delete(query);
|
|
|
+
|
|
|
+ this.saveUserPosition(userId, positionIds);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 设置用户职位id(已逗号拼接起来)
|
|
|
+ *
|
|
|
+ * @param sysUser
|
|
|
+ */
|
|
|
+ private void userPositionId(SysUser sysUser) {
|
|
|
+ if (null != sysUser) {
|
|
|
+ List<String> positionList = sysUserPositionMapper.getPositionIdByUserId(sysUser.getId());
|
|
|
+ sysUser.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 查询用户当前登录部门的id
|
|
|
+ *
|
|
|
+ * @param orgCode
|
|
|
+ */
|
|
|
+ private @Nullable String getDepartIdByOrCode(String orgCode) {
|
|
|
+ if (oConvertUtils.isEmpty(orgCode)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<SysDepart> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(SysDepart::getOrgCode, orgCode);
|
|
|
+ queryWrapper.select(SysDepart::getId);
|
|
|
+ SysDepart depart = sysDepartMapper.selectOne(queryWrapper);
|
|
|
+ if (depart == null || oConvertUtils.isEmpty(depart.getId())) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return depart.getId();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 查询用户的角色code(多个逗号分割)
|
|
|
+ *
|
|
|
+ * @param userId
|
|
|
+ */
|
|
|
+ private @Nullable String getJoinRoleCodeByUserId(String userId) {
|
|
|
+ if (oConvertUtils.isEmpty(userId)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer tenantId = null;
|
|
|
+ if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
+
|
|
|
+ tenantId = oConvertUtils.getInt(TenantContext.getTenant(), -1);
|
|
|
+ }
|
|
|
+ List<SysRole> roleList = sysRoleMapper.getRoleCodeListByUserId(userId, tenantId);
|
|
|
+ if (CollectionUtils.isEmpty(roleList)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return roleList.stream()
|
|
|
+ .map(SysRole::getRoleCode)
|
|
|
+ .collect(Collectors.joining(SymbolConstant.COMMA));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 移除部门负责人
|
|
|
+ *
|
|
|
+ * @param departChargeUserIdList
|
|
|
+ * @param departChargeUsers
|
|
|
+ * @param departId
|
|
|
+ */
|
|
|
+ private void removeDepartmentManager(
|
|
|
+ List<String> departChargeUserIdList, List<SysUser> departChargeUsers, String departId) {
|
|
|
+
|
|
|
+ for (String chargeUserId : departChargeUserIdList) {
|
|
|
+ for (SysUser chargeUser : departChargeUsers) {
|
|
|
+ if (chargeUser.getId().equals(chargeUserId)) {
|
|
|
+ String departIds = chargeUser.getDepartIds();
|
|
|
+ List<String> list = new ArrayList<String>(Arrays.asList(departIds.split(",")));
|
|
|
+ list.remove(departId);
|
|
|
+ String newDepartIds = String.join(",", list);
|
|
|
+ chargeUser.setDepartIds(newDepartIds);
|
|
|
+ this.baseMapper.updateById(chargeUser);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ModelAndView exportAppUser(HttpServletRequest request) {
|
|
|
+ Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant());
|
|
|
+
|
|
|
+ String departIds = request.getParameter("departIds");
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
+ if (oConvertUtils.isNotEmpty(departIds)) {
|
|
|
+ list = Arrays.asList(departIds.split(SymbolConstant.COMMA));
|
|
|
+ }
|
|
|
+
|
|
|
+ List<SysUser> userList = userMapper.getUserByDepartsTenantId(list, tenantId);
|
|
|
+
|
|
|
+ List<SysUserDepVo> userDepVos = sysDepartMapper.getUserDepartByTenantUserId(userList, tenantId);
|
|
|
+
|
|
|
+ List<SysUserPositionVo> positionVos =
|
|
|
+ sysUserPositionMapper.getPositionIdByUsersTenantId(userList, tenantId);
|
|
|
+
|
|
|
+
|
|
|
+ List<AppExportUserVo> exportUserVoList = new ArrayList<>();
|
|
|
+ for (SysUser sysUser : userList) {
|
|
|
+ AppExportUserVo exportUserVo = new AppExportUserVo();
|
|
|
+ BeanUtils.copyProperties(sysUser, exportUserVo);
|
|
|
+ String departNames =
|
|
|
+ userDepVos.stream()
|
|
|
+ .filter(item -> item.getUserId().equals(sysUser.getId()))
|
|
|
+ .map(SysUserDepVo::getDepartName)
|
|
|
+ .collect(Collectors.joining(SymbolConstant.SEMICOLON));
|
|
|
+ exportUserVo.setDepart(departNames);
|
|
|
+ String posNames =
|
|
|
+ positionVos.stream()
|
|
|
+ .filter(item -> item.getUserId().equals(sysUser.getId()))
|
|
|
+ .map(SysUserPositionVo::getName)
|
|
|
+ .collect(Collectors.joining(SymbolConstant.SEMICOLON));
|
|
|
+ exportUserVo.setPosition(posNames);
|
|
|
+ exportUserVoList.add(exportUserVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
|
|
|
+
|
|
|
+ mv.addObject(NormalExcelConstants.FILE_NAME, "用户列表");
|
|
|
+ mv.addObject(NormalExcelConstants.CLASS, AppExportUserVo.class);
|
|
|
+ LoginUser user = SecureUtil.currentUser();
|
|
|
+ ;
|
|
|
+ ExportParams exportParams =
|
|
|
+ new ExportParams(
|
|
|
+ "导入规则:\n"
|
|
|
+ + "1、存在用户编号时,数据会根据用户编号进行匹配,匹配成功后只会更新职位和工号;\n"
|
|
|
+ + "2、不存在用户编号时,支持手机号、邮箱、姓名、部们、职位、工号导入,其中手机号必填;\n"
|
|
|
+ + "3、上下级部门用英文字符 / 连接,如 财务部/财务一部,多个部门或者职位用英文字符 ; 进行连接,如 财务部;研发部",
|
|
|
+ "导出人:" + user.getRealname(),
|
|
|
+ "导出信息");
|
|
|
+ mv.addObject(NormalExcelConstants.PARAMS, exportParams);
|
|
|
+ mv.addObject(NormalExcelConstants.DATA_LIST, exportUserVoList);
|
|
|
+ return mv;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Result<?> importAppUser(HttpServletRequest request) {
|
|
|
+ MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
|
|
|
+ Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
|
|
|
+ Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant());
|
|
|
+ SysTenant sysTenant = sysTenantMapper.selectById(tenantId);
|
|
|
+
|
|
|
+ List<String> errorMessage = new ArrayList<>();
|
|
|
+ int successLines = 0, errorLines = 0;
|
|
|
+ for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
|
|
|
+ MultipartFile file = entity.getValue();
|
|
|
+ ImportParams params = new ImportParams();
|
|
|
+ params.setTitleRows(2);
|
|
|
+ params.setHeadRows(1);
|
|
|
+ params.setNeedSave(true);
|
|
|
+
|
|
|
+ Map<String, String> positionMap = new HashMap<>();
|
|
|
+
|
|
|
+ Map<String, SysDepart> departMap = new HashMap<>();
|
|
|
+ try {
|
|
|
+ List<AppExportUserVo> listSysUsers =
|
|
|
+ ExcelImportUtil.importExcel(file.getInputStream(), AppExportUserVo.class, params);
|
|
|
+ for (int i = 0; i < listSysUsers.size(); i++) {
|
|
|
+
|
|
|
+ int lineNumber = i + 1;
|
|
|
+
|
|
|
+ boolean isEdit = false;
|
|
|
+ AppExportUserVo sysUserExcel = listSysUsers.get(i);
|
|
|
+ String id = sysUserExcel.getId();
|
|
|
+ String workNo = sysUserExcel.getWorkNo();
|
|
|
+ String email = sysUserExcel.getEmail();
|
|
|
+ String phone = sysUserExcel.getPhone();
|
|
|
+ String realname = sysUserExcel.getRealname();
|
|
|
+ String depart = sysUserExcel.getDepart();
|
|
|
+ String position = sysUserExcel.getPosition();
|
|
|
+ SysUser sysUser = new SysUser();
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(id)) {
|
|
|
+ SysUser user = userMapper.selectById(id);
|
|
|
+ if (null == user) {
|
|
|
+ errorLines++;
|
|
|
+ errorMessage.add("第 " + lineNumber + " 行:用户不存在,请查看编号是否已修改,忽略导入。");
|
|
|
+ continue;
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 编辑用户职位
|
|
|
- *
|
|
|
- * @param userId
|
|
|
- * @param positionIds
|
|
|
- */
|
|
|
- private void editUserPosition(String userId, String positionIds) {
|
|
|
-
|
|
|
- LambdaQueryWrapper<SysUserPosition> query = new LambdaQueryWrapper<>();
|
|
|
- query.eq(SysUserPosition::getUserId, userId);
|
|
|
- sysUserPositionMapper.delete(query);
|
|
|
-
|
|
|
- this.saveUserPosition(userId, positionIds);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 设置用户职位id(已逗号拼接起来)
|
|
|
- *
|
|
|
- * @param sysUser
|
|
|
- */
|
|
|
- private void userPositionId(SysUser sysUser) {
|
|
|
- if (null != sysUser) {
|
|
|
- List<String> positionList = sysUserPositionMapper.getPositionIdByUserId(sysUser.getId());
|
|
|
- sysUser.setPost(CommonUtils.getSplitText(positionList, SymbolConstant.COMMA));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 查询用户当前登录部门的id
|
|
|
- *
|
|
|
- * @param orgCode
|
|
|
- */
|
|
|
- private @Nullable String getDepartIdByOrCode(String orgCode) {
|
|
|
- if (oConvertUtils.isEmpty(orgCode)) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- LambdaQueryWrapper<SysDepart> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
- queryWrapper.eq(SysDepart::getOrgCode, orgCode);
|
|
|
- queryWrapper.select(SysDepart::getId);
|
|
|
- SysDepart depart = sysDepartMapper.selectOne(queryWrapper);
|
|
|
- if (depart == null || oConvertUtils.isEmpty(depart.getId())) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- return depart.getId();
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 查询用户的角色code(多个逗号分割)
|
|
|
- *
|
|
|
- * @param userId
|
|
|
- */
|
|
|
- private @Nullable String getJoinRoleCodeByUserId(String userId) {
|
|
|
- if (oConvertUtils.isEmpty(userId)) {
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- Integer tenantId = null;
|
|
|
- if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
|
|
|
-
|
|
|
- tenantId = oConvertUtils.getInt(TenantContext.getTenant(), -1);
|
|
|
- }
|
|
|
- List<SysRole> roleList = sysRoleMapper.getRoleCodeListByUserId(userId, tenantId);
|
|
|
- if (CollectionUtils.isEmpty(roleList)) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- return roleList.stream().map(SysRole::getRoleCode).collect(Collectors.joining(SymbolConstant.COMMA));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 移除部门负责人
|
|
|
- *
|
|
|
- * @param departChargeUserIdList
|
|
|
- * @param departChargeUsers
|
|
|
- * @param departId
|
|
|
- */
|
|
|
- private void removeDepartmentManager(List<String> departChargeUserIdList, List<SysUser> departChargeUsers, String departId) {
|
|
|
-
|
|
|
- for (String chargeUserId : departChargeUserIdList) {
|
|
|
- for (SysUser chargeUser : departChargeUsers) {
|
|
|
- if (chargeUser.getId().equals(chargeUserId)) {
|
|
|
- String departIds = chargeUser.getDepartIds();
|
|
|
- List<String> list = new ArrayList<String>(Arrays.asList(departIds.split(",")));
|
|
|
- list.remove(departId);
|
|
|
- String newDepartIds = String.join(",", list);
|
|
|
- chargeUser.setDepartIds(newDepartIds);
|
|
|
- this.baseMapper.updateById(chargeUser);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public ModelAndView exportAppUser(HttpServletRequest request) {
|
|
|
- Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant());
|
|
|
-
|
|
|
- String departIds = request.getParameter("departIds");
|
|
|
- List<String> list = new ArrayList<>();
|
|
|
- if (oConvertUtils.isNotEmpty(departIds)) {
|
|
|
- list = Arrays.asList(departIds.split(SymbolConstant.COMMA));
|
|
|
- }
|
|
|
-
|
|
|
- List<SysUser> userList = userMapper.getUserByDepartsTenantId(list, tenantId);
|
|
|
-
|
|
|
- List<SysUserDepVo> userDepVos = sysDepartMapper.getUserDepartByTenantUserId(userList, tenantId);
|
|
|
-
|
|
|
- List<SysUserPositionVo> positionVos = sysUserPositionMapper.getPositionIdByUsersTenantId(userList, tenantId);
|
|
|
-
|
|
|
-
|
|
|
- List<AppExportUserVo> exportUserVoList = new ArrayList<>();
|
|
|
- for (SysUser sysUser : userList) {
|
|
|
- AppExportUserVo exportUserVo = new AppExportUserVo();
|
|
|
- BeanUtils.copyProperties(sysUser, exportUserVo);
|
|
|
- String departNames = userDepVos.stream().filter(item -> item.getUserId().equals(sysUser.getId()))
|
|
|
- .map(SysUserDepVo::getDepartName).collect(Collectors.joining(SymbolConstant.SEMICOLON));
|
|
|
- exportUserVo.setDepart(departNames);
|
|
|
- String posNames = positionVos.stream().filter(item -> item.getUserId().equals(sysUser.getId())).map(SysUserPositionVo::getName).collect(Collectors.joining(SymbolConstant.SEMICOLON));
|
|
|
- exportUserVo.setPosition(posNames);
|
|
|
- exportUserVoList.add(exportUserVo);
|
|
|
- }
|
|
|
-
|
|
|
- ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
|
|
|
-
|
|
|
- mv.addObject(NormalExcelConstants.FILE_NAME, "用户列表");
|
|
|
- mv.addObject(NormalExcelConstants.CLASS, AppExportUserVo.class);
|
|
|
- LoginUser user = SecureUtil.currentUser();
|
|
|
- ;
|
|
|
- ExportParams exportParams = new ExportParams("导入规则:\n" +
|
|
|
- "1、存在用户编号时,数据会根据用户编号进行匹配,匹配成功后只会更新职位和工号;\n" +
|
|
|
- "2、不存在用户编号时,支持手机号、邮箱、姓名、部们、职位、工号导入,其中手机号必填;\n" +
|
|
|
- "3、上下级部门用英文字符 / 连接,如 财务部/财务一部,多个部门或者职位用英文字符 ; 进行连接,如 财务部;研发部", "导出人:" + user.getRealname(), "导出信息");
|
|
|
- mv.addObject(NormalExcelConstants.PARAMS, exportParams);
|
|
|
- mv.addObject(NormalExcelConstants.DATA_LIST, exportUserVoList);
|
|
|
- return mv;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public Result<?> importAppUser(HttpServletRequest request) {
|
|
|
- MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
|
|
|
- Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
|
|
|
- Integer tenantId = oConvertUtils.getInt(TenantContext.getTenant());
|
|
|
- SysTenant sysTenant = sysTenantMapper.selectById(tenantId);
|
|
|
-
|
|
|
- List<String> errorMessage = new ArrayList<>();
|
|
|
- int successLines = 0, errorLines = 0;
|
|
|
- for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
|
|
|
- MultipartFile file = entity.getValue();
|
|
|
- ImportParams params = new ImportParams();
|
|
|
- params.setTitleRows(2);
|
|
|
- params.setHeadRows(1);
|
|
|
- params.setNeedSave(true);
|
|
|
-
|
|
|
- Map<String, String> positionMap = new HashMap<>();
|
|
|
-
|
|
|
- Map<String, SysDepart> departMap = new HashMap<>();
|
|
|
- try {
|
|
|
- List<AppExportUserVo> listSysUsers = ExcelImportUtil.importExcel(file.getInputStream(), AppExportUserVo.class, params);
|
|
|
- for (int i = 0; i < listSysUsers.size(); i++) {
|
|
|
-
|
|
|
- int lineNumber = i + 1;
|
|
|
-
|
|
|
- boolean isEdit = false;
|
|
|
- AppExportUserVo sysUserExcel = listSysUsers.get(i);
|
|
|
- String id = sysUserExcel.getId();
|
|
|
- String workNo = sysUserExcel.getWorkNo();
|
|
|
- String email = sysUserExcel.getEmail();
|
|
|
- String phone = sysUserExcel.getPhone();
|
|
|
- String realname = sysUserExcel.getRealname();
|
|
|
- String depart = sysUserExcel.getDepart();
|
|
|
- String position = sysUserExcel.getPosition();
|
|
|
- SysUser sysUser = new SysUser();
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(id)) {
|
|
|
- SysUser user = userMapper.selectById(id);
|
|
|
- if (null == user) {
|
|
|
- errorLines++;
|
|
|
- errorMessage.add("第 " + lineNumber + " 行:用户不存在,请查看编号是否已修改,忽略导入。");
|
|
|
- continue;
|
|
|
- }
|
|
|
- isEdit = true;
|
|
|
- sysUser.setId(id);
|
|
|
- } else {
|
|
|
-
|
|
|
- isEdit = false;
|
|
|
- }
|
|
|
- if (oConvertUtils.isNotEmpty(workNo)) {
|
|
|
- sysUser.setWorkNo(workNo);
|
|
|
- }
|
|
|
- try {
|
|
|
- if (isEdit) {
|
|
|
- userMapper.updateById(sysUser);
|
|
|
- } else {
|
|
|
- if (oConvertUtils.isEmpty(phone)) {
|
|
|
- errorMessage.add("第 " + lineNumber + " 行:手机号为空,忽略导入。");
|
|
|
- errorLines++;
|
|
|
- continue;
|
|
|
- }
|
|
|
- SysUser userByPhone = userMapper.getUserByPhone(phone);
|
|
|
- if (null != userByPhone) {
|
|
|
-
|
|
|
- Integer tenantCount = userTenantMapper.userTenantIzExist(userByPhone.getId(), tenantId);
|
|
|
- if (tenantCount > 0) {
|
|
|
- errorMessage.add("第 " + lineNumber + " 行:成员已存在该组织中,如果列表中不存在,请确认该成员是否在审核中或者已离职,忽略导入。");
|
|
|
- errorLines++;
|
|
|
- continue;
|
|
|
- }
|
|
|
- sysUser.setId(userByPhone.getId());
|
|
|
- userMapper.updateById(sysUser);
|
|
|
- this.addUserTenant(sysUser.getId(), tenantId, userByPhone.getUsername(), sysTenant.getName());
|
|
|
- } else {
|
|
|
-
|
|
|
- String password = sysTenant.getHouseNumber() + phone;
|
|
|
- String salt = oConvertUtils.randomGen(8);
|
|
|
- sysUser.setSalt(salt);
|
|
|
-
|
|
|
- String passwordEncode = PasswordUtil.encrypt(phone, password, salt);
|
|
|
- sysUser.setPassword(passwordEncode);
|
|
|
- sysUser.setUsername(phone);
|
|
|
- sysUser.setRealname(oConvertUtils.getString(realname, phone));
|
|
|
- sysUser.setEmail(email);
|
|
|
- sysUser.setPhone(phone);
|
|
|
- sysUser.setStatus(CommonConstant.DEL_FLAG_1);
|
|
|
- sysUser.setDelFlag(CommonConstant.DEL_FLAG_0);
|
|
|
- sysUser.setCreateTime(new Date());
|
|
|
- userMapper.insert(sysUser);
|
|
|
- this.addUserTenant(sysUser.getId(), tenantId, sysUser.getUsername(), sysTenant.getName());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(position)) {
|
|
|
- this.addOrEditPosition(sysUser.getId(), position, isEdit, tenantId, positionMap);
|
|
|
- }
|
|
|
-
|
|
|
- if (!isEdit) {
|
|
|
-
|
|
|
- this.addOrEditDepart(sysUser.getId(), depart, tenantId, departMap);
|
|
|
- }
|
|
|
- successLines++;
|
|
|
- } catch (Exception e) {
|
|
|
- errorLines++;
|
|
|
- String message = e.getMessage().toLowerCase();
|
|
|
-
|
|
|
-
|
|
|
- if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_USERNAME)) {
|
|
|
- errorMessage.add("第 " + lineNumber + " 行:用户名已经存在,忽略导入。");
|
|
|
- } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_WORK_NO)) {
|
|
|
- errorMessage.add("第 " + lineNumber + " 行:工号已经存在,忽略导入。");
|
|
|
- } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_PHONE)) {
|
|
|
- errorMessage.add("第 " + lineNumber + " 行:手机号已经存在,忽略导入。");
|
|
|
- } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_EMAIL)) {
|
|
|
- errorMessage.add("第 " + lineNumber + " 行:电子邮件已经存在,忽略导入。");
|
|
|
- } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER)) {
|
|
|
- errorMessage.add("第 " + lineNumber + " 行:违反表唯一性约束。");
|
|
|
- } else {
|
|
|
- errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入");
|
|
|
- log.error(e.getMessage(), e);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- errorMessage.add("发生异常:" + e.getMessage());
|
|
|
- log.error(e.getMessage(), e);
|
|
|
- } finally {
|
|
|
- try {
|
|
|
- file.getInputStream().close();
|
|
|
- } catch (IOException e) {
|
|
|
- log.error(e.getMessage(), e);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- try {
|
|
|
- return ImportExcelUtil.imporReturnRes(errorLines, successLines, errorMessage);
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 新增或者编辑职位
|
|
|
- *
|
|
|
- * @param userId 用户id
|
|
|
- * @param position 职位名称 已/拼接
|
|
|
- * @param isEdit 新增或编辑
|
|
|
- * @param positionMap 职位map key为name,value为职位id
|
|
|
- */
|
|
|
- private void addOrEditPosition(String userId, String position, Boolean isEdit, Integer tenantId, Map<String, String> positionMap) {
|
|
|
- Page<SysPosition> page = new Page<>(1, 1);
|
|
|
- String[] positions = position.split(SymbolConstant.SEMICOLON);
|
|
|
- List<String> positionList = Arrays.asList(positions);
|
|
|
- positionList = positionList.stream().distinct().collect(Collectors.toList());
|
|
|
-
|
|
|
- sysUserPositionMapper.deleteUserPosByNameAndTenantId(positionList, tenantId, userId);
|
|
|
-
|
|
|
- for (String pos : positionList) {
|
|
|
- String posId = "";
|
|
|
- if (positionMap.containsKey(pos)) {
|
|
|
- posId = positionMap.get(pos);
|
|
|
+ isEdit = true;
|
|
|
+ sysUser.setId(id);
|
|
|
+ } else {
|
|
|
+
|
|
|
+ isEdit = false;
|
|
|
+ }
|
|
|
+ if (oConvertUtils.isNotEmpty(workNo)) {
|
|
|
+ sysUser.setWorkNo(workNo);
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ if (isEdit) {
|
|
|
+ userMapper.updateById(sysUser);
|
|
|
} else {
|
|
|
- List<String> namePage = sysPositionMapper.getPositionIdByName(pos, tenantId, page);
|
|
|
- if (CollectionUtil.isNotEmpty(namePage)) {
|
|
|
- posId = namePage.get(0);
|
|
|
- positionMap.put(pos, posId);
|
|
|
+ if (oConvertUtils.isEmpty(phone)) {
|
|
|
+ errorMessage.add("第 " + lineNumber + " 行:手机号为空,忽略导入。");
|
|
|
+ errorLines++;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ SysUser userByPhone = userMapper.getUserByPhone(phone);
|
|
|
+ if (null != userByPhone) {
|
|
|
+
|
|
|
+ Integer tenantCount =
|
|
|
+ userTenantMapper.userTenantIzExist(userByPhone.getId(), tenantId);
|
|
|
+ if (tenantCount > 0) {
|
|
|
+ errorMessage.add(
|
|
|
+ "第 " + lineNumber + " 行:成员已存在该组织中,如果列表中不存在,请确认该成员是否在审核中或者已离职,忽略导入。");
|
|
|
+ errorLines++;
|
|
|
+ continue;
|
|
|
}
|
|
|
+ sysUser.setId(userByPhone.getId());
|
|
|
+ userMapper.updateById(sysUser);
|
|
|
+ this.addUserTenant(
|
|
|
+ sysUser.getId(), tenantId, userByPhone.getUsername(), sysTenant.getName());
|
|
|
+ } else {
|
|
|
+
|
|
|
+ String password = sysTenant.getHouseNumber() + phone;
|
|
|
+ String salt = oConvertUtils.randomGen(8);
|
|
|
+ sysUser.setSalt(salt);
|
|
|
+
|
|
|
+ String passwordEncode = PasswordUtil.encrypt(phone, password, salt);
|
|
|
+ sysUser.setPassword(passwordEncode);
|
|
|
+ sysUser.setUsername(phone);
|
|
|
+ sysUser.setRealname(oConvertUtils.getString(realname, phone));
|
|
|
+ sysUser.setEmail(email);
|
|
|
+ sysUser.setPhone(phone);
|
|
|
+ sysUser.setStatus(CommonConstant.DEL_FLAG_1);
|
|
|
+ sysUser.setDelFlag(CommonConstant.DEL_FLAG_0);
|
|
|
+ sysUser.setCreateTime(new Date());
|
|
|
+ userMapper.insert(sysUser);
|
|
|
+ this.addUserTenant(
|
|
|
+ sysUser.getId(), tenantId, sysUser.getUsername(), sysTenant.getName());
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(posId)) {
|
|
|
- this.addSysUserPosition(userId, posId);
|
|
|
- continue;
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(position)) {
|
|
|
+ this.addOrEditPosition(sysUser.getId(), position, isEdit, tenantId, positionMap);
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
if (!isEdit) {
|
|
|
-
|
|
|
- SysPosition sysPosition = new SysPosition();
|
|
|
- sysPosition.setName(pos);
|
|
|
- sysPosition.setCode(RandomUtil.randomString(10));
|
|
|
- sysPosition.setTenantId(tenantId);
|
|
|
- sysPositionMapper.insert(sysPosition);
|
|
|
- positionMap.put(pos, sysPosition.getId());
|
|
|
- this.addSysUserPosition(userId, sysPosition.getId());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 添加用户职位
|
|
|
- */
|
|
|
- private void addSysUserPosition(String userId, String positionId) {
|
|
|
- Long count = sysUserPositionMapper.getUserPositionCount(userId, positionId);
|
|
|
- if (count == 0) {
|
|
|
- SysUserPosition userPosition = new SysUserPosition();
|
|
|
- userPosition.setUserId(userId);
|
|
|
- userPosition.setPositionId(positionId);
|
|
|
- sysUserPositionMapper.insert(userPosition);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 新增或编辑部门
|
|
|
- *
|
|
|
- * @param userId 用户id
|
|
|
- * @param depart 部门名称
|
|
|
- * @param tenantId 租户id
|
|
|
- * @param departMap 存放部门的map;key为名称 value为SysDepart对象。
|
|
|
- */
|
|
|
- private void addOrEditDepart(String userId, String depart, Integer tenantId, Map<String, SysDepart> departMap) {
|
|
|
-
|
|
|
- if (StringUtils.isNotEmpty(depart)) {
|
|
|
- Page<SysDepart> page = new Page<>(1, 1);
|
|
|
-
|
|
|
- String[] departNames = depart.split(SymbolConstant.SEMICOLON);
|
|
|
- List<String> departNameList = Arrays.asList(departNames);
|
|
|
- departNameList = departNameList.stream().distinct().collect(Collectors.toList());
|
|
|
-
|
|
|
- String parentId = "";
|
|
|
- for (String departName : departNameList) {
|
|
|
- String[] names = departName.split(SymbolConstant.SINGLE_SLASH);
|
|
|
-
|
|
|
- String nameStr = "";
|
|
|
- for (int i = 0; i < names.length; i++) {
|
|
|
- String name = names[i];
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(nameStr)) {
|
|
|
- nameStr = nameStr + SymbolConstant.SINGLE_SLASH + name;
|
|
|
- } else {
|
|
|
- nameStr = name;
|
|
|
- }
|
|
|
- SysDepart sysDepart = null;
|
|
|
-
|
|
|
- if (departMap.containsKey(nameStr)) {
|
|
|
- sysDepart = departMap.get(nameStr);
|
|
|
- } else {
|
|
|
-
|
|
|
- List<SysDepart> departPageByName = sysDepartMapper.getDepartPageByName(page, name, tenantId, parentId);
|
|
|
-
|
|
|
- if (CollectionUtil.isEmpty(departPageByName)) {
|
|
|
- JSONObject formData = new JSONObject();
|
|
|
- formData.put("parentId", parentId);
|
|
|
- String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART, formData);
|
|
|
- sysDepart = new SysDepart();
|
|
|
- sysDepart.setParentId(parentId);
|
|
|
- sysDepart.setOrgCode(codeArray[0]);
|
|
|
- sysDepart.setOrgType(codeArray[1]);
|
|
|
- sysDepart.setTenantId(tenantId);
|
|
|
- sysDepart.setDepartName(name);
|
|
|
- sysDepart.setIzLeaf(CommonConstant.IS_LEAF);
|
|
|
- sysDepart.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
|
|
|
- sysDepart.setStatus(CommonConstant.STATUS_1);
|
|
|
- sysDepartMapper.insert(sysDepart);
|
|
|
- } else {
|
|
|
- sysDepart = departPageByName.get(0);
|
|
|
- }
|
|
|
-
|
|
|
- if (oConvertUtils.isNotEmpty(parentId)) {
|
|
|
- sysDepartMapper.setMainLeaf(parentId, CommonConstant.NOT_LEAF);
|
|
|
- }
|
|
|
- parentId = sysDepart.getId();
|
|
|
- departMap.put(nameStr, sysDepart);
|
|
|
- }
|
|
|
-
|
|
|
- if (i == names.length - 1) {
|
|
|
- Long count = sysUserDepartMapper.getCountByDepartIdAndUserId(userId, sysDepart.getId());
|
|
|
- if (count == 0) {
|
|
|
- SysUserDepart userDepart = new SysUserDepart(userId, sysDepart.getId());
|
|
|
- sysUserDepartMapper.insert(userDepart);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+ this.addOrEditDepart(sysUser.getId(), depart, tenantId, departMap);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 添加用户租户
|
|
|
- *
|
|
|
- * @param userId
|
|
|
- * @param tenantId
|
|
|
- * @param invitedUsername 被邀请人的账号
|
|
|
- * @param tenantName 租户名称
|
|
|
- */
|
|
|
- private void addUserTenant(String userId, Integer tenantId, String invitedUsername, String tenantName) {
|
|
|
- SysUserTenant userTenant = new SysUserTenant();
|
|
|
- userTenant.setTenantId(tenantId);
|
|
|
- userTenant.setUserId(userId);
|
|
|
- userTenant.setStatus(CommonConstant.USER_TENANT_INVITE);
|
|
|
- userTenantMapper.insert(userTenant);
|
|
|
-
|
|
|
-
|
|
|
- LoginUser sysUser = SecureUtil.currentUser();
|
|
|
- MessageDTO messageDTO = new MessageDTO();
|
|
|
- String title = sysUser.getRealname() + " 邀请您加入 " + tenantName + "。";
|
|
|
- messageDTO.setTitle(title);
|
|
|
- Map<String, Object> data = new HashMap<>();
|
|
|
-
|
|
|
- data.put(CommonConstant.NOTICE_MSG_BUS_TYPE, SysAnnmentTypeEnum.TENANT_INVITE.getType());
|
|
|
-
|
|
|
- messageDTO.setData(data);
|
|
|
- messageDTO.setContent(title);
|
|
|
- messageDTO.setToUser(invitedUsername);
|
|
|
- messageDTO.setFromUser("system");
|
|
|
- systemSendMsgHandle.sendMessage(messageDTO);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- @Override
|
|
|
- public void checkUserAdminRejectDel(String userIds) {
|
|
|
- LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<>();
|
|
|
- query.in(SysUser::getId, Arrays.asList(userIds.split(SymbolConstant.COMMA)));
|
|
|
- query.eq(SysUser::getUsername, "admin");
|
|
|
- Long adminRoleCount = this.baseMapper.selectCount(query);
|
|
|
-
|
|
|
- if (adminRoleCount > 0) {
|
|
|
- throw new JeecgBootException("admin用户,不允许删除!");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void changePhone(JSONObject json, String username) {
|
|
|
- String smscode = json.getString("smscode");
|
|
|
- String phone = json.getString("phone");
|
|
|
- String type = json.getString("type");
|
|
|
- if (oConvertUtils.isEmpty(phone)) {
|
|
|
- throw new JeecgBootException("请填写原手机号!");
|
|
|
- }
|
|
|
- if (oConvertUtils.isEmpty(smscode)) {
|
|
|
- throw new JeecgBootException("请填写验证码!");
|
|
|
- }
|
|
|
-
|
|
|
- SysUser sysUser = userMapper.getUserByNameAndPhone(phone, username);
|
|
|
- if (null == sysUser) {
|
|
|
- throw new JeecgBootException("原手机号不匹配,无法修改密码!");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- if (CommonConstant.VERIFY_ORIGINAL_PHONE.equals(type)) {
|
|
|
- this.verifyPhone(phone, smscode);
|
|
|
- } else if (CommonConstant.UPDATE_PHONE.equals(type)) {
|
|
|
-
|
|
|
- String newPhone = json.getString("newPhone");
|
|
|
-
|
|
|
- if (newPhone.equals(phone)) {
|
|
|
- throw new JeecgBootException("新手机号与原手机号一致,无法修改!");
|
|
|
+ successLines++;
|
|
|
+ } catch (Exception e) {
|
|
|
+ errorLines++;
|
|
|
+ String message = e.getMessage().toLowerCase();
|
|
|
+
|
|
|
+
|
|
|
+ if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_USERNAME)) {
|
|
|
+ errorMessage.add("第 " + lineNumber + " 行:用户名已经存在,忽略导入。");
|
|
|
+ } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_WORK_NO)) {
|
|
|
+ errorMessage.add("第 " + lineNumber + " 行:工号已经存在,忽略导入。");
|
|
|
+ } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_PHONE)) {
|
|
|
+ errorMessage.add("第 " + lineNumber + " 行:手机号已经存在,忽略导入。");
|
|
|
+ } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_EMAIL)) {
|
|
|
+ errorMessage.add("第 " + lineNumber + " 行:电子邮件已经存在,忽略导入。");
|
|
|
+ } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER)) {
|
|
|
+ errorMessage.add("第 " + lineNumber + " 行:违反表唯一性约束。");
|
|
|
+ } else {
|
|
|
+ errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入");
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
}
|
|
|
- this.verifyPhone(newPhone, smscode);
|
|
|
-
|
|
|
- sysUser.setPhone(newPhone);
|
|
|
- userMapper.updateById(sysUser);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<String> getEmailBySubIdList(List<String> idList) {
|
|
|
- return userMapper.getEmailBySubIdList(idList);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 验证手机号
|
|
|
- *
|
|
|
- * @param phone
|
|
|
- * @param smsCode
|
|
|
- * @return
|
|
|
- */
|
|
|
- public void verifyPhone(String phone, String smsCode) {
|
|
|
- String phoneKey = CommonConstant.CHANGE_PHONE_REDIS_KEY_PRE + phone;
|
|
|
- Object phoneCode = redisUtil.get(phoneKey);
|
|
|
- if (null == phoneCode) {
|
|
|
- throw new JeecgBootException("验证码失效,请重新发送验证码!");
|
|
|
- }
|
|
|
- if (!smsCode.equals(phoneCode.toString())) {
|
|
|
- throw new JeecgBootException("短信验证码不匹配!");
|
|
|
- }
|
|
|
-
|
|
|
- redisUtil.removeAll(phoneKey);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void sendChangePhoneSms(JSONObject jsonObject, String username, String ipAddress) {
|
|
|
- String type = jsonObject.getString("type");
|
|
|
- String phone = jsonObject.getString("phone");
|
|
|
- if (oConvertUtils.isEmpty(phone)) {
|
|
|
- throw new JeecgBootException("请填写手机号!");
|
|
|
- }
|
|
|
-
|
|
|
- if (CommonConstant.VERIFY_ORIGINAL_PHONE.equals(type)) {
|
|
|
-
|
|
|
- SysUser sysUser = userMapper.getUserByNameAndPhone(phone, username);
|
|
|
- if (null == sysUser) {
|
|
|
- throw new JeecgBootException("旧手机号不匹配,无法修改手机号!");
|
|
|
+ } catch (Exception e) {
|
|
|
+ errorMessage.add("发生异常:" + e.getMessage());
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
+ } finally {
|
|
|
+ try {
|
|
|
+ file.getInputStream().close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ return ImportExcelUtil.imporReturnRes(errorLines, successLines, errorMessage);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 新增或者编辑职位
|
|
|
+ *
|
|
|
+ * @param userId 用户id
|
|
|
+ * @param position 职位名称 已/拼接
|
|
|
+ * @param isEdit 新增或编辑
|
|
|
+ * @param positionMap 职位map key为name,value为职位id
|
|
|
+ */
|
|
|
+ private void addOrEditPosition(
|
|
|
+ String userId,
|
|
|
+ String position,
|
|
|
+ Boolean isEdit,
|
|
|
+ Integer tenantId,
|
|
|
+ Map<String, String> positionMap) {
|
|
|
+ Page<SysPosition> page = new Page<>(1, 1);
|
|
|
+ String[] positions = position.split(SymbolConstant.SEMICOLON);
|
|
|
+ List<String> positionList = Arrays.asList(positions);
|
|
|
+ positionList = positionList.stream().distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ sysUserPositionMapper.deleteUserPosByNameAndTenantId(positionList, tenantId, userId);
|
|
|
+
|
|
|
+ for (String pos : positionList) {
|
|
|
+ String posId = "";
|
|
|
+ if (positionMap.containsKey(pos)) {
|
|
|
+ posId = positionMap.get(pos);
|
|
|
+ } else {
|
|
|
+ List<String> namePage = sysPositionMapper.getPositionIdByName(pos, tenantId, page);
|
|
|
+ if (CollectionUtil.isNotEmpty(namePage)) {
|
|
|
+ posId = namePage.get(0);
|
|
|
+ positionMap.put(pos, posId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(posId)) {
|
|
|
+ this.addSysUserPosition(userId, posId);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (!isEdit) {
|
|
|
+
|
|
|
+ SysPosition sysPosition = new SysPosition();
|
|
|
+ sysPosition.setName(pos);
|
|
|
+ sysPosition.setCode(RandomUtil.randomString(10));
|
|
|
+ sysPosition.setTenantId(tenantId);
|
|
|
+ sysPositionMapper.insert(sysPosition);
|
|
|
+ positionMap.put(pos, sysPosition.getId());
|
|
|
+ this.addSysUserPosition(userId, sysPosition.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void addSysUserPosition(String userId, String positionId) {
|
|
|
+ Long count = sysUserPositionMapper.getUserPositionCount(userId, positionId);
|
|
|
+ if (count == 0) {
|
|
|
+ SysUserPosition userPosition = new SysUserPosition();
|
|
|
+ userPosition.setUserId(userId);
|
|
|
+ userPosition.setPositionId(positionId);
|
|
|
+ sysUserPositionMapper.insert(userPosition);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 新增或编辑部门
|
|
|
+ *
|
|
|
+ * @param userId 用户id
|
|
|
+ * @param depart 部门名称
|
|
|
+ * @param tenantId 租户id
|
|
|
+ * @param departMap 存放部门的map;key为名称 value为SysDepart对象。
|
|
|
+ */
|
|
|
+ private void addOrEditDepart(
|
|
|
+ String userId, String depart, Integer tenantId, Map<String, SysDepart> departMap) {
|
|
|
+
|
|
|
+ if (StringUtils.isNotEmpty(depart)) {
|
|
|
+ Page<SysDepart> page = new Page<>(1, 1);
|
|
|
+
|
|
|
+ String[] departNames = depart.split(SymbolConstant.SEMICOLON);
|
|
|
+ List<String> departNameList = Arrays.asList(departNames);
|
|
|
+ departNameList = departNameList.stream().distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ String parentId = "";
|
|
|
+ for (String departName : departNameList) {
|
|
|
+ String[] names = departName.split(SymbolConstant.SINGLE_SLASH);
|
|
|
+
|
|
|
+ String nameStr = "";
|
|
|
+ for (int i = 0; i < names.length; i++) {
|
|
|
+ String name = names[i];
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(nameStr)) {
|
|
|
+ nameStr = nameStr + SymbolConstant.SINGLE_SLASH + name;
|
|
|
+ } else {
|
|
|
+ nameStr = name;
|
|
|
+ }
|
|
|
+ SysDepart sysDepart = null;
|
|
|
+
|
|
|
+ if (departMap.containsKey(nameStr)) {
|
|
|
+ sysDepart = departMap.get(nameStr);
|
|
|
+ } else {
|
|
|
+
|
|
|
+ List<SysDepart> departPageByName =
|
|
|
+ sysDepartMapper.getDepartPageByName(page, name, tenantId, parentId);
|
|
|
+
|
|
|
+ if (CollectionUtil.isEmpty(departPageByName)) {
|
|
|
+ JSONObject formData = new JSONObject();
|
|
|
+ formData.put("parentId", parentId);
|
|
|
+ String[] codeArray =
|
|
|
+ (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART, formData);
|
|
|
+ sysDepart = new SysDepart();
|
|
|
+ sysDepart.setParentId(parentId);
|
|
|
+ sysDepart.setOrgCode(codeArray[0]);
|
|
|
+ sysDepart.setOrgType(codeArray[1]);
|
|
|
+ sysDepart.setTenantId(tenantId);
|
|
|
+ sysDepart.setDepartName(name);
|
|
|
+ sysDepart.setIzLeaf(CommonConstant.IS_LEAF);
|
|
|
+ sysDepart.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
|
|
|
+ sysDepart.setStatus(CommonConstant.STATUS_1);
|
|
|
+ sysDepartMapper.insert(sysDepart);
|
|
|
+ } else {
|
|
|
+ sysDepart = departPageByName.get(0);
|
|
|
}
|
|
|
- } else if (CommonConstant.UPDATE_PHONE.equals(type)) {
|
|
|
-
|
|
|
- SysUser userByPhone = userMapper.getUserByPhone(phone);
|
|
|
- if (null != userByPhone) {
|
|
|
- throw new JeecgBootException("手机号已被注册,请尝试其他手机号!");
|
|
|
+
|
|
|
+ if (oConvertUtils.isNotEmpty(parentId)) {
|
|
|
+ sysDepartMapper.setMainLeaf(parentId, CommonConstant.NOT_LEAF);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- this.sendPhoneSms(phone, ipAddress);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- * 发送短信验证码
|
|
|
- *
|
|
|
- * @param phone
|
|
|
- */
|
|
|
- private void sendPhoneSms(String phone, String clientIp) {
|
|
|
- String redisKey = CommonConstant.CHANGE_PHONE_REDIS_KEY_PRE + phone;
|
|
|
- Object object = redisUtil.get(redisKey);
|
|
|
-
|
|
|
- if (object != null) {
|
|
|
- throw new JeecgBootException("验证码10分钟内,仍然有效!");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- if (!DySmsLimit.canSendSms(clientIp)) {
|
|
|
- log.warn("--------[警告] IP地址:{}, 短信接口请求太多-------", clientIp);
|
|
|
- throw new JeecgBootException("短信接口请求太多,请稍后再试!", CommonConstant.PHONE_SMS_FAIL_CODE);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- String captcha = RandomUtil.randomNumbers(6);
|
|
|
- JSONObject obj = new JSONObject();
|
|
|
- obj.put("code", captcha);
|
|
|
- try {
|
|
|
- boolean sendSmsSuccess = DySmsHelper.sendSms(phone, obj, DySmsEnum.LOGIN_TEMPLATE_CODE);
|
|
|
- if (!sendSmsSuccess) {
|
|
|
- throw new JeecgBootException("短信验证码发送失败,请稍后重试!");
|
|
|
+ parentId = sysDepart.getId();
|
|
|
+ departMap.put(nameStr, sysDepart);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (i == names.length - 1) {
|
|
|
+ Long count = sysUserDepartMapper.getCountByDepartIdAndUserId(userId, sysDepart.getId());
|
|
|
+ if (count == 0) {
|
|
|
+ SysUserDepart userDepart = new SysUserDepart(userId, sysDepart.getId());
|
|
|
+ sysUserDepartMapper.insert(userDepart);
|
|
|
}
|
|
|
-
|
|
|
- redisUtil.set(redisKey, captcha, 600);
|
|
|
- } catch (ClientException e) {
|
|
|
- log.error(e.getMessage(), e);
|
|
|
- throw new JeecgBootException("短信接口未配置,请联系管理员!");
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 添加用户租户
|
|
|
+ *
|
|
|
+ * @param userId
|
|
|
+ * @param tenantId
|
|
|
+ * @param invitedUsername 被邀请人的账号
|
|
|
+ * @param tenantName 租户名称
|
|
|
+ */
|
|
|
+ private void addUserTenant(
|
|
|
+ String userId, Integer tenantId, String invitedUsername, String tenantName) {
|
|
|
+ SysUserTenant userTenant = new SysUserTenant();
|
|
|
+ userTenant.setTenantId(tenantId);
|
|
|
+ userTenant.setUserId(userId);
|
|
|
+ userTenant.setStatus(CommonConstant.USER_TENANT_INVITE);
|
|
|
+ userTenantMapper.insert(userTenant);
|
|
|
+
|
|
|
+
|
|
|
+ LoginUser sysUser = SecureUtil.currentUser();
|
|
|
+ MessageDTO messageDTO = new MessageDTO();
|
|
|
+ String title = sysUser.getRealname() + " 邀请您加入 " + tenantName + "。";
|
|
|
+ messageDTO.setTitle(title);
|
|
|
+ Map<String, Object> data = new HashMap<>();
|
|
|
+
|
|
|
+ data.put(CommonConstant.NOTICE_MSG_BUS_TYPE, SysAnnmentTypeEnum.TENANT_INVITE.getType());
|
|
|
+
|
|
|
+ messageDTO.setData(data);
|
|
|
+ messageDTO.setContent(title);
|
|
|
+ messageDTO.setToUser(invitedUsername);
|
|
|
+ messageDTO.setFromUser("system");
|
|
|
+ systemSendMsgHandle.sendMessage(messageDTO);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void checkUserAdminRejectDel(String userIds) {
|
|
|
+ LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<>();
|
|
|
+ query.in(SysUser::getId, Arrays.asList(userIds.split(SymbolConstant.COMMA)));
|
|
|
+ query.eq(SysUser::getUsername, "admin");
|
|
|
+ Long adminRoleCount = this.baseMapper.selectCount(query);
|
|
|
+
|
|
|
+ if (adminRoleCount > 0) {
|
|
|
+ throw new JeecgBootException("admin用户,不允许删除!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void changePhone(JSONObject json, String username) {
|
|
|
+ String smscode = json.getString("smscode");
|
|
|
+ String phone = json.getString("phone");
|
|
|
+ String type = json.getString("type");
|
|
|
+ if (oConvertUtils.isEmpty(phone)) {
|
|
|
+ throw new JeecgBootException("请填写原手机号!");
|
|
|
+ }
|
|
|
+ if (oConvertUtils.isEmpty(smscode)) {
|
|
|
+ throw new JeecgBootException("请填写验证码!");
|
|
|
+ }
|
|
|
+
|
|
|
+ SysUser sysUser = userMapper.getUserByNameAndPhone(phone, username);
|
|
|
+ if (null == sysUser) {
|
|
|
+ throw new JeecgBootException("原手机号不匹配,无法修改密码!");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (CommonConstant.VERIFY_ORIGINAL_PHONE.equals(type)) {
|
|
|
+ this.verifyPhone(phone, smscode);
|
|
|
+ } else if (CommonConstant.UPDATE_PHONE.equals(type)) {
|
|
|
+
|
|
|
+ String newPhone = json.getString("newPhone");
|
|
|
+
|
|
|
+ if (newPhone.equals(phone)) {
|
|
|
+ throw new JeecgBootException("新手机号与原手机号一致,无法修改!");
|
|
|
+ }
|
|
|
+ this.verifyPhone(newPhone, smscode);
|
|
|
+
|
|
|
+ sysUser.setPhone(newPhone);
|
|
|
+ userMapper.updateById(sysUser);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<String> getEmailBySubIdList(List<String> idList) {
|
|
|
+ return userMapper.getEmailBySubIdList(idList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 验证手机号
|
|
|
+ *
|
|
|
+ * @param phone
|
|
|
+ * @param smsCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public void verifyPhone(String phone, String smsCode) {
|
|
|
+ String phoneKey = CommonConstant.CHANGE_PHONE_REDIS_KEY_PRE + phone;
|
|
|
+ Object phoneCode = redisUtil.get(phoneKey);
|
|
|
+ if (null == phoneCode) {
|
|
|
+ throw new JeecgBootException("验证码失效,请重新发送验证码!");
|
|
|
+ }
|
|
|
+ if (!smsCode.equals(phoneCode.toString())) {
|
|
|
+ throw new JeecgBootException("短信验证码不匹配!");
|
|
|
+ }
|
|
|
+
|
|
|
+ redisUtil.removeAll(phoneKey);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void sendChangePhoneSms(JSONObject jsonObject, String username, String ipAddress) {
|
|
|
+ String type = jsonObject.getString("type");
|
|
|
+ String phone = jsonObject.getString("phone");
|
|
|
+ if (oConvertUtils.isEmpty(phone)) {
|
|
|
+ throw new JeecgBootException("请填写手机号!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (CommonConstant.VERIFY_ORIGINAL_PHONE.equals(type)) {
|
|
|
+
|
|
|
+ SysUser sysUser = userMapper.getUserByNameAndPhone(phone, username);
|
|
|
+ if (null == sysUser) {
|
|
|
+ throw new JeecgBootException("旧手机号不匹配,无法修改手机号!");
|
|
|
+ }
|
|
|
+ } else if (CommonConstant.UPDATE_PHONE.equals(type)) {
|
|
|
+
|
|
|
+ SysUser userByPhone = userMapper.getUserByPhone(phone);
|
|
|
+ if (null != userByPhone) {
|
|
|
+ throw new JeecgBootException("手机号已被注册,请尝试其他手机号!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.sendPhoneSms(phone, ipAddress);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 发送短信验证码
|
|
|
+ *
|
|
|
+ * @param phone
|
|
|
+ */
|
|
|
+ private void sendPhoneSms(String phone, String clientIp) {
|
|
|
+ String redisKey = CommonConstant.CHANGE_PHONE_REDIS_KEY_PRE + phone;
|
|
|
+ Object object = redisUtil.get(redisKey);
|
|
|
+
|
|
|
+ if (object != null) {
|
|
|
+ throw new JeecgBootException("验证码10分钟内,仍然有效!");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (!DySmsLimit.canSendSms(clientIp)) {
|
|
|
+ log.warn("--------[警告] IP地址:{}, 短信接口请求太多-------", clientIp);
|
|
|
+ throw new JeecgBootException("短信接口请求太多,请稍后再试!", CommonConstant.PHONE_SMS_FAIL_CODE);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ String captcha = RandomUtil.randomNumbers(6);
|
|
|
+ JSONObject obj = new JSONObject();
|
|
|
+ obj.put("code", captcha);
|
|
|
+ try {
|
|
|
+ boolean sendSmsSuccess = DySmsHelper.sendSms(phone, obj, DySmsEnum.LOGIN_TEMPLATE_CODE);
|
|
|
+ if (!sendSmsSuccess) {
|
|
|
+ throw new JeecgBootException("短信验证码发送失败,请稍后重试!");
|
|
|
+ }
|
|
|
+
|
|
|
+ redisUtil.set(redisKey, captcha, 600);
|
|
|
+ } catch (ClientException e) {
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
+ throw new JeecgBootException("短信接口未配置,请联系管理员!");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|