|
@@ -1,6 +1,7 @@
|
|
|
package org.dromara.service.impl;
|
|
|
|
|
|
import cn.dev33.satoken.secure.BCrypt;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
@@ -13,6 +14,7 @@ import org.dromara.common.core.utils.MapstructUtils;
|
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
+import org.dromara.common.redis.utils.RedisUtils;
|
|
|
import org.dromara.common.tenant.helper.TenantHelper;
|
|
|
import org.dromara.domain.staffManage.StaffManage;
|
|
|
import org.dromara.domain.staffManage.bo.StaffManageBo;
|
|
@@ -21,16 +23,19 @@ import org.dromara.mapper.StaffManageMapper;
|
|
|
import org.dromara.service.IStaffManageService;
|
|
|
import org.dromara.system.domain.SysRole;
|
|
|
import org.dromara.system.domain.SysUser;
|
|
|
+import org.dromara.system.domain.SysUserRole;
|
|
|
import org.dromara.system.domain.SysUserTenant;
|
|
|
import org.dromara.system.domain.bo.SysUserBo;
|
|
|
import org.dromara.system.domain.vo.SysRoleVo;
|
|
|
import org.dromara.system.mapper.SysRoleMapper;
|
|
|
import org.dromara.system.mapper.SysUserMapper;
|
|
|
+import org.dromara.system.mapper.SysUserRoleMapper;
|
|
|
import org.dromara.system.mapper.SysUserTenantMapper;
|
|
|
import org.dromara.system.service.ISysUserService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -52,6 +57,7 @@ public class StaffManageServiceImpl implements IStaffManageService {
|
|
|
private final SysRoleMapper sysRoleMapper;
|
|
|
private final ISysUserService userService;
|
|
|
private final SysUserMapper userMapper;
|
|
|
+ private final SysUserRoleMapper userRoleMapper;
|
|
|
|
|
|
/**
|
|
|
* 查询员工管理
|
|
@@ -72,7 +78,7 @@ public class StaffManageServiceImpl implements IStaffManageService {
|
|
|
*/
|
|
|
@Override
|
|
|
public StaffManageVo getInfoByUserId(Long userId) {
|
|
|
- return baseMapper.selectVoOne(new LambdaQueryWrapper<StaffManage>().eq(StaffManage::getUserId, userId));
|
|
|
+ return baseMapper.getInfoByUserId(userId);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -89,6 +95,19 @@ public class StaffManageServiceImpl implements IStaffManageService {
|
|
|
return TableDataInfo.build(result);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 查询员工管理需要认证的列表
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public TableDataInfo<StaffManageVo> listAuthentication(StaffManageBo bo, PageQuery pageQuery) {
|
|
|
+ LambdaQueryWrapper<StaffManage> lqw = buildQueryWrapper(bo);
|
|
|
+ Page<StaffManageVo> result = TenantHelper.ignore(() -> {
|
|
|
+ return
|
|
|
+ baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
+ });
|
|
|
+ return TableDataInfo.build(result);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 查询符合条件的员工管理列表
|
|
|
*
|
|
@@ -117,6 +136,7 @@ public class StaffManageServiceImpl implements IStaffManageService {
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getIdCardBack()), StaffManage::getIdCardBack, bo.getIdCardBack());
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getCertificate()), StaffManage::getCertificate, bo.getCertificate());
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), StaffManage::getStatus, bo.getStatus());
|
|
|
+ lqw.eq(StringUtils.isNotBlank(bo.getExamine()), StaffManage::getExamine, bo.getExamine());
|
|
|
return lqw;
|
|
|
}
|
|
|
|
|
@@ -129,10 +149,26 @@ public class StaffManageServiceImpl implements IStaffManageService {
|
|
|
@Override
|
|
|
public Boolean insertByBo(StaffManageBo bo) {
|
|
|
StaffManage add = MapstructUtils.convert(bo, StaffManage.class);
|
|
|
- validEntityBeforeSave(add);
|
|
|
- boolean flag = baseMapper.insert(add) > 0;
|
|
|
+ boolean flag = checkPhoneNumberUnique(add);
|
|
|
+ if (!flag) {
|
|
|
+ throw new UserException("staff.manage.error");
|
|
|
+ }
|
|
|
if (flag) {
|
|
|
- bo.setStaffId(add.getStaffId());
|
|
|
+ validEntityBeforeSave(add);
|
|
|
+ flag = baseMapper.insert(add) > 0;
|
|
|
+ if (flag) {
|
|
|
+ bo.setStaffId(add.getStaffId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //往redis中插入需要认证的记录数据,给getUserInfo接口判断是否需要认证使用
|
|
|
+ String key = STAFF_MANAGE_AUTHENTICATION + bo.getUserId();
|
|
|
+ Object cacheObject = RedisUtils.getCacheObject(key);
|
|
|
+ int count = 0;
|
|
|
+ if (cacheObject != null) {
|
|
|
+ count = Integer.parseInt(cacheObject.toString()) + 1;
|
|
|
+ RedisUtils.setCacheObject(key, count);
|
|
|
+ } else {
|
|
|
+ RedisUtils.setCacheObject(key, 1);
|
|
|
}
|
|
|
return flag;
|
|
|
}
|
|
@@ -144,56 +180,69 @@ public class StaffManageServiceImpl implements IStaffManageService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean insertAuthenticationByBo(StaffManageBo bo) {
|
|
|
StaffManage staffManage = MapstructUtils.convert(bo, StaffManage.class);
|
|
|
- SysUserBo sysUser = new SysUserBo();
|
|
|
- String tenantId = "";
|
|
|
- //手机号、手机验证码注册
|
|
|
- if (TenantHelper.isEnable()) {
|
|
|
- tenantId = staffManage.getTenantId();
|
|
|
- }
|
|
|
- String username = staffManage.getPhoneNumber();
|
|
|
- String password = BoManConfig.getPasswordDeft();
|
|
|
- // 校验用户类型是否存在
|
|
|
- String userType = UserType.getUserType(staffManage.getUserType()).getUserType();
|
|
|
+ //判断是否重复
|
|
|
+ boolean flag = checkPhoneNumberUnique(staffManage);
|
|
|
+ if (!flag) {
|
|
|
+ throw new UserException("staff.manage.error");
|
|
|
+ } else if (flag) {
|
|
|
+ SysUserBo user = new SysUserBo();
|
|
|
+ String tenantId = "";
|
|
|
+ //手机号、手机验证码注册
|
|
|
+ if (TenantHelper.isEnable()) {
|
|
|
+ tenantId = staffManage.getTenantId();
|
|
|
+ }
|
|
|
+ String username = staffManage.getPhoneNumber();
|
|
|
+ String password = BoManConfig.getPasswordDeft();
|
|
|
+ // 校验用户类型是否存在
|
|
|
+ String userType = UserType.getUserType(staffManage.getUserType()).getUserType();
|
|
|
|
|
|
- sysUser.setUserName(username);
|
|
|
- sysUser.setNickName(username);
|
|
|
- sysUser.setPassword(BCrypt.hashpw(password));
|
|
|
- sysUser.setUserType(userType);
|
|
|
- sysUser.setPhonenumber(username);
|
|
|
- sysUser.setIsAuthentication(Y);
|
|
|
- boolean exist = TenantHelper.dynamic(tenantId, () -> {
|
|
|
- return userMapper.exists(new LambdaQueryWrapper<SysUser>()
|
|
|
- .eq(SysUser::getUserName, sysUser.getUserName()));
|
|
|
- });
|
|
|
- if (exist) {
|
|
|
- throw new UserException("user.register.save.error", username);
|
|
|
- }
|
|
|
- boolean regFlag = userService.registerUser(sysUser, tenantId);
|
|
|
- if (!regFlag) {
|
|
|
- throw new UserException("user.register.error");
|
|
|
- }
|
|
|
- staffManage.setExamine(TWO);
|
|
|
- staffManage.setUserId(sysUser.getUserId());
|
|
|
- boolean flag = baseMapper.insert(staffManage) > 0;
|
|
|
- if (flag) {
|
|
|
- bo.setStaffId(staffManage.getStaffId());
|
|
|
- }
|
|
|
- //sys_user_tenant表中
|
|
|
- SysUserTenant sysUserTenant = new SysUserTenant();
|
|
|
- sysUserTenant.setUserId(staffManage.getUserId());
|
|
|
- sysUserTenant.setTenantId(staffManage.getTenantId());
|
|
|
- sysUserTenantMapper.insert(sysUserTenant);
|
|
|
+ user.setUserName(username);
|
|
|
+ user.setNickName(username);
|
|
|
+ user.setPassword(BCrypt.hashpw(password));
|
|
|
+ user.setUserType(userType);
|
|
|
+ user.setPhonenumber(username);
|
|
|
+ user.setIsAuthentication(Y);
|
|
|
+ boolean exist = TenantHelper.dynamic(tenantId, () -> {
|
|
|
+ return userMapper.exists(new LambdaQueryWrapper<SysUser>()
|
|
|
+ .eq(SysUser::getUserName, user.getUserName()));
|
|
|
+ });
|
|
|
+ if (exist) {
|
|
|
+ throw new UserException("user.register.save.error", username);
|
|
|
+ }
|
|
|
+ user.setCreateBy(0L);
|
|
|
+ user.setUpdateBy(0L);
|
|
|
+ SysUser sysUser = MapstructUtils.convert(user, SysUser.class);
|
|
|
+ sysUser.setTenantId(tenantId);
|
|
|
+ boolean regFlag = userMapper.insert(sysUser) > 0;
|
|
|
+ if (!regFlag) {
|
|
|
+ throw new UserException("user.register.error");
|
|
|
+ }
|
|
|
+ staffManage.setExamine(TWO);
|
|
|
+ Long userId = sysUser.getUserId();
|
|
|
+ staffManage.setUserId(userId);
|
|
|
+ flag = baseMapper.insert(staffManage) > 0;
|
|
|
+ if (flag) {
|
|
|
+ bo.setStaffId(staffManage.getStaffId());
|
|
|
+ }
|
|
|
+ //sys_user_tenant表中
|
|
|
+ SysUserTenant sysUserTenant = new SysUserTenant();
|
|
|
+ sysUserTenant.setUserId(userId);
|
|
|
+ sysUserTenant.setTenantId(staffManage.getTenantId());
|
|
|
+ sysUserTenantMapper.insert(sysUserTenant);
|
|
|
|
|
|
- //给该userId赋予角色
|
|
|
- // 新增用户与角色管理
|
|
|
- //根据权限字符去查询角色id
|
|
|
- Long[] roles;
|
|
|
- SysRoleVo sysRoleVo = sysRoleMapper.selectVoOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleKey, staffManage.getStaffCategory()));
|
|
|
- if (sysRoleVo != null) {
|
|
|
- roles = new Long[]{sysRoleVo.getRoleId()};
|
|
|
- sysUser.setRoleIds(roles);
|
|
|
+ //给该userId赋予角色
|
|
|
+ // 新增用户与角色管理
|
|
|
+ //根据权限字符去查询角色id
|
|
|
+ SysRoleVo sysRoleVo = sysRoleMapper.selectVoOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleKey, staffManage.getStaffCategory()));
|
|
|
+ if (sysRoleVo != null) {
|
|
|
+ List<Long> list = new ArrayList<>();
|
|
|
+ Long roleId = sysRoleVo.getRoleId();
|
|
|
+ list.add(roleId);
|
|
|
+ user.setUserId(userId);
|
|
|
+ user.setRoleIds(list.toArray(new Long[list.size()]));
|
|
|
+ }
|
|
|
+ userService.insertUserRole(user, false);
|
|
|
}
|
|
|
- userService.insertUserRole(sysUser, false);
|
|
|
return flag;
|
|
|
}
|
|
|
|
|
@@ -222,6 +271,7 @@ public class StaffManageServiceImpl implements IStaffManageService {
|
|
|
String tenantIdOld = staffManageVo.getTenantId();
|
|
|
Long userId = examineStaffManage.getUserId();
|
|
|
SysUserBo sysUser = new SysUserBo();
|
|
|
+ sysUser.setUserId(bo.getUserId());
|
|
|
if (TenantHelper.isEnable()) {
|
|
|
//把租户id更新到sys_user表/sys_user_tenant表中
|
|
|
String tenantIdNew = examineStaffManage.getTenantId();
|
|
@@ -238,7 +288,6 @@ public class StaffManageServiceImpl implements IStaffManageService {
|
|
|
//组装sysUser
|
|
|
//给该userId赋予角色
|
|
|
// 新增用户与角色管理
|
|
|
- sysUser.setUserId(bo.getUserId());
|
|
|
//根据权限字符去查询角色id
|
|
|
Long[] roles;
|
|
|
SysRoleVo sysRoleVo = sysRoleMapper.selectVoOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleKey, examineStaffManage.getStaffCategory()));
|
|
@@ -249,9 +298,9 @@ public class StaffManageServiceImpl implements IStaffManageService {
|
|
|
userService.insertUserRole(sysUser, true);
|
|
|
}
|
|
|
}
|
|
|
- sysUser.setUserId(examineStaffManage.getUserId());
|
|
|
sysUser.setPhonenumber(examineStaffManage.getPhoneNumber());
|
|
|
- return userService.updateUserById(sysUser) > 0;
|
|
|
+ userService.updateUserByIdNoTenantId(sysUser);
|
|
|
+ return baseMapper.updateById(examineStaffManage) > 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -295,7 +344,7 @@ public class StaffManageServiceImpl implements IStaffManageService {
|
|
|
//把租户id更新到sys_user表/sys_user_tenant表中
|
|
|
sysUser.setTenantId(examineStaffManage.getTenantId());
|
|
|
sysUser.setIsAuthentication(Y);
|
|
|
- userService.updateUserById(sysUser);
|
|
|
+ userService.updateUserByIdNoTenantId(sysUser);
|
|
|
SysUserTenant sysUserTenant = new SysUserTenant();
|
|
|
sysUserTenant.setUserId(examineStaffManage.getUserId());
|
|
|
sysUserTenant.setTenantId(examineStaffManage.getTenantId());
|
|
@@ -312,9 +361,77 @@ public class StaffManageServiceImpl implements IStaffManageService {
|
|
|
sysUser.setRoleIds(roles);
|
|
|
}
|
|
|
userService.insertUserRole(sysUser, false);
|
|
|
+
|
|
|
+ //往redis中插入需要认证的记录数据,给getUserInfo接口判断是否需要认证使用
|
|
|
+ String key = STAFF_MANAGE_AUTHENTICATION + bo.getUserId();
|
|
|
+ Object cacheObject = RedisUtils.getCacheObject(key);
|
|
|
+ int count = 0;
|
|
|
+ if (cacheObject != null) {
|
|
|
+ count = Integer.parseInt(cacheObject.toString()) - 1;
|
|
|
+ if (count > 0) {
|
|
|
+ RedisUtils.setCacheObject(key,count);
|
|
|
+ }else {
|
|
|
+ RedisUtils.deleteObject(key);
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
return baseMapper.updateById(examineStaffManage) > 0;
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除员工信息和用户信息和权限
|
|
|
+ *
|
|
|
+ * @param bo
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean deleteStaffManage(StaffManageBo bo) {
|
|
|
+ Long userId = bo.getUserId();
|
|
|
+ Long staffId = bo.getStaffId();
|
|
|
+ String tenantId = bo.getTenantId();
|
|
|
+ boolean flag = baseMapper.deleteById(staffId) > 0;
|
|
|
+ // userMapper.deleteById(userId);
|
|
|
+ if (TenantHelper.isEnable()) {
|
|
|
+ // 删除用户与角色关联
|
|
|
+ userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId).eq(SysUserRole::getTenantId, tenantId));
|
|
|
+ sysUserTenantMapper.delete(new LambdaQueryWrapper<SysUserTenant>().eq(SysUserTenant::getUserId, userId).eq(SysUserTenant::getTenantId, tenantId));
|
|
|
+ } else {
|
|
|
+ userRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId));
|
|
|
+ }
|
|
|
+ //往redis中插入需要认证的记录数据,给getUserInfo接口判断是否需要认证使用
|
|
|
+ String key = STAFF_MANAGE_AUTHENTICATION + userId;
|
|
|
+ Object cacheObject = RedisUtils.getCacheObject(key);
|
|
|
+ int count = 0;
|
|
|
+ if (cacheObject != null) {
|
|
|
+ count = Integer.parseInt(cacheObject.toString()) - 1;
|
|
|
+ if (count > 0) {
|
|
|
+ RedisUtils.setCacheObject(key,count);
|
|
|
+ }else {
|
|
|
+ RedisUtils.deleteObject(key);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验手机号码是否唯一
|
|
|
+ *
|
|
|
+ * @param add 员工信息
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+
|
|
|
+ public boolean checkPhoneNumberUnique(StaffManage add) {
|
|
|
+ boolean exit = TenantHelper.ignore(() -> {
|
|
|
+ return
|
|
|
+ baseMapper.exists(new LambdaQueryWrapper<StaffManage>()
|
|
|
+ .eq(StaffManage::getPhoneNumber, add.getPhoneNumber())
|
|
|
+ .eq(StaffManage::getTenantId, add.getTenantId())
|
|
|
+ .ne(ObjectUtil.isNotNull(add.getStaffId()), StaffManage::getStaffId, add.getStaffId()));
|
|
|
+ });
|
|
|
+ return !exit;
|
|
|
+ }
|
|
|
}
|