1. 调整 e 办编辑用户信息时,调整接受的岗位,组织,性别等属性的逻辑

(cherry picked from commit 6304a7a293)
This commit is contained in:
chenbowen
2025-08-28 17:31:23 +08:00
committed by chenbowen
parent 4559f7268f
commit 3ee67053ba
6 changed files with 75 additions and 9 deletions

View File

@@ -18,14 +18,14 @@ public class UserUpdateRequestVO {
private Long bimUid; private Long bimUid;
@Schema(description = "用户账号") @Schema(description = "用户账号")
private String username; private String username;
@Schema(description = "用户密码")
private String password;
@Schema(description = "昵称") @Schema(description = "昵称")
private String nickname; private String nickname;
@Schema(description = "备注") @Schema(description = "备注")
private String remark; private String remark;
@Schema(description = "归属部门Id列表") @Schema(description = "归属部门Id列表")
private Set<Long> deptIds; private Set<Long> deptIds;
@Schema(description = "所属岗位名称")
private String postName;
@Schema(description = "邮箱") @Schema(description = "邮箱")
private String email; private String email;
@Schema(description = "移动电话") @Schema(description = "移动电话")

View File

@@ -1,6 +1,6 @@
package cn.iocoder.yudao.module.system.dal.dataobject.userdept; package cn.iocoder.yudao.module.system.dal.dataobject.userdept;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@@ -20,7 +20,7 @@ import lombok.*;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class UserDeptDO extends BaseDO { public class UserDeptDO extends TenantBaseDO {
/** /**
* 主键ID * 主键ID

View File

@@ -81,4 +81,12 @@ public interface PostService {
*/ */
void validatePostList(Collection<Long> ids); void validatePostList(Collection<Long> ids);
/**
* 根据岗位名称获取岗位,如果不存在则创建
*
* @param postName 岗位名称
* @return 岗位编号
*/
Long getOrCreatePostByName(String postName);
} }

View File

@@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.system.service.dept; package cn.iocoder.yudao.module.system.service.dept;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@@ -8,10 +9,10 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqV
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
import cn.iocoder.yudao.module.system.dal.mysql.dept.PostMapper; import cn.iocoder.yudao.module.system.dal.mysql.dept.PostMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import jakarta.annotation.Resource;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@@ -150,4 +151,27 @@ public class PostServiceImpl implements PostService {
} }
}); });
} }
@Override
public Long getOrCreatePostByName(String postName) {
if (StrUtil.isBlank(postName)) {
return null;
}
// 先查询是否存在同名岗位
PostDO existingPost = postMapper.selectByName(postName);
if (existingPost != null) {
return existingPost.getId();
}
// 不存在则创建新岗位
PostSaveReqVO createReqVO = new PostSaveReqVO();
createReqVO.setName(postName);
createReqVO.setCode("E_" + postName.hashCode()); // 先使用名称做 hash
createReqVO.setSort(999); // 默认排序
createReqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认启用
createReqVO.setRemark("通过外部接口自动创建");
return createPost(createReqVO);
}
} }

View File

@@ -1,10 +1,15 @@
package cn.iocoder.yudao.module.system.service.sync; package cn.iocoder.yudao.module.system.service.sync;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.sync.vo.user.*; import cn.iocoder.yudao.module.system.controller.admin.sync.vo.user.*;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.dataobject.userdept.UserDeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.userdept.UserDeptDO;
import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper;
import cn.iocoder.yudao.module.system.service.dept.PostService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import cn.iocoder.yudao.module.system.service.userdept.UserDeptService; import cn.iocoder.yudao.module.system.service.userdept.UserDeptService;
import cn.iocoder.yudao.module.system.util.sync.SyncVerifyUtil; import cn.iocoder.yudao.module.system.util.sync.SyncVerifyUtil;
@@ -12,10 +17,9 @@ import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.beans.PropertyDescriptor; import java.beans.PropertyDescriptor;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import java.util.Map;
@Service @Service
public class UserSyncServiceImpl implements UserSyncService { public class UserSyncServiceImpl implements UserSyncService {
@@ -23,6 +27,10 @@ public class UserSyncServiceImpl implements UserSyncService {
private AdminUserService adminUserService; private AdminUserService adminUserService;
@Resource @Resource
private UserDeptService userDeptService; private UserDeptService userDeptService;
@Resource
private PostService postService;
@Resource
private UserPostMapper userPostMapper;
@Override @Override
public UserCreateResponseVO createUser(UserCreateRequestVO requestVO) { public UserCreateResponseVO createUser(UserCreateRequestVO requestVO) {
@@ -101,6 +109,27 @@ public class UserSyncServiceImpl implements UserSyncService {
if (requestVO.getAvatar() != null && !requestVO.getAvatar().isEmpty()) { if (requestVO.getAvatar() != null && !requestVO.getAvatar().isEmpty()) {
updateReqVO.setAvatar(requestVO.getAvatar()); updateReqVO.setAvatar(requestVO.getAvatar());
} }
// 处理岗位名称字段
if (StrUtil.isNotBlank(requestVO.getPostName())) {
// 获取或创建岗位
Long postId = postService.getOrCreatePostByName(requestVO.getPostName());
if (postId != null) {
// 获取用户当前的岗位关系
Set<Long> currentPostIds = convertSet(userPostMapper.selectListByUserId(user.getId()), UserPostDO::getPostId);
// 如果用户还没有这个岗位,则添加
if (!currentPostIds.contains(postId)) {
UserPostDO userPost = new UserPostDO();
userPost.setUserId(user.getId());
userPost.setPostId(postId);
userPostMapper.insert(userPost);
}
}
}
// 中铝 e 办不会更新密码,设置默认密码
updateReqVO.setPassword("ZLEB");
adminUserService.updateUser(updateReqVO); adminUserService.updateUser(updateReqVO);
resp.setResultCode("0"); resp.setResultCode("0");
resp.setMessage("success"); resp.setMessage("success");

View File

@@ -11,8 +11,10 @@ import org.springframework.validation.annotation.Validated;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_DEPT_NOT_EXISTS; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_DEPT_NOT_EXISTS;
/** /**
@@ -104,6 +106,9 @@ public class UserDeptServiceImpl implements UserDeptService {
return; return;
} }
List<UserDeptDO> list = BeanUtils.toBean(createReqVOList, UserDeptDO.class); List<UserDeptDO> list = BeanUtils.toBean(createReqVOList, UserDeptDO.class);
// 默认使用当前用户的租户
Long tenantId = Objects.requireNonNull(getLoginUser()).getTenantId();
list.forEach(item -> item.setTenantId(tenantId));
userDeptMapper.insertBatch(list); userDeptMapper.insertBatch(list);
} }