【7.6.0】【sys】【user】整理添加用户逻辑

pull/55/MERGE
fengshuonan 2023-06-11 22:34:33 +08:00
parent d90b99ecea
commit 11d2f58e0d
7 changed files with 134 additions and 28 deletions

View File

@ -32,6 +32,14 @@
<version>${roses.version}</version>
</dependency>
<!--文件api-->
<!--用户头像相关的操作-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>file-api</artifactId>
<version>${roses.version}</version>
</dependency>
<!--资源api模块-->
<!--用在资源控制器,资源扫描上-->
<dependency>

View File

@ -29,12 +29,12 @@ public class SysUserController {
private SysUserService sysUserService;
/**
*
*
*
* @author fengshuonan
* @date 2023/06/10 21:26
*/
@PostResource(name = "添加", path = "/sysUser/add")
@PostResource(name = "添加用户", path = "/sysUser/add")
public ResponseData<SysUser> add(@RequestBody @Validated(SysUserRequest.add.class) SysUserRequest sysUserRequest) {
sysUserService.add(sysUserRequest);
return new SuccessResponseData<>();

View File

@ -16,7 +16,17 @@ public enum SysUserOrgExceptionEnum implements AbstractExceptionEnum {
/**
*
*/
SYS_USER_ORG_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在");
SYS_USER_ORG_NOT_EXISTED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10001", "查询结果不存在"),
/**
* orgIdpositionIdmainFlag
*/
EMPTY_PARAM(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10002", "绑定用户组织机构失败参数存在缺失请检查orgIdpositionIdmainFlag"),
/**
*
*/
MAIN_FLAG_ERROR(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10003", "用户主部门数量错误,请确保用户有且只有一个主部门");
/**
*

View File

@ -2,11 +2,16 @@ package cn.stylefeng.roses.kernel.sys.modular.user.pojo.request;
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUserOrg;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
/**
*
@ -29,6 +34,7 @@ public class SysUserRequest extends BaseRequest {
*
*/
@ChineseDescription("姓名")
@NotBlank(message = "姓名不能为空", groups = {add.class, edit.class})
private String realName;
/**
@ -47,7 +53,7 @@ public class SysUserRequest extends BaseRequest {
/**
* BCrypt
*/
@NotBlank(message = "密码加密方式为BCrypt不能为空", groups = {add.class, edit.class})
@NotBlank(message = "密码加密方式为BCrypt不能为空", groups = {add.class})
@ChineseDescription("密码加密方式为BCrypt")
private String password;
@ -98,27 +104,16 @@ public class SysUserRequest extends BaseRequest {
/**
* 1-2-
*/
@NotNull(message = "状态1-正常2-冻结不能为空", groups = {add.class, edit.class})
@ChineseDescription("状态1-正常2-冻结")
@NotNull(message = "状态不能为空", groups = {add.class, edit.class})
private Integer statusFlag;
/**
*
*
*/
@ChineseDescription("登录次数")
private Integer loginCount;
/**
* IP
*/
@ChineseDescription("最后登陆IP")
private String lastLoginIp;
/**
*
*/
@ChineseDescription("最后登陆时间")
private String lastLoginTime;
@TableField("user_sort")
@ChineseDescription("用户的排序")
private BigDecimal userSort = new BigDecimal(1000);
/**
* id
@ -136,4 +131,11 @@ public class SysUserRequest extends BaseRequest {
@ChineseDescription("组织机构id查询条件")
private Long orgIdCondition;
/**
*
*/
@ChineseDescription("用户和组织机构关系集合")
@NotEmpty(message = "用户和组织机构关系集合不能为空", groups = {add.class, edit.class})
private List<SysUserOrg> userOrgList;
}

View File

@ -15,7 +15,7 @@ import java.util.List;
*/
public interface SysUserOrgService extends IService<SysUserOrg> {
/**
/**
*
*
* @param sysUserOrgRequest
@ -24,7 +24,7 @@ public interface SysUserOrgService extends IService<SysUserOrg> {
*/
void add(SysUserOrgRequest sysUserOrgRequest);
/**
/**
*
*
* @param sysUserOrgRequest
@ -33,7 +33,7 @@ public interface SysUserOrgService extends IService<SysUserOrg> {
*/
void del(SysUserOrgRequest sysUserOrgRequest);
/**
/**
*
*
* @param sysUserOrgRequest
@ -42,7 +42,7 @@ public interface SysUserOrgService extends IService<SysUserOrg> {
*/
void edit(SysUserOrgRequest sysUserOrgRequest);
/**
/**
*
*
* @param sysUserOrgRequest
@ -51,24 +51,34 @@ public interface SysUserOrgService extends IService<SysUserOrg> {
*/
SysUserOrg detail(SysUserOrgRequest sysUserOrgRequest);
/**
/**
*
*
* @param sysUserOrgRequest
* @param sysUserOrgRequest
* @return List<SysUserOrg>
* @author fengshuonan
* @date 2023/06/10 21:26
*/
List<SysUserOrg> findList(SysUserOrgRequest sysUserOrgRequest);
/**
/**
*
*
* @param sysUserOrgRequest
* @param sysUserOrgRequest
* @return PageResult<SysUserOrg>
* @author fengshuonan
* @date 2023/06/10 21:26
*/
PageResult<SysUserOrg> findPage(SysUserOrgRequest sysUserOrgRequest);
/**
*
*
* @param userId id
* @param userOrgList
* @author fengshuonan
* @since 2023/6/11 22:23
*/
void updateUserOrg(Long userId, List<SysUserOrg> userOrgList);
}

View File

@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
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.page.PageResult;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveOrgCallbackApi;
import cn.stylefeng.roses.kernel.sys.api.enums.HrOrganizationExceptionEnum;
@ -17,6 +18,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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 java.util.List;
import java.util.Set;
@ -62,6 +64,22 @@ public class SysUserOrgServiceImpl extends ServiceImpl<SysUserOrgMapper, SysUser
return PageResultFactory.createPageResult(sysRolePage);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateUserOrg(Long userId, List<SysUserOrg> userOrgList) {
// 先校验组织机构
List<SysUserOrg> sysUserOrgResult = this.validateUserOrgParam(userId, userOrgList);
// 删除已经绑定的组织机构
LambdaQueryWrapper<SysUserOrg> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUserOrg::getUserId, userId);
this.remove(wrapper);
// 重新绑定用户对应的组织机构
this.saveBatch(sysUserOrgResult);
}
@Override
public List<SysUserOrg> findList(SysUserOrgRequest sysUserOrgRequest) {
LambdaQueryWrapper<SysUserOrg> wrapper = this.createWrapper(sysUserOrgRequest);
@ -114,4 +132,41 @@ public class SysUserOrgServiceImpl extends ServiceImpl<SysUserOrgMapper, SysUser
return queryWrapper;
}
/**
*
* <p>
* 1. orgIdpositionIdmainFlag
* 2.
*
* @return userId
* @author fengshuonan
* @since 2023/6/11 22:26
*/
private List<SysUserOrg> validateUserOrgParam(Long userId, List<SysUserOrg> userOrgList) {
int mainFlagCount = 0;
for (SysUserOrg sysUserOrg : userOrgList) {
// 校验参数是否缺失
if (ObjectUtil.isEmpty(sysUserOrg.getOrgId()) || ObjectUtil.isEmpty(sysUserOrg.getPositionId()) || ObjectUtil.isEmpty(sysUserOrg.getMainFlag())) {
throw new ServiceException(SysUserOrgExceptionEnum.EMPTY_PARAM);
}
// 统计主部门的数量
if (YesOrNotEnum.Y.getCode().equals(sysUserOrg.getMainFlag())) {
mainFlagCount++;
}
// 绑定用户id
sysUserOrg.setUserId(userId);
}
if (mainFlagCount > 1 || mainFlagCount == 0) {
throw new ServiceException(SysUserOrgExceptionEnum.MAIN_FLAG_ERROR);
}
return userOrgList;
}
}

View File

@ -2,21 +2,25 @@ package cn.stylefeng.roses.kernel.sys.modular.user.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.auth.api.password.PasswordStoredEncryptApi;
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.constants.FileConstants;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
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.enums.SysUserExceptionEnum;
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.service.SysUserOrgService;
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;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@ -33,11 +37,28 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Resource
private SysUserServiceApi sysUserServiceApi;
@Resource
private PasswordStoredEncryptApi passwordStoredEncryptApi;
@Resource
private SysUserOrgService sysUserOrgService;
@Override
@Transactional(rollbackFor = Exception.class)
public void add(SysUserRequest sysUserRequest) {
SysUser sysUser = new SysUser();
BeanUtil.copyProperties(sysUserRequest, sysUser);
// 将密码加密存储到库中
sysUser.setPassword(passwordStoredEncryptApi.encrypt(sysUser.getPassword()));
// 设置用户默认头像
sysUser.setAvatar(FileConstants.DEFAULT_AVATAR_FILE_ID);
this.save(sysUser);
// 更新用户的任职信息
sysUserOrgService.updateUserOrg(sysUser.getUserId(), sysUserRequest.getUserOrgList());
}
@Override