@Override
@Transactional(rollbackFor = Exception.class)
@LogRecord(type = SYSTEM_USER_TYPE, subType = SYSTEM_USER_CREATE_SUB_TYPE, bizNo = "{{#user.id}}",
success = SYSTEM_USER_CREATE_SUCCESS)
public Long createUser(UserSaveReqVO createReqVO) {
// 1.1 校验账户配合
tenantService.handleTenantInfo(tenant -> {
long count = userMapper.selectCount();
if (count >= tenant.getAccountCount()) {
throw exception(USER_COUNT_MAX, tenant.getAccountCount());
}
});
// 1.2 校验正确性
validateUserForCreateOrUpdate(null, createReqVO.getUsername(), createReqVO.getUserSn(),
createReqVO.getMobile(), createReqVO.getEmail(), createReqVO.getDeptId(), createReqVO.getPostIds());
// 2.1 插入用户
AdminUserDO user = BeanUtils.toBean(createReqVO, AdminUserDO.class);
user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
if (createReqVO.getPassword() != null) {
user.setPassword(encodePassword(createReqVO.getPassword())); // 加密密码
}
if (createReqVO.getPersonType().equals("1")){
// 外协员工:w + 5 位数字,不足补零
int nextVal = jdbcTemplate.queryForObject(
"SELECT nextval('outsourcing_user_sn')", Integer.class);
user.setUserSn("W" + String.format("%05d", nextVal));
}
userMapper.insert(user);
if (createReqVO.getImagePath() != null) {
FaceImageDO faceImageDO = new FaceImageDO();
faceImageDO.setPersonId(user.getId());
faceImageDO.setImage(createReqVO.getImagePath());
faceImageMapper.insert(faceImageDO);
}
// 2.2 插入关联岗位
if (CollectionUtil.isNotEmpty(user.getPostIds())) {
userPostMapper.insertBatch(convertList(user.getPostIds(),
postId -> new UserPostDO().setUserId(user.getId()).setPostId(postId)));
}
// 3. 记录操作日志上下文
LogRecordContext.putVariable("user", user);
return user.getId();
}