diff --git a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/constants/SysConstants.java b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/constants/SysConstants.java index d073ac734..089e96bab 100644 --- a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/constants/SysConstants.java +++ b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/constants/SysConstants.java @@ -48,9 +48,9 @@ public interface SysConstants { String DEFAULT_LOGIN_PASSWORD = "Aa123456!"; /** - * 超级管理员的角色编码 + * 后台管理员的角色编码 */ - String SUPER_ADMIN_ROLE_CODE = "superAdmin"; + String BACKEND_ADMIN_ROLE_CODE = "backendAdmin"; /** * 默认用户的初始角色编码 diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/biz/UserIntegrationService.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/biz/UserIntegrationService.java deleted file mode 100644 index 0a532842f..000000000 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/biz/UserIntegrationService.java +++ /dev/null @@ -1,145 +0,0 @@ -package cn.stylefeng.roses.kernel.sys.modular.user.biz; - -import cn.hutool.core.util.ObjectUtil; -import cn.stylefeng.roses.kernel.file.api.FileInfoApi; -import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; -import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; -import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi; -import cn.stylefeng.roses.kernel.sys.api.pojo.user.SimpleUserDTO; -import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserValidateDTO; -import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUser; -import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum; -import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserService; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -/** - * 用户相关的综合业务 - * - * @author fengshuonan - * @since 2023/6/11 21:44 - */ -@Service -public class UserIntegrationService implements SysUserServiceApi { - - @Resource - private SysUserService sysUserService; - - @Resource - private FileInfoApi fileInfoApi; - - @Override - public SimpleUserDTO getUserInfoByUserId(Long userId) { - - if (ObjectUtil.isEmpty(userId)) { - return null; - } - - LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); - sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId); - sysUserLambdaQueryWrapper.select(SysUser::getRealName, SysUser::getAvatar); - SysUser sysUser = this.sysUserService.getOne(sysUserLambdaQueryWrapper); - if (sysUser == null) { - return null; - } - - SimpleUserDTO simpleUserDTO = new SimpleUserDTO(); - simpleUserDTO.setUserId(userId); - simpleUserDTO.setRealName(sysUser.getRealName()); - - // 获取头像文件id信息,转化为头像URL - Long avatarFileId = sysUser.getAvatar(); - if (avatarFileId == null) { - return null; - } - - // 获取头像的访问地址 - String fileAuthUrl = fileInfoApi.getFileAuthUrl(avatarFileId); - simpleUserDTO.setAvatarUrl(fileAuthUrl); - - return simpleUserDTO; - } - - @Override - public String getUserRealName(Long userId) { - LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); - sysUserLambdaQueryWrapper.select(SysUser::getRealName); - sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId); - SysUser sysUser = this.sysUserService.getOne(sysUserLambdaQueryWrapper); - if (sysUser == null) { - return ""; - } - return sysUser.getRealName(); - } - - @Override - public UserValidateDTO getUserLoginValidateDTO(String account) { - LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); - sysUserLambdaQueryWrapper.eq(SysUser::getAccount, account); - sysUserLambdaQueryWrapper.select(SysUser::getPassword, SysUser::getPasswordSalt, SysUser::getStatusFlag, SysUser::getUserId); - SysUser sysUserServiceOne = this.sysUserService.getOne(sysUserLambdaQueryWrapper, false); - - if (sysUserServiceOne == null) { - throw new ServiceException(SysUserExceptionEnum.ACCOUNT_NOT_EXIST); - } - - return new UserValidateDTO(sysUserServiceOne.getUserId(), sysUserServiceOne.getPassword(), sysUserServiceOne.getPasswordSalt(), - sysUserServiceOne.getStatusFlag()); - } - - @Override - public void updateUserLoginInfo(Long userId, String ip) { - - if (ObjectUtil.isEmpty(userId) || ObjectUtil.isEmpty(ip)) { - return; - } - - LambdaUpdateWrapper sysUserLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - sysUserLambdaUpdateWrapper.eq(SysUser::getUserId, userId); - sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginTime, new Date()); - sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginIp, ip); - this.sysUserService.update(sysUserLambdaUpdateWrapper); - } - - @Override - public boolean getUserSuperAdminFlag(Long userId) { - - if (ObjectUtil.isEmpty(userId)) { - return false; - } - - LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); - sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId); - sysUserLambdaQueryWrapper.select(SysUser::getSuperAdminFlag); - SysUser result = this.sysUserService.getOne(sysUserLambdaQueryWrapper, false); - - if (result == null) { - return false; - } - - return YesOrNotEnum.Y.getCode().equals(result.getSuperAdminFlag()); - } - - @Override - public List queryAllUserIdList() { - LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); - sysUserLambdaQueryWrapper.select(SysUser::getUserId); - List list = this.sysUserService.list(sysUserLambdaQueryWrapper); - return list.stream().map(SysUser::getUserId).collect(Collectors.toList()); - } - - @Override - public Boolean userExist(Long userId) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(SysUser::getUserId, userId); - long count = this.sysUserService.count(wrapper); - return count > 0; - } - -} diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java index 095807ad7..f5b2adb53 100644 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/enums/SysUserExceptionEnum.java @@ -38,7 +38,17 @@ public enum SysUserExceptionEnum implements AbstractExceptionEnum { /** * 新密码与原密码相同 */ - USER_PWD_REPEAT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10005", "新密码与原密码相同,请更换新密码"); + USER_PWD_REPEAT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10005", "新密码与原密码相同,请更换新密码"), + + /** + * 不能修改超级管理员状态 + */ + CANT_UPDATE_STATUS(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10006", "不能修改超级管理员状态"), + + /** + * 不能修改超级管理员的角色 + */ + CANT_CHANGE_ADMIN_ROLE(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10007", "不能修改超级管理员的角色"); /** * 错误编码 diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserService.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserService.java index 89eb63b7f..4421ef5c3 100644 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserService.java +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserService.java @@ -1,6 +1,7 @@ package cn.stylefeng.roses.kernel.sys.modular.user.service; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi; import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUser; import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRequest; import cn.stylefeng.roses.kernel.sys.modular.user.pojo.response.PersonalInfo; @@ -14,7 +15,7 @@ import java.util.List; * @author fengshuonan * @date 2023/06/10 21:26 */ -public interface SysUserService extends IService { +public interface SysUserService extends IService, SysUserServiceApi { /** * 新增 diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java index 8df33a7dc..4540ae1f5 100644 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java @@ -10,10 +10,12 @@ import cn.stylefeng.roses.kernel.sys.api.SysRoleServiceApi; import cn.stylefeng.roses.kernel.sys.api.callback.RemoveRoleCallbackApi; import cn.stylefeng.roses.kernel.sys.api.callback.RemoveUserCallbackApi; import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUserRole; +import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserRoleExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.user.mapper.SysUserRoleMapper; import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRoleRequest; import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserRoleService; +import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -39,6 +41,9 @@ public class SysUserRoleServiceImpl extends ServiceImpl wrapper = this.createWrapper(sysUserRoleRequest); this.remove(wrapper); diff --git a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserServiceImpl.java b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserServiceImpl.java index e41b8b7bb..ae9138ee9 100644 --- a/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserServiceImpl.java +++ b/kernel-s-sys/sys-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserServiceImpl.java @@ -12,6 +12,7 @@ import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; +import cn.stylefeng.roses.kernel.file.api.FileInfoApi; import cn.stylefeng.roses.kernel.file.api.constants.FileConstants; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; @@ -19,7 +20,9 @@ import cn.stylefeng.roses.kernel.sys.api.callback.RemoveUserCallbackApi; import cn.stylefeng.roses.kernel.sys.api.enums.user.UserStatusEnum; import cn.stylefeng.roses.kernel.sys.api.exception.enums.UserExceptionEnum; import cn.stylefeng.roses.kernel.sys.api.expander.SysConfigExpander; +import cn.stylefeng.roses.kernel.sys.api.pojo.user.SimpleUserDTO; import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserOrgDTO; +import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserValidateDTO; import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUser; import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.user.factory.SysUserCreateFactory; @@ -37,9 +40,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; /** * 系统用户业务实现层 @@ -59,6 +64,9 @@ public class SysUserServiceImpl extends ServiceImpl impl @Resource private SysUserRoleService sysUserRoleService; + @Resource + private FileInfoApi fileInfoApi; + @Override @Transactional(rollbackFor = Exception.class) public void add(SysUserRequest sysUserRequest) { @@ -180,6 +188,12 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public void updateStatus(SysUserRequest sysUserRequest) { + // 如果是将用户禁用,检测判断不能禁用超级管理员用户 + boolean userSuperAdminFlag = this.getUserSuperAdminFlag(sysUserRequest.getUserId()); + if (userSuperAdminFlag) { + throw new ServiceException(SysUserExceptionEnum.CANT_UPDATE_STATUS); + } + // 校验状态传值是否正确 Integer statusFlag = sysUserRequest.getStatusFlag(); UserStatusEnum.validateUserStatus(statusFlag); @@ -290,6 +304,114 @@ public class SysUserServiceImpl extends ServiceImpl impl this.update(wrapper); } + @Override + public SimpleUserDTO getUserInfoByUserId(Long userId) { + + if (ObjectUtil.isEmpty(userId)) { + return null; + } + + LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId); + sysUserLambdaQueryWrapper.select(SysUser::getRealName, SysUser::getAvatar); + SysUser sysUser = this.getOne(sysUserLambdaQueryWrapper); + if (sysUser == null) { + return null; + } + + SimpleUserDTO simpleUserDTO = new SimpleUserDTO(); + simpleUserDTO.setUserId(userId); + simpleUserDTO.setRealName(sysUser.getRealName()); + + // 获取头像文件id信息,转化为头像URL + Long avatarFileId = sysUser.getAvatar(); + if (avatarFileId == null) { + return null; + } + + // 获取头像的访问地址 + String fileAuthUrl = fileInfoApi.getFileAuthUrl(avatarFileId); + simpleUserDTO.setAvatarUrl(fileAuthUrl); + + return simpleUserDTO; + } + + @Override + public String getUserRealName(Long userId) { + LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysUserLambdaQueryWrapper.select(SysUser::getRealName); + sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId); + SysUser sysUser = this.getOne(sysUserLambdaQueryWrapper); + if (sysUser == null) { + return ""; + } + return sysUser.getRealName(); + } + + @Override + public UserValidateDTO getUserLoginValidateDTO(String account) { + LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysUserLambdaQueryWrapper.eq(SysUser::getAccount, account); + sysUserLambdaQueryWrapper.select(SysUser::getPassword, SysUser::getPasswordSalt, SysUser::getStatusFlag, SysUser::getUserId); + SysUser sysUserServiceOne = this.getOne(sysUserLambdaQueryWrapper, false); + + if (sysUserServiceOne == null) { + throw new ServiceException(SysUserExceptionEnum.ACCOUNT_NOT_EXIST); + } + + return new UserValidateDTO(sysUserServiceOne.getUserId(), sysUserServiceOne.getPassword(), sysUserServiceOne.getPasswordSalt(), + sysUserServiceOne.getStatusFlag()); + } + + @Override + public void updateUserLoginInfo(Long userId, String ip) { + + if (ObjectUtil.isEmpty(userId) || ObjectUtil.isEmpty(ip)) { + return; + } + + LambdaUpdateWrapper sysUserLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + sysUserLambdaUpdateWrapper.eq(SysUser::getUserId, userId); + sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginTime, new Date()); + sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginIp, ip); + this.update(sysUserLambdaUpdateWrapper); + } + + @Override + public boolean getUserSuperAdminFlag(Long userId) { + + if (ObjectUtil.isEmpty(userId)) { + return false; + } + + LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId); + sysUserLambdaQueryWrapper.select(SysUser::getSuperAdminFlag); + SysUser result = this.getOne(sysUserLambdaQueryWrapper, false); + + if (result == null) { + return false; + } + + return YesOrNotEnum.Y.getCode().equals(result.getSuperAdminFlag()); + } + + @Override + public List queryAllUserIdList() { + LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysUserLambdaQueryWrapper.select(SysUser::getUserId); + List list = this.list(sysUserLambdaQueryWrapper); + return list.stream().map(SysUser::getUserId).collect(Collectors.toList()); + } + + @Override + public Boolean userExist(Long userId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysUser::getUserId, userId); + long count = this.count(wrapper); + return count > 0; + } + /** * 获取信息 * diff --git a/kernel-s-sys/sys-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/sys/starter/init/InitAdminService.java b/kernel-s-sys/sys-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/sys/starter/init/InitAdminService.java index aed363d40..34668af2d 100644 --- a/kernel-s-sys/sys-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/sys/starter/init/InitAdminService.java +++ b/kernel-s-sys/sys-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/sys/starter/init/InitAdminService.java @@ -65,7 +65,7 @@ public class InitAdminService { private SysRoleMenuOptionsService sysRoleMenuOptionsService; /** - * 初始化超级管理员,超级管理员拥有最高权限 + * 初始化后台管理员,后台管理员拥有最高权限 * * @author fengshuonan * @since 2020/12/17 21:57 @@ -73,9 +73,9 @@ public class InitAdminService { @Transactional(rollbackFor = Exception.class) public void initSuperAdmin() { - // 找到超级管理员的角色id + // 找到后台管理员角色id LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysRole::getRoleCode, SysConstants.SUPER_ADMIN_ROLE_CODE); + queryWrapper.eq(SysRole::getRoleCode, SysConstants.BACKEND_ADMIN_ROLE_CODE); queryWrapper.select(SysRole::getRoleId); SysRole superAdminRole = sysRoleService.getOne(queryWrapper); @@ -83,7 +83,7 @@ public class InitAdminService { List totalMenuList = sysMenuService.getTotalMenuList(); List totalMenuOptionsList = sysMenuOptionsService.getTotalMenuOptionsList(); - // 超级管理员绑定所有的菜单和菜单功能 + // 后台管理员绑定所有的菜单和菜单功能 sysRoleMenuService.bindRoleMenus(superAdminRole.getRoleId(), totalMenuList); sysRoleMenuOptionsService.bindRoleMenuOptions(superAdminRole.getRoleId(), totalMenuOptionsList); }