|
@@ -12,9 +12,10 @@ import shop.alien.entity.store.LifeSys;
|
|
|
import shop.alien.entity.store.UserLoginInfo;
|
|
import shop.alien.entity.store.UserLoginInfo;
|
|
|
import shop.alien.entity.store.dto.SystemUserAddDto;
|
|
import shop.alien.entity.store.dto.SystemUserAddDto;
|
|
|
import shop.alien.entity.store.dto.SystemUserStatusDto;
|
|
import shop.alien.entity.store.dto.SystemUserStatusDto;
|
|
|
|
|
+import shop.alien.entity.store.dto.SystemUserUpdateDto;
|
|
|
import shop.alien.entity.store.vo.SystemLoginVo;
|
|
import shop.alien.entity.store.vo.SystemLoginVo;
|
|
|
-import shop.alien.store.config.BaseRedisService;
|
|
|
|
|
import shop.alien.mapper.LifeSysMapper;
|
|
import shop.alien.mapper.LifeSysMapper;
|
|
|
|
|
+import shop.alien.store.config.BaseRedisService;
|
|
|
import shop.alien.store.service.LifeSysUserRoleService;
|
|
import shop.alien.store.service.LifeSysUserRoleService;
|
|
|
import shop.alien.store.service.SystemService;
|
|
import shop.alien.store.service.SystemService;
|
|
|
import shop.alien.util.common.JwtUtil;
|
|
import shop.alien.util.common.JwtUtil;
|
|
@@ -25,6 +26,7 @@ import java.util.Arrays;
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
+import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -215,6 +217,131 @@ public class SystemServiceImpl implements SystemService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
|
|
+ public R<LifeSys> updateUser(SystemUserUpdateDto updateDto) {
|
|
|
|
|
+ // 校验用户ID
|
|
|
|
|
+ if (updateDto.getUserId() == null) {
|
|
|
|
|
+ return R.fail("用户ID不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 查询用户是否存在
|
|
|
|
|
+ LifeSys lifeSys = lifeSysMapper.selectById(updateDto.getUserId());
|
|
|
|
|
+ if (lifeSys == null) {
|
|
|
|
|
+ return R.fail("用户不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果提供了用户名,校验用户名是否与其他用户重复
|
|
|
|
|
+ if (StringUtils.hasText(updateDto.getUserName()) && !updateDto.getUserName().equals(lifeSys.getUserName())) {
|
|
|
|
|
+ LambdaQueryWrapper<LifeSys> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ queryWrapper.eq(LifeSys::getUserName, updateDto.getUserName());
|
|
|
|
|
+ LifeSys existingUser = lifeSysMapper.selectOne(queryWrapper);
|
|
|
|
|
+ if (existingUser != null) {
|
|
|
|
|
+ return R.fail("该用户名已存在,请更换其他用户名");
|
|
|
|
|
+ }
|
|
|
|
|
+ lifeSys.setUserName(updateDto.getUserName());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果提供了邮箱,校验邮箱是否与其他用户重复
|
|
|
|
|
+/* if (StringUtils.hasText(updateDto.getEmail()) && !updateDto.getEmail().equals(lifeSys.getEmail())) {
|
|
|
|
|
+ LambdaQueryWrapper<LifeSys> emailQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ emailQueryWrapper.eq(LifeSys::getEmail, updateDto.getEmail());
|
|
|
|
|
+ LifeSys existingEmail = lifeSysMapper.selectOne(emailQueryWrapper);
|
|
|
|
|
+ if (existingEmail != null) {
|
|
|
|
|
+ return R.fail("该邮箱已被使用,请更换其他邮箱");
|
|
|
|
|
+ }
|
|
|
|
|
+ lifeSys.setEmail(updateDto.getEmail());
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ // 更新其他字段(如果提供了)
|
|
|
|
|
+ if (StringUtils.hasText(updateDto.getRealName())) {
|
|
|
|
|
+ lifeSys.setRealName(updateDto.getRealName());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.hasText(updateDto.getPhone())) {
|
|
|
|
|
+ lifeSys.setPhone(updateDto.getPhone());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.hasText(updateDto.getPassword())) {
|
|
|
|
|
+ // 如果提供了密码,则更新密码
|
|
|
|
|
+ // lifeSys.setUserPassword(encryptToMD5(updateDto.getPassword()));
|
|
|
|
|
+ lifeSys.setUserPassword(updateDto.getPassword());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.hasText(updateDto.getDepartmentId())) {
|
|
|
|
|
+ lifeSys.setDepartmentId(updateDto.getDepartmentId());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.hasText(updateDto.getRemark())) {
|
|
|
|
|
+ lifeSys.setRemark(updateDto.getRemark());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (updateDto.getStatus() != null) {
|
|
|
|
|
+ if (updateDto.getStatus() != 0 && updateDto.getStatus() != 1) {
|
|
|
|
|
+ return R.fail("状态值只能是0(禁用)或1(启用)");
|
|
|
|
|
+ }
|
|
|
|
|
+ lifeSys.setStatus(updateDto.getStatus());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 保存用户信息
|
|
|
|
|
+ int result = lifeSysMapper.updateById(lifeSys);
|
|
|
|
|
+ if (result > 0) {
|
|
|
|
|
+ // 如果提供了角色ID列表,更新用户与角色的关系到中间表
|
|
|
|
|
+ if (StringUtils.hasText(updateDto.getRoleIds())) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 解析新的角色ID字符串(支持逗号分隔)
|
|
|
|
|
+ Set<Long> newRoleIdSet = Arrays.stream(updateDto.getRoleIds().split(","))
|
|
|
|
|
+ .map(String::trim)
|
|
|
|
|
+ .filter(id -> !id.isEmpty())
|
|
|
|
|
+ .map(Long::parseLong)
|
|
|
|
|
+ .collect(Collectors.toSet());
|
|
|
|
|
+
|
|
|
|
|
+ // 获取用户当前的角色ID列表
|
|
|
|
|
+ List<Long> currentRoleIdList = lifeSysUserRoleService.getRoleIdsByUserId(lifeSys.getId());
|
|
|
|
|
+ Set<Long> currentRoleIdSet = currentRoleIdList.stream().collect(Collectors.toSet());
|
|
|
|
|
+
|
|
|
|
|
+ // 如果新角色列表为空,则删除所有角色关系
|
|
|
|
|
+ if (newRoleIdSet.isEmpty()) {
|
|
|
|
|
+ if (!currentRoleIdSet.isEmpty()) {
|
|
|
|
|
+ lifeSysUserRoleService.removeAllRoles(lifeSys.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 比较新旧角色列表,进行增量更新
|
|
|
|
|
+ // 找出需要新增的角色(新列表中有,旧列表中没有)
|
|
|
|
|
+ Set<Long> rolesToAdd = newRoleIdSet.stream()
|
|
|
|
|
+ .filter(roleId -> !currentRoleIdSet.contains(roleId))
|
|
|
|
|
+ .collect(Collectors.toSet());
|
|
|
|
|
+
|
|
|
|
|
+ // 找出需要删除的角色(旧列表中有,新列表中没有)
|
|
|
|
|
+ Set<Long> rolesToRemove = currentRoleIdSet.stream()
|
|
|
|
|
+ .filter(roleId -> !newRoleIdSet.contains(roleId))
|
|
|
|
|
+ .collect(Collectors.toSet());
|
|
|
|
|
+
|
|
|
|
|
+ // 执行新增操作
|
|
|
|
|
+ for (Long roleId : rolesToAdd) {
|
|
|
|
|
+ lifeSysUserRoleService.addRole(lifeSys.getId(), roleId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 执行删除操作
|
|
|
|
|
+ for (Long roleId : rolesToRemove) {
|
|
|
|
|
+ lifeSysUserRoleService.removeRole(lifeSys.getId(), roleId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果没有任何变化,记录日志
|
|
|
|
|
+ if (rolesToAdd.isEmpty() && rolesToRemove.isEmpty()) {
|
|
|
|
|
+ log.info("用户ID={}的角色关系未发生变化,无需更新", lifeSys.getId());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ log.info("用户ID={}的角色关系已更新:新增{}个角色,删除{}个角色",
|
|
|
|
|
+ lifeSys.getId(), rolesToAdd.size(), rolesToRemove.size());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
|
|
+ log.error("角色ID格式错误: {}", updateDto.getRoleIds(), e);
|
|
|
|
|
+ return R.fail("角色ID格式错误,请检查后重试");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 清除密码信息,避免返回到前端
|
|
|
|
|
+ lifeSys.setUserPassword(null);
|
|
|
|
|
+ return R.data(lifeSys, "修改账号成功");
|
|
|
|
|
+ }
|
|
|
|
|
+ return R.fail("修改账号失败,请稍后重试");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
public R<LifeSys> updateUserStatus(SystemUserStatusDto statusDto) {
|
|
public R<LifeSys> updateUserStatus(SystemUserStatusDto statusDto) {
|
|
|
// 校验用户ID
|
|
// 校验用户ID
|
|
|
if (statusDto.getUserId() == null) {
|
|
if (statusDto.getUserId() == null) {
|