|
|
@@ -13,6 +13,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
import com.ygtx.common.annotation.DataScope;
|
|
|
import com.ygtx.common.constant.UserConstants;
|
|
|
+import com.ygtx.common.core.domain.entity.SysDept;
|
|
|
import com.ygtx.common.core.domain.entity.SysRole;
|
|
|
import com.ygtx.common.core.domain.entity.SysUser;
|
|
|
import com.ygtx.common.exception.ServiceException;
|
|
|
@@ -32,6 +33,8 @@ import com.ygtx.system.mapper.SysUserPostMapper;
|
|
|
import com.ygtx.system.mapper.SysUserRoleMapper;
|
|
|
import com.ygtx.system.service.ISysConfigService;
|
|
|
import com.ygtx.system.service.ISysDeptService;
|
|
|
+import com.ygtx.system.service.ISysPostService;
|
|
|
+import com.ygtx.system.service.ISysRoleService;
|
|
|
import com.ygtx.system.service.ISysUserService;
|
|
|
|
|
|
/**
|
|
|
@@ -65,6 +68,12 @@ public class SysUserServiceImpl implements ISysUserService
|
|
|
@Autowired
|
|
|
private ISysDeptService deptService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ISysPostService postService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ISysRoleService roleService;
|
|
|
+
|
|
|
@Autowired
|
|
|
protected Validator validator;
|
|
|
|
|
|
@@ -78,7 +87,41 @@ public class SysUserServiceImpl implements ISysUserService
|
|
|
@DataScope(deptAlias = "d", userAlias = "u")
|
|
|
public List<SysUser> selectUserList(SysUser user)
|
|
|
{
|
|
|
- return userMapper.selectUserList(user);
|
|
|
+ List<SysUser> userList = userMapper.selectUserList(user);
|
|
|
+ // 为导出功能加载角色和岗位信息
|
|
|
+ if (userList != null && !userList.isEmpty()) {
|
|
|
+ for (SysUser sysUser : userList) {
|
|
|
+ // 加载角色信息
|
|
|
+ List<SysRole> roles = roleMapper.selectRolePermissionByUserId(sysUser.getUserId());
|
|
|
+ sysUser.setRoles(roles);
|
|
|
+ // 设置角色名称用于导出
|
|
|
+ if (roles != null && !roles.isEmpty()) {
|
|
|
+ StringBuilder roleNames = new StringBuilder();
|
|
|
+ for (int i = 0; i < roles.size(); i++) {
|
|
|
+ if (i > 0) {
|
|
|
+ roleNames.append(",");
|
|
|
+ }
|
|
|
+ roleNames.append(roles.get(i).getRoleName());
|
|
|
+ }
|
|
|
+ sysUser.setRoleNames(roleNames.toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加载岗位信息(从主岗位表获取)
|
|
|
+ List<SysPost> posts = postService.selectPostsByUserId(sysUser.getUserId());
|
|
|
+ // 设置岗位名称用于导出
|
|
|
+ if (posts != null && !posts.isEmpty()) {
|
|
|
+ StringBuilder postNames = new StringBuilder();
|
|
|
+ for (int i = 0; i < posts.size(); i++) {
|
|
|
+ if (i > 0) {
|
|
|
+ postNames.append(",");
|
|
|
+ }
|
|
|
+ postNames.append(posts.get(i).getPostName());
|
|
|
+ }
|
|
|
+ sysUser.setPostNames(postNames.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return userList;
|
|
|
}
|
|
|
@Override
|
|
|
public List<SysUser> selectUserListByDeptId(SysUser user)
|
|
|
@@ -435,48 +478,86 @@ public class SysUserServiceImpl implements ISysUserService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 新增用户岗位信息
|
|
|
+ * 新增用户角色信息
|
|
|
*
|
|
|
- * @param user 用户对象
|
|
|
+ * @param userId 用户ID
|
|
|
+ * @param roleIds 角色组
|
|
|
*/
|
|
|
- public void insertUserPost(SysUser user)
|
|
|
+ public void insertUserRole(Long userId, Long[] roleIds)
|
|
|
{
|
|
|
- Long[] posts = user.getPostIds();
|
|
|
- if (StringUtils.isNotEmpty(posts))
|
|
|
+ if (StringUtils.isNotEmpty(roleIds))
|
|
|
{
|
|
|
- // 新增用户与岗位管理
|
|
|
- List<SysUserPost> list = new ArrayList<SysUserPost>(posts.length);
|
|
|
- for (Long postId : posts)
|
|
|
+ // 新增用户与角色管理
|
|
|
+ List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length);
|
|
|
+ for (Long roleId : roleIds)
|
|
|
{
|
|
|
- SysUserPost up = new SysUserPost();
|
|
|
- up.setUserId(user.getUserId());
|
|
|
- up.setPostId(postId);
|
|
|
- list.add(up);
|
|
|
+ // 检查角色是否存在
|
|
|
+ try {
|
|
|
+ SysRole role = roleService.selectRoleById(roleId);
|
|
|
+ if (role != null) {
|
|
|
+ SysUserRole ur = new SysUserRole();
|
|
|
+ ur.setUserId(userId);
|
|
|
+ ur.setRoleId(roleId);
|
|
|
+ list.add(ur);
|
|
|
+ } else {
|
|
|
+ log.warn("角色不存在,角色ID: {}, 用户ID: {}", roleId, userId);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 角色不存在,跳过
|
|
|
+ log.warn("角色ID {} 不存在,跳过关联", roleId);
|
|
|
+ }
|
|
|
}
|
|
|
- userPostMapper.batchUserPost(list);
|
|
|
+ if (!list.isEmpty()) {
|
|
|
+ log.info("准备保存用户角色关联,用户ID: {}, 角色数量: {}", userId, list.size());
|
|
|
+ int result = userRoleMapper.batchUserRole(list);
|
|
|
+ log.info("用户角色关联保存结果,用户ID: {}, 保存数量: {}", userId, result);
|
|
|
+ } else {
|
|
|
+ log.info("没有有效的角色关联需要保存,用户ID: {}", userId);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.info("用户没有角色信息需要保存,用户ID: {}", userId);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 新增用户角色信息
|
|
|
+ * 新增用户岗位信息
|
|
|
*
|
|
|
- * @param userId 用户ID
|
|
|
- * @param roleIds 角色组
|
|
|
+ * @param user 用户对象
|
|
|
*/
|
|
|
- public void insertUserRole(Long userId, Long[] roleIds)
|
|
|
+ public void insertUserPost(SysUser user)
|
|
|
{
|
|
|
- if (StringUtils.isNotEmpty(roleIds))
|
|
|
+ Long[] posts = user.getPostIds();
|
|
|
+ if (StringUtils.isNotEmpty(posts))
|
|
|
{
|
|
|
- // 新增用户与角色管理
|
|
|
- List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length);
|
|
|
- for (Long roleId : roleIds)
|
|
|
+ // 新增用户与岗位管理
|
|
|
+ List<SysUserPost> list = new ArrayList<SysUserPost>(posts.length);
|
|
|
+ for (Long postId : posts)
|
|
|
{
|
|
|
- SysUserRole ur = new SysUserRole();
|
|
|
- ur.setUserId(userId);
|
|
|
- ur.setRoleId(roleId);
|
|
|
- list.add(ur);
|
|
|
+ // 检查岗位是否存在
|
|
|
+ try {
|
|
|
+ SysPost post = postService.selectPostById(postId);
|
|
|
+ if (post != null) {
|
|
|
+ SysUserPost up = new SysUserPost();
|
|
|
+ up.setUserId(user.getUserId());
|
|
|
+ up.setPostId(postId);
|
|
|
+ list.add(up);
|
|
|
+ } else {
|
|
|
+ log.warn("岗位不存在,岗位ID: {}, 用户ID: {}", postId, user.getUserId());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 岗位不存在,跳过
|
|
|
+ log.warn("岗位ID {} 不存在,跳过关联", postId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!list.isEmpty()) {
|
|
|
+ log.info("准备保存用户岗位关联,用户ID: {}, 岗位数量: {}", user.getUserId(), list.size());
|
|
|
+ int result = userPostMapper.batchUserPost(list);
|
|
|
+ log.info("用户岗位关联保存结果,用户ID: {}, 保存数量: {}", user.getUserId(), result);
|
|
|
+ } else {
|
|
|
+ log.info("没有有效的岗位关联需要保存,用户ID: {}", user.getUserId());
|
|
|
}
|
|
|
- userRoleMapper.batchUserRole(list);
|
|
|
+ } else {
|
|
|
+ log.info("用户没有岗位信息需要保存,用户ID: {}", user.getUserId());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -536,37 +617,185 @@ public class SysUserServiceImpl implements ISysUserService
|
|
|
}
|
|
|
int successNum = 0;
|
|
|
int failureNum = 0;
|
|
|
+ int partialSuccessNum = 0;
|
|
|
StringBuilder successMsg = new StringBuilder();
|
|
|
StringBuilder failureMsg = new StringBuilder();
|
|
|
+ StringBuilder partialSuccessMsg = new StringBuilder();
|
|
|
for (SysUser user : userList)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
+ // 通过部门名称查找部门ID
|
|
|
+ if (StringUtils.isNotEmpty(user.getDeptName())) {
|
|
|
+ SysDept dept = deptService.selectDeptByDeptName(user.getDeptName());
|
|
|
+ if (dept != null) {
|
|
|
+ user.setDeptId(dept.getDeptId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 通过角色名称查找角色ID
|
|
|
+ if (StringUtils.isNotEmpty(user.getRoleNames())) {
|
|
|
+ String[] roleNames = user.getRoleNames().split(",");
|
|
|
+ List<Long> roleIds = new ArrayList<>();
|
|
|
+ for (String roleName : roleNames) {
|
|
|
+ roleName = roleName.trim();
|
|
|
+ if (StringUtils.isNotEmpty(roleName)) {
|
|
|
+ SysRole role = roleService.selectRoleByRoleName(roleName);
|
|
|
+ if (role != null) {
|
|
|
+ roleIds.add(role.getRoleId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!roleIds.isEmpty()) {
|
|
|
+ user.setRoleIds(roleIds.toArray(new Long[0]));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 通过岗位名称查找岗位ID
|
|
|
+ if (StringUtils.isNotEmpty(user.getPostNames())) {
|
|
|
+ String[] postNames = user.getPostNames().split(",");
|
|
|
+ List<Long> postIds = new ArrayList<>();
|
|
|
+ for (String postName : postNames) {
|
|
|
+ postName = postName.trim();
|
|
|
+ if (StringUtils.isNotEmpty(postName)) {
|
|
|
+ SysPost post = postService.selectPostByPostName(postName);
|
|
|
+ if (post != null) {
|
|
|
+ postIds.add(post.getPostId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!postIds.isEmpty()) {
|
|
|
+ user.setPostIds(postIds.toArray(new Long[0]));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 验证是否存在这个用户
|
|
|
SysUser u = userMapper.selectUserByUserName(user.getUserName());
|
|
|
if (StringUtils.isNull(u))
|
|
|
{
|
|
|
BeanValidators.validateWithException(validator, user);
|
|
|
- deptService.checkDeptDataScope(user.getDeptId());
|
|
|
String password = configService.selectConfigByKey("sys.user.initPassword");
|
|
|
user.setPassword(SecurityUtils.encryptPassword(password));
|
|
|
user.setCreateBy(operName);
|
|
|
+
|
|
|
+ // 检查部门是否存在,如果不存在则记录警告但继续导入
|
|
|
+ boolean deptExists = true;
|
|
|
+ if (user.getDeptId() != null) {
|
|
|
+ try {
|
|
|
+ deptService.checkDeptDataScope(user.getDeptId());
|
|
|
+ } catch (Exception e) {
|
|
|
+ deptExists = false;
|
|
|
+ partialSuccessMsg.append("<br/>" + (partialSuccessNum + 1) + "、账号 " + user.getUserName() + " 部门信息未找到");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 插入用户
|
|
|
userMapper.insertUser(user);
|
|
|
successNum++;
|
|
|
- successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
|
|
|
+
|
|
|
+ // 确保用户ID已被正确设置
|
|
|
+ if (user.getUserId() == null) {
|
|
|
+ log.error("用户插入后ID为空,用户名: {}", user.getUserName());
|
|
|
+ partialSuccessMsg.append("<br/>" + (partialSuccessNum + 1) + "、账号 " + user.getUserName() + " 用户ID为空");
|
|
|
+ partialSuccessNum++;
|
|
|
+ } else {
|
|
|
+ // 处理角色关联
|
|
|
+ boolean roleProcessed = true;
|
|
|
+ if (user.getRoleIds() != null && user.getRoleIds().length > 0) {
|
|
|
+ try {
|
|
|
+ insertUserRole(user);
|
|
|
+ } catch (Exception e) {
|
|
|
+ roleProcessed = false;
|
|
|
+ log.error("用户角色关联保存失败,用户名: " + user.getUserName(), e);
|
|
|
+ partialSuccessMsg.append("<br/>" + (partialSuccessNum + 1) + "、账号 " + user.getUserName() + " 角色信息未完全导入");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理岗位关联
|
|
|
+ boolean postProcessed = true;
|
|
|
+ if (user.getPostIds() != null && user.getPostIds().length > 0) {
|
|
|
+ try {
|
|
|
+ insertUserPost(user);
|
|
|
+ } catch (Exception e) {
|
|
|
+ postProcessed = false;
|
|
|
+ log.error("用户岗位关联保存失败,用户名: " + user.getUserName(), e);
|
|
|
+ partialSuccessMsg.append("<br/>" + (partialSuccessNum + 1) + "、账号 " + user.getUserName() + " 岗位信息未完全导入");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!deptExists || !roleProcessed || !postProcessed) {
|
|
|
+ partialSuccessNum++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (deptExists && roleProcessed && postProcessed) {
|
|
|
+ successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
|
|
|
+ } else {
|
|
|
+ partialSuccessMsg.append("<br/>" + (partialSuccessNum) + "、账号 " + user.getUserName() + " 已导入,但部分信息缺失");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
else if (isUpdateSupport)
|
|
|
{
|
|
|
BeanValidators.validateWithException(validator, user);
|
|
|
checkUserAllowed(u);
|
|
|
checkUserDataScope(u.getUserId());
|
|
|
- deptService.checkDeptDataScope(user.getDeptId());
|
|
|
user.setUserId(u.getUserId());
|
|
|
- user.setDeptId(u.getDeptId());
|
|
|
user.setUpdateBy(operName);
|
|
|
+
|
|
|
+ // 检查部门是否存在
|
|
|
+ boolean deptExists = true;
|
|
|
+ if (user.getDeptId() != null) {
|
|
|
+ try {
|
|
|
+ deptService.checkDeptDataScope(user.getDeptId());
|
|
|
+ } catch (Exception e) {
|
|
|
+ deptExists = false;
|
|
|
+ partialSuccessMsg.append("<br/>" + (partialSuccessNum + 1) + "、账号 " + user.getUserName() + " 部门信息未找到");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新用户
|
|
|
userMapper.updateUser(user);
|
|
|
successNum++;
|
|
|
- successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
|
|
|
+
|
|
|
+ // 处理角色关联
|
|
|
+ boolean roleProcessed = true;
|
|
|
+ if (user.getRoleIds() != null && user.getRoleIds().length > 0) {
|
|
|
+ try {
|
|
|
+ // 删除原有角色关联
|
|
|
+ userRoleMapper.deleteUserRoleByUserId(user.getUserId());
|
|
|
+ // 添加新角色关联
|
|
|
+ insertUserRole(user);
|
|
|
+ } catch (Exception e) {
|
|
|
+ roleProcessed = false;
|
|
|
+ log.error("用户角色关联更新失败,用户名: " + user.getUserName(), e);
|
|
|
+ partialSuccessMsg.append("<br/>" + (partialSuccessNum + 1) + "、账号 " + user.getUserName() + " 角色信息未完全更新");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理岗位关联
|
|
|
+ boolean postProcessed = true;
|
|
|
+ if (user.getPostIds() != null && user.getPostIds().length > 0) {
|
|
|
+ try {
|
|
|
+ // 删除原有岗位关联
|
|
|
+ userPostMapper.deleteUserPostByUserId(user.getUserId());
|
|
|
+ // 添加新岗位关联
|
|
|
+ insertUserPost(user);
|
|
|
+ } catch (Exception e) {
|
|
|
+ postProcessed = false;
|
|
|
+ log.error("用户岗位关联更新失败,用户名: " + user.getUserName(), e);
|
|
|
+ partialSuccessMsg.append("<br/>" + (partialSuccessNum + 1) + "、账号 " + user.getUserName() + " 岗位信息未完全更新");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!deptExists || !roleProcessed || !postProcessed) {
|
|
|
+ partialSuccessNum++;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (deptExists && roleProcessed && postProcessed) {
|
|
|
+ successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
|
|
|
+ } else {
|
|
|
+ partialSuccessMsg.append("<br/>" + (partialSuccessNum) + "、账号 " + user.getUserName() + " 已更新,但部分信息缺失");
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -582,16 +811,32 @@ public class SysUserServiceImpl implements ISysUserService
|
|
|
log.error(msg, e);
|
|
|
}
|
|
|
}
|
|
|
- if (failureNum > 0)
|
|
|
+ StringBuilder resultMsg = new StringBuilder();
|
|
|
+ if (successNum > 0)
|
|
|
{
|
|
|
- failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
|
|
|
- throw new ServiceException(failureMsg.toString());
|
|
|
+ resultMsg.append("成功导入完整用户 " + successNum + " 条,数据如下:");
|
|
|
+ resultMsg.append(successMsg);
|
|
|
}
|
|
|
- else
|
|
|
+ if (partialSuccessNum > 0)
|
|
|
{
|
|
|
- successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
|
|
|
+ if (resultMsg.length() > 0) {
|
|
|
+ resultMsg.append("<br/><br/>");
|
|
|
+ }
|
|
|
+ resultMsg.append("成功导入但信息不完整用户 " + partialSuccessNum + " 条,数据如下:");
|
|
|
+ resultMsg.append(partialSuccessMsg);
|
|
|
+ }
|
|
|
+ if (failureNum > 0)
|
|
|
+ {
|
|
|
+ if (resultMsg.length() > 0) {
|
|
|
+ resultMsg.append("<br/><br/>");
|
|
|
+ }
|
|
|
+ resultMsg.append("导入失败 " + failureNum + " 条,错误如下:");
|
|
|
+ resultMsg.append(failureMsg);
|
|
|
+ }
|
|
|
+ if (resultMsg.length() == 0) {
|
|
|
+ resultMsg.append("没有数据被导入");
|
|
|
}
|
|
|
- return successMsg.toString();
|
|
|
+ return resultMsg.toString();
|
|
|
}
|
|
|
|
|
|
/**
|