package cn.stylefeng.roses.kernel.sys.modular.user.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.stylefeng.roses.kernel.auth.api.TenantCodeGetApi;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
import cn.stylefeng.roses.kernel.auth.api.password.PasswordStoredEncryptApi;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.auth.api.pojo.password.SaltedEncryptResult;
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
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.db.mp.tenant.holder.TenantIdHolder;
import cn.stylefeng.roses.kernel.db.mp.tenant.holder.TenantSwitchHolder;
import cn.stylefeng.roses.kernel.dsctn.api.context.DataSourceContext;
import cn.stylefeng.roses.kernel.file.api.FileInfoApi;
import cn.stylefeng.roses.kernel.file.api.constants.FileConstants;
import cn.stylefeng.roses.kernel.log.api.util.BusinessLogUtil;
import cn.stylefeng.roses.kernel.rule.enums.DbTypeEnum;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict;
import cn.stylefeng.roses.kernel.rule.util.SortUtils;
import cn.stylefeng.roses.kernel.sys.api.SecurityConfigService;
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveUserCallbackApi;
import cn.stylefeng.roses.kernel.sys.api.constants.SysConstants;
import cn.stylefeng.roses.kernel.sys.api.enums.user.UserStatusEnum;
import cn.stylefeng.roses.kernel.sys.api.expander.SysConfigExpander;
import cn.stylefeng.roses.kernel.sys.api.pojo.user.*;
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;
import cn.stylefeng.roses.kernel.sys.modular.user.factory.UserDataScopeFactory;
import cn.stylefeng.roses.kernel.sys.modular.user.mapper.SysUserMapper;
import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRequest;
import cn.stylefeng.roses.kernel.sys.modular.user.pojo.response.PersonalInfo;
import cn.stylefeng.roses.kernel.sys.modular.user.pojo.response.SysUserCertificateResponse;
import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserCertificateService;
import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserOrgService;
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.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
* 系统用户业务实现层
*
* @author fengshuonan
* @date 2023/06/10 21:26
*/
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
@Resource
private PasswordStoredEncryptApi passwordStoredEncryptApi;
@Resource
private SysUserOrgService sysUserOrgService;
@Resource
private SysUserRoleService sysUserRoleService;
@Resource
private FileInfoApi fileInfoApi;
@Resource
private TenantCodeGetApi tenantCodeGetApi;
@Resource(name = "loginErrorCountCacheApi")
private CacheOperatorApi<Integer> loginErrorCountCacheApi;
@Resource
private SecurityConfigService securityConfigService;
@Resource
private SysUserCertificateService sysUserCertificateService;
@Override
@Transactional(rollbackFor = Exception.class)
public void add(SysUserRequest sysUserRequest) {
SysUser sysUser = new SysUser();
BeanUtil.copyProperties(sysUserRequest, sysUser);
// 校验密码是否符合规则
String password = sysUserRequest.getPassword().trim();
securityConfigService.validatePasswordSecurityRule(false, password);
// 将密码加密存储到库中
SaltedEncryptResult saltedEncryptResult = passwordStoredEncryptApi.encryptWithSalt(password);
sysUser.setPassword(saltedEncryptResult.getEncryptPassword());
sysUser.setPasswordSalt(saltedEncryptResult.getPasswordSalt());
// 设置用户默认头像
sysUser.setAvatar(FileConstants.DEFAULT_AVATAR_FILE_ID);
this.save(sysUser);
// 记录一个密码修改记录
securityConfigService.recordPasswordEditLog(sysUser.getUserId(), saltedEncryptResult.getEncryptPassword(), saltedEncryptResult.getPasswordSalt());
// 更新用户的任职信息
sysUserOrgService.updateUserOrg(sysUser.getUserId(), sysUserRequest.getUserOrgList());
// 添加用户一个默认角色
sysUserRoleService.bindUserDefaultRole(sysUser.getUserId());
// 增加用户证书的信息
sysUserCertificateService.updateUserCertificate(sysUser.getUserId(), sysUserRequest.getUserCertificateList());
// 记录日志
BusinessLogUtil.setLogTitle("新增用户,用户账号:" + sysUser.getAccount());
BusinessLogUtil.addContent("新增用户账号信息:", sysUser.getAccount());
BusinessLogUtil.addContent("用户详细信息如下:\n", sysUser);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void del(SysUserRequest sysUserRequest) {
SysUser sysUser = this.querySysUser(sysUserRequest);
// 不能删除超级管理员
if (YesOrNotEnum.Y.getCode().equals(sysUser.getSuperAdminFlag())) {
throw new ServiceException(SysUserExceptionEnum.USER_CAN_NOT_DELETE_ADMIN);
}
// 删除用户的业务操作
this.baseRemoveUser(CollectionUtil.set(false, sysUser.getUserId()));
// 记录日志
BusinessLogUtil.setLogTitle("删除用户,用户账号:" + sysUser.getAccount());
BusinessLogUtil.addContent("新增用户账号信息:", sysUser.getAccount());
BusinessLogUtil.addContent("用户详细信息:\n", sysUser);
}
@Override
public void batchDel(SysUserRequest sysUserRequest) {
// 判断被删除用户是否有管理员
Set<Long> userIdList = sysUserRequest.getUserIdList();
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.in(SysUser::getUserId, userIdList);
sysUserLambdaQueryWrapper.eq(SysUser::getSuperAdminFlag, YesOrNotEnum.Y.getCode());
long adminCount = this.count(sysUserLambdaQueryWrapper);
if (adminCount > 0) {
throw new ServiceException(SysUserExceptionEnum.USER_CAN_NOT_DELETE_ADMIN);
}
// 删除用户的业务操作
this.baseRemoveUser(userIdList);
// 记录日志
BusinessLogUtil.setLogTitle("批量删除用户");
BusinessLogUtil.addContent("用户id集合为:\n", userIdList);
}
@Override
public void edit(SysUserRequest sysUserRequest) {
SysUser sysUser = this.querySysUser(sysUserRequest);
BusinessLogUtil.setLogTitle("更新用户信息,用户账号:" + sysUser.getAccount());
BusinessLogUtil.addContent("原始用户信息如下:\n", sysUser);
// 不能修改admin账号的超级管理员标识和账号
if (SysConstants.ADMIN_US
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本项目是基于Spring Boot 2的Roses开源项目Guns核心支撑层设计源码,包含1509个文件,其中1120个Java文件,188个XML文件,139个Markdown文件,27个Factories文件,25个SQL文件,5个PNG文件,3个GITIGNORE文件,1个LICENSE文件和1个JPG文件。Roses是一个基于Spring Boot 2的开源项目,是Guns项目的核心支撑层,用于构建稳定、易用的应用。系统界面设计简洁、易于扩展,适合用于各种需要核心支撑层的场景。
资源推荐
资源详情
资源评论
收起资源包目录
基于Spring Boot 2的Roses开源项目Guns核心支撑层设计源码 (1372个子文件)
spring.factories 1KB
spring.factories 574B
spring.factories 541B
spring.factories 376B
spring.factories 262B
spring.factories 260B
spring.factories 251B
spring.factories 247B
spring.factories 233B
spring.factories 223B
spring.factories 150B
spring.factories 148B
spring.factories 148B
spring.factories 143B
spring.factories 141B
spring.factories 139B
spring.factories 138B
spring.factories 136B
spring.factories 134B
spring.factories 133B
spring.factories 132B
spring.factories 132B
spring.factories 130B
spring.factories 130B
spring.factories 128B
spring.factories 120B
spring.factories 107B
.gitignore 323B
.gitignore 323B
.gitignore 323B
SysUserServiceImpl.java 35KB
HrOrganizationServiceImpl.java 33KB
SysFileInfoServiceImpl.java 29KB
CustomerServiceImpl.java 24KB
SysRoleServiceImpl.java 20KB
ApiResourceScanner.java 20KB
DictServiceImpl.java 19KB
SysUserRoleServiceImpl.java 18KB
ClassReflectUtil.java 17KB
UserIndexInfoService.java 17KB
SysThemeServiceImpl.java 17KB
SysMenuServiceImpl.java 17KB
DragCaptchaImageUtil.java 16KB
SysUserOrgServiceImpl.java 16KB
DatabaseInfoServiceImpl.java 16KB
SysConfigServiceImpl.java 14KB
LoginService.java 13KB
SysFileInfoController.java 13KB
RequestApiLogRecordAop.java 12KB
SysResourceServiceImpl.java 11KB
TenFileOperator.java 11KB
MinIoFileOperator.java 10KB
AuthServiceImpl.java 10KB
HrOrgApproverServiceImpl.java 10KB
RoleBindAppImpl.java 10KB
SysGroupServiceImpl.java 10KB
SysSmsInfoServiceImpl.java 10KB
SysNoticeServiceImpl.java 10KB
DbLogRecordServiceImpl.java 10KB
SysThemeTemplateFieldServiceImpl.java 9KB
SysTimersServiceImpl.java 9KB
AliyunMailSender.java 9KB
ProjectDataScopeHandler.java 9KB
SysMenuOptionsServiceImpl.java 9KB
EncryptionRequestBodyAdvice.java 9KB
SysThemeTemplateServiceImpl.java 9KB
DataSourceInitListener.java 9KB
MvnDeployUtil.java 9KB
PermissionAssignServiceImpl.java 9KB
SysLoginLogServiceImpl.java 9KB
ResourceFactory.java 9KB
ClassDetailMetadataFactory.java 9KB
RoleBindMenuImpl.java 9KB
DatabaseUtil.java 9KB
SysRoleDataScopeServiceImpl.java 8KB
AliyunFileOperator.java 8KB
SysMessageServiceImpl.java 8KB
HrPositionServiceImpl.java 8KB
PinyinServiceImpl.java 8KB
DataBaseInfoPersistence.java 8KB
PermissionAssignFactory.java 8KB
SysRoleAssignServiceImpl.java 8KB
MethodReflectUtil.java 8KB
WrapperAop.java 8KB
SysAppServiceImpl.java 8KB
TranslationServiceImpl.java 8KB
AliyunSmsSender.java 8KB
SecurityConfigServiceImpl.java 8KB
CustomMetaObjectHandler.java 8KB
SysLogBusinessServiceImpl.java 7KB
SysFileBusinessServiceImpl.java 7KB
HttpServletUtil.java 7KB
SystemHardwareCalculator.java 7KB
LocalFileOperator.java 7KB
FileInfoFactory.java 7KB
DictTypeServiceImpl.java 7KB
OfficeExcel.java 7KB
QingYunFileOperator.java 7KB
FlywayInitListener.java 7KB
RedisConfigContainer.java 7KB
共 1372 条
- 1
- 2
- 3
- 4
- 5
- 6
- 14
资源评论
沐知全栈开发
- 粉丝: 4747
- 资源: 3373
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功