提交 7c3917c0 authored 作者: hzh's avatar hzh

代码优化

上级 b7dc9dd1
......@@ -11,7 +11,6 @@ import lombok.NoArgsConstructor;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.enums.UserType;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mall.enums.TerminalEnum;
import org.dromara.system.api.model.LoginUser;
......@@ -66,9 +65,6 @@ public class LoginHelper {
.setExtra(USER_TYPE, loginUser.getUserType())
);
StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
if (StringUtils.contains(loginUser.getUserType(), UserType.PROJECT_USER.getUserType())) {
StpUtil.getTokenSession().set(PROJECT_ID, Long.valueOf(StringUtils.splitList(loginUser.getUserType(), ":").get(1)));
}
}
/**
......
......@@ -57,7 +57,6 @@ public class SysUserController extends BaseController {
private final ISysRoleService roleService;
private final ISysPostService postService;
private final ISysDeptService deptService;
private final ISysTenantService tenantService;
private final ISysUserProjectService userProjectService;
@DubboReference
private RemoteDeptOrderApproveService remoteDeptOrderApproveService;
......@@ -179,10 +178,10 @@ public class SysUserController extends BaseController {
if (su == null) {
return R.ok(uoa);
}
if (su.getUserType().contains(SysUser.PROJECT_USER_TYPE)) {
if (su.getUserType().contains(SysUser.PROJECT_USER_TYPE) && projectId == null) {
uoa.setStaffId(su.getCreateBy());
su = userService.selectUserById(uoa.getStaffId());
} else if (StringUtils.equals(su.getUserType(), UserType.SYS_USER.getUserType()) && projectId != null) {
} else if (projectId != null) {
SysUserProjectBo sup = new SysUserProjectBo();
sup.setUserId(LoginHelper.getUserId());
sup.setProjectId(projectId);
......@@ -242,20 +241,6 @@ public class SysUserController extends BaseController {
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping
public R<Void> add(@Validated @RequestBody SysUserBo user) {
deptService.checkDeptDataScope(user.getDeptId());
if (!userService.checkUserNameUnique(user)) {
return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
return R.fail("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
} else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
return R.fail("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
if (TenantHelper.isEnable()) {
if (!tenantService.checkAccountBalance(TenantHelper.getTenantId())) {
return R.fail("当前租户下用户名额不足,请联系管理员");
}
}
user.setPassword(BCrypt.hashpw(user.getPassword()));
return toAjax(userService.insertUser(user));
}
......
......@@ -76,7 +76,8 @@ public class SysUserProjectController extends BaseController {
@RepeatSubmit()
@PostMapping("/addProjectUser")
public R<Void> addProjectUser(@Validated(AddGroup.class) @RequestBody SysUserProjectInsertBo bo) {
return toAjax(sysUserProjectService.insert(bo));
sysUserProjectService.insert(bo);
return R.ok();
}
/**
......
......@@ -4,8 +4,10 @@ import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.experimental.Accessors;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.xss.Xss;
import org.dromara.common.mybatis.core.domain.BaseEntity;
/**
* 用户项目业务对象 sys_user_project
......@@ -14,13 +16,15 @@ import org.dromara.common.core.xss.Xss;
* @date 2025-06-19
*/
@Data
public class SysUserProjectInsertBo {
@Accessors(chain = true)
public class SysUserProjectInsertBo extends BaseEntity {
/**
* 用户id
*/
private Long userId;
/**
* 项目id
*/
......
......@@ -15,16 +15,16 @@ import org.dromara.system.api.domain.vo.RemoteProjectVo;
import org.dromara.system.constant.Constant;
import org.dromara.system.domain.SysProject;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.SysUserProject;
import org.dromara.system.mapper.SysProjectMapper;
import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.mapper.SysUserProjectMapper;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import static org.dromara.system.domain.SysUser.PROJECT_USER_TYPE_SPLIT;
/**
* @author hzh
* @date 2025-06-11
......@@ -36,21 +36,26 @@ public class RemoteProjectServiceImpl implements RemoteProjectService {
private final SysProjectMapper sysProjectMapper;
private final SysUserMapper sysUserMapper;
private final SysUserProjectMapper sysUserProjectMapper;
@Override
public List<RemoteProjectVo> queryList(String tenantId, String phone) {
List<SysUser> userList = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
.eq(StringUtils.isNotEmpty(tenantId), SysUser::getTenantId, tenantId)
.eq(StringUtils.isNotEmpty(phone), SysUser::getPhonenumber, phone)
.likeRight(SysUser::getUserType, SysUser.PROJECT_USER_TYPE)
.eq(SysUser::getUserType, SysUser.PROJECT_USER_TYPE)
.eq(SysUser::getStatus, UserConstants.USER_NORMAL)
.select(SysUser::getUserType)
.select(SysUser::getUserId)
);
Set<Long> projectIds = StreamUtils.toSet(userList, u -> {
String[] split = u.getUserType().split(PROJECT_USER_TYPE_SPLIT);
return Long.parseLong(split[1]);
});
return CollectionUtil.isEmpty(projectIds) ? List.of() : BeanUtil.copyToList(StreamUtils.filter(sysProjectMapper.selectByIds(projectIds), sp -> StringUtils.equals(sp.getStatus(), Constant.PROJECT_NORMAL)), RemoteProjectVo.class);
if (CollectionUtil.isEmpty(userList)) {
return List.of();
}
List<SysUserProject> supList = sysUserProjectMapper.selectList(new LambdaQueryWrapper<SysUserProject>()
.in(SysUserProject::getUserId, StreamUtils.toList(userList, SysUser::getUserId)));
Set<Long> projectIds = StreamUtils.toSet(supList, SysUserProject::getProjectId);
return CollectionUtil.isEmpty(projectIds) ?
List.of() :
BeanUtil.copyToList(StreamUtils.filter(sysProjectMapper.selectByIds(projectIds), sp -> StringUtils.equals(sp.getStatus(), Constant.PROJECT_NORMAL)), RemoteProjectVo.class);
}
@Override
......
package org.dromara.system.listener;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HtmlUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.excel.core.ExcelListener;
import org.dromara.common.excel.core.ExcelResult;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.controller.system.SysUserController;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.bo.SysUserProjectInsertBo;
import org.dromara.system.domain.vo.SysProjectUserImportVo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysUserService;
import org.dromara.system.service.ISysConfigService;
import org.dromara.system.service.ISysUserProjectService;
import java.util.List;
import static org.dromara.system.domain.SysUser.PROJECT_USER_TYPE;
import static org.dromara.system.domain.SysUser.PROJECT_USER_TYPE_SPLIT;
/**
* 项目用户自定义导入
*
......@@ -36,12 +28,12 @@ import static org.dromara.system.domain.SysUser.PROJECT_USER_TYPE_SPLIT;
@Slf4j
public class SysProjectUserImportListener extends AnalysisEventListener<SysProjectUserImportVo> implements ExcelListener<SysProjectUserImportVo> {
private final ISysUserService userService;
private final SysUserController sysUserController;
private final ISysUserProjectService sysUserProjectService;
private final Long operUserId;
private final Long roleId;
private final String userType;
private final String operTenantId;
private final Long projectId;
private final String initPassword;
private int successNum = 0;
private int failureNum = 0;
......@@ -49,46 +41,31 @@ public class SysProjectUserImportListener extends AnalysisEventListener<SysProje
private final StringBuilder failureMsg = new StringBuilder();
public SysProjectUserImportListener(Long projectId, Long roleId) {
this.userService = SpringUtils.getBean(ISysUserService.class);
this.sysUserController = SpringUtils.getBean(SysUserController.class);
this.sysUserProjectService = SpringUtils.getBean(ISysUserProjectService.class);
this.operUserId = LoginHelper.getUserId();
this.operTenantId = LoginHelper.getTenantId();
this.userType = PROJECT_USER_TYPE + PROJECT_USER_TYPE_SPLIT + projectId;
this.projectId = projectId;
this.roleId = roleId;
this.initPassword =SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword");
}
@Override
public void invoke(SysProjectUserImportVo userVo, AnalysisContext context) {
SysUserVo sysUser = this.userService.selectUserByUserName(userVo.getPhonenumber(), userType, operTenantId);
public void invoke(SysProjectUserImportVo vo, AnalysisContext context) {
try {
// 验证是否存在这个用户
if (ObjectUtil.isNull(sysUser)) {
SysUserBo user = BeanUtil.toBean(userVo, SysUserBo.class);
user.setUserName(user.getPhonenumber());
user.setUserType(userType);
ValidatorUtils.validate(user);
String password = user.getPassword();
if (StringUtils.isBlank(password)) {
password = user.getPhonenumber();
}
user.setPassword(password.trim());
user.setCreateBy(operUserId);
if (roleId != null) {
user.setRoleIds(new Long[]{roleId});
}
R<Void> r = sysUserController.add(user);
if (r.getCode() == R.FAIL) {
throw new ServiceException(r.getMsg());
}
String password = StringUtils.isBlank(vo.getPassword()) ?initPassword:vo.getPassword();
SysUserProjectInsertBo bo = new SysUserProjectInsertBo()
.setProjectId(projectId)
.setRoleId(roleId)
.setNickName(vo.getNickName())
.setPhonenumber(vo.getPhonenumber())
.setEmail(vo.getEmail())
.setPassword(password);
bo.setCreateBy(operUserId);
sysUserProjectService.insert(bo);
successNum++;
successMsg.append("<br/>").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功");
} else {
failureNum++;
failureMsg.append("<br/>").append(failureNum).append("、账号 ").append(sysUser.getUserName()).append(" 已存在");
}
successMsg.append("<br/>").append(successNum).append("、账号 ").append(vo.getPhonenumber()).append(" 导入成功");
} catch (Exception e) {
failureNum++;
String msg = "<br/>" + failureNum + "、账号 " + HtmlUtil.cleanHtmlTag(userVo.getPhonenumber()) + " 导入失败:";
String msg = "<br/>" + failureNum + "、账号 " + HtmlUtil.cleanHtmlTag(vo.getPhonenumber()) + " 导入失败:";
String message = e.getMessage();
if (e instanceof ConstraintViolationException cvException) {
message = StreamUtils.join(cvException.getConstraintViolations(), ConstraintViolation::getMessage, ", ");
......
......@@ -9,7 +9,6 @@ import com.alibaba.excel.event.AnalysisEventListener;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
......@@ -18,7 +17,6 @@ import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.excel.core.ExcelListener;
import org.dromara.common.excel.core.ExcelResult;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.controller.system.SysUserController;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserImportVo;
import org.dromara.system.domain.vo.SysUserVo;
......@@ -36,7 +34,6 @@ import java.util.Objects;
public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo> implements ExcelListener<SysUserImportVo> {
private final ISysUserService userService;
private final SysUserController sysUserController;
private final ISysDeptService sysDeptService;
private final ISysPostService sysPostService;
private final ISysRoleService sysRoleService;
......@@ -55,7 +52,6 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo
public SysUserImportListener(Boolean isUpdateSupport) {
String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword");
this.userService = SpringUtils.getBean(ISysUserService.class);
this.sysUserController = SpringUtils.getBean(SysUserController.class);
this.sysDeptService = SpringUtils.getBean(ISysDeptService.class);
this.sysPostService = SpringUtils.getBean(ISysPostService.class);
this.sysRoleService = SpringUtils.getBean(ISysRoleService.class);
......@@ -87,11 +83,7 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo
if (StringUtils.isNotEmpty(userVo.getRoleName())) {
user.setRoleIds(sysRoleService.selectRoleIdsByNameList(StrUtil.split(userVo.getRoleName(), "/")).toArray(Long[]::new));
}
sysUserController.add(user);
R<Void> r = sysUserController.add(user);
if (r.getCode() == R.FAIL) {
throw new ServiceException(r.getMsg());
}
userService.insertUser(user);
successNum++;
successMsg.append("<br/>").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功");
} else if (isUpdateSupport) {
......
......@@ -28,6 +28,7 @@ import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.mapper.SysUserProjectMapper;
import org.dromara.system.mapper.SysUserRoleMapper;
import org.dromara.system.service.ISysUserProjectService;
import org.dromara.system.service.ISysUserService;
import org.springframework.stereotype.Service;
import java.util.Collection;
......@@ -49,6 +50,7 @@ public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjec
private final SysUserRoleMapper userRoleMapper;
private final SysUserMapper sysUserMapper;
private final SysProjectMapper sysProjectMapper;
private final ISysUserService userService;
@Override
public BaseMapperPlus<SysUserProject, SysUserProjectVo> mapper() {
......@@ -61,6 +63,7 @@ public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjec
LambdaQueryWrapper<SysUserProject> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getUserId() != null, SysUserProject::getUserId, bo.getUserId());
lqw.eq(bo.getProjectId() != null, SysUserProject::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getUserType()), SysUserProject::getUserType, bo.getUserType());
lqw.eq(bo.getRoleId() != null, SysUserProject::getRoleId, bo.getRoleId());
return lqw;
}
......@@ -172,11 +175,16 @@ public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjec
su.setUserName(bo.getPhonenumber());
su.setPhonenumber(bo.getPhonenumber());
su.setEmail(bo.getEmail());
su.setRoleIds(new Long[]{bo.getRoleId()});
su.setPassword(bo.getPassword());
su.setCreateBy(bo.getCreateBy());
userService.insertUser(su);
//查询用户
user = sysUserMapper.selectOne(SysUser::getUserType, UserType.PROJECT_USER.getUserType(), SysUser::getPhonenumber, bo.getPhonenumber());
sup.setUserId(user.getUserId());
}
}
sup.setUserType(UserType.PROJECT_USER.getUserType());
insertByBo(sup);
}
private void validEntity(SysUserProjectInsertBo bo) {
......
package org.dromara.system.service.impl;
import cn.dev33.satoken.secure.BCrypt;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
......@@ -15,7 +16,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.enums.UserType;
......@@ -29,8 +29,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.server.api.RemoteServerService;
import org.dromara.server.api.domain.RemoteUser;
import org.dromara.system.domain.*;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysPostVo;
......@@ -38,7 +36,10 @@ import org.dromara.system.domain.vo.SysRoleVo;
import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.mapper.*;
import org.dromara.system.service.ISysDeptService;
import org.dromara.system.service.ISysTenantService;
import org.dromara.system.service.ISysUserService;
import org.dromara.system.service.IThirdService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
......@@ -65,8 +66,9 @@ public class SysUserServiceImpl implements ISysUserService {
private final SysUserPostMapper userPostMapper;
private final SysTenantMapper sysTenantMapper;
private final SysUserProjectMapper sysUserProjectMapper;
@DubboReference
private RemoteServerService remoteServerService;
private final ISysDeptService deptService;
private final ISysTenantService tenantService;
private final IThirdService thirdService;
@Override
public TableDataInfo<SysUserVo> selectPageUserList(SysUserBo user, PageQuery pageQuery) {
......@@ -411,6 +413,21 @@ public class SysUserServiceImpl implements ISysUserService {
@Override
@Transactional(rollbackFor = Exception.class)
public int insertUser(SysUserBo user) {
deptService.checkDeptDataScope(user.getDeptId());
if (!checkUserNameUnique(user)) {
throw new ServiceException("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !checkPhoneUnique(user)) {
throw new ServiceException("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
} else if (StringUtils.isNotEmpty(user.getEmail()) && !checkEmailUnique(user)) {
throw new ServiceException("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
if (TenantHelper.isEnable()) {
if (!tenantService.checkAccountBalance(TenantHelper.getTenantId())) {
throw new ServiceException("当前租户下用户名额不足,请联系管理员");
}
}
user.setPassword(BCrypt.hashpw(user.getPassword()));
//新增用户
user.setUserType(StringUtils.isEmpty(user.getUserType()) ? UserType.SYS_USER.getUserType() : user.getUserType());
SysUser sysUser = MapstructUtils.convert(user, SysUser.class);
sysUser.setTenantId(LoginHelper.getTenantId());
......@@ -422,7 +439,7 @@ public class SysUserServiceImpl implements ISysUserService {
// 新增用户与角色管理
insertUserRole(user, false);
//保存用户信息
saveOrUpdateYsUser(sysUser);
thirdService.saveOrUpdateYsUser(sysUser);
return rows;
}
......@@ -440,29 +457,12 @@ public class SysUserServiceImpl implements ISysUserService {
sysUser.setTenantId(tenantId);
boolean result = baseMapper.insert(sysUser) > 0;
if (result) {
saveOrUpdateYsUser(sysUser);
thirdService.saveOrUpdateYsUser(sysUser);
}
user.setUserId(sysUser.getUserId());
return result;
}
/**
* 保存或更新用户信息
*
* @param sysUser 用户信息
*/
@Override
public void saveOrUpdateYsUser(SysUser sysUser) {
remoteServerService.saveOrUpdateUser(
new RemoteUser()
.setSystemUserId(sysUser.getUserId())
.setUserName(sysUser.getUserName())
.setPhoneNumber(sysUser.getPhonenumber())
.setIdCard(sysUser.getIdCard())
.setUserType(sysUser.getUserType())
.setTenantId(sysUser.getTenantId())
);
}
/**
* 修改保存用户信息
......@@ -484,7 +484,7 @@ public class SysUserServiceImpl implements ISysUserService {
if (flag < 1) {
throw new ServiceException("修改用户" + user.getUserName() + "信息失败");
}
saveOrUpdateYsUser(baseMapper.selectById(user.getUserId()));
thirdService.saveOrUpdateYsUser(baseMapper.selectById(user.getUserId()));
return flag;
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论