From a0ab5c9a0bc0a1db0de29de8ed61971d0cf971f8 Mon Sep 17 00:00:00 2001 From: zhuxinru Date: Mon, 23 Mar 2026 14:15:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=90=8C=E6=AD=A5=E5=88=A9=E5=85=83?= =?UTF-8?q?=E4=BA=A8=E7=94=A8=E6=88=B7=E9=83=A8=E9=97=A8=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SysHrSyncController.java | 4 ++ .../tenant/service/SysStaffService.java | 7 +-- .../service/converter/TKMoldHrConverter.java | 59 +++++-------------- .../service/impl/SysStaffServiceImpl.java | 24 ++++++++ .../service/impl/SysTKMoldServiceImpl.java | 42 +++++++------ 5 files changed, 66 insertions(+), 70 deletions(-) diff --git a/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/controller/SysHrSyncController.java b/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/controller/SysHrSyncController.java index 2050f36..e219a4f 100644 --- a/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/controller/SysHrSyncController.java +++ b/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/controller/SysHrSyncController.java @@ -157,6 +157,10 @@ public class SysHrSyncController { @Inner(value = false) @PostMapping("/resyncLyricDept") public R resyncLyricDept(@RequestBody List userDtoList) { + R> userListR = remoteSpdmService.queryUserList(null); + if (userListR.getData() != null) { + userDtoList = userListR.getData(); + } try { tkMoldService.resyncLyricDept(userDtoList); } catch (Exception e) { diff --git a/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/SysStaffService.java b/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/SysStaffService.java index 65fcd5d..8df39d1 100644 --- a/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/SysStaffService.java +++ b/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/SysStaffService.java @@ -5,10 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.honeycombis.honeycom.tenant.dto.*; import com.honeycombis.honeycom.tenant.entity.SysStaffEntity; -import com.honeycombis.honeycom.tenant.vo.SysRoleVO; -import com.honeycombis.honeycom.tenant.vo.SysStaffDetailVO; -import com.honeycombis.honeycom.tenant.vo.SysStaffUpdateUseVO; -import com.honeycombis.honeycom.tenant.vo.SysStaffVO; +import com.honeycombis.honeycom.tenant.vo.*; import java.util.List; import java.util.Map; @@ -83,6 +80,8 @@ public interface SysStaffService extends IService { List findUserIdByTenantId(Long tenantId); + List findUserInfoByTenantId(Long tenantId); + /** * 获取员工邮箱信息 * diff --git a/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/converter/TKMoldHrConverter.java b/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/converter/TKMoldHrConverter.java index f8400ea..6a0997a 100644 --- a/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/converter/TKMoldHrConverter.java +++ b/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/converter/TKMoldHrConverter.java @@ -167,14 +167,6 @@ public class TKMoldHrConverter { } /** - * 将Lyric用户数据转换为部门实体,构造4级部门父子层级关系 - *

- * 部门层级: - * - 一级部门(dept_grp_code1/name1): parentId = 0L - * - 二级部门(dept_grp_code2/name2): parentId = 一级部门deptId - * - 三级部门(dept_grp_code3/name3): parentId = 二级部门deptId - * - 四级部门(dept_grp_code4/name4): parentId = 三级部门deptId (可选,有些用户只有3级) - *

* * @param userList 用户列表(包含部门信息) * @param deptIdAndDeptIds 用户当前部门编码(dept_code)与部门主键ID的映射(同时也包含数据库中已存在的部门) @@ -184,48 +176,27 @@ public class TKMoldHrConverter { public List lyricDeptToTenantDept(List userList, Map deptIdAndDeptIds, Map existingDeptMap, Long tenantId) { List sysDeptEntities = new ArrayList<>(); - // 用于存储已创建的部门编码与部门ID的映射(用于构建父子关系) + // 用于存储已创建的部门编码与部门ID的映射 Map createdDeptMap = new HashMap<>(); for (LyricUserDto user : userList) { - // 一级部门 - createDeptIfNotExists(createdDeptMap, existingDeptMap, sysDeptEntities, - user.getDept_grp_code1(), user.getDept_grp_name1(), - 0L, tenantId); + // 使用 dept_grp_code1-dept_grp_code2 格式构造部门编码 + if (StrUtil.isNotBlank(user.getDept_grp_code1()) && StrUtil.isNotBlank(user.getDept_grp_code2())) { + String deptCode = user.getDept_grp_code1() + "-" + user.getDept_grp_code2(); + // 使用 dept_grp_name1-dept_grp_name2 格式构造部门名称 + String deptName = ""; + if (StrUtil.isNotBlank(user.getDept_grp_name1()) && StrUtil.isNotBlank(user.getDept_grp_name2())) { + deptName = user.getDept_grp_name1() + "-" + user.getDept_grp_name2(); + } - // 二级部门 - if (StrUtil.isNotBlank(user.getDept_grp_code2()) && StrUtil.isNotBlank(user.getDept_grp_name2())) { + // 创建部门(一维结构,所有部门挂在租户下,parentId = 0L) createDeptIfNotExists(createdDeptMap, existingDeptMap, sysDeptEntities, - user.getDept_grp_code2(), user.getDept_grp_name2(), - createdDeptMap.get(user.getDept_grp_code1()), tenantId); - } + deptCode, deptName, 0L, tenantId); - // 三级部门 - if (StrUtil.isNotBlank(user.getDept_grp_code3()) && StrUtil.isNotBlank(user.getDept_grp_name3())) { - Long parentId = createdDeptMap.get(user.getDept_grp_code2()); - if (parentId != null) { - createDeptIfNotExists(createdDeptMap, existingDeptMap, sysDeptEntities, - user.getDept_grp_code3(), user.getDept_grp_name3(), - parentId, tenantId); - } - } - - // 四级部门(可选,有些用户只有三级部门) - if (StrUtil.isNotBlank(user.getDept_grp_code4()) && StrUtil.isNotBlank(user.getDept_grp_name4())) { - Long parentId = createdDeptMap.get(user.getDept_grp_code3()); - if (parentId != null) { - createDeptIfNotExists(createdDeptMap, existingDeptMap, sysDeptEntities, - user.getDept_grp_code4(), user.getDept_grp_name4(), - parentId, tenantId); - } - } - - // 记录用户当前部门(dept_code)与部门主键ID的映射 - // dept_code可能是三级或四级部门编码 - if (StrUtil.isNotBlank(user.getDept_code())) { - Long currentDeptId = createdDeptMap.get(user.getDept_code()); - if (currentDeptId != null) { - deptIdAndDeptIds.put(user.getDept_code(), currentDeptId); + // 记录用户所属部门编码与部门主键ID的映射 + Long deptId = createdDeptMap.get(deptCode); + if (deptId != null) { + deptIdAndDeptIds.put(deptCode, deptId); } } } diff --git a/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/impl/SysStaffServiceImpl.java b/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/impl/SysStaffServiceImpl.java index cffd303..9139de9 100644 --- a/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/impl/SysStaffServiceImpl.java +++ b/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/impl/SysStaffServiceImpl.java @@ -330,6 +330,30 @@ public class SysStaffServiceImpl extends ServiceImpl findUserInfoByTenantId(Long tenantId) { + if (Objects.isNull(tenantId)) { + throw new HoneycomException(ErrorType.PARAM_ERROR.getCode()); + } + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysStaffEntity::getTenantId, tenantId); + List list = this.list(queryWrapper); + if (CollectionUtils.isNotEmpty(list)) { + List result = list.stream().map(SysStaffDetailVO::new).toList(); + List userIds = result.stream().map(SysStaffDetailVO::getUserId).distinct().toList(); + Map userMap = this.getMapStaffUserInfo(userIds); + + for (SysStaffDetailVO sysStaffDetailVO : result) { + if (userMap.containsKey(sysStaffDetailVO.getUserId())) { + sysStaffDetailVO.setUserInfo(userMap.get(sysStaffDetailVO.getUserId())); + } + } + return result; + } + return new ArrayList<>(); + } + @Override public Long countByTenantIds(List tenantIds) { if (CollectionUtils.isEmpty(tenantIds)) { diff --git a/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/impl/SysTKMoldServiceImpl.java b/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/impl/SysTKMoldServiceImpl.java index 12366f3..557c29a 100644 --- a/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/impl/SysTKMoldServiceImpl.java +++ b/honeycom-tenant/honeycom-tenant-biz/src/main/java/com/honeycombis/honeycom/tenant/service/impl/SysTKMoldServiceImpl.java @@ -10,6 +10,7 @@ import com.honeycombis.honeycom.common.core.constant.CommonConstants; import com.honeycombis.honeycom.common.core.constant.SecurityConstants; import com.honeycombis.honeycom.common.core.exception.HoneycomException; import com.honeycombis.honeycom.common.core.util.R; +import com.honeycombis.honeycom.common.data.tenant.TenantContextHolder; import com.honeycombis.honeycom.tenant.constants.TenantConstants; import com.honeycombis.honeycom.tenant.entity.*; import com.honeycombis.honeycom.tenant.enums.HrTableEnum; @@ -392,27 +393,14 @@ public class SysTKMoldServiceImpl implements SysTKMoldService { log.info("新增用户{}",tenantUserDtos.size()); // 生成部门信息 按工种分组 挂租户下面 - // 获取去重后的一级部门列表 -// List deptList = getDistinctDeptByDeptCode1(userList); + // 获取去重后的部门列表(使用 dept_grp_code1-dept_grp_code2 格式) Map deptIdAndDeptIds = new HashMap<>(); - // 收集所有需要的部门编码 + // 收集所有需要的部门编码(使用 code1-code2 格式) Set allDeptCodes = new HashSet<>(); for (LyricUserDto user : userList) { - if (StrUtil.isNotBlank(user.getDept_grp_code1())) { - allDeptCodes.add(user.getDept_grp_code1()); - } - if (StrUtil.isNotBlank(user.getDept_grp_code2())) { - allDeptCodes.add(user.getDept_grp_code2()); - } - if (StrUtil.isNotBlank(user.getDept_grp_code3())) { - allDeptCodes.add(user.getDept_grp_code3()); - } - if (StrUtil.isNotBlank(user.getDept_grp_code4())) { - allDeptCodes.add(user.getDept_grp_code4()); - } - if (StrUtil.isNotBlank(user.getDept_code())) { - allDeptCodes.add(user.getDept_code()); + if (StrUtil.isNotBlank(user.getDept_grp_code1()) && StrUtil.isNotBlank(user.getDept_grp_code2())) { + allDeptCodes.add(user.getDept_grp_code1() + "-" + user.getDept_grp_code2()); } } @@ -494,9 +482,12 @@ public class SysTKMoldServiceImpl implements SysTKMoldService { sysStaffEntity.setStaffCode(TenantConstants.STAFF_CODE_PREFIX + staffId); sysStaffEntity.setCreateBy(0L); sysStaffEntity.setUpdateBy(0L); -// deptMap.put(staffId, deptIdAndDeptIds.get(emp.getDept_grp_code1())); - // 使用用户当前部门编码(dept_code)获取部门ID - deptMap.put(staffId, deptIdAndDeptIds.get(emp.getDept_code())); + // 使用 dept_grp_code1-dept_grp_code2 格式获取部门ID + String userDeptCode = null; + if (StrUtil.isNotBlank(emp.getDept_grp_code1()) && StrUtil.isNotBlank(emp.getDept_grp_code2())) { + userDeptCode = emp.getDept_grp_code1() + "-" + emp.getDept_grp_code2(); + } + deptMap.put(staffId, deptIdAndDeptIds.get(userDeptCode)); postMap.put(staffId, jobIdAndPostIds.get(emp.getJob_code())); sysStaffEntities.add(sysStaffEntity); SysStaffRoleEntity sysStaffRoleEntity = new SysStaffRoleEntity(); @@ -677,6 +668,9 @@ public class SysTKMoldServiceImpl implements SysTKMoldService { Long tenantId = 2001184963854700545L; // Long tenantId = 1979091834410176514L; + // 设置租户上下文,确保多租户插件使用正确的租户ID + TenantContextHolder.setTenantId(tenantId); + if (CollUtil.isEmpty(userList)) { log.info("用户数据为空,跳过部门重新同步"); return; @@ -685,7 +679,7 @@ public class SysTKMoldServiceImpl implements SysTKMoldService { log.info("开始重新同步部门数据,租户ID: {}, 用户数量: {}", tenantId, userList.size()); // 1. 查询该租户下所有员工,构建 username(psn_code) -> staffId 的映射 - List staffList = sysStaffService.findByTenantId(tenantId); + List staffList = sysStaffService.findUserInfoByTenantId(tenantId); if (CollUtil.isEmpty(staffList)) { log.warn("租户 {} 下没有找到员工数据", tenantId); return; @@ -728,7 +722,11 @@ public class SysTKMoldServiceImpl implements SysTKMoldService { for (LyricUserDto user : userList) { String psnCode = user.getPsn_code(); - String deptCode = user.getDept_code(); + // 使用 dept_grp_code1-dept_grp_code2 格式获取部门编码 + String deptCode = null; + if (StrUtil.isNotBlank(user.getDept_grp_code1()) && StrUtil.isNotBlank(user.getDept_grp_code2())) { + deptCode = user.getDept_grp_code1() + "-" + user.getDept_grp_code2(); + } if (StrUtil.isBlank(psnCode) || StrUtil.isBlank(deptCode)) { continue;