From dc28c6b1410284f17270743533bc899aac8b9079 Mon Sep 17 00:00:00 2001 From: zhanghongbo Date: Wed, 15 Jan 2025 16:05:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-3488):=20=E6=8F=90=E4=BA=A4=E5=B0=8F?= =?UTF-8?q?=E7=BB=84=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../req/WorkerProfessionTagQueryPageReq.java | 7 +- .../resp/ProjectWorkerProfessionResp.java | 6 ++ .../WorkerProfessionTagRepository.java | 4 +- .../impl/OrgProjectGroupServiceImpl.java | 92 +++++++++++-------- .../OrgProjectWorkerProfessionService.java | 7 ++ ...OrgProjectWorkerProfessionServiceImpl.java | 7 ++ 6 files changed, 79 insertions(+), 44 deletions(-) diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/req/WorkerProfessionTagQueryPageReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/req/WorkerProfessionTagQueryPageReq.java index 958c259..5e88690 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/req/WorkerProfessionTagQueryPageReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/req/WorkerProfessionTagQueryPageReq.java @@ -10,10 +10,7 @@ import lombok.experimental.SuperBuilder; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Set; +import java.util.*; /** * @author zhanghongbo @@ -34,6 +31,8 @@ public class WorkerProfessionTagQueryPageReq extends PageReqV2 { private Set professionIds; private Boolean needSkillTags; private Set orgNodeIds; + private Collection projectWorkerIds; + private Long workspaceId; public void check() { if (ObjectUtil.isAllEmpty(orgNodeId4ResolvedTeamOrgNodeId, personIds, orgNodeIds)) { diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/resp/ProjectWorkerProfessionResp.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/resp/ProjectWorkerProfessionResp.java index a762e82..8a28f44 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/resp/ProjectWorkerProfessionResp.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/resp/ProjectWorkerProfessionResp.java @@ -53,6 +53,12 @@ public class ProjectWorkerProfessionResp implements Serializable { * 数据有效性标记 */ private Integer valid; + + /** + * 项目工人id + */ + private Long projectWorkerId; + /** * 技能标签列表 */ diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/workerprofession/repository/WorkerProfessionTagRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/workerprofession/repository/WorkerProfessionTagRepository.java index 56e1136..53cca1b 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/workerprofession/repository/WorkerProfessionTagRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/workerprofession/repository/WorkerProfessionTagRepository.java @@ -8,6 +8,8 @@ import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionTag; import lombok.*; import lombok.experimental.SuperBuilder; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Set; @@ -38,7 +40,7 @@ public interface WorkerProfessionTagRepository { * 项目内工人ids */ @CriteriaField(field = "projectWorkerId", operator = Operator.IN) - private List projectWorkerIds; + private Collection projectWorkerIds; /** * PLAT_TEAM:平台班组,PROJECT_TEAM:项目内班组 diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/service/impl/OrgProjectGroupServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/service/impl/OrgProjectGroupServiceImpl.java index 0440758..612d7ff 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/service/impl/OrgProjectGroupServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/group/service/impl/OrgProjectGroupServiceImpl.java @@ -16,18 +16,23 @@ import cn.axzo.orgmanax.dto.project.group.enums.ProjectGroupStatusEnum; import cn.axzo.orgmanax.dto.project.group.resp.NoleaderProjectGroupWorkerRes; import cn.axzo.orgmanax.dto.project.group.resp.ProjectGroupListResp; import cn.axzo.orgmanax.dto.project.group.resp.ProjectWorkerSkillTagRes; +import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagQueryPageReq; +import cn.axzo.orgmanax.dto.workerprofession.resp.ProjectWorkerProfessionResp; +import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionSkillTypeEnum; import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionSkillTagRepository; import cn.axzo.orgmanax.server.node.service.NodeService; import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService; import cn.axzo.orgmanax.server.project.group.service.OrgProjectGroupService; import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionService; import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionSkillService; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.google.common.collect.Sets; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Results; import org.springframework.stereotype.Service; import java.util.*; @@ -77,6 +82,7 @@ public class OrgProjectGroupServiceImpl implements OrgProjectGroupService { } if (isReturnWorker) { + //获取工人信息列表 for (ProjectGroupListResp.ProjectGroupInfo projectGroupInfo : projectGroupInfos) { List nodeUserDTOS = nodeUserService.list(ListNodeUserReq.builder() .projectGroupWorkerStatus(ProjectGroupWorkerStatusEnum.VALID.getValue()) @@ -90,48 +96,56 @@ public class OrgProjectGroupServiceImpl implements OrgProjectGroupService { continue; } - //TODO -// List projectWorkerIdList = nodeUserDTOS.stream().map(nodeUserDTO -> NodeUserProfile.resolveProjectWorkerId(nodeUserDTO)).collect(Collectors.toList()); -// //获取工种 -// orgProjectWorkerProfessionService.listValid() -// -// //获取技能标签 -// List skillTagResps = orgProjectWorkerProfessionSkillService.list(WorkerProfessionSkillTagRepository.PageReq.builder() -// .workspaceId(projectGroupInfo.getWorkspaceId()) -// .projectWorkerIds(projectWorkerIdList) -// .build()); -// Map> workerSkillTagMap = -// skillTagResps.stream().collect(Collectors.groupingBy(WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp::getProjectWorkerId)); -// List groupWorkerlist = new ArrayList<>(); -// for (NodeUserDTO nodeUserDTO : nodeUserDTOS) { -// NoleaderProjectGroupWorkerRes workerRes = new NoleaderProjectGroupWorkerRes(); -// -// PersonProfileBriefDTO personProfile = nodeUserDTO.getPersonProfile(); -// workerRes.setFaceUrl(personProfile.getAvatarUrl()); -// workerRes.setPhone(personProfile.getPhone()); -// workerRes.setName(personProfile.getRealName()); -// workerRes.setIdentityId(nodeUserDTO.getIdentityId()); -// workerRes.setProjectWorkerId(NodeUserProfile.resolveProjectWorkerId(nodeUserDTO)); -// workerRes.setProfessionList(BeanConvertUtils.copyList(oneWideByParam.getProfessionList(), -// NoleaderProjectGroupWorkerRes.ProjectGroupWorkerProfession.class)); -// workerRes.setProfessionCategory(oneWideByParam.getWorkerProfessionCategory()); -// List skillTagList = workerSkillTagMap -// .getOrDefault(worker.getProjectWorkerId(), null); -// log.info("工人{}技能标签:{}", oneWideByParam.getWorkerName(), JSON.toJSONString(skillTagList)); -// if (CollectionUtil.isNotEmpty(skillTagList)) { -// workerRes.setSkillTagList(BeanConvertUtils.copyList(skillTagList, -// ProjectWorkerSkillTagRes.class, (s, t) -> { -// t.setId(s.getSkillTagId()); -// t.setName(s.getSkillTagName()); -// })); -// } -// groupWorkerlist.add(workerRes); -// } + List projectWorkerIdList = nodeUserDTOS.stream().map(nodeUserDTO -> NodeUserProfile.resolveProjectWorkerId(nodeUserDTO)).collect(Collectors.toList()); + //获取工种 + List professionResps = orgProjectWorkerProfessionService.list(WorkerProfessionTagQueryPageReq.builder() + .projectWorkerIds(projectWorkerIdList) + .workspaceId(projectGroupInfo.getWorkspaceId()) + .build()); + Map> professionTagMap = professionResps.stream().collect(Collectors.groupingBy(ProjectWorkerProfessionResp::getProjectWorkerId)); + //获取技能标签 + List skillTagResps = orgProjectWorkerProfessionSkillService.list(WorkerProfessionSkillTagRepository.PageReq.builder() + .workspaceId(projectGroupInfo.getWorkspaceId()) + .projectWorkerIds(projectWorkerIdList) + .build()); + Map> workerSkillTagMap = + skillTagResps.stream().collect(Collectors.groupingBy(WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp::getProjectWorkerId)); + + //封装 + List groupWorkerlist = new ArrayList<>(); + for (NodeUserDTO nodeUserDTO : nodeUserDTOS) { + NoleaderProjectGroupWorkerRes workerRes = new NoleaderProjectGroupWorkerRes(); + + PersonProfileBriefDTO personProfile = nodeUserDTO.getPersonProfile(); + workerRes.setFaceUrl(personProfile.getAvatarUrl()); + workerRes.setPhone(personProfile.getPhone()); + workerRes.setName(personProfile.getRealName()); + workerRes.setIdentityId(nodeUserDTO.getIdentityId()); + Long projectWorkerId = NodeUserProfile.resolveProjectWorkerId(nodeUserDTO); + workerRes.setProjectWorkerId(projectWorkerId); + List projectWorkerProfessionResps = Optional.ofNullable(professionTagMap.get(projectWorkerId)).orElse(new ArrayList<>()); + workerRes.setProfessionList(BeanUtil.copyToList(projectWorkerProfessionResps, NoleaderProjectGroupWorkerRes.ProjectGroupWorkerProfession.class)); + // 技工 or 普工, 经讨论,取第一个即可 + workerRes.setProfessionCategory(DataCollectionSkillTypeEnum.getType(projectWorkerProfessionResps.get(0).getType()).getDesc()); + List skillTags = workerSkillTagMap.get(projectWorkerId); + log.info("工人{}技能标签:{}", personProfile.getRealName(), JSON.toJSONString(skillTags)); + if (CollectionUtil.isNotEmpty(skillTags)) { + List skillTagResList = skillTags.stream().map(skillTag -> { + ProjectWorkerSkillTagRes skillTagRes = new ProjectWorkerSkillTagRes(); + skillTagRes.setId(0L); //历史代码skillTagId全是0L + skillTagRes.setName(skillTag.getSkillTagName()); + return skillTagRes; + }).collect(Collectors.toList()); + workerRes.setSkillTagList(skillTagResList); + } + groupWorkerlist.add(workerRes); + } + projectGroupInfo.setProjectGroupWorkerList(groupWorkerlist); } } - - return null; + log.info("getNoLeaderGroupList result : {}", JSON.toJSONString(res)); + return res; } private List convert(List orgNodeDTOS, Long workspaceId) { diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/OrgProjectWorkerProfessionService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/OrgProjectWorkerProfessionService.java index 50bf3af..12ae1b4 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/OrgProjectWorkerProfessionService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/OrgProjectWorkerProfessionService.java @@ -44,6 +44,13 @@ public interface OrgProjectWorkerProfessionService { */ PageResp page(WorkerProfessionTagQueryPageReq req); + /** + * 查询工种信息 + * @param req + * @return + */ + List list(WorkerProfessionTagQueryPageReq req); + /** * 获取历史工种 * @param req diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionServiceImpl.java index 19d5d20..dcda6fe 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionServiceImpl.java @@ -318,6 +318,8 @@ public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerPr .scene(req.getScene().name()) .professionIds(req.getProfessionIds()) .personIds(req.getPersonIds()) + .projectWorkerIds(req.getProjectWorkerIds()) + .workspaceId(req.getWorkspaceId()) .build(); PageResp page = workerProfessionTagRepository.page(pageReq); if (page == null || ObjectUtil.isEmpty(page)) { @@ -336,6 +338,11 @@ public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerPr .build(); } + @Override + public List list(WorkerProfessionTagQueryPageReq req) { + return page(req).getData(); + } + @Override public List listHistory(WorkerProfessionHistoryRepository.PageReq req) { return workerProfessionHistoryRepository.list(req);