Compare commits

...

3 Commits

Author SHA1 Message Date
s2042968 344666b50b 解决合并冲突 2025-04-21 10:27:43 +08:00
s2042968 51caef89ef fix:用户代码优化 2025-04-21 10:25:41 +08:00
s2042968 183ac999cb fix:用户代码优化 2025-04-18 16:54:20 +08:00
12 changed files with 242 additions and 355 deletions

View File

@ -32,7 +32,7 @@ public interface RoleMapper extends BaseMapper<Role> {
"LEFT JOIN " +
" ed_file_info f ON rp.file_id = f.id " +
"LEFT JOIN" +
" ed_user_role ur ON r.role_id = ur.role_id " +
" ed_user_role ur ON r.id = ur.role_id " +
"LEFT JOIN" +
" ed_users u ON ur.user_id = u.user_id " +
"WHERE " +
@ -41,7 +41,7 @@ public interface RoleMapper extends BaseMapper<Role> {
" AND ${ew.sqlSegment} " +
"</if>" +
"GROUP BY " +
" r.role_id" +
" r.id" +
"</script>")
Page<RoleDTO> getPageRoleDTO(Page<RoleDTO> page, @Param(Constants.WRAPPER) QueryWrapper<Role> queryWrapper);
}

View File

@ -12,31 +12,6 @@ import java.util.List;
@Mapper
public interface UserMapper extends BaseMapper<User> {
/**
* 插入
*
* @param user
* @return
*/
@Override
int insert(User user);
/**
* 编辑
*
* @param user
* @return
*/
int modify(User user);
/**
* 发布
*
* @param publishParam
* @return
*/
int publish(PublishParam publishParam);
/**
* 通过工号查询用户
*
@ -45,7 +20,7 @@ public interface UserMapper extends BaseMapper<User> {
*/
User selectUserByWorkNumber(String workNumber);
/**
/*
* 通过用户编码查询用户
*
* @param userId
@ -69,14 +44,6 @@ public interface UserMapper extends BaseMapper<User> {
*/
int getTotalCount(SearchKeyWords searchKeywords);
/**
* 通过用户ID删除用户
*
* @param userDeleteKeyWords
* @return
*/
int deleteUser(UserDeleteKeyWords userDeleteKeyWords);
/**
* 查找用户角色名称
*

View File

@ -1,23 +1,24 @@
package com.electromagnetic.industry.software.manage.pojo.models;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.cons.UserConstants;
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.SignUtils;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import lombok.Data;
import java.util.Date;
@TableName("ed_users")
@Data
public class User {
public class User extends BaseModel{
/**
* 主键ID
*/
private Long id;
/**
* 用户编码
*/
private String userId;
private String id;
/**
* 用户姓名
@ -89,34 +90,19 @@ public class User {
*/
private String salt;
/**
* 创建人
*/
private String creator;
/**
* 创建人姓名
*/
private String creatorName;
/**
* 创建时间
*/
private Date gmtCreate;
/**
* 更新人
*/
private String modifier;
/**
* 更新人姓名
*/
private String modifierName;
/**
* 更新时间
*/
private Date gmtModified;
/**
* 是否有效:0-无效 1-有效
*/
private Integer effectFlag;
public void newInit() {
String id = IdWorker.getSnowFlakeIdString();
String userId = UserThreadLocal.getUserId();
this.setId(id);
Date now = new Date();
this.setCreatedTime(now);
this.setUpdatedTime(now);
this.setCreatedBy(userId);
this.setUpdatedBy(userId);
this.setEffectFlag(EffectFlagEnum.EFFECT.code);
this.setSalt(RandomUtil.randomString(16));
this.setUserPwd(SignUtils.MD5(UserConstants.DEFAULT_PASSWORD + this.getSalt()));
this.setIsPublished(UserConstants.DEFAULT_PUBLISH_STATUS);
this.setIsActivated(UserConstants.DEFAULT_ACTIVE_STATUS);
}
}

View File

@ -2,11 +2,22 @@ package com.electromagnetic.industry.software.manage.pojo.models;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
import com.electromagnetic.industry.software.common.util.IdWorker;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import lombok.Data;
import java.util.Date;
@Data
@TableName("ed_user_role")
public class UserRole {
public class UserRole extends BaseModel{
/**
* 主键ID
*/
@TableField(value = "id")
private String id;
/**
* 用户编码
@ -19,4 +30,16 @@ public class UserRole {
*/
@TableField(value = "role_id")
private String roleId;
public void newInit() {
String id = IdWorker.getSnowFlakeIdString();
Date now = new Date();
String userId = UserThreadLocal.getUserId();
this.setId(id);
this.setCreatedTime(now);
this.setUpdatedTime(now);
this.setCreatedBy(userId);
this.setUpdatedBy(userId);
this.setEffectFlag(EffectFlagEnum.EFFECT.code);
}
}

View File

@ -13,13 +13,4 @@ public class PublishParam {
*/
private List<String> userIds;
/**
* 编辑者
*/
private String modifier;
/**
* 编辑者姓名
*/
private String modifierName;
}

View File

@ -1,6 +1,9 @@
package com.electromagnetic.industry.software.manage.pojo.other;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.Date;
@ -11,14 +14,10 @@ public class SingleUserResponse {
private static final long serialVersionUID = -7475233976453471059L;
/**
* 主键ID
*/
private Long id;
/**
* 用户编码
*/
@JsonProperty("id")
private String userId;
/**
@ -51,11 +50,6 @@ public class SingleUserResponse {
*/
private String userAccount;
/**
* 登录密码
*/
// private String userPwd;
/**
* 角色名称拼接字符串
*/
@ -98,36 +92,23 @@ public class SingleUserResponse {
*/
private Integer isDefaultPwd;
/**
*
*/
// private String salt;
private Date createdTime;
/**
* 创建人
*/
private String creator;
private String createdBy;
/**
* 创建人姓名
* 最后更新时间
*/
private String creatorName;
private Date updatedTime;
/**
* 创建时间
* 最后更新人
*/
private Date gmtCreate;
/**
* 更新人
*/
private String modifier;
/**
* 更新人姓名
*/
private String modifierName;
/**
* 更新时间
*/
private Date gmtModified;
private String updatedBy;
/**
* 是否有效:0-无效 1-有效

View File

@ -1,11 +1,13 @@
package com.electromagnetic.industry.software.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.manage.pojo.models.User;
import com.electromagnetic.industry.software.manage.pojo.req.*;
import java.util.List;
public interface UserService {
public interface UserService extends IService<User> {
/**
* 用户登录

View File

@ -190,9 +190,9 @@ public class FileRecycleServiceImpl implements FileRecycleService {
}
return userMapper.selectList(Wrappers.<User>lambdaQuery()
.select(User::getUserId, User::getUserName)
.in(User::getUserId, userIds))
.stream().collect(Collectors.toMap(User::getUserId, User::getUserName));
.select(User::getId, User::getUserName)
.in(User::getId, userIds))
.stream().collect(Collectors.toMap(User::getId, User::getUserName));
}
}

View File

@ -92,8 +92,8 @@ public class UserAccessLogServiceImpl extends ServiceImpl<UserAccessLogMapper, U
if (CollUtil.isEmpty(userIds)) {
return;
}
LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery(User.class).select(User::getUserId, User::getUserName).in(User::getUserId, userIds);
Map<String, String> idNameMap = userMapper.selectList(wrapper).stream().collect(Collectors.toMap(User::getUserId, User::getUserName));
LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery(User.class).select(User::getId, User::getUserName).in(User::getId, userIds);
Map<String, String> idNameMap = userMapper.selectList(wrapper).stream().collect(Collectors.toMap(User::getId, User::getUserName));
res.forEach(e -> {
e.setUserName(idNameMap.get(e.getUserId()));

View File

@ -7,6 +7,9 @@ import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.electromagnetic.industry.software.common.cons.UserConstants;
import com.electromagnetic.industry.software.common.enums.ActiveEnum;
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
@ -16,10 +19,7 @@ import com.electromagnetic.industry.software.common.pojo.UserLoginInfo;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.common.util.*;
import com.electromagnetic.industry.software.manage.mapper.*;
import com.electromagnetic.industry.software.manage.pojo.models.Role;
import com.electromagnetic.industry.software.manage.pojo.models.Token;
import com.electromagnetic.industry.software.manage.pojo.models.User;
import com.electromagnetic.industry.software.manage.pojo.models.UserRole;
import com.electromagnetic.industry.software.manage.pojo.models.*;
import com.electromagnetic.industry.software.manage.pojo.other.PublishParam;
import com.electromagnetic.industry.software.manage.pojo.other.SearchKeyWords;
import com.electromagnetic.industry.software.manage.pojo.other.SingleUserResponse;
@ -27,6 +27,7 @@ import com.electromagnetic.industry.software.manage.pojo.other.UserDeleteKeyWord
import com.electromagnetic.industry.software.manage.pojo.req.*;
import com.electromagnetic.industry.software.manage.pojo.resp.UserLoginResponse;
import com.electromagnetic.industry.software.manage.pojo.resp.UserSearchResponse;
import com.electromagnetic.industry.software.manage.service.UserRoleService;
import com.electromagnetic.industry.software.manage.service.UserService;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
@ -36,18 +37,19 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
import static cn.hutool.core.date.DateTime.now;
@Service
public class UserServiceImpl implements UserService {
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Resource
private UserMapper userMapper;
@Resource
private TokenMapper tokenMapper;
@Resource
private UserRoleMapper userRoleMapper;
private UserRoleService userRoleService;
@Resource
private RoleMapper roleMapper;
@ -62,7 +64,7 @@ public class UserServiceImpl implements UserService {
UserLoginInfo info = UserMappers.INSTANCE.getUserLoginRequestToModel(loginRequest);
String decodePwd = AESUtils.decrypt(info.getUserPwd(), UserConstants.SECRET_KEY);
User user = userMapper.selectUserByWorkNumber(info.getWorkNumber());
info.setUserId(user.getUserId());
info.setUserId(user.getId());
info.setUsername(user.getUserName());
info.setAdminType(user.getAdminType());
if (checkUserValid(user) && matchPassword(user, decodePwd)) {
@ -70,8 +72,8 @@ public class UserServiceImpl implements UserService {
createUserToken(user, tokenStr);
UserLoginResponse userLoginResponse = new UserLoginResponse();
userLoginResponse.setToken(tokenStr);
userLoginResponse.setUserId(user.getUserId());
UserThreadLocal.setSuccessInfo("", user.getUserId(), StrFormatter.format("用户{}登陆", user.getUserName()));
userLoginResponse.setUserId(user.getId());
UserThreadLocal.setSuccessInfo("", user.getId(), StrFormatter.format("用户{}登陆", user.getUserName()));
return ElectromagneticResultUtil.success(userLoginResponse);
}
return ElectromagneticResultUtil.fail("500", "用户不存在/密码错误");
@ -79,7 +81,7 @@ public class UserServiceImpl implements UserService {
public Boolean createUserToken(User user, String tokenStr) {
Token token = new Token();
token.setUserId(user.getUserId());
token.setUserId(user.getId());
token.setToken(tokenStr);
token.setExpireAt(new DateTime(SystemClock.now() + UserConstants.DEFAULT_EXPIRE_TIME));
return tokenMapper.insert(token) > 0;
@ -124,21 +126,14 @@ public class UserServiceImpl implements UserService {
*/
@Override
public ElectromagneticResult<?> createUser(UserRequest userRequest) {
Assert.notNull(userRequest, "用户创建请求参数不能为空");
User user = UserMappers.INSTANCE.getUserRequestToModel(userRequest);
user.setSalt(RandomUtil.randomString(16));
user.setUserId(IdWorker.getSnowFlakeIdString());
user.setUserPwd(SignUtils.MD5(UserConstants.DEFAULT_PASSWORD + user.getSalt()));
user.setIsPublished(UserConstants.DEFAULT_PUBLISH_STATUS);
user.setIsActivated(UserConstants.DEFAULT_ACTIVE_STATUS);
user.newInit();
// 暂时将账户设置为工号
user.setUserAccount(user.getWorkNumber());
user.setCreator(UserThreadLocal.getUserId());
user.setCreatorName(UserThreadLocal.getUsername());
UserThreadLocal.setSuccessInfo("", user.getUserId(), StrFormatter.format("新增了用户{}", user.getUserName()));
return ElectromagneticResultUtil.success(userMapper.insert(user) > 0);
boolean success = this.save(user);
UserThreadLocal.setSuccessInfo("", user.getId(), StrFormatter.format("新增了用户 {} ", user.getUserName()));
return ElectromagneticResultUtil.success(success);
}
/**
@ -149,11 +144,18 @@ public class UserServiceImpl implements UserService {
*/
@Override
public ElectromagneticResult<?> modifyUser(UserModiRequest userModiRequest) {
Assert.notNull(userModiRequest, "用户修改请求参数不能为空");
String userId = userModiRequest.getUserId();
Assert.notBlank(userId, "用户ID不能为空");
// 校验用户存在性
User existingUser = this.getById(userId);
Assert.notNull(existingUser, StrFormatter.format("用户ID {} 不存在", userId));
User user = UserMappers.INSTANCE.getUserModiRequestToModel(userModiRequest);
user.setModifier(UserThreadLocal.getUserId());
user.setModifierName(UserThreadLocal.getUsername());
UserThreadLocal.setSuccessInfo("", userModiRequest.getUserId(), StrFormatter.format("更新了用户{}", user.getUserName()));
return ElectromagneticResultUtil.success(userMapper.modify(user) > 0);
boolean success = this.updateById(user);
UserThreadLocal.setSuccessInfo("", userModiRequest.getUserId(), StrFormatter.format("更新了用户 {} ", user.getUserName()));
return ElectromagneticResultUtil.success(success);
}
/**
@ -164,55 +166,49 @@ public class UserServiceImpl implements UserService {
*/
@Override
public ElectromagneticResult<?> publishUser(UserPublishRequest userPublishRequest) {
Assert.notNull(userPublishRequest, "发布请求参数不能为空");
PublishParam model = UserMappers.INSTANCE.getUserPublishRequestToModel(userPublishRequest);
model.setModifier(UserThreadLocal.getUserId());
model.setModifierName(UserThreadLocal.getUsername());
UserThreadLocal.setSuccessInfo("", "", StrFormatter.format("批量发布了用户"));
return ElectromagneticResultUtil.success(userMapper.publish(model) > 0);
Assert.notEmpty(model.getUserIds(), "待发布用户ID列表不能为空");
boolean updateResult = this.update(
new LambdaUpdateWrapper<User>()
.in(User::getId, model.getUserIds())
.set(User::getIsPublished, PublishEnum.PUBLISHED.getCode())
);
UserThreadLocal.setSuccessInfo("", "", StrFormatter.format("批量发布 {} 个用户", model.getUserIds().size()));
return ElectromagneticResultUtil.success(updateResult);
}
@Override
public ElectromagneticResult<?> validateWorkNum(UserWorkNumRequest workNumberRequest) {
// 将前端请求对象转换为模型对象包含userId和userWorkNum
User user = UserMappers.INSTANCE.getUserWorkNumRequestToModel(workNumberRequest);
public ElectromagneticResult<?> validateWorkNum(UserWorkNumRequest request) {
//根据请求对象的userId判断当前处于什么状态
if (user.getUserId() == null) {
//userId为空表示是新增用户阶段
//判断数据库中有无该工号对应的用户
User existingUser = userMapper.selectUserByWorkNumber(user.getWorkNumber());
//如果有该用户就返回false,如果没有(==null)就返回true
boolean isWorkNumberUnique = (existingUser == null);
return ElectromagneticResultUtil.success(isWorkNumberUnique);
} else {
//userId不为空表示是编辑用户阶段
//请求对象的userWordNum在数据库中对应的user
User existingUser = userMapper.selectUserByWorkNumber(user.getWorkNumber());
//判断请求对象的userId对应的user和请求对象的userWordNum在数据库中对应的user是否为用一个
if (existingUser != null) {
//请求对象的userWordNum在数据库中对应的user与请求对象的userId对应的user是否为同一个
if (user.getUserId().equals(existingUser.getUserId())) {
// 如果获取到的用户ID与当前编辑的用户ID相同说明工号未改变直接返回true
return ElectromagneticResultUtil.success(true);
} else {
// 如果获取到的用户ID与当前编辑的用户ID不同说明工号已改变需要判断新工号是否唯一
// 如果根据新工号获取不到用户说明新工号唯一
boolean isWorkNumberUnique = (userMapper.selectUserByWorkNumber(user.getWorkNumber()) == null);
return ElectromagneticResultUtil.success(isWorkNumberUnique);
}
} else {
//请求对象的userWordNum在数据库中不存在对应的user
return ElectromagneticResultUtil.success(true);
String workNumber = request.getWorkNumber();
String currentUserId = request.getUserId();
boolean exists = lambdaQuery()
.eq(User::getWorkNumber, workNumber)
.exists(); // 判断工号是否存在
// 新增 直接返回唯一性结果
if (StringUtils.isBlank(currentUserId)) {
return ElectromagneticResultUtil.success(!exists);
}
// 编辑 需要排除当前用户
if (exists) {
User existingUser = lambdaQuery()
.eq(User::getWorkNumber, workNumber)
.one();
return ElectromagneticResultUtil.success(existingUser.getId().equals(currentUserId));
}
return ElectromagneticResultUtil.success(true);
}
@Override
public ElectromagneticResult<?> getSingleUser(GetSingleUserRequest getSingleUserRequest) {
User user = userMapper.getSingleUser(getSingleUserRequest.getUserId());
SingleUserResponse singleUserResponse = UserMappers.INSTANCE.getSingleUserToResponse(user);
UserThreadLocal.setSuccessInfo("", getSingleUserRequest.getUserId(), StrFormatter.format("查询了用户{}详情信息", singleUserResponse.getUserName()));
UserThreadLocal.setSuccessInfo("", getSingleUserRequest.getUserId(), StrFormatter.format("查询了用户 {} 详情信息", singleUserResponse.getUserName()));
return ElectromagneticResultUtil.success(singleUserResponse);
}
@ -228,7 +224,7 @@ public class UserServiceImpl implements UserService {
for (User user : userList) {
SingleUserResponse singleUserResponse = new SingleUserResponse();
BeanUtils.copyProperties(user, singleUserResponse);
List<String> roleList = userMapper.selectUserRoles(user.getUserId());
List<String> roleList = userMapper.selectUserRoles(user.getId());
String roles = String.join(",", roleList);
singleUserResponse.setRoles(roles);
singleUserResponse.setRoleList(roleList);
@ -250,20 +246,22 @@ public class UserServiceImpl implements UserService {
}
@Override
public ElectromagneticResult<?> deleteUser(UserDeleteRequest userDeleteRequest) {
public ElectromagneticResult<?> deleteUser(UserDeleteRequest request) {
String userId = request.getUserId();
// 将请求对象转换为模型对象
UserDeleteKeyWords userDeleteKeyWords = UserMappers.INSTANCE.getUserDeleteRequestToModel(userDeleteRequest);
userDeleteKeyWords.setModifier(UserThreadLocal.getUserId());
userDeleteKeyWords.setModifierName(UserThreadLocal.getUsername());
// 校验用户存在性及有效性
User user = this.getById(userId);
Assert.notNull(user, StrFormatter.format("用户ID {} 无效", userId));
Assert.isTrue(user.getEffectFlag().equals(EffectFlagEnum.EFFECT.code),
StrFormatter.format("用户 {} 已被删除", user.getUserName()));
// 检查用户是否已经被逻辑删除
User existingUser = userMapper.getSingleUser(userDeleteKeyWords.getUserId());
Assert.notNull(existingUser, StrFormatter.format("用户ID {} 无效", userDeleteRequest.getUserId()));
Assert.isTrue(EffectFlagEnum.EFFECT.code.equals(existingUser.getEffectFlag()), StrFormatter.format("用户{}已经被逻辑删除", existingUser.getUserName()));
// 构建逻辑删除更新
boolean success = this.update(new LambdaUpdateWrapper<User>()
.eq(User::getId, userId)
.set(User::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code));
UserThreadLocal.setSuccessInfo("", "", StrFormatter.format("删除了用户{}", existingUser.getUserName()));
return ElectromagneticResultUtil.success(userMapper.deleteUser(userDeleteKeyWords));
UserThreadLocal.setSuccessInfo("", "", StrFormatter.format("删除了用户 {} ", user.getUserName()));
return ElectromagneticResultUtil.success(success);
}
@Override
@ -298,14 +296,16 @@ public class UserServiceImpl implements UserService {
*/
@Override
public ElectromagneticResult<?> changePassword(String userId, String newPassword) {
User user = userMapper.getSingleUser(userId);
User user = this.getById(userId);
Assert.notNull(user, StrFormatter.format("用户ID {} 无效", userId));
String decodeNewPwd = AESUtils.decrypt(newPassword, UserConstants.SECRET_KEY);
user.setUserPwd(SignUtils.MD5(decodeNewPwd + user.getSalt()));
user.setModifier(UserThreadLocal.getUserId());
user.setModifierName(UserThreadLocal.getUsername());
UserThreadLocal.setSuccessInfo("", UserThreadLocal.getUserId(), StrFormatter.format("修改了用户密码"));
return ElectromagneticResultUtil.success(userMapper.modify(user) > 0);
boolean success = this.updateById(user);
UserThreadLocal.setSuccessInfo("", userId, StrFormatter.format("修改了用户密码"));
return ElectromagneticResultUtil.success(success);
}
/**
@ -316,54 +316,86 @@ public class UserServiceImpl implements UserService {
@Override
@Transactional
public Boolean resetPassword(String userId) {
User user = userMapper.getSingleUser(userId);
User user = this.getById(userId);
Assert.notNull(user, StrFormatter.format("用户ID {} 无效", userId));
user.setUserPwd(SignUtils.MD5(UserConstants.DEFAULT_PASSWORD + user.getSalt()));
boolean isModified = userMapper.modify(user) > 0;
if (isModified) {
boolean success = this.updateById(user);
if (success) {
UserThreadLocal.setSuccessInfo("", userId, StrFormatter.format("重置了用户{}的密码", user.getUserName()));
}
return isModified;
return success;
}
private void activeRole(UserBindRoleDTO dto) {
User user = userMapper.getSingleUser(dto.getUserId());
if (user.getIsActivated().equals(ActiveEnum.UNACTIVATED.getCode())) {
User user = this.getById(dto.getUserId());
if (user != null && ActiveEnum.UNACTIVATED.getCode().equals(user.getIsActivated())) {
user.setIsActivated(ActiveEnum.ACTIVATED.getCode());
userMapper.modify(user);
this.updateById(user);
}
}
private void bindRole(UserBindRoleDTO dto) {
String userId = dto.getUserId();
List<String> roleNames = dto.getRoleList();
List<String> roleNames = Optional.ofNullable(dto.getRoleList()).orElse(Collections.emptyList());
// 删除当前用户原绑定角色
QueryWrapper<UserRole> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", userId);
userRoleMapper.delete(queryWrapper);
userRoleService.update(new LambdaUpdateWrapper<UserRole>()
.eq(UserRole::getUserId, userId)
.set(UserRole::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code));
if (roleNames != null) {
for (String roleName : roleNames) {
LambdaQueryWrapper<Role> roleQueryWrapper = new LambdaQueryWrapper<>();
roleQueryWrapper.select(Role::getId)
.eq(Role::getRoleName, roleName);
String roleId = roleMapper.selectOne(roleQueryWrapper).getId();
if (!roleNames.isEmpty()) {
// 2. 批量获取有效角色ID
Map<String, String> roleIdMap = roleMapper.selectList(
new LambdaQueryWrapper<Role>()
.in(Role::getRoleName, roleNames)
.select(Role::getId, Role::getRoleName)
).stream().collect(Collectors.toMap(Role::getRoleName, Role::getId));
UserRole userRole = new UserRole();
userRole.setUserId(userId);
userRole.setRoleId(roleId);
userRoleMapper.insert(userRole);
// 3. 处理需要绑定的角色
List<UserRole> toSaveRoles = new ArrayList<>();
roleNames.stream()
.filter(roleIdMap::containsKey)
.forEach(roleName -> {
String roleId = roleIdMap.get(roleName);
// 先尝试恢复已存在的记录
UserRole existing = userRoleService.getOne(new LambdaQueryWrapper<UserRole>()
.eq(UserRole::getUserId, userId)
.eq(UserRole::getRoleId, roleId)
.last("LIMIT 1"));
if (existing != null) {
// 恢复原有记录
userRoleService.update(new LambdaUpdateWrapper<UserRole>()
.eq(UserRole::getId, existing.getId())
.set(UserRole::getEffectFlag, EffectFlagEnum.EFFECT.code));
} else {
// 创建新记录
UserRole newRole = new UserRole();
newRole.setUserId(userId);
newRole.setRoleId(roleId);
newRole.newInit(); // 调用初始化方法设置主键和审计字段
toSaveRoles.add(newRole);
}
});
if (!toSaveRoles.isEmpty()) {
userRoleService.saveBatch(toSaveRoles);
}
}
}
@Override
public ElectromagneticResult<?> validateOldPassword(String userId, String oldInputPassword) {
User user = userMapper.getSingleUser(userId);
// 使用Service层方法获取用户信息
User user = this.getById(userId);
Assert.notNull(user, StrFormatter.format("用户不存在ID为 {}", userId));
// 解密并验证密码
String decodeOldPwd = AESUtils.decrypt(oldInputPassword, UserConstants.SECRET_KEY);
Boolean res = matchPassword(user, decodeOldPwd);
UserThreadLocal.setSuccessInfo("", "", "校验原始密码,当前密码与原始密码匹配结果 {}", res);
return ElectromagneticResultUtil.success(res);
Boolean isValid = matchPassword(user, decodeOldPwd);
UserThreadLocal.setSuccessInfo("", "", "校验原始密码,当前密码与原始密码匹配结果 {}", isValid ? "通过" : "不通过");
return ElectromagneticResultUtil.success(isValid);
}
}

View File

@ -5,15 +5,15 @@ spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB
spring.mvc.async.request-timeout=3600000
#mysql
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/em_data_dev?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true&rewriteBatchedStatements=true
spring.datasource.username=aaa
spring.datasource.password=12345
spring.datasource.url=jdbc:mysql://139.196.179.195:3306/em_data_dev?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true&rewriteBatchedStatements=true
spring.datasource.username=em_user_dev
spring.datasource.password=Szsd#2O25$dev
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# es
spring.elasticsearch.password=12345
spring.elasticsearch.password=123456
spring.elasticsearch.username=elastic
spring.elasticsearch.uris=http://127.0.0.1:9200
spring.elasticsearch.uris=http://139.196.179.195:9200
#ai
spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.options.model=gemma3:latest
@ -31,26 +31,25 @@ pagehelper.helperDialect=mysql
pagehelper.reasonable=false
# app
server.port=12396
winPrefix=D:/tmp
prjRootPath=/szsd/data/ele/prj/dev/
data.ele.tmp.path=tmp/
winPrefix:D:/tmp
data.ele.tmp.path=/szsd/data/ele/prj/dev/tmp
ai.store.max.docs=200
# sys path
data.sys.prj.path=sys_project/
data.sys.upload.path=sys_upload/
data.sys.download.path=sys_download/
data.sys.prj.path=/szsd/data/ele/prj/dev/sys_project/
data.sys.upload.path=/szsd/data/ele/prj/dev/sys_upload/
data.sys.download.path=/szsd/data/ele/prj/dev/sys_download/
# user path
data.user.prj.path=user_project/
data.user.upload.path=user_upload/
data.user.download.path=user_download/
data.user.prj.path=/szsd/data/ele/prj/dev/user_project/
data.user.upload.path=/szsd/data/ele/prj/dev/user_upload/
data.user.download.path=/szsd/data/ele/prj/dev/user_download/
# repo path
data.repo.prj.path=repo_project/
data.repo.upload.path=repo_upload/
data.repo.download.path=repo_download/
data.repo.prj.path=/szsd/data/ele/prj/dev/repo_project/
data.repo.upload.path=/szsd/data/ele/prj/dev/repo_upload/
data.repo.download.path=/szsd/data/ele/prj/dev/repo_download/
prj.folder.max.length=6
# backupFiles
tmp.file.store.hour=48
backup.remote.host=127.0.0.1
backup.remote.port=12491
backup.remote.port=1111
backup.mysql.path=/workspace/mysqlbak/test
backup.mysql.script.path=/workspace/mysqlbak/back_dev.sh

View File

@ -2,8 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.electromagnetic.industry.software.manage.mapper.UserMapper">
<resultMap id="UserResultMap" type="com.electromagnetic.industry.software.manage.pojo.models.User">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="user_id" jdbcType="VARCHAR" property="userId"/>
<id column="id" jdbcType="VARCHAR" property="id"/>
<result column="user_name" jdbcType="VARCHAR" property="userName"/>
<result column="work_number" jdbcType="VARCHAR" property="workNumber"/>
<result column="mobile" jdbcType="VARCHAR" property="mobile"/>
@ -18,17 +17,15 @@
<result column="user_status" jdbcType="VARCHAR" property="userStatus"/>
<result column="internship_end_date" jdbcType="DATE" property="internshipEndDate"/>
<result column="admin_type" jdbcType="VARCHAR" property="adminType"/>
<result column="creator" jdbcType="VARCHAR" property="creator"/>
<result column="creator_name" jdbcType="VARCHAR" property="creatorName"/>
<result column="gmt_create" jdbcType="TIMESTAMP" property="gmtCreate"/>
<result column="modifier" jdbcType="VARCHAR" property="modifier"/>
<result column="modifier_name" jdbcType="VARCHAR" property="modifierName"/>
<result column="gmt_modified" jdbcType="TIMESTAMP" property="gmtModified"/>
<result column="created_by" jdbcType="VARCHAR" property="createdBy"/>
<result column="created_time" jdbcType="TIMESTAMP" property="createdTime"/>
<result column="updated_by" jdbcType="VARCHAR" property="updatedBy"/>
<result column="updated_time" jdbcType="TIMESTAMP" property="updatedTime"/>
<result column="effect_flag" jdbcType="TINYINT" property="effectFlag"/>
</resultMap>
<sql id="selectUserVo">
select user_id,
select id,
user_name,
work_number,
mobile,
@ -43,94 +40,14 @@
user_status,
internship_end_date,
admin_type,
creator,
creator_name,
gmt_create,
modifier,
modifier_name,
gmt_modified,
created_time,
created_by,
updated_by,
updated_time,
effect_flag
from ed_users
</sql>
<insert id="insert" parameterType="com.electromagnetic.industry.software.manage.pojo.models.User">
insert into ed_users(
<if test="userId != null and userId !='' ">user_id,</if>
<if test="userName != null and userName !='' ">user_name,</if>
<if test="workNumber != null and workNumber !='' ">work_number,</if>
<if test="mobile != null and mobile !='' ">mobile,</if>
<if test="userDept != null and userDept !='' ">user_dept,</if>
<if test="userTitle != null and userTitle !='' ">user_title,</if>
<if test="userAccount != null and userAccount !='' ">user_account,</if>
<if test="userPwd != null and userPwd !='' ">user_pwd,</if>
<if test="joinTime != null">join_time,</if>
<if test="isPublished != null">is_published,</if>
<if test="isActivated != null">is_activated,</if>
<if test="salt != null and salt !='' ">salt,</if>
<if test="userStatus != null and userStatus !='' ">user_status,</if>
<if test="internshipEndDate != null">internship_end_date,</if>
<if test="creator != null and creator !='' ">creator,</if>
<if test="creatorName != null and creatorName !='' ">creator_name,</if>
gmt_create,
effect_flag)
values (
<if test="userId != null and userId !='' ">#{userId},</if>
<if test="userName != null and userName !='' ">#{userName},</if>
<if test="workNumber != null and workNumber !='' ">#{workNumber},</if>
<if test="mobile != null and mobile !='' ">#{mobile},</if>
<if test="userDept != null and userDept !='' ">#{userDept},</if>
<if test="userTitle != null and userTitle !='' ">#{userTitle},</if>
<if test="userAccount != null and userAccount !='' ">#{userAccount},</if>
<if test="userPwd != null and userPwd !='' ">#{userPwd},</if>
<if test="joinTime != null">#{joinTime},</if>
<if test="isPublished != null">#{isPublished},</if>
<if test="isActivated != null">#{isActivated},</if>
<if test="salt != null and salt !='' ">#{salt},</if>
<if test="userStatus != null and userStatus !='' ">#{userStatus},</if>
<if test="internshipEndDate != null">#{internshipEndDate},</if>
<if test="creator != null and creator !='' ">#{creator},</if>
<if test="creatorName != null and creatorName !='' ">#{creatorName},</if>
now(),
1
)
</insert>
<update id="modify" parameterType="com.electromagnetic.industry.software.manage.pojo.models.User">
update ed_users
<set>
<if test="userId != null and userId != ''">user_id = #{userId},</if>
<if test="userName != null and userName != ''">user_name = #{userName},</if>
<if test="workNumber != null and workNumber != ''">work_number = #{workNumber},</if>
<if test="mobile != null and mobile != ''">mobile = #{mobile},</if>
<if test="userDept != null and userDept != ''">user_dept = #{userDept},</if>
<if test="userTitle != null and userTitle != ''">user_title = #{userTitle},</if>
<if test="userAccount != null and userAccount != ''">user_account = #{userAccount},</if>
<if test="joinTime != null">join_time = #{joinTime},</if>
<if test="userStatus != null and userStatus != ''">user_status = #{userStatus},</if>
<if test="isActivated != null and isActivated != ''">is_activated = #{isActivated},</if>
<if test="userPwd != null and userPwd != ''">user_pwd = #{userPwd},</if>
internship_end_date = #{internshipEndDate},
<if test="modifier != null and modifier != ''">modifier = #{modifier},</if>
<if test="modifierName != null and modifierName != ''">modifier_name = #{modifierName},</if>
gmt_modified=now()
</set>
where user_id= #{userId}
</update>
<update id="publish" parameterType="com.electromagnetic.industry.software.manage.pojo.other.PublishParam">
update ed_users
<trim prefix="SET" suffixOverrides=",">
is_published = 1,
<if test="modifier != null and modifier != ''">modifier = #{modifier},</if>
<if test="modifierName != null and modifierName != ''">modifier_name = #{modifierName},</if>
gmt_modified = now()
</trim>
where user_id IN
<foreach collection="userIds" item="userId" open="(" separator="," close=")">
#{userId}
</foreach>
</update>
<select id="search" parameterType="com.electromagnetic.industry.software.manage.pojo.other.SearchKeyWords"
resultMap="UserResultMap">
SELECT *
@ -173,7 +90,7 @@
<!-- 动态排序条件 -->
<choose>
<when test="gmtCreate == 'asc' or gmtCreate == 'desc'">
ORDER BY gmt_create ${gmtCreate}
ORDER BY created_time ${gmtCreate}
</when>
<when test="joinTime == 'asc' or joinTime == 'desc'">
ORDER BY join_time ${joinTime}
@ -227,7 +144,7 @@
<!-- 动态排序条件 -->
<choose>
<when test="gmtCreate == 'asc' or gmtCreate == 'desc'">
ORDER BY gmt_create ${gmtCreate}
ORDER BY created_time ${gmtCreate}
</when>
<when test="joinTime == 'asc' or joinTime == 'desc'">
ORDER BY join_time ${joinTime}
@ -245,27 +162,16 @@
<select id="getSingleUser" parameterType="String" resultMap="UserResultMap">
<include refid="selectUserVo"/>
where user_id = #{userId}
where id = #{userId}
</select>
<update id="deleteUser" parameterType="com.electromagnetic.industry.software.manage.pojo.other.UserDeleteKeyWords">
update ed_users
<set>
effect_flag=0,
modifier=#{modifier},
modifier_name=#{modifierName},
gmt_modified = now()
</set>
where user_id = #{userId}
</update>
<select id="selectUserRoles" parameterType="String" resultType="String">
select r.role_name
from ed_role r
where r.id in (select ur.role_id
where r.role_id in (select ur.role_id
from ed_users u
left join ed_user_role ur on u.user_id = ur.user_id
where u.user_id = #{userId})
left join ed_user_role ur on u.id = ur.user_id
where u.id = #{userId})
</select>
</mapper>