From 38048f94e093d56a9621b6f3f3b8fff500250391 Mon Sep 17 00:00:00 2001 From: zhuxinru Date: Wed, 28 Jan 2026 20:31:05 +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=E5=B2=97=E4=BD=8D=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../honeycom/spdm/dto/LyricUserDto.java | 4 ++ .../tenant/vo/lyric/LyricUserDto.java | 4 ++ .../service/converter/TKMoldHrConverter.java | 30 +++++++++++ .../service/impl/SysTKMoldServiceImpl.java | 54 ++++++++++++++++--- .../user/feign/HoneycomUserServiceFeign.java | 3 ++ .../user/controller/SysUserController.java | 7 +++ .../honeycom/user/service/SysUserService.java | 3 ++ .../user/service/impl/SysUserServiceImpl.java | 17 ++++++ 8 files changed, 114 insertions(+), 8 deletions(-) diff --git a/honeycom-spdm/src/main/java/com/honeycombis/honeycom/spdm/dto/LyricUserDto.java b/honeycom-spdm/src/main/java/com/honeycombis/honeycom/spdm/dto/LyricUserDto.java index 843818e..34b90b1 100644 --- a/honeycom-spdm/src/main/java/com/honeycombis/honeycom/spdm/dto/LyricUserDto.java +++ b/honeycom-spdm/src/main/java/com/honeycombis/honeycom/spdm/dto/LyricUserDto.java @@ -44,6 +44,10 @@ public class LyricUserDto { * 工种名称 */ private String work_type_name; + /** + * 岗位编码 + */ + private String job_code; /** * 岗位名称 */ diff --git a/honeycom-tenant/honeycom-tenant-api/src/main/java/com/honeycombis/honeycom/tenant/vo/lyric/LyricUserDto.java b/honeycom-tenant/honeycom-tenant-api/src/main/java/com/honeycombis/honeycom/tenant/vo/lyric/LyricUserDto.java index 977b6a8..976b31c 100644 --- a/honeycom-tenant/honeycom-tenant-api/src/main/java/com/honeycombis/honeycom/tenant/vo/lyric/LyricUserDto.java +++ b/honeycom-tenant/honeycom-tenant-api/src/main/java/com/honeycombis/honeycom/tenant/vo/lyric/LyricUserDto.java @@ -44,6 +44,10 @@ public class LyricUserDto { * 工种名称 */ private String work_type_name; + /** + * 岗位编码 + */ + private String job_code; /** * 岗位名称 */ 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 25be802..d6a4ee4 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 @@ -273,6 +273,25 @@ public class TKMoldHrConverter { return sysPostEntities; } + public List lyricJobToPost(List jobs, Map jobIdAndPostIds,Long tenantId) { + List sysPostEntities = new ArrayList<>(jobs.size()); + jobs.forEach(job->{ + SysPostEntity sysPostEntity = new SysPostEntity(); + sysPostEntity.setPostCode(job.getJob_code()); + sysPostEntity.setPostName(job.getJob_name()); + + long id = IdWorker.getId(sysPostEntity); + sysPostEntity.setPostId(id); + sysPostEntity.setTenantId(tenantId); + sysPostEntity.setCreateBy(0L); + sysPostEntity.setUpdateBy(0L); + sysPostEntity.setSortOrder(0); + jobIdAndPostIds.put(job.getJob_code(),id); + sysPostEntities.add(sysPostEntity); + }); + return sysPostEntities; + } + /** * 返回单个岗位 * @param job @@ -345,4 +364,15 @@ public class TKMoldHrConverter { return sysStaffDeptEntities; } + public List convertStaffPost(Map postDept){ + List sysStaffDeptEntities = new ArrayList<>(); + postDept.forEach((staffId,postId) -> { + SysStaffPostEntity sysStaffPostEntity = new SysStaffPostEntity(); + sysStaffPostEntity.setStaffId(staffId); + sysStaffPostEntity.setPostId(postId); + sysStaffDeptEntities.add(sysStaffPostEntity); + }); + return sysStaffDeptEntities; + } + } 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 b2735f7..13f4a24 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 @@ -31,10 +31,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -375,6 +372,9 @@ public class SysTKMoldServiceImpl implements SysTKMoldService { // R> userListR = remoteSpdmService.queryUserList(workType); // List userList = userListR.getData(); if (!userList.isEmpty()) { + // 筛选新用户 + userList = filerNewUserList(userList); + log.info("开始同步,租户{}",tenantId); StringBuilder message = new StringBuilder("全量同步:"); @@ -401,11 +401,19 @@ public class SysTKMoldServiceImpl implements SysTKMoldService { message.append(String.format("新增部门%s;",sysDeptEntities.size())); log.info("新增部门{}",sysDeptEntities.size()); + //生成岗位信息 + List jobList = getDistinctJobByJobCode(userList); + Map jobIdAndPostIds = new HashMap<>(); + List sysPostEntities = tkMoldHrConverter.lyricJobToPost(jobList, jobIdAndPostIds, tenantId); + sysPostService.saveBatch(sysPostEntities); + message.append(String.format("新增职位%s;",sysPostEntities.size())); + log.info("新增职位{}",sysPostEntities.size()); + //生成员工信息 List sysStaffEntities = new ArrayList<>(userList.size()); // cid部门id和员工id映射 Map deptMap = new HashMap<>(); - Map postMap = new HashMap<>(); + Map postMap = new HashMap<>(); List staffRoleList = new ArrayList<>(); userList.forEach(emp -> { SysStaffEntity sysStaffEntity = new SysStaffEntity(); @@ -421,7 +429,7 @@ public class SysTKMoldServiceImpl implements SysTKMoldService { sysStaffEntity.setUpdateBy(0L); // deptMap.put(staffId, deptIdAndDeptIds.get(emp.getDept_grp_code1())); deptMap.put(staffId, deptIdAndDeptIds.get(workType)); -// postMap.put(emp.getJobId(),staffId); + postMap.put(staffId, jobIdAndPostIds.get(emp.getJob_code())); sysStaffEntities.add(sysStaffEntity); SysStaffRoleEntity sysStaffRoleEntity = new SysStaffRoleEntity(); sysStaffRoleEntity.setStaffId(staffId); @@ -432,14 +440,28 @@ public class SysTKMoldServiceImpl implements SysTKMoldService { sysStaffService.saveBatch(sysStaffEntities); //处理员工关联关系 List sysStaffDeptEntities = tkMoldHrConverter.convertStaffDept(deptMap); -// List sysStaffPostEntities = tkMoldHrConverter.converterStaffPost(postMap, jobIdAndPostIds); + List sysStaffPostEntities = tkMoldHrConverter.convertStaffPost(postMap); sysStaffDeptService.saveBatch(sysStaffDeptEntities); -// sysStaffPostService.saveBatch(sysStaffPostEntities); + sysStaffPostService.saveBatch(sysStaffPostEntities); sysStaffRoleService.saveBatch(staffRoleList); } } } + private List filerNewUserList(List allUserList) { + // 1. 从Lyric系统获取所有员工工号数据 + List allJobNumbers = allUserList.stream().map(LyricUserDto::getPsn_code) + .distinct().collect(Collectors.toList()); + + // 2. 查询已存在的工号 + Set existingJobNumbers = honeycomUserServiceFeign.getUserListByUserNamesForSpdm(allJobNumbers).getData(); + + // 3. 筛选新员工 + return allUserList.stream() + .filter(dto -> !existingJobNumbers.contains(dto.getPsn_code())) + .collect(Collectors.toList()); + } + private List getDistinctDeptByDeptCode1(List originalList) { // 核心:用HashMap底层实现去重,key是dept_grp_code1,value是DTO Map deptMap = originalList.stream() @@ -459,5 +481,21 @@ public class SysTKMoldServiceImpl implements SysTKMoldService { // 转成列表(HashMap.values()遍历效率极高) return new ArrayList<>(deptMap.values()); } + + private List getDistinctJobByJobCode(List originalList) { + Map jobMap = originalList.stream() + .filter(dto -> dto.getJob_code() != null && !dto.getJob_code().isEmpty()) + .collect(Collectors.toMap( + LyricUserDto::getJob_code, + dto -> { + LyricUserDto newDto = new LyricUserDto(); + newDto.setDept_grp_code1(dto.getJob_code()); + newDto.setDept_grp_name1(dto.getJob_name()); + return newDto; + }, + (existing, replacement) -> existing // 重复时保留第一个,避免覆盖 + )); + return new ArrayList<>(jobMap.values()); + } } diff --git a/honeycom-user/honeycom-user-api/src/main/java/com/honeycombis/honeycom/user/feign/HoneycomUserServiceFeign.java b/honeycom-user/honeycom-user-api/src/main/java/com/honeycombis/honeycom/user/feign/HoneycomUserServiceFeign.java index 7255bce..bd7b75a 100644 --- a/honeycom-user/honeycom-user-api/src/main/java/com/honeycombis/honeycom/user/feign/HoneycomUserServiceFeign.java +++ b/honeycom-user/honeycom-user-api/src/main/java/com/honeycombis/honeycom/user/feign/HoneycomUserServiceFeign.java @@ -16,6 +16,7 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Set; @FeignClient(contextId = "honeycomUserServiceFeign", value = ServiceNameConstants.USER_SERVICE, configuration = FeignConfig.class) public interface HoneycomUserServiceFeign { @@ -121,4 +122,6 @@ public interface HoneycomUserServiceFeign { @PostMapping("/user/tenant/getUserByHrEmpId") R getUserByHrEmpId(@RequestParam Integer hrEmpId, @RequestHeader(SecurityConstants.FROM) String from); + @GetMapping("/user/getUserListByUserNamesForSpdm") + R> getUserListByUserNamesForSpdm(@RequestParam("userNames") List userNames); } diff --git a/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/controller/SysUserController.java b/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/controller/SysUserController.java index 1c26622..a65904a 100644 --- a/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/controller/SysUserController.java +++ b/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/controller/SysUserController.java @@ -297,6 +297,13 @@ public class SysUserController { return R.ok(sysUserService.findByUsernameList(userNames)); } + @Inner(false) + @Operation(summary = "通过用户名(工号)集合查询用户信息" , description = "通过用户名(工号)集合查询用户信息" ) + @GetMapping("/getUserListByUserNamesForSpdm") + public R> getUserListByUserNamesForSpdm(@RequestParam("userNames") List userNames) { + return R.ok(sysUserService.getUserListByUserNamesForSpdm(userNames)); + } + @Inner @Operation(summary = "通过电话号码集合查询用户信息" , description = "通过电话号码集合查询用户信息" ) @GetMapping("/retrieve/phone-list") diff --git a/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/service/SysUserService.java b/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/service/SysUserService.java index d5a1e74..ffe39b0 100644 --- a/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/service/SysUserService.java +++ b/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/service/SysUserService.java @@ -13,6 +13,7 @@ import com.honeycombis.honeycom.user.vo.SysUserPageQueryVO; import com.honeycombis.honeycom.user.vo.SysUserVO; import java.util.List; +import java.util.Set; /** * @author luobin@honeycombis.com @@ -39,6 +40,8 @@ public interface SysUserService extends IService { List findByUsernameList(List usernameList); + Set getUserListByUserNamesForSpdm(List usernameList); + List findByPhoneList(List phoneList); List findByIds(List ids); diff --git a/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/service/impl/SysUserServiceImpl.java b/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/service/impl/SysUserServiceImpl.java index 18eb75b..108a9ad 100644 --- a/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/service/impl/SysUserServiceImpl.java +++ b/honeycom-user/honeycom-user-biz/src/main/java/com/honeycombis/honeycom/user/service/impl/SysUserServiceImpl.java @@ -333,6 +333,23 @@ public class SysUserServiceImpl extends ServiceImpl getUserListByUserNamesForSpdm(List usernameList) { + if (Objects.isNull(usernameList)) { + throw new HoneycomException(ErrorType.PARAM_ERROR.getCode()); + } else if (CollectionUtils.isEmpty(usernameList)) { + return new HashSet<>(); + } + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(SysUserEntity::getUsername) + .in(SysUserEntity::getUsername, usernameList); + List existing = this.list(queryWrapper); + return existing.stream() + .map(SysUserEntity::getUsername) + .collect(Collectors.toSet()); + } + @Override public List findByPhoneList(List phoneList) { if (CollectionUtils.isEmpty(phoneList)) {