From e166e13f90a3b27208dfa02160a586ea5f990e38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E6=95=8F?= Date: Wed, 8 Jan 2025 17:17:54 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat(server):=20=E8=B0=83=E6=95=B4=E6=97=A5?= =?UTF-8?q?=E5=BF=97=EF=BC=8C=E6=8E=A5=E5=85=A5axzo-logger-spring-boot-sta?= =?UTF-8?q?rter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- orgmanax-server/pom.xml | 5 + .../src/main/resources/logback-spring.xml | 112 +----------------- 2 files changed, 11 insertions(+), 106 deletions(-) diff --git a/orgmanax-server/pom.xml b/orgmanax-server/pom.xml index b9a05fb..46c00a7 100644 --- a/orgmanax-server/pom.xml +++ b/orgmanax-server/pom.xml @@ -35,6 +35,11 @@ orgmanax-common ${project.version} + + cn.axzo.framework + axzo-logger-spring-boot-starter + 2.0.0-SNAPSHOT + com.alibaba.cloud diff --git a/orgmanax-starter/src/main/resources/logback-spring.xml b/orgmanax-starter/src/main/resources/logback-spring.xml index c0138a3..7a01894 100644 --- a/orgmanax-starter/src/main/resources/logback-spring.xml +++ b/orgmanax-starter/src/main/resources/logback-spring.xml @@ -1,109 +1,9 @@ - - - - - - - - - - - - - - - - - - ${appName} - - - - - ${PATTERN_CONSOLE} - UTF-8 - - - - - - - ${PATTERN_FILE} - - - - ${LOG_PATH}/${LOG_FILE} - - - ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_PATH}/${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} - - ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} - - ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} - - ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-1GB} - - ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} - - - - - - - 0 - - 256 - - - - - - - - - @timestamp - yyyy-MM-dd'T'HH:mm:ss.SSSx - GMT+8 - - - - { - "app":"${appName}", - "level":"%level", - "traceId":"%X{ctxLogId}", - "thread":"%thread", - "class":"%logger{40}", - "message":"%replace(%message){'^(.{3000}).*$', '$1'}", - "error_level":"%X{errorLevel}", - "error_type":"%X{errorType}", - "stack_trace":"%exception{20}" - } - - - - - - - - - - + + + + + - - - - - - - - - - - - - - + \ No newline at end of file From 07eaccf53d8c965acec146de04ed329e5ebf101b Mon Sep 17 00:00:00 2001 From: zhanghongbo Date: Thu, 9 Jan 2025 09:52:04 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat(REQ-3488):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9C=AA=E5=88=86=E7=BB=84=E5=B7=A5=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../invite/enums/WorkerInviteStatusEnum.java | 34 +++ .../group/enums/ProjectGroupTypeEnum.java | 21 ++ .../orgmanax/dto/node/req/ListNodeReq.java | 7 + .../dto/nodeuser/dto/NodeUserDTO.java | 27 +++ .../enums/ProjectGroupWorkerStatusEnum.java | 23 +++ .../dto/nodeuser/req/ListNodeUserReq.java | 8 + .../dto/workerprofession/dto/SkillTagDTO.java | 5 + .../invite/dao/ProjectWorkerInviteDao.java | 16 ++ .../invite/entity/ProjectWorkerInvite.java | 163 +++++++++++++++ .../mapper/ProjectWorkerInviteMapper.java | 19 ++ .../ProjectWorkerInviteRepository.java | 8 + .../ProjectWorkerInviteRepositoryImpl.java | 16 ++ .../mapper/ProjectWorkerInviteMapper.xml | 33 +++ .../service/ProjectWorkerInviteService.java | 21 ++ .../impl/ProjectWorkerInviteServiceImpl.java | 44 ++++ .../OrgProjectWorkerController.java | 7 +- .../service/OrgProjectWorkerService.java | 2 +- .../impl/OrgProjectWorkerServiceImpl.java | 193 ++++++++++++++++++ .../impl/OrgProjectWorkerServiceImpl.java | 68 ------ .../OrgProjectWorkerProfessionService.java | 8 + ...rgProjectWorkerProfessionSkillService.java | 8 + ...OrgProjectWorkerProfessionServiceImpl.java | 132 ++---------- ...ojectWorkerProfessionSkillServiceImpl.java | 137 ++++++++++++- 23 files changed, 813 insertions(+), 187 deletions(-) create mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/invite/enums/WorkerInviteStatusEnum.java create mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/project/group/enums/ProjectGroupTypeEnum.java create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/enums/ProjectGroupWorkerStatusEnum.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/dao/ProjectWorkerInviteDao.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/entity/ProjectWorkerInvite.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/mapper/ProjectWorkerInviteMapper.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/ProjectWorkerInviteRepository.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/impl/ProjectWorkerInviteRepositoryImpl.java create mode 100644 orgmanax-infra/src/main/resources/mapper/ProjectWorkerInviteMapper.xml create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/service/ProjectWorkerInviteService.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/service/impl/ProjectWorkerInviteServiceImpl.java rename orgmanax-server/src/main/java/cn/axzo/orgmanax/server/{projectworker => project/worker}/controller/OrgProjectWorkerController.java (84%) rename orgmanax-server/src/main/java/cn/axzo/orgmanax/server/{projectworker => project/worker}/service/OrgProjectWorkerService.java (87%) create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java delete mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/projectworker/service/impl/OrgProjectWorkerServiceImpl.java diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/invite/enums/WorkerInviteStatusEnum.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/invite/enums/WorkerInviteStatusEnum.java new file mode 100644 index 0000000..e195fc7 --- /dev/null +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/invite/enums/WorkerInviteStatusEnum.java @@ -0,0 +1,34 @@ +package cn.axzo.orgmanax.api.invite.enums; + +import com.google.common.collect.Lists; +import lombok.Getter; + +import java.util.List; + + +@Getter +public enum WorkerInviteStatusEnum { + + WAIT_LEADER_APPROVE(1, "待班组审批"), + WAIT_LABOUR_APPROVE(2, "待劳务审批"), + PASS(3, "通过"), + TEAM_OWNER_REFUSE(4, "班组长拒绝"), + MANAGER_REFUSE(5, "从业人员拒绝"), + SYSTEM_END(6, "系统终止"), + CANCEL(7, "撤销"), + ; + + private Integer value; + + private String desc; + + WorkerInviteStatusEnum(int value, String desc) { + this.value = value; + this.desc = desc; + } + + public static List active() { + return Lists.newArrayList(WAIT_LEADER_APPROVE.value, WAIT_LABOUR_APPROVE.value); + } + +} \ No newline at end of file diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/project/group/enums/ProjectGroupTypeEnum.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/project/group/enums/ProjectGroupTypeEnum.java new file mode 100644 index 0000000..b576dd2 --- /dev/null +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/project/group/enums/ProjectGroupTypeEnum.java @@ -0,0 +1,21 @@ +package cn.axzo.orgmanax.api.project.group.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.checkerframework.checker.units.qual.A; + +/** + * @author weXueFeng + * @date 2022/10/20 15:12 + */ +@Getter +@AllArgsConstructor +public enum ProjectGroupTypeEnum { + DIRECTLY_UNDER(0, "直属小组"), + COOPERATION(1, "合作小组"), + ; + + Integer value; + String desc; + +} \ No newline at end of file diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java index 7af7baf..12a7226 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java @@ -147,4 +147,11 @@ public class ListNodeReq extends PageReqV2 { @Builder.Default private Set platTeamIds = Collections.emptySet(); + /** + * todo 未实现 + * 小组类型 + * @see cn.axzo.orgmanax.api.project.group.enums.ProjectGroupTypeEnum + */ + private Integer groupType; + } \ No newline at end of file diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java index 2842a05..cf78f6b 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java @@ -227,6 +227,10 @@ public class NodeUserDTO implements Serializable { return profile.getLong("projectWorkerId"); } + /** + * 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用 + * @return + */ public Long getProjectTeamId() { if (node == null || node.getNodeType() == null) { return null; @@ -244,4 +248,27 @@ public class NodeUserDTO implements Serializable { } return null; } + + /** + * 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用 + * @return + */ + public Long getPlatTeamId() { + if (node == null || node.getNodeType() == null) { + return null; + } + Integer nodeType = node.getNodeType(); + if (nodeType.equals(NodeTypeEnum.PROJECT_TEAM.getValue())) { + //项目班组 + NodeProfile.ProjectTeamProfile projectTeamProfile = node.resolveProfile(); + return Optional.ofNullable(projectTeamProfile).orElse(new NodeProfile.ProjectTeamProfile()).getPlatTeamId(); + } + if (nodeType.equals(NodeTypeEnum.PROJECT_GROUP.getValue())) { + //项目小组 + NodeProfile.ProjectGroupProfile projectGroupProfile = node.resolveProfile(); + return Optional.ofNullable(projectGroupProfile).orElse(new NodeProfile.ProjectGroupProfile()).getBelongPlatTeamId(); + } + //TODO 是否还有平台班组类型也有平台班组id?有需要自己下面继续实现 + return null; + } } diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/enums/ProjectGroupWorkerStatusEnum.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/enums/ProjectGroupWorkerStatusEnum.java new file mode 100644 index 0000000..ec8056d --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/enums/ProjectGroupWorkerStatusEnum.java @@ -0,0 +1,23 @@ +package cn.axzo.orgmanax.dto.nodeuser.enums; + +import lombok.Getter; + +/** + * @author wenXueFeng + * @date 2022/10/20 13:53 + */ +@Getter +public enum ProjectGroupWorkerStatusEnum { + VALID(0, "有效"), + NO_VALID(1, "无效"), + ; + + Integer value; + String desc; + + + ProjectGroupWorkerStatusEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } +} \ No newline at end of file diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/req/ListNodeUserReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/req/ListNodeUserReq.java index 4175e1d..f4fb133 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/req/ListNodeUserReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/req/ListNodeUserReq.java @@ -5,6 +5,7 @@ import cn.axzo.foundation.page.PageReqV2; import cn.axzo.orgmanax.dto.common.DistinctRule; import cn.axzo.orgmanax.dto.common.IdentityPair; import cn.axzo.orgmanax.dto.common.WorkspaceOuPair; +import cn.axzo.orgmanax.dto.nodeuser.enums.ProjectGroupWorkerStatusEnum; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -307,6 +308,13 @@ public class ListNodeUserReq extends PageReqV2 { */ private DistinctRule distinctRule; + /** + * todo 未实现 + * 项目小组工人状态 + * @see ProjectGroupWorkerStatusEnum + */ + private Integer projectGroupWorkerStatus; + // // 指定聚合信息 diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/dto/SkillTagDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/dto/SkillTagDTO.java index 0c58360..0e7e6d3 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/dto/SkillTagDTO.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/workerprofession/dto/SkillTagDTO.java @@ -33,6 +33,11 @@ public class SkillTagDTO { */ private Long professionId; + /** + * 项目工人id + */ + private Long projectWorkerId; + private List childSkillTags; private int level; diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/dao/ProjectWorkerInviteDao.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/dao/ProjectWorkerInviteDao.java new file mode 100644 index 0000000..4e305c7 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/dao/ProjectWorkerInviteDao.java @@ -0,0 +1,16 @@ +package cn.axzo.orgmanax.infra.dao.invite.dao; + +import cn.axzo.orgmanax.infra.dao.invite.entity.ProjectWorkerInvite; +import cn.axzo.orgmanax.infra.dao.invite.mapper.ProjectWorkerInviteMapper; +import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionHistory; +import cn.axzo.orgmanax.infra.dao.workerprofession.mapper.WorkerProfessionHistoryMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @author zhanghongbo + * @date 2025/1/8 + */ +@Service +public class ProjectWorkerInviteDao extends ServiceImpl { +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/entity/ProjectWorkerInvite.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/entity/ProjectWorkerInvite.java new file mode 100644 index 0000000..8bc4f6a --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/entity/ProjectWorkerInvite.java @@ -0,0 +1,163 @@ +package cn.axzo.orgmanax.infra.dao.invite.entity; + +import cn.axzo.trade.datasecurity.core.annotation.CryptField; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 项目内工人邀请 + *

+ * + * @author zxp_auto + * @since 2022-07-12 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName(value = "org_project_worker_invite", autoResultMap = true) +public class ProjectWorkerInvite { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 工作台ID + */ + @TableField("workspace_id") + private Long workspaceId; + + /** + * 总包ID + */ + @TableField("ent_id") + private Long entId; + + /** + * 项目内班组ID + */ + @TableField("project_team_id") + private Long projectTeamId; + + /** + * 项目内工人id + */ + @TableField("project_worker_id") + private Long projectWorkerId; + + /** + * 所属单位ID + */ + @TableField("organizational_unit_id") + private Long organizationalUnitId; + + /** + * 所属单位类型: 1:总包 4:专业分包 5:劳务分包 + */ + @TableField("organizational_unit_type") + private Integer organizationalUnitType; + + /** + * 工人ID + */ + @TableField("worker_identity_id") + private Long workerIdentityId; + + /** + * 状态:1、待班组审批  2、待劳务审批  3、通过 4、拒绝 + */ + @TableField("status") + private Integer status; + + /** + * 类型:1、班组长邀请 2、二维码邀请 3:派单 + */ + @TableField("source") + private Integer source; + /** + * 邀请人id + */ + @TableField("inviter_id") + private Long inviterId; + + /** + * 邀请人名称 + */ + @TableField("inviter_name") + private String inviterName; + + /** + * 是否删除 0:未删除 其他:已删除 + */ + @TableField("is_delete") + private Long isDelete; + + @TableField("create_at") + private Date createAt; + + @TableField("update_at") + private Date updateAt; + /** + * 工种类别 技工 普工 + */ + private String professionCategoryName; + /** + * 审批人的从业人员身份id + */ + @TableField("approver_identity_id") + private Long approverIdentityId; + + /** + * 班组长审批时间,REQ-598 + */ + @TableField("team_leader_audit_date") + private Date teamLeaderAuditDate; + + /** + * source = 4合作小组派单,记录甲方的班组id + */ + @TableField("belong_project_team_id") + private Long belongProjectTeamId; + + /** + * 工人名称 + */ + @TableField("worker_name") + private String workerName; + /** + * 工人电话号码 + */ + @TableField("worker_phone") + @CryptField + private String workerPhone; + + /** + * 工作流流程实例id + */ + @TableField("process_instance_id") + private String processInstanceId; + /** + * 邀请的工种 + */ + @TableField(value = "profession_ext", typeHandler = FastjsonTypeHandler.class) + private JSONObject professionExt; + + /** + * 扩展字段 + */ + @TableField(value = "extra", typeHandler = FastjsonTypeHandler.class) + private JSONObject extra; +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/mapper/ProjectWorkerInviteMapper.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/mapper/ProjectWorkerInviteMapper.java new file mode 100644 index 0000000..035ede0 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/mapper/ProjectWorkerInviteMapper.java @@ -0,0 +1,19 @@ +package cn.axzo.orgmanax.infra.dao.invite.mapper; + +import cn.axzo.orgmanax.infra.dao.invite.entity.ProjectWorkerInvite; +import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionHistory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author zhanghongbo + * @date 2025/1/8 + */ +@Mapper +public interface ProjectWorkerInviteMapper extends BaseMapper { + List workerInviteStatusInProjectTeam(@Param("projectTeamId") Long projectTeamId, + @Param("workerIdentityIdList") List workerIdentityIdList); +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/ProjectWorkerInviteRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/ProjectWorkerInviteRepository.java new file mode 100644 index 0000000..ead505e --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/ProjectWorkerInviteRepository.java @@ -0,0 +1,8 @@ +package cn.axzo.orgmanax.infra.dao.invite.repository; + +/** + * @author zhanghongbo + * @date 2025/1/8 + */ +public interface ProjectWorkerInviteRepository { +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/impl/ProjectWorkerInviteRepositoryImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/impl/ProjectWorkerInviteRepositoryImpl.java new file mode 100644 index 0000000..7053803 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/invite/repository/impl/ProjectWorkerInviteRepositoryImpl.java @@ -0,0 +1,16 @@ +package cn.axzo.orgmanax.infra.dao.invite.repository.impl; + +import cn.axzo.orgmanax.infra.dao.invite.repository.ProjectWorkerInviteRepository; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +/** + * @author zhanghongbo + * @date 2025/1/8 + */ +@Repository +@Slf4j +@AllArgsConstructor +public class ProjectWorkerInviteRepositoryImpl implements ProjectWorkerInviteRepository { +} diff --git a/orgmanax-infra/src/main/resources/mapper/ProjectWorkerInviteMapper.xml b/orgmanax-infra/src/main/resources/mapper/ProjectWorkerInviteMapper.xml new file mode 100644 index 0000000..711f0f4 --- /dev/null +++ b/orgmanax-infra/src/main/resources/mapper/ProjectWorkerInviteMapper.xml @@ -0,0 +1,33 @@ + + + + + \ No newline at end of file diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/service/ProjectWorkerInviteService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/service/ProjectWorkerInviteService.java new file mode 100644 index 0000000..0d3bdd8 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/service/ProjectWorkerInviteService.java @@ -0,0 +1,21 @@ +package cn.axzo.orgmanax.server.invite.service; + +import java.util.List; +import java.util.Map; + +/** + * @author zhanghongbo + * @date 2025/1/8 + */ +public interface ProjectWorkerInviteService { + /** + * 工人在项目内班组的邀请状态 + * + * @param projectTeamId 项目内班组id + * @param workerIdentityIds 工人身份id + * @auther: wxf + * @date: 2022/12/4 22:51 + * @return: {@link Integer} + */ + Map workerInviteStatusInProjectTeam(Long projectTeamId, List workerIdentityIds); +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/service/impl/ProjectWorkerInviteServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/service/impl/ProjectWorkerInviteServiceImpl.java new file mode 100644 index 0000000..b5f15b7 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/invite/service/impl/ProjectWorkerInviteServiceImpl.java @@ -0,0 +1,44 @@ +package cn.axzo.orgmanax.server.invite.service.impl; + +import cn.axzo.orgmanax.infra.dao.invite.entity.ProjectWorkerInvite; +import cn.axzo.orgmanax.infra.dao.invite.mapper.ProjectWorkerInviteMapper; +import cn.axzo.orgmanax.server.invite.service.ProjectWorkerInviteService; +import cn.hutool.core.collection.CollectionUtil; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author zhanghongbo + * @date 2025/1/8 + */ +@Service +@Slf4j +@AllArgsConstructor +public class ProjectWorkerInviteServiceImpl implements ProjectWorkerInviteService { + + private ProjectWorkerInviteMapper projectWorkerInviteMapper; + + /** + * 工人在项目内班组的邀请状态 + * + * @param projectTeamId 项目内班组id + * @param workerIdentityIds 工人身份id + * @auther: wxf + * @date: 2022/12/4 22:51 + * @return: {@link Integer} + */ + @Override + public Map workerInviteStatusInProjectTeam(Long projectTeamId, List workerIdentityIds) { + List list = projectWorkerInviteMapper.workerInviteStatusInProjectTeam(projectTeamId, workerIdentityIds); + if (CollectionUtil.isEmpty(list)) { + return new HashMap<>(); + } + return list.stream().collect(Collectors.toMap(ProjectWorkerInvite::getWorkerIdentityId, ProjectWorkerInvite::getStatus)); + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/projectworker/controller/OrgProjectWorkerController.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/controller/OrgProjectWorkerController.java similarity index 84% rename from orgmanax-server/src/main/java/cn/axzo/orgmanax/server/projectworker/controller/OrgProjectWorkerController.java rename to orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/controller/OrgProjectWorkerController.java index ffe4c1c..6a336e0 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/projectworker/controller/OrgProjectWorkerController.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/controller/OrgProjectWorkerController.java @@ -1,4 +1,4 @@ -package cn.axzo.orgmanax.server.projectworker.controller; +package cn.axzo.orgmanax.server.project.worker.controller; import cn.axzo.foundation.result.ApiResult; import cn.axzo.orgmanax.api.project.worker.feign.OrgProjectWorkerApi; @@ -6,7 +6,7 @@ import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupUngroupedWorkerR import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupWorkerListReq; import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupUngroupedWorkerResp; import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupWorkerListResp; -import cn.axzo.orgmanax.server.projectworker.service.OrgProjectWorkerService; +import cn.axzo.orgmanax.server.project.worker.service.OrgProjectWorkerService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RestController; @@ -27,8 +27,7 @@ public class OrgProjectWorkerController implements OrgProjectWorkerApi { @Override public ApiResult> ungroupedWorker(@Valid ProjectDirectGroupUngroupedWorkerReq req) { - orgProjectWorkerService.ungroupedWorker(req); - return null; + return ApiResult.success(orgProjectWorkerService.ungroupedWorker(req)); } @Override diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/projectworker/service/OrgProjectWorkerService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/OrgProjectWorkerService.java similarity index 87% rename from orgmanax-server/src/main/java/cn/axzo/orgmanax/server/projectworker/service/OrgProjectWorkerService.java rename to orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/OrgProjectWorkerService.java index 1b95648..8e3db58 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/projectworker/service/OrgProjectWorkerService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/OrgProjectWorkerService.java @@ -1,4 +1,4 @@ -package cn.axzo.orgmanax.server.projectworker.service; +package cn.axzo.orgmanax.server.project.worker.service; import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupUngroupedWorkerReq; import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupUngroupedWorkerResp; diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java new file mode 100644 index 0000000..70d27b8 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java @@ -0,0 +1,193 @@ +package cn.axzo.orgmanax.server.project.worker.service.impl; + +import cn.axzo.orgmanax.api.invite.enums.WorkerInviteStatusEnum; +import cn.axzo.orgmanax.api.project.group.enums.ProjectGroupTypeEnum; +import cn.axzo.orgmanax.api.project.worker.enums.ProjectWorkerStatusEnum; +import cn.axzo.orgmanax.dto.common.IdentityType; +import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO; +import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum; +import cn.axzo.orgmanax.dto.node.req.ListNodeReq; +import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO; +import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserProfile; +import cn.axzo.orgmanax.dto.nodeuser.enums.ProjectGroupWorkerStatusEnum; +import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; +import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupUngroupedWorkerReq; +import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupUngroupedWorkerResp; +import cn.axzo.orgmanax.dto.project.group.resp.ProjectWorkerProfessionRes; +import cn.axzo.orgmanax.dto.project.group.resp.ProjectWorkerSkillTagRes; +import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO; +import cn.axzo.orgmanax.dto.workerprofession.dto.SkillTagDTO; +import cn.axzo.orgmanax.dto.workerprofession.dto.WorkerProfessionDto; +import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionSkillTypeEnum; +import cn.axzo.orgmanax.server.invite.service.ProjectWorkerInviteService; +import cn.axzo.orgmanax.server.node.service.NodeService; +import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService; +import cn.axzo.orgmanax.server.project.worker.service.OrgProjectWorkerService; +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.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author zhanghongbo + * @date 2025/1/8 + */ +@Service +@Slf4j +@AllArgsConstructor +public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { + + private NodeUserService nodeUserService; + private NodeService nodeService; + private ProjectWorkerInviteService projectWorkerInviteService; + private OrgProjectWorkerProfessionSkillService orgProjectWorkerProfessionSkillService; + private OrgProjectWorkerProfessionService orgProjectWorkerProfessionService; + + @Override + public List ungroupedWorker(ProjectDirectGroupUngroupedWorkerReq req) { + //查询班组下工人 + List allNodeUserDTOS = nodeUserService.list(ListNodeUserReq.builder() + .workspaceId(req.getWorkspaceId()) + .platTeamId(req.getPlatTeamId()) + .filterIncludeNodeTypes(Arrays.asList(NodeTypeEnum.PROJECT_TEAM.getValue())) + .identityType(IdentityType.WORKER.getCode()) + .projectWorkerStatuses(Lists.newArrayList(ProjectWorkerStatusEnum.INACTIVE.getValue(), ProjectWorkerStatusEnum.ACTIVE.getValue())) + .needs(ListNodeUserReq.Needs.builder() + .personProfile(true) //后面需要用到头像 + .node(true) //后面需要用到部门 + .build()) + .build()); + if (ObjectUtil.isEmpty(allNodeUserDTOS)) { + return Collections.emptyList(); + } + Long projectTeamId = allNodeUserDTOS.get(0).getProjectTeamId(); + + List ungroupedWorkerList = allNodeUserDTOS; + + //查询班组下的直属小组 + List orgNodeDTOS4Group = nodeService.list(ListNodeReq.builder() + .platTeamIds(Sets.newHashSet(req.getPlatTeamId())) + .workspaceIds(Sets.newHashSet(req.getWorkspaceId())) + .includeOrgNodeTypes(Sets.newHashSet(NodeTypeEnum.PROJECT_GROUP.getValue())) + .groupType(ProjectGroupTypeEnum.DIRECTLY_UNDER.getValue()) + .build()); + + if (ObjectUtil.isNotEmpty(orgNodeDTOS4Group)) { + List nodeIds4Group = orgNodeDTOS4Group.stream().map(OrgNodeDTO::getId).collect(Collectors.toList()); + //查询直属小组下的工人 + List nodeUserDTOS4Group = nodeUserService.list(ListNodeUserReq.builder() + .workspaceId(req.getWorkspaceId()) + .projectTeamId(projectTeamId) + .organizationalNodeIds(nodeIds4Group) + .filterIncludeNodeTypes(Arrays.asList(NodeTypeEnum.PROJECT_GROUP.getValue())) + .identityType(IdentityType.WORKER.getCode()) + .projectGroupWorkerStatus(ProjectGroupWorkerStatusEnum.VALID.getValue()) + .build()); + //直属小组下的工人id列表 + List groupProjectWorkerIds = nodeUserDTOS4Group.stream() + .map(nodeUserDTO -> nodeUserDTO.getProjectWorkerId()) + .collect(Collectors.toList()); + //排除直属小组下的工人 + ungroupedWorkerList = allNodeUserDTOS.stream() + .filter(nodeUserDTO -> !groupProjectWorkerIds.contains(nodeUserDTO.getProjectWorkerId())) + .collect(Collectors.toList()); + } + + // todo 为保证部分工人被班组长、从业人员拒绝,labour_project_worker中未被is_delete掉,所以查一次邀请列表,去除这一部分工人 + // 后面有时间把所有拒绝工人申请加入项目内班组的处理一下,同时is_delete项目内工人数据 + if (CollUtil.isNotEmpty(ungroupedWorkerList)) { + List workerIdentityIds = ungroupedWorkerList.stream() + .filter(item -> ((NodeUserProfile.ProjectWorkerProfile)item.resolveProfile()).getProjectWorkerStatus().equals(ProjectWorkerStatusEnum.INACTIVE.getValue())) + .map(NodeUserDTO::getIdentityId).collect(Collectors.toList()); + + if (CollUtil.isNotEmpty(workerIdentityIds)) { + Map workerStatusMap = projectWorkerInviteService.workerInviteStatusInProjectTeam(projectTeamId, workerIdentityIds); + ungroupedWorkerList = ungroupedWorkerList.stream().filter(item -> checkWorkerEnterPass(workerStatusMap.get(item.getIdentityId()))).collect(Collectors.toList()); + Map> workerMap = ungroupedWorkerList.stream().collect(Collectors.groupingBy(NodeUserDTO::getIdentityId)); + List lpw = new ArrayList<>(); + workerMap.forEach((workerIdentityId, items) -> { + NodeUserDTO nodeUserDTO = items.stream().max(Comparator.comparing(NodeUserDTO::getId)).get(); + lpw.add(nodeUserDTO); + }); + ungroupedWorkerList = lpw; + } + } + return this.convertUngroupedWorkerDto(ungroupedWorkerList); + } + + private List convertUngroupedWorkerDto(List nodeUserDTOS) { + if (CollUtil.isEmpty(nodeUserDTOS)) { + return Collections.emptyList(); + } + List projectWorkerIdList = nodeUserDTOS.stream() + .map(NodeUserDTO::getProjectWorkerId).collect(Collectors.toList()); + List professionDTOS = orgProjectWorkerProfessionService.listValidWorkerProfession(projectWorkerIdList); + Map> professionMap = professionDTOS.stream().collect(Collectors.groupingBy(ProfessionDTO::getProjectWorkerId)); + + return nodeUserDTOS.stream().map(i -> { + ProjectDirectGroupUngroupedWorkerResp ungroupedWorker = new ProjectDirectGroupUngroupedWorkerResp(); + ungroupedWorker.setWorkerPersonId(i.getPersonId()); + ungroupedWorker.setWorkerIdentityId(i.getIdentityId()); + ungroupedWorker.setWorkerName(i.getRealName()); + ungroupedWorker.setWorkerPhone(i.getPhone()); + ungroupedWorker.setWorkerFaceUrl(i.getPersonProfile().getAvatarUrl()); + ungroupedWorker.setPlatTeamId(i.getPlatTeamId()); + ungroupedWorker.setProjectTeamId(i.getProjectTeamId()); +// ungroupedWorker.setBlackType(i.getBlackType()); todo 网关从maokai 宽表中获取 + // 工种 + List professions = professionMap.get(i.getProjectWorkerId()); + if (CollUtil.isNotEmpty(professions)) { + List professionList = professions.stream().map(professionDTO -> { + ProjectWorkerProfessionRes res = new ProjectWorkerProfessionRes(); + res.setId(professionDTO.getProfessionId()); + res.setName(professionDTO.getProfessionName()); + return res; + }).collect(Collectors.toList()); + + ungroupedWorker.setProfessionList(professionList); + // 技工 or 普工, 经讨论,取第一个即可 + ungroupedWorker.setProfessionCategoryName(DataCollectionSkillTypeEnum.getType(professions.get(0).getSkillType()).getDesc()); + } + + // 技能标签 + List skillTagDTOS = professionMap.get(i.getProjectWorkerId()).stream().flatMap(professionDTO -> professionDTO.getSkillTags().stream()).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(skillTagDTOS)) { + List workerSkillTagDtoList = skillTagDTOS.stream().map( + w -> { + ProjectWorkerSkillTagRes res = new ProjectWorkerSkillTagRes(); + res.setId(0L); //历史代码skillTagId全是0L + res.setName(w.getName()); + return res; + } + ).collect(Collectors.toList()); + ungroupedWorker.setSkillTagList(workerSkillTagDtoList); + } + + NodeUserProfile.ProjectWorkerProfile projectWorkerProfile = i.resolveProfile(); + ungroupedWorker.setStatus(projectWorkerProfile.getProjectWorkerStatus()); + ungroupedWorker.setJoinAt(i.getJoinAt()); + return ungroupedWorker; + }).collect(Collectors.toList()); + } + + // 工人审核标识 + private boolean checkWorkerEnterPass(Integer status) { + if (Objects.isNull(status)) { + return true; + } + if (status.equals(WorkerInviteStatusEnum.TEAM_OWNER_REFUSE.getValue()) + || status.equals(WorkerInviteStatusEnum.MANAGER_REFUSE.getValue())) { + return false; + } + return true; + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/projectworker/service/impl/OrgProjectWorkerServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/projectworker/service/impl/OrgProjectWorkerServiceImpl.java deleted file mode 100644 index 05e79f1..0000000 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/projectworker/service/impl/OrgProjectWorkerServiceImpl.java +++ /dev/null @@ -1,68 +0,0 @@ -package cn.axzo.orgmanax.server.projectworker.service.impl; - -import cn.axzo.orgmanax.api.project.worker.enums.ProjectWorkerStatusEnum; -import cn.axzo.orgmanax.dto.common.IdentityType; -import cn.axzo.orgmanax.dto.node.req.ListNodeReq; -import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO; -import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; -import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupUngroupedWorkerReq; -import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupUngroupedWorkerResp; -import cn.axzo.orgmanax.server.node.service.NodeService; -import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService; -import cn.axzo.orgmanax.server.projectworker.service.OrgProjectWorkerService; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.stream.Collectors; - -/** - * @author zhanghongbo - * @date 2025/1/8 - */ -@Service -@Slf4j -@AllArgsConstructor -public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { - - private NodeUserService nodeUserService; - private NodeService nodeService; - - @Override - public List ungroupedWorker(ProjectDirectGroupUngroupedWorkerReq req) { -// //查询班组下工人 -// List nodeUserDTOS4Team = nodeUserService.list(ListNodeUserReq.builder() -// .workspaceId(req.getWorkspaceId()) -// .platTeamId(req.getPlatTeamId()) -// .identityType(IdentityType.WORKER.getCode()) -// .projectWorkerStatuses(Lists.newArrayList(ProjectWorkerStatusEnum.INACTIVE.getValue(), ProjectWorkerStatusEnum.ACTIVE.getValue())) -// .build()); -// if (ObjectUtil.isEmpty(nodeUserDTOS4Team)) { -// return Collections.emptyList(); -// } -// -// //查询班组下的直属小组工人 -// nodeService.list(ListNodeReq.builder() -// .platTeamIds(Sets.newHashSet(req.getPlatTeamId())) -// .workspaceIds(Sets.newHashSet(req.getWorkspaceId())) -// .groupType(ProjectGroupTypeEnum.DIRECTLY_UNDER.getValue()) -// .build()); -// -// -// List nodeUserDTOS = nodeUserService.list(ListNodeUserReq.builder() -// .workspaceId(req.getWorkspaceId()) -// .platTeamId(req.getPlatTeamId()) -// .projectWorkerStatuses(Lists.newArrayList(ProjectWorkerStatusEnum.INACTIVE.getValue(), ProjectWorkerStatusEnum.ACTIVE.getValue())) -// .build()); - - - - - return null; - } -} 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 e49b2c7..50bf3af 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 @@ -6,6 +6,7 @@ import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionListVali import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionSortOutProfessionCategoryReq; import cn.axzo.orgmanax.dto.workerprofession.req.WorkerProfessionTagQueryPageReq; import cn.axzo.orgmanax.dto.workerprofession.resp.ProjectWorkerProfessionResp; +import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionHistoryRepository; import java.util.List; import java.util.Map; @@ -42,4 +43,11 @@ public interface OrgProjectWorkerProfessionService { * @return */ PageResp page(WorkerProfessionTagQueryPageReq req); + + /** + * 获取历史工种 + * @param req + * @return + */ + List listHistory(WorkerProfessionHistoryRepository.PageReq req); } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/OrgProjectWorkerProfessionSkillService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/OrgProjectWorkerProfessionSkillService.java index 7e32a5c..bff9ece 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/OrgProjectWorkerProfessionSkillService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/OrgProjectWorkerProfessionSkillService.java @@ -1,5 +1,6 @@ package cn.axzo.orgmanax.server.workerprofession.service; +import cn.axzo.orgmanax.dto.workerprofession.dto.SkillTagDTO; import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag; import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionHistoryRepository; import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionSkillTagRepository; @@ -12,4 +13,11 @@ import java.util.List; */ public interface OrgProjectWorkerProfessionSkillService { List list(WorkerProfessionSkillTagRepository.PageReq req); + + /** + * 根据项目工人id列表获取技能标签, 包含历史工种表中的技能标签, 标签含有子标签关系 + * @param projectWorkerIds + * @return + */ + List listSkillTagWithChild(List projectWorkerIds); } 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 f12ee7f..898b74e 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 @@ -1,5 +1,4 @@ package cn.axzo.orgmanax.server.workerprofession.service.impl; -import cn.axzo.orgmanax.dto.workerprofession.dto.ProjectWorkerProfessionDTO; import cn.axzo.foundation.page.PageResp; import cn.axzo.orgmanax.api.project.worker.enums.ProjectWorkerStatusEnum; @@ -17,6 +16,7 @@ import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.dto.project.team.enums.TeamSceneEnum; import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum; import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO; +import cn.axzo.orgmanax.dto.workerprofession.dto.ProjectWorkerProfessionDTO; import cn.axzo.orgmanax.dto.workerprofession.dto.SkillTagDTO; import cn.axzo.orgmanax.dto.workerprofession.model.ProfessionSkillTagTreeNode; import cn.axzo.orgmanax.dto.workerprofession.req.ProjectWorkerProfessionListValidReq; @@ -26,7 +26,6 @@ import cn.axzo.orgmanax.dto.workerprofession.resp.ProjectWorkerProfessionResp; import cn.axzo.orgmanax.infra.client.datacollection.DataCollectionDictInfoClient; import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionListProfessionCategoriesResp; import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionSkillTypeEnum; -import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag; import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionTag; import cn.axzo.orgmanax.infra.dao.workerprofession.enums.SkillTypeEnum; import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionHistoryRepository; @@ -42,10 +41,8 @@ import cn.axzo.orgmanax.server.util.StreamUtil; 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.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; -import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -54,8 +51,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; import java.util.*; import java.util.function.BinaryOperator; @@ -72,15 +69,21 @@ import static java.util.stream.Collectors.*; */ @Service @Slf4j -@AllArgsConstructor public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerProfessionService { + @Autowired private NodeService nodeService; + @Autowired private NodeUserService nodeUserService; + @Autowired private WorkerProfessionTagRepository workerProfessionTagRepository; + @Autowired private DataCollectionDictInfoClient dataCollectionDictInfoClient; + @Autowired private OrgProjectWorkerProfessionSkillService orgProjectWorkerProfessionSkillService; + @Autowired private WorkerProfessionHistoryRepository workerProfessionHistoryRepository; + @Autowired private CooperateShipService cooperateShipService; private static final ImmutableSet TEAM_ORG_NODE_TYPES = ImmutableSet.of( @@ -122,17 +125,14 @@ public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerPr .organizationalNodeIds(nodeIds) .identityIds(workerIdentityIds) .identityType(IdentityType.WORKER.getCode()) - .projectWorkerStatuses(Arrays.asList(ProjectWorkerStatusEnum.ACTIVE.getValue())) //TODO 待枚举定义 + .projectWorkerStatuses(Arrays.asList(ProjectWorkerStatusEnum.ACTIVE.getValue())) .build()); if (ObjectUtil.isEmpty(nodeUserDTOS)) { return Collections.emptyMap(); } - List projectWorkerIds = nodeUserDTOS.stream().map(nodeUserDTO -> { - NodeUserProfile.ProjectWorkerProfile projectWorkerProfile = nodeUserDTO.resolveProfile(); - return projectWorkerProfile.getProjectWorkerId(); - }).collect(toList()); + List projectWorkerIds = nodeUserDTOS.stream().map(nodeUserDTO -> nodeUserDTO.getProjectWorkerId()).collect(toList()); Map nodeUserDTOMap = nodeUserDTOS.stream().collect(toMap(NodeUserDTO::getIdentityId, identity())); //获取工人工种 @@ -146,8 +146,7 @@ public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerPr if (nodeUserDTO == null) { result.put(identityId, Collections.emptyList()); } else { - NodeUserProfile.ProjectWorkerProfile projectWorkerProfile = nodeUserDTO.resolveProfile(); - Long projectWorkerId = projectWorkerProfile.getProjectWorkerId(); + Long projectWorkerId = nodeUserDTO.getProfile().getLong("projectWorkerId"); List professions = professionMap.get(projectWorkerId); if (professions == null) { professions = Collections.emptyList(); @@ -192,7 +191,7 @@ public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerPr } //获取技能标签包括历史技能标签(带子技能标签) - List skillTagDTOS = listSkillTagWithChild(projectWorkerIds); + List skillTagDTOS = orgProjectWorkerProfessionSkillService.listSkillTagWithChild(projectWorkerIds); Map> skillTagMap = skillTagDTOS.stream().collect(groupingBy(SkillTagDTO::getProfessionId)); //封装工人工种和技能标签 @@ -211,6 +210,7 @@ public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerPr //查询工人 List nodeUserDTOS = nodeUserService.list(ListNodeUserReq.builder() .projectWorkerIds(projectWorkerIdList) + .filterIncludeNodeTypes(Arrays.asList(NodeTypeEnum.PROJECT_TEAM.getValue())) .identityType(IdentityType.WORKER.getCode()) .build()); if (ObjectUtil.isEmpty(nodeUserDTOS)) { @@ -338,6 +338,11 @@ public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerPr .build(); } + @Override + public List listHistory(WorkerProfessionHistoryRepository.PageReq req) { + return workerProfessionHistoryRepository.list(req); + } + private void assembleSkillTags(List workProcessionTags) { if (ObjectUtils.isEmpty(workProcessionTags)) { return; @@ -438,108 +443,9 @@ public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerPr return orgCooperateShipDTOS4Parent.get(0).getOrganizationalNodeId(); } - /** - * 获取技能标签包括历史技能标签(带子技能标签) - * @param projectWorkerIds - */ - private List listSkillTagWithChild(List projectWorkerIds) { - //获取技能标签 - WorkerProfessionSkillTagRepository.PageReq pageReq4Skill = WorkerProfessionSkillTagRepository.PageReq.builder() - .projectWorkerIds(projectWorkerIds) - .scene(TeamSceneEnum.PROJECT_TEAM.name()) - .build(); - List workerProfessionSkillTagResps = orgProjectWorkerProfessionSkillService.list(pageReq4Skill); - - //获取历史技能标签 - WorkerProfessionHistoryRepository.PageReq pageReq4HistoryProfession = WorkerProfessionHistoryRepository.PageReq.builder() - .scene(TeamSceneEnum.PROJECT_TEAM.name()) - .projectWorkerIds(projectWorkerIds) - .build(); - List workerProfessionHistoryResps = workerProfessionHistoryRepository.list(pageReq4HistoryProfession); - List workerProfessionSkillTagResps4History = doHistoryWorkerSkilltag(workerProfessionHistoryResps); - - //技能标签和历史技能标签合在一起 - Stream allStream = Stream.concat(workerProfessionSkillTagResps.stream(), workerProfessionSkillTagResps4History.stream()); - List allSkillTagResps = StreamUtil.distinct(allStream, - p -> String.format("%s_%s", p.getProjectWorkerId(), p.getSkillTagCode()), SKILL_TAG_MERGE_FUNC) - .collect(toList()); - List parentSkillTagLists = allSkillTagResps.stream() - .filter(item -> !StringUtils.hasLength(item.getParentSkillTagCode()) || item.getParentSkillTagCode().equals("0")) - .collect(toList()); - Map> chileMap = allSkillTagResps.stream() - .filter(item -> StringUtils.hasLength(item.getParentSkillTagCode()) || !item.getParentSkillTagCode().equals("0")) - .collect(Collectors.groupingBy(WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp::getParentSkillTagCode)); - parentSkillTagLists.stream().map(i -> chileSkillTagConvert(i, chileMap)).collect(toList()); - return parentSkillTagLists.stream().map(i -> chileSkillTagConvert(i, chileMap)).collect(toList()); - } - private SkillTagDTO chileSkillTagConvert(WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp parentSkillTag, Map> chileMap) { - SkillTagDTO tagDTO = new SkillTagDTO(); - tagDTO.setCode(parentSkillTag.getSkillTagCode()); -// tagDTO.setId(0L); //历史代码都为0L, 已经没用了 - tagDTO.setName(parentSkillTag.getSkillTagName()); - tagDTO.setProfessionId(parentSkillTag.getProfessionId()); - tagDTO.setParentCode(parentSkillTag.getParentSkillTagCode()); - tagDTO.setChildSkillTags(Lists.newArrayList()); - - List childSkillTagResps = chileMap.get(parentSkillTag.getSkillTagCode()); - if (CollUtil.isEmpty(childSkillTagResps)) { - return tagDTO; - } - for (WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp skillTagResp : childSkillTagResps) { - SkillTagDTO chileSkillTag = chileSkillTagConvert(skillTagResp, chileMap); - tagDTO.getChildSkillTags().add(chileSkillTag); - } - return tagDTO; - } - - /** - * 转换历史技能标签 - * @param workerProfessionHistoryResps - * @return - */ - private List doHistoryWorkerSkilltag(List workerProfessionHistoryResps) { - ArrayList wss = Lists.newArrayList(); - workerProfessionHistoryResps.forEach(item -> { - List historyData = JSON.parseArray(item.getJsonContent(), WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp.HistoryData.class); - Long projectWorkerId; - if (Objects.nonNull(item.getBizData()) && item.getBizData().containsKey("projectWorkerId")) { - projectWorkerId = item.getBizData().getLong("projectWorkerId"); - } else { - projectWorkerId = 0L; - } - for (WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp.HistoryData historyDatum : historyData) { - if (historyDatum.getDataFlag().equals(WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp.DATA_FLAG_SKILL)) { - List skillTags = historyDatum.resolveWorkerProfessionSkillTags(ValidationEnum.EFFECTIVE); - // 需要使用有效工种 - Stream stream = skillTags.stream() - .filter(s -> !Strings.isNullOrEmpty(s.getSkillTagCode())).map(p -> { - WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp skillTag = new WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp(); - skillTag.setId(p.getId()); - skillTag.setSkillTagName(p.getSkillTagName()); - skillTag.setSkillTagCode(p.getSkillTagCode()); - skillTag.setParentSkillTagCode(p.getParentSkillTagCode()); - skillTag.setProfessionId(p.getProfessionId()); - skillTag.setWorkspaceId(p.getWorkspaceId()); - skillTag.setProjectWorkerId(projectWorkerId); - skillTag.setCreateAt(p.getCreateAt()); - skillTag.setUpdateAt(p.getUpdateAt()); - skillTag.setIsDelete(p.getIsDelete()); - return skillTag; - }); - List collect = StreamUtil.distinct(stream, - // 按照人+技能标签去重 - p -> String.format("%s_%s", p.getProjectWorkerId(), p.getSkillTagCode()), - SKILL_TAG_MERGE_FUNC) - .collect(toList()); - wss.addAll(collect); - } - } - }); - return wss; - } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionSkillServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionSkillServiceImpl.java index b16cd07..d075974 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionSkillServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/workerprofession/service/impl/OrgProjectWorkerProfessionSkillServiceImpl.java @@ -1,13 +1,33 @@ package cn.axzo.orgmanax.server.workerprofession.service.impl; +import cn.axzo.orgmanax.dto.project.team.enums.TeamSceneEnum; +import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum; +import cn.axzo.orgmanax.dto.workerprofession.dto.SkillTagDTO; +import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionSkillTag; import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionHistoryRepository; import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionSkillTagRepository; +import cn.axzo.orgmanax.server.util.StreamUtil; +import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionService; import cn.axzo.orgmanax.server.workerprofession.service.OrgProjectWorkerProfessionSkillService; +import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson.JSON; +import com.google.common.base.Strings; +import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.BinaryOperator; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static java.util.stream.Collectors.toList; /** * @author zhanghongbo @@ -15,13 +35,128 @@ import java.util.List; */ @Service @Slf4j -@AllArgsConstructor public class OrgProjectWorkerProfessionSkillServiceImpl implements OrgProjectWorkerProfessionSkillService { + @Autowired private WorkerProfessionSkillTagRepository workerProfessionSkillTagRepository; + @Autowired + private OrgProjectWorkerProfessionService orgProjectWorkerProfessionService; + + private static final BinaryOperator SKILL_TAG_MERGE_FUNC = (v1, v2) -> { + if (v1.getIsDelete() < v2.getIsDelete()) { + return v1; + } + return v2.getCreateAt().getTime() > v1.getCreateAt().getTime() ? v2 : v1; + }; @Override public List list(WorkerProfessionSkillTagRepository.PageReq req) { return workerProfessionSkillTagRepository.list(req); } + + /** + * 获取技能标签包括历史技能标签(带子技能标签) + * @param projectWorkerIds + */ + public List listSkillTagWithChild(List projectWorkerIds) { + //获取技能标签 + WorkerProfessionSkillTagRepository.PageReq pageReq4Skill = WorkerProfessionSkillTagRepository.PageReq.builder() + .projectWorkerIds(projectWorkerIds) + .scene(TeamSceneEnum.PROJECT_TEAM.name()) + .build(); + List workerProfessionSkillTagResps = workerProfessionSkillTagRepository.list(pageReq4Skill); + + //获取历史技能标签 + WorkerProfessionHistoryRepository.PageReq pageReq4HistoryProfession = WorkerProfessionHistoryRepository.PageReq.builder() + .scene(TeamSceneEnum.PROJECT_TEAM.name()) + .projectWorkerIds(projectWorkerIds) + .build(); + List workerProfessionHistoryResps = orgProjectWorkerProfessionService.listHistory(pageReq4HistoryProfession); + List workerProfessionSkillTagResps4History = doHistoryWorkerSkilltag(workerProfessionHistoryResps); + + //技能标签和历史技能标签合在一起 + Stream allStream = Stream.concat(workerProfessionSkillTagResps.stream(), workerProfessionSkillTagResps4History.stream()); + List allSkillTagResps = StreamUtil.distinct(allStream, + p -> String.format("%s_%s", p.getProjectWorkerId(), p.getSkillTagCode()), SKILL_TAG_MERGE_FUNC) + .collect(toList()); + + + List parentSkillTagLists = allSkillTagResps.stream() + .filter(item -> !StringUtils.hasLength(item.getParentSkillTagCode()) || item.getParentSkillTagCode().equals("0")) + .collect(toList()); + Map> chileMap = allSkillTagResps.stream() + .filter(item -> StringUtils.hasLength(item.getParentSkillTagCode()) || !item.getParentSkillTagCode().equals("0")) + .collect(Collectors.groupingBy(WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp::getParentSkillTagCode)); + + parentSkillTagLists.stream().map(i -> chileSkillTagConvert(i, chileMap)).collect(toList()); + + return parentSkillTagLists.stream().map(i -> chileSkillTagConvert(i, chileMap)).collect(toList()); + } + + /** + * 转换历史技能标签 + * @param workerProfessionHistoryResps + * @return + */ + private List doHistoryWorkerSkilltag(List workerProfessionHistoryResps) { + ArrayList wss = Lists.newArrayList(); + workerProfessionHistoryResps.forEach(item -> { + List historyData = JSON.parseArray(item.getJsonContent(), WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp.HistoryData.class); + Long projectWorkerId; + if (Objects.nonNull(item.getBizData()) && item.getBizData().containsKey("projectWorkerId")) { + projectWorkerId = item.getBizData().getLong("projectWorkerId"); + } else { + projectWorkerId = 0L; + } + for (WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp.HistoryData historyDatum : historyData) { + if (historyDatum.getDataFlag().equals(WorkerProfessionHistoryRepository.WorkerProfessionHistoryResp.DATA_FLAG_SKILL)) { + List skillTags = historyDatum.resolveWorkerProfessionSkillTags(ValidationEnum.EFFECTIVE); + // 需要使用有效工种 + Stream stream = skillTags.stream() + .filter(s -> !Strings.isNullOrEmpty(s.getSkillTagCode())).map(p -> { + WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp skillTag = new WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp(); + skillTag.setId(p.getId()); + skillTag.setSkillTagName(p.getSkillTagName()); + skillTag.setSkillTagCode(p.getSkillTagCode()); + skillTag.setParentSkillTagCode(p.getParentSkillTagCode()); + skillTag.setProfessionId(p.getProfessionId()); + skillTag.setWorkspaceId(p.getWorkspaceId()); + skillTag.setProjectWorkerId(projectWorkerId); + skillTag.setCreateAt(p.getCreateAt()); + skillTag.setUpdateAt(p.getUpdateAt()); + skillTag.setIsDelete(p.getIsDelete()); + return skillTag; + }); + List collect = StreamUtil.distinct(stream, + // 按照人+技能标签去重 + p -> String.format("%s_%s", p.getProjectWorkerId(), p.getSkillTagCode()), + SKILL_TAG_MERGE_FUNC) + .collect(toList()); + wss.addAll(collect); + } + } + }); + return wss; + } + + private SkillTagDTO chileSkillTagConvert(WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp parentSkillTag, Map> chileMap) { + SkillTagDTO tagDTO = new SkillTagDTO(); + tagDTO.setCode(parentSkillTag.getSkillTagCode()); +// tagDTO.setId(0L); //历史代码都为0L, 已经没用了 + tagDTO.setName(parentSkillTag.getSkillTagName()); + tagDTO.setProfessionId(parentSkillTag.getProfessionId()); + tagDTO.setParentCode(parentSkillTag.getParentSkillTagCode()); + tagDTO.setProjectWorkerId(parentSkillTag.getProjectWorkerId()); + tagDTO.setChildSkillTags(Lists.newArrayList()); + + List childSkillTagResps = chileMap.get(parentSkillTag.getSkillTagCode()); + if (CollUtil.isEmpty(childSkillTagResps)) { + return tagDTO; + } + for (WorkerProfessionSkillTagRepository.WorkerProfessionSkillTagResp skillTagResp : childSkillTagResps) { + SkillTagDTO chileSkillTag = chileSkillTagConvert(skillTagResp, chileMap); + tagDTO.getChildSkillTags().add(chileSkillTag); + } + return tagDTO; + } } From 58d057b62d06b0aa547cd95495a7926902181c0c Mon Sep 17 00:00:00 2001 From: songyuanlun Date: Thu, 9 Jan 2025 13:57:08 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat(REQ-3488):=20=E7=8F=AD=E7=BB=84?= =?UTF-8?q?=E7=B1=BB=E5=88=AB=E6=A0=91=E5=BD=A2=E7=BB=93=E6=9E=84=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team/feign/OrgProjectTeamCategoryApi.java | 9 + .../project/teamcategory/team-category.http | 9 + .../orgmanax/dto/node/req/ListNodeReq.java | 7 + .../team/dto/TeamCategoryAggregateDTO.java | 38 ++-- .../team/enums/TeamCategoryTypeEnum.java | 3 + .../project/team/enums/ValidationEnum.java | 17 +- .../project/team/req/ListProjectTeamReq.java | 10 +- .../team/req/PageOrgTeamCategoryReq.java | 29 ++- .../team/req/TreeOrgTeamCategoryReq.java | 48 +++++ .../repository/TeamCategoryRepository.java | 17 +- .../OrgProjectTeamCategoryController.java | 16 +- ...jectTeamCategoryFoundationServiceImpl.java | 12 +- .../service/ProjectTeamCategoryService.java | 10 ++ .../team/service/dto/ListTeamCategoryReq.java | 80 ++++++++- .../impl/ProjectTeamCategoryServiceImpl.java | 168 +++++++++++++++++- .../service/impl/ProjectTeamServiceImpl.java | 1 + 16 files changed, 426 insertions(+), 48 deletions(-) create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/TreeOrgTeamCategoryReq.java diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/project/team/feign/OrgProjectTeamCategoryApi.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/project/team/feign/OrgProjectTeamCategoryApi.java index ead9c7f..a254b4e 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/project/team/feign/OrgProjectTeamCategoryApi.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/project/team/feign/OrgProjectTeamCategoryApi.java @@ -2,6 +2,7 @@ package cn.axzo.orgmanax.api.project.team.feign; import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.result.ApiResult; +import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryAggregateDTO; import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryDTO; import cn.axzo.orgmanax.dto.project.team.req.GroupTeamCategoryReq; import cn.axzo.orgmanax.dto.project.team.req.OperateOrgTeamCategoryReq; @@ -11,6 +12,7 @@ import cn.axzo.orgmanax.dto.project.team.req.PreCheckRemoveTeamCategoryReq; import cn.axzo.orgmanax.dto.project.team.req.RemoveProjectTeamCategoryReq; import cn.axzo.orgmanax.dto.project.team.req.SaveProjectTeamCategoryReq; import cn.axzo.orgmanax.dto.project.team.req.SingletonOrgTeamCategoryReq; +import cn.axzo.orgmanax.dto.project.team.req.TreeOrgTeamCategoryReq; import cn.axzo.orgmanax.dto.project.team.resp.RemoveTeamCategoryCheckResp; import cn.axzo.orgmanax.dto.project.team.resp.SingletonOrgTeamCategoryResp; import cn.axzo.orgmanax.dto.project.team.resp.TeamCategoryGroupResp; @@ -101,9 +103,16 @@ public interface OrgProjectTeamCategoryApi { @PostMapping(value = "/api/project/team-category/list-by-node") ApiResult listByNode(@RequestBody @Valid SingletonOrgTeamCategoryReq req); + // ---------------- 新版接口 ---------------- /** * 列表分页查询 */ @PostMapping(value = "/api/project/team-category/list") ApiResult> list(@RequestBody PageOrgTeamCategoryReq req); + + /** + * 查询班组-树形结构 + */ + @PostMapping(value = "/api/project/team-category/tree-list") + ApiResult> treeList(@RequestBody TreeOrgTeamCategoryReq req); } diff --git a/orgmanax-api/src/test/resources/http/project/teamcategory/team-category.http b/orgmanax-api/src/test/resources/http/project/teamcategory/team-category.http index 5dee63f..f6c27c0 100644 --- a/orgmanax-api/src/test/resources/http/project/teamcategory/team-category.http +++ b/orgmanax-api/src/test/resources/http/project/teamcategory/team-category.http @@ -4,6 +4,15 @@ POST {{host}}/api/project/team-category/list Content-Type: application/json Accept: application/json +{ + "orgNodeIds": [14606,14585] +} + +### 班组类别-树形结构 +POST {{host}}/api/project/team-category/tree-list +Content-Type: application/json +Accept: application/json + { "orgNodeIds": [14606,14585] } \ No newline at end of file diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java index 12a7226..d504b34 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java @@ -147,6 +147,13 @@ public class ListNodeReq extends PageReqV2 { @Builder.Default private Set platTeamIds = Collections.emptySet(); + /** + * 项目内班组id列表 + * todo 未实现 + */ + @Builder.Default + private Set projectTeamIds = Collections.emptySet(); + /** * todo 未实现 * 小组类型 diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java index fc46810..0fa6993 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java @@ -1,5 +1,7 @@ package cn.axzo.orgmanax.dto.project.team.dto; +import cn.axzo.orgmanax.dto.project.team.enums.TeamCategoryTypeEnum; +import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum; import java.util.List; import lombok.AllArgsConstructor; import lombok.Data; @@ -14,22 +16,32 @@ import lombok.experimental.SuperBuilder; @AllArgsConstructor @NoArgsConstructor public class TeamCategoryAggregateDTO { - /** - * 邀请id/申请id - */ - private Long inviteId; + /** * 班组id + * 须知:返回的班组id可能没有,业务方如果只需要项目班组的班组类别,需要过滤掉为空的数据 */ private Long projectTeamId; /** * 经营范围code */ - private String categoryCode; + private String code; /** * 经营范围名称 */ - private String categoryName; + private String name; + + /** + * 班组类别 - 分类 + * @see TeamCategoryTypeEnum + */ + private Integer type; + + /** + * 数据有效性标记 + * @see ValidationEnum + */ + private Integer valid; /** * 父级经营范围code @@ -41,23 +53,9 @@ public class TeamCategoryAggregateDTO { */ private String parentCategoryName; - private Integer type; - - private Integer valid; /** * 经营范围子级 */ private List workScopes; - public TeamCategoryAggregateDTO(String categoryCode, String categoryName) { - this.categoryCode = categoryCode; - this.categoryName = categoryName; - } - - public TeamCategoryAggregateDTO(Long inviteId, Long projectTeamId, String categoryCode, String categoryName) { - this.inviteId = inviteId; - this.projectTeamId = projectTeamId; - this.categoryCode = categoryCode; - this.categoryName = categoryName; - } } diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/TeamCategoryTypeEnum.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/TeamCategoryTypeEnum.java index 5d5d23f..ad362e9 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/TeamCategoryTypeEnum.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/TeamCategoryTypeEnum.java @@ -18,6 +18,9 @@ import lombok.Getter; @AllArgsConstructor(access = AccessLevel.PRIVATE) public enum TeamCategoryTypeEnum{ + /** + * 班组类别分类 + */ OTHERS(0, "其他"), WORKER_GROUP_CATEGORY(1, "经营范围"), WORKER_GROUP_PROFESSION(2, "经营范围子级"), diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/ValidationEnum.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/ValidationEnum.java index 19cd1a0..ac1864a 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/ValidationEnum.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/ValidationEnum.java @@ -1,12 +1,14 @@ package cn.axzo.orgmanax.dto.project.team.enums; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; - +import com.google.common.collect.Lists; import java.util.Arrays; import java.util.Objects; import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; /** * @description @@ -40,4 +42,11 @@ public enum ValidationEnum { .filter(e -> Objects.equals(e.code, code)) .findFirst(); } + + public static Set getAllCode() { + return Lists.newArrayList(EFFECTIVE, INVALID) + .stream() + .map(ValidationEnum::getCode) + .collect(Collectors.toSet()); + } } diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/ListProjectTeamReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/ListProjectTeamReq.java index d045c91..3e75370 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/ListProjectTeamReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/ListProjectTeamReq.java @@ -1,13 +1,12 @@ package cn.axzo.orgmanax.dto.project.team.req; +import java.util.List; +import java.util.Set; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import java.util.List; -import java.util.Set; - /** * @author : zhanghonghao@axzo.cn * @since : 2024/12/30 @@ -53,6 +52,11 @@ public class ListProjectTeamReq { */ private Set platTeamIds; + /** + * 项目内班组id列表 + */ + private Set projectTeamIds; + /** * 项目IDs workspaceId 和 workspaceIds只传一个 */ diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/PageOrgTeamCategoryReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/PageOrgTeamCategoryReq.java index 34c699c..a2539fa 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/PageOrgTeamCategoryReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/PageOrgTeamCategoryReq.java @@ -1,7 +1,9 @@ package cn.axzo.orgmanax.dto.project.team.req; import cn.axzo.foundation.page.PageReqV2; -import java.util.List; +import cn.axzo.orgmanax.dto.project.team.enums.TeamCategoryTypeEnum; +import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum; +import java.util.Set; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -22,5 +24,28 @@ public class PageOrgTeamCategoryReq extends PageReqV2 { /** * nodeId 列表 */ - private List orgNodeIds; + private Set orgNodeIds; + + /** + * 班组类别列表 categoryTypes + * @see TeamCategoryTypeEnum + */ + private Set categoryTypes; + + /** + * 经营范围/经营范围子级categoryCodes + */ + private Set categoryCodes; + + /** + * 数据有效性标记 + * @see ValidationEnum + */ + private Integer valid; + + /** + * 项目内班组id列表 + */ + private Set projectTeamIds; + } diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/TreeOrgTeamCategoryReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/TreeOrgTeamCategoryReq.java new file mode 100644 index 0000000..8939606 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/req/TreeOrgTeamCategoryReq.java @@ -0,0 +1,48 @@ +package cn.axzo.orgmanax.dto.project.team.req; + +import cn.axzo.orgmanax.dto.project.team.enums.TeamCategoryTypeEnum; +import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum; +import java.util.Set; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @author syl + * @date 2024/12/18 + */ +@Data +@SuperBuilder +@AllArgsConstructor +@NoArgsConstructor +public class TreeOrgTeamCategoryReq { + + /** + * nodeId 列表 + */ + private Set orgNodeIds; + + /** + * 班组类别列表 categoryTypes + * @see TeamCategoryTypeEnum + */ + private Set categoryTypes; + + /** + * 经营范围/经营范围子级categoryCodes + */ + private Set categoryCodes; + + /** + * 数据有效性标记 + * @see ValidationEnum + */ + private Integer valid; + + /** + * 项目内班组id列表 + */ + private Set projectTeamIds; + +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/project/team/repository/TeamCategoryRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/project/team/repository/TeamCategoryRepository.java index 83abb0f..440feba 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/project/team/repository/TeamCategoryRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/project/team/repository/TeamCategoryRepository.java @@ -4,11 +4,10 @@ import cn.axzo.foundation.dao.support.wrapper.CriteriaField; import cn.axzo.foundation.dao.support.wrapper.Operator; import cn.axzo.foundation.page.PageReqV2; import cn.axzo.foundation.page.PageResp; -import cn.axzo.orgmanax.dto.project.team.enums.TeamCategoryTypeEnum; import cn.axzo.orgmanax.dto.project.team.enums.TeamSceneEnum; import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum; import cn.axzo.orgmanax.infra.dao.project.team.entity.TeamCategory; -import java.util.List; +import java.util.Set; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -46,7 +45,7 @@ public interface TeamCategoryRepository { * 组织节点idList */ @CriteriaField(field = "orgNodeId", operator = Operator.IN) - private List orgNodeIds; + private Set orgNodeIds; /** * 班组类别code */ @@ -56,7 +55,7 @@ public interface TeamCategoryRepository { * 班组类别codes */ @CriteriaField(field = "code", operator = Operator.IN) - private List codes; + private Set codes; /** * 班组类别名称 */ @@ -67,16 +66,11 @@ public interface TeamCategoryRepository { */ @CriteriaField private String parentCode; - /** - * 班组类别 - 分类 - */ - @CriteriaField - private TeamCategoryTypeEnum type; /** * 班组类别 - 分类 List */ @CriteriaField(field = "type", operator = Operator.IN) - private List types; + private Set types; /** * 班组类别使用场景 */ @@ -84,9 +78,10 @@ public interface TeamCategoryRepository { private TeamSceneEnum scene; /** * 数据有效性标记 + * @see ValidationEnum */ @CriteriaField(field = "valid", operator = Operator.IN) - private List valids; + private Set validList; /** * 创建人的自然人id */ diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/controller/OrgProjectTeamCategoryController.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/controller/OrgProjectTeamCategoryController.java index a67c0e9..7bc9def 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/controller/OrgProjectTeamCategoryController.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/controller/OrgProjectTeamCategoryController.java @@ -3,6 +3,7 @@ package cn.axzo.orgmanax.server.project.team.controller; import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.result.ApiResult; import cn.axzo.orgmanax.api.project.team.feign.OrgProjectTeamCategoryApi; +import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryAggregateDTO; import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryDTO; import cn.axzo.orgmanax.dto.project.team.req.GroupTeamCategoryReq; import cn.axzo.orgmanax.dto.project.team.req.OperateOrgTeamCategoryReq; @@ -12,14 +13,16 @@ import cn.axzo.orgmanax.dto.project.team.req.PreCheckRemoveTeamCategoryReq; import cn.axzo.orgmanax.dto.project.team.req.RemoveProjectTeamCategoryReq; import cn.axzo.orgmanax.dto.project.team.req.SaveProjectTeamCategoryReq; import cn.axzo.orgmanax.dto.project.team.req.SingletonOrgTeamCategoryReq; +import cn.axzo.orgmanax.dto.project.team.req.TreeOrgTeamCategoryReq; import cn.axzo.orgmanax.dto.project.team.resp.RemoveTeamCategoryCheckResp; import cn.axzo.orgmanax.dto.project.team.resp.SingletonOrgTeamCategoryResp; import cn.axzo.orgmanax.dto.project.team.resp.TeamCategoryGroupResp; import cn.axzo.orgmanax.server.project.team.service.ProjectTeamCategoryService; import cn.axzo.orgmanax.server.project.team.service.dto.ListTeamCategoryReq; -import cn.hutool.core.bean.BeanUtil; +import cn.hutool.json.JSONUtil; import java.util.List; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -27,6 +30,7 @@ import org.springframework.web.bind.annotation.RestController; * @author syl * @date 2025/1/3 */ +@Slf4j @RestController @RequestMapping @RequiredArgsConstructor @@ -71,7 +75,15 @@ public class OrgProjectTeamCategoryController implements OrgProjectTeamCategoryA @Override public ApiResult> list(PageOrgTeamCategoryReq req) { + log.info("team_category page request param: [{}]", JSONUtil.toJsonStr(req)); return ApiResult.success(projectTeamCategoryService - .page(BeanUtil.copyProperties(req, ListTeamCategoryReq.class))); + .page(ListTeamCategoryReq.convertListReq(req))); + } + + @Override + public ApiResult> treeList(TreeOrgTeamCategoryReq req) { + log.info("team_category tree request param: [{}]", JSONUtil.toJsonStr(req)); + return ApiResult.success(projectTeamCategoryService + .treeList(ListTeamCategoryReq.convertTreeReq(req))); } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/foundation/impl/ProjectTeamCategoryFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/foundation/impl/ProjectTeamCategoryFoundationServiceImpl.java index 450eb49..d393d59 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/foundation/impl/ProjectTeamCategoryFoundationServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/foundation/impl/ProjectTeamCategoryFoundationServiceImpl.java @@ -28,8 +28,7 @@ public class ProjectTeamCategoryFoundationServiceImpl implements ProjectTeamCate private final TeamCategoryRepository teamCategoryRepository; @Override public PageResp page(ListTeamCategoryReq param) { - PageResp page = teamCategoryRepository.page( - BeanUtil.copyProperties(param, TeamCategoryRepository.PageReq.class)); + PageResp page = teamCategoryRepository.page(convertFromList(param)); return PageResp.builder() .size(page.getSize()) .current(page.getCurrent()) @@ -53,4 +52,13 @@ public class ProjectTeamCategoryFoundationServiceImpl implements ProjectTeamCate } while (pageResp.hasNext()); return categoryList; } + + + public TeamCategoryRepository.PageReq convertFromList(ListTeamCategoryReq param) { + TeamCategoryRepository.PageReq pageReq = BeanUtil.copyProperties(param, TeamCategoryRepository.PageReq.class); + pageReq.setTypes(param.getCategoryTypes()); + pageReq.setCodes(param.getCategoryCodes()); + pageReq.setParentCode(param.getParentCategoryCode()); + return pageReq; + } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/ProjectTeamCategoryService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/ProjectTeamCategoryService.java index 33e9542..cf51c29 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/ProjectTeamCategoryService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/ProjectTeamCategoryService.java @@ -1,8 +1,10 @@ package cn.axzo.orgmanax.server.project.team.service; import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryAggregateDTO; import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryDTO; import cn.axzo.orgmanax.server.project.team.service.dto.ListTeamCategoryReq; +import java.util.List; /** * @author syl @@ -10,5 +12,13 @@ import cn.axzo.orgmanax.server.project.team.service.dto.ListTeamCategoryReq; */ public interface ProjectTeamCategoryService { + /** + * 分页查询班组类别 + */ PageResp page(ListTeamCategoryReq req); + + /** + * 班组类别聚合查询 + */ + List treeList(ListTeamCategoryReq req); } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/dto/ListTeamCategoryReq.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/dto/ListTeamCategoryReq.java index 7620f72..c3bfd26 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/dto/ListTeamCategoryReq.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/dto/ListTeamCategoryReq.java @@ -1,7 +1,15 @@ package cn.axzo.orgmanax.server.project.team.service.dto; import cn.axzo.foundation.page.PageReqV2; -import java.util.List; +import cn.axzo.orgmanax.dto.project.team.enums.TeamCategoryTypeEnum; +import cn.axzo.orgmanax.dto.project.team.enums.TeamSceneEnum; +import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum; +import cn.axzo.orgmanax.dto.project.team.req.PageOrgTeamCategoryReq; +import cn.axzo.orgmanax.dto.project.team.req.TreeOrgTeamCategoryReq; +import cn.hutool.core.bean.BeanUtil; +import com.google.common.collect.Sets; +import java.util.Objects; +import java.util.Set; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -22,5 +30,73 @@ public class ListTeamCategoryReq extends PageReqV2 { /** * nodeId 列表 */ - private List orgNodeIds; + private Set orgNodeIds; + + /** + * 租户id + */ + private Long workspaceId; + + /** + * 班组类别使用场景 + * @see TeamSceneEnum + */ + private String scene; + + /** + * 上级节点code + */ + private String parentCategoryCode; + + /** + * 班组类别列表 categoryTypes + * @see TeamCategoryTypeEnum + */ + private Set categoryTypes; + + /** + * 经营范围/经营范围子级categoryCodes + */ + private Set categoryCodes; + + /** + * 数据有效性标记 + * @see ValidationEnum + */ + private Set validList; + + /** + * 项目内班组idList + */ + private Set projectTeamIds; + + /** + * 平台班组id + */ + private Set platTeamIds; + + public static ListTeamCategoryReq convertListReq(PageOrgTeamCategoryReq req){ + ListTeamCategoryReq param = BeanUtil.copyProperties(req, ListTeamCategoryReq.class); + if (Objects.isNull(req.getValid())) { + param.setValidList(Sets.newHashSet(ValidationEnum.EFFECTIVE.getCode())); + } else if (Objects.equals(ValidationEnum.ALL.getCode(), req.getValid())) { + param.setValidList(ValidationEnum.getAllCode()); + } else { + param.setValidList(Sets.newHashSet(req.getValid())); + } + return param; + } + + public static ListTeamCategoryReq convertTreeReq(TreeOrgTeamCategoryReq req){ + ListTeamCategoryReq param = BeanUtil.copyProperties(req, ListTeamCategoryReq.class); + if (Objects.isNull(req.getValid())) { + param.setValidList(Sets.newHashSet(ValidationEnum.EFFECTIVE.getCode())); + } else if (Objects.equals(ValidationEnum.ALL.getCode(), req.getValid())) { + param.setValidList(ValidationEnum.getAllCode()); + } else { + param.setValidList(Sets.newHashSet(req.getValid())); + } + return param; + } + } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamCategoryServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamCategoryServiceImpl.java index afdc3cf..34e38d8 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamCategoryServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamCategoryServiceImpl.java @@ -1,11 +1,36 @@ package cn.axzo.orgmanax.server.project.team.service.impl; import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.dto.node.dto.NodeProfile; +import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO; +import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum; +import cn.axzo.orgmanax.dto.node.req.ListNodeReq; +import cn.axzo.orgmanax.dto.project.team.dto.OrgProjectTeamDTO; +import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryAggregateDTO; import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryDTO; +import cn.axzo.orgmanax.dto.project.team.enums.TeamCategoryTypeEnum; +import cn.axzo.orgmanax.dto.project.team.req.ListProjectTeamReq; +import cn.axzo.orgmanax.dto.project.team.req.ListProjectTeamReq.ListProjectTeamReqBuilder; +import cn.axzo.orgmanax.server.node.service.NodeService; import cn.axzo.orgmanax.server.project.team.foundation.ProjectTeamCategoryFoundationService; import cn.axzo.orgmanax.server.project.team.service.ProjectTeamCategoryService; +import cn.axzo.orgmanax.server.project.team.service.ProjectTeamService; import cn.axzo.orgmanax.server.project.team.service.dto.ListTeamCategoryReq; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -17,11 +42,150 @@ import org.springframework.stereotype.Service; @Service public class ProjectTeamCategoryServiceImpl implements ProjectTeamCategoryService { + private final static Long NO_PROJECT_TEAM_ID = 0L; + private final static String TOP_CATEGORY_PARENT_CODE = "0"; + @Autowired private ProjectTeamCategoryFoundationService teamCategoryFoundationService; + + @Autowired + private ProjectTeamService projectTeamService; + + @Autowired + private NodeService nodeService; + @Override - public PageResp page(ListTeamCategoryReq req) { + public PageResp page(ListTeamCategoryReq param) { // todo 扩展 - return teamCategoryFoundationService.page(req); + resolveNodeIds(param); + return teamCategoryFoundationService.page(param); + } + + @Override + public List treeList(ListTeamCategoryReq param) { + Map nodeTeamMap = resolveNodeIds(param); + List categoryList = teamCategoryFoundationService.pageAll(param); + if (CollUtil.isEmpty(categoryList)) { + return Lists.newArrayList(); + } + return getCategoryTreeList(categoryList, nodeTeamMap); + } + + private List getCategoryTreeList(List teamCategories, + Map paramNodeTeamMap) { + if (CollUtil.isEmpty(paramNodeTeamMap)) { + log.info("getCategoryTreeList re-query project team"); + ListNodeReq nodeReq = ListNodeReq.builder() + .ids(teamCategories.stream().map(TeamCategoryDTO::getOrgNodeId).collect(Collectors.toSet())) + .includeOrgNodeTypes(Sets.newHashSet(NodeTypeEnum.PROJECT_TEAM.getCode())) + .build(); + List orgNodeList = nodeService.list(nodeReq); + paramNodeTeamMap = orgNodeList.stream().collect( + Collectors.toMap(OrgNodeDTO::getId, this::getProjectTeamId, (v1, v2) -> v1)); + } + + final Map nodeTeamMap = paramNodeTeamMap; + // 构建tree + Map> categoryMap = teamCategories.stream() + .collect(Collectors.groupingBy(TeamCategoryDTO::getParentCode)); + return teamCategories.stream() + .filter(category -> + Objects.equals(category.getType(), TeamCategoryTypeEnum.WORKER_GROUP_CATEGORY.getCode())) + .map(c -> { + TeamCategoryAggregateDTO dto = convert(c, nodeTeamMap, c); + List childrens = categoryMap.get(c.getCode()); + if (ObjectUtils.isNotEmpty(childrens)) { + List categoryRes = childrens.stream() + .map(s -> convert(s, nodeTeamMap, c)) + .collect(Collectors.toList()); + dto.setWorkScopes(categoryRes); + } + return dto; + } + ).collect(Collectors.toList()); + } + + private Long getProjectTeamId(OrgNodeDTO node) { + NodeProfile.ProjectTeamProfile projectTeamProfile = node.resolveProfile(); + if (Objects.isNull(projectTeamProfile)) { + return NO_PROJECT_TEAM_ID; + } + return projectTeamProfile.getProjectTeamId(); + } + + public TeamCategoryAggregateDTO convert(TeamCategoryDTO category, Map nodeTeamMap, + TeamCategoryDTO parentCategory) { + TeamCategoryAggregateDTO dto = BeanUtil.copyProperties(category, TeamCategoryAggregateDTO.class); + Long projectTeamId = nodeTeamMap.get(category.getOrgNodeId()); + if (Objects.nonNull(projectTeamId) && !Objects.equals(projectTeamId, NO_PROJECT_TEAM_ID)) { + dto.setProjectTeamId(projectTeamId); + } + dto.setParentCategoryCode(category.getParentCode()); + if (!Objects.equals(category.getParentCode(), TOP_CATEGORY_PARENT_CODE)) { + dto.setParentCategoryName(parentCategory.getName()); + } + return dto; + } + + private Map resolveNodeIds(ListTeamCategoryReq param) { + boolean hasProjectTeam = CollUtil.isNotEmpty(param.getProjectTeamIds()); + boolean hasPlatTeam = CollUtil.isNotEmpty(param.getPlatTeamIds()); + if (!hasProjectTeam && !hasPlatTeam) { + return Maps.newHashMap(); + } + + Set projectTeamNodeIds = new HashSet<>(); + Set platTeamNodeIds = new HashSet<>(); + List projectTeams = new ArrayList<>(); + if (hasProjectTeam) { + // todo 通过项目班组id获取组织节点id + projectTeams = queryTeams(param.getProjectTeamIds(), NodeTypeEnum.PROJECT_TEAM); + projectTeamNodeIds = projectTeams.stream() + .map(OrgProjectTeamDTO::getOrganizationalNodeId) + .collect(Collectors.toSet()); + } + if (hasPlatTeam) { + // todo 通过平台班组id获取组织节点id + List platTeams = queryTeams(param.getPlatTeamIds(), NodeTypeEnum.TEAM); + projectTeams.addAll(platTeams); + platTeamNodeIds = platTeams.stream() + .map(OrgProjectTeamDTO::getOrganizationalNodeId) + .collect(Collectors.toSet()); + } + + Set teamNodeIds; + // 拼接 + if (!hasProjectTeam) { + teamNodeIds = intersectionNodeId(platTeamNodeIds, param.getOrgNodeIds()); + } else if (!hasPlatTeam) { + teamNodeIds = intersectionNodeId(projectTeamNodeIds, param.getOrgNodeIds()); + } else { + teamNodeIds = intersectionNodeId(Sets.intersection(projectTeamNodeIds, platTeamNodeIds) + , param.getOrgNodeIds()); + } + + log.info("resolveNodeIds teamNodeIds = [{}]", JSONUtil.toJsonStr(teamNodeIds)); + param.setOrgNodeIds(teamNodeIds); + + return projectTeams.stream() + .filter(t -> Objects.nonNull(t.getOrganizationalNodeId())) + .collect(Collectors.toMap(OrgProjectTeamDTO::getOrganizationalNodeId, OrgProjectTeamDTO::getProjectTeamId + , (p, n) -> p)); + } + + private Set intersectionNodeId(Set teamNodeIds, Set orgNodeIds) { + if (CollUtil.isEmpty(orgNodeIds)) { + return teamNodeIds; + } + return Sets.intersection(teamNodeIds, orgNodeIds); + } + + + private List queryTeams(Set teamIds, NodeTypeEnum nodeType) { + ListProjectTeamReqBuilder teamBuilder = ListProjectTeamReq.builder(); + return CollUtil.defaultIfEmpty(projectTeamService + .list(teamBuilder.projectTeamIds(teamIds) + .nodeTypes(Sets.newHashSet(nodeType.getCode())) + .build()), CollUtil.newArrayList()); } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamServiceImpl.java index 4a2d376..9a17cb4 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamServiceImpl.java @@ -43,6 +43,7 @@ public class ProjectTeamServiceImpl implements ProjectTeamService { .ouIds(req.getOuIds()) .platTeamIds(platTeamIds) .workspaceIds(req.getWorkspaceIds()) + .projectTeamIds(req.getProjectTeamIds()) .build(); List orgNodeDTOS = nodeService.list(nodeReq); List orgProjectTeamDTOS = CollUtil.newArrayList(); From 27cd892f5350680ef771e1d0f12810d41bc26572 Mon Sep 17 00:00:00 2001 From: songyuanlun Date: Thu, 9 Jan 2025 14:01:39 +0800 Subject: [PATCH 4/7] =?UTF-8?q?feat(REQ-3488):=20=E7=8F=AD=E7=BB=84?= =?UTF-8?q?=E7=B1=BB=E5=88=AB=E6=A0=91=E5=BD=A2=E6=8E=A5=E5=8F=A3=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=B8=8A=E7=BA=A7=E8=8A=82=E7=82=B9=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/project/team/dto/TeamCategoryAggregateDTO.java | 4 ++-- .../impl/ProjectTeamCategoryFoundationServiceImpl.java | 2 +- .../server/project/team/service/dto/ListTeamCategoryReq.java | 2 +- .../team/service/impl/ProjectTeamCategoryServiceImpl.java | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java index 0fa6993..0b801b9 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java @@ -46,12 +46,12 @@ public class TeamCategoryAggregateDTO { /** * 父级经营范围code */ - private String parentCategoryCode; + private String parentCode; /** * 父级经营范围name */ - private String parentCategoryName; + private String parentName; /** * 经营范围子级 diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/foundation/impl/ProjectTeamCategoryFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/foundation/impl/ProjectTeamCategoryFoundationServiceImpl.java index d393d59..41407d2 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/foundation/impl/ProjectTeamCategoryFoundationServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/foundation/impl/ProjectTeamCategoryFoundationServiceImpl.java @@ -58,7 +58,7 @@ public class ProjectTeamCategoryFoundationServiceImpl implements ProjectTeamCate TeamCategoryRepository.PageReq pageReq = BeanUtil.copyProperties(param, TeamCategoryRepository.PageReq.class); pageReq.setTypes(param.getCategoryTypes()); pageReq.setCodes(param.getCategoryCodes()); - pageReq.setParentCode(param.getParentCategoryCode()); + pageReq.setParentCode(param.getParentCode()); return pageReq; } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/dto/ListTeamCategoryReq.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/dto/ListTeamCategoryReq.java index c3bfd26..7647bc1 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/dto/ListTeamCategoryReq.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/dto/ListTeamCategoryReq.java @@ -46,7 +46,7 @@ public class ListTeamCategoryReq extends PageReqV2 { /** * 上级节点code */ - private String parentCategoryCode; + private String parentCode; /** * 班组类别列表 categoryTypes diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamCategoryServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamCategoryServiceImpl.java index 34e38d8..35ff3ec 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamCategoryServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/team/service/impl/ProjectTeamCategoryServiceImpl.java @@ -120,9 +120,9 @@ public class ProjectTeamCategoryServiceImpl implements ProjectTeamCategoryServic if (Objects.nonNull(projectTeamId) && !Objects.equals(projectTeamId, NO_PROJECT_TEAM_ID)) { dto.setProjectTeamId(projectTeamId); } - dto.setParentCategoryCode(category.getParentCode()); + dto.setParentCode(category.getParentCode()); if (!Objects.equals(category.getParentCode(), TOP_CATEGORY_PARENT_CODE)) { - dto.setParentCategoryName(parentCategory.getName()); + dto.setParentName(parentCategory.getName()); } return dto; } From b67f365607591d52b7188032a9a7edadbf61461f Mon Sep 17 00:00:00 2001 From: songyuanlun Date: Thu, 9 Jan 2025 14:25:00 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat(REQ-3488):=20=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E4=BA=8C=E6=96=B9=E4=BE=9D=E8=B5=96=E6=89=80=E9=9C=80=E7=9A=84?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E8=8C=83=E5=9B=B4=E6=8B=BC=E6=8E=A5=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team/dto/TeamCategoryAggregateDTO.java | 24 +++++++++++++++++++ .../dto/project/team/enums/DelimiterEnum.java | 19 +++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/DelimiterEnum.java diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java index 0b801b9..630feea 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/dto/TeamCategoryAggregateDTO.java @@ -1,8 +1,11 @@ package cn.axzo.orgmanax.dto.project.team.dto; +import cn.axzo.orgmanax.dto.project.team.enums.DelimiterEnum; import cn.axzo.orgmanax.dto.project.team.enums.TeamCategoryTypeEnum; import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum; +import cn.hutool.core.collection.CollUtil; import java.util.List; +import java.util.stream.Collectors; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -58,4 +61,25 @@ public class TeamCategoryAggregateDTO { */ private List workScopes; + + /** + * 构建业务上需要 业务范围拼接 + */ + public static String buildProjectBusinessScopeString(List value) { + String businessScope = ""; + if (CollUtil.isNotEmpty(value)) { + businessScope = value.stream().map(e -> { + StringBuilder sb = new StringBuilder(); + sb.append(e.getName()); + if (CollUtil.isNotEmpty(e.getWorkScopes())) { + String workscope = e.getWorkScopes().stream().map(TeamCategoryAggregateDTO::getName).collect( + Collectors.joining(DelimiterEnum.PAUSE.getDelimiter())); + sb.append(DelimiterEnum.HYPHEN.getDelimiter()).append(workscope); + } + return sb.toString(); + }).collect(Collectors.joining(DelimiterEnum.BUSINESS_SCOPE_VERTICAL_BAR.getDelimiter())); + } + return businessScope; + } + } diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/DelimiterEnum.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/DelimiterEnum.java new file mode 100644 index 0000000..ff53731 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/team/enums/DelimiterEnum.java @@ -0,0 +1,19 @@ +package cn.axzo.orgmanax.dto.project.team.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum DelimiterEnum { + + /** + * 分隔符 + */ + PAUSE("、"), + CHINESE_COMMA(","), + BUSINESS_SCOPE_VERTICAL_BAR("|"), + HYPHEN("-"), + ; + private final String delimiter; +} From 1141598228c2f4d8ad2883181f820fb604e421ef Mon Sep 17 00:00:00 2001 From: zhanghongbo Date: Thu, 9 Jan 2025 14:32:31 +0800 Subject: [PATCH 6/7] =?UTF-8?q?feat(REQ-3488):=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=B7=A5=E4=BA=BAid=EF=BC=8C=20=E7=8F=AD?= =?UTF-8?q?=E7=BB=84id=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../orgmanax/dto/node/dto/NodeProfile.java | 47 ++++++++++++++++ .../dto/node/dto/OrgNodeBriefDTO.java | 3 ++ .../orgmanax/dto/node/req/ListNodeReq.java | 27 ++++++++++ .../dto/nodeuser/dto/NodeUserDTO.java | 54 +------------------ .../dto/nodeuser/dto/NodeUserProfile.java | 9 ++++ .../OrgProjectWorkerController.java | 2 +- .../service/OrgProjectWorkerService.java | 14 +++++ .../impl/OrgProjectWorkerServiceImpl.java | 51 +++++++++++++++--- ...OrgProjectWorkerProfessionServiceImpl.java | 2 +- 9 files changed, 147 insertions(+), 62 deletions(-) diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java index 37208a7..9ee7dee 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java @@ -1,6 +1,7 @@ package cn.axzo.orgmanax.dto.node.dto; import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum; +import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.ImmutableMap; import lombok.AllArgsConstructor; @@ -10,6 +11,7 @@ import lombok.experimental.SuperBuilder; import java.util.Date; import java.util.Map; +import java.util.Optional; /** * 部门Profile定义 @@ -204,4 +206,49 @@ public class NodeProfile { public static Class resolveProfileClass(Integer nodeType) { return typeClassMapping.getOrDefault(nodeType, JSONObject.class); } + + /** + * 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用 + * @return + */ + public static Long resolveProjectTeamId(OrgNodeBriefDTO node) { + if (node == null || node.getNodeType() == null) { + return null; + } + Integer nodeType = node.getNodeType(); + if (nodeType.equals(NodeTypeEnum.PROJECT_TEAM.getValue())) { + //项目班组 + NodeProfile.ProjectTeamProfile projectTeamProfile = node.resolveProfile(); + return Optional.ofNullable(projectTeamProfile).orElse(new NodeProfile.ProjectTeamProfile()).getProjectTeamId(); + } + if (nodeType.equals(NodeTypeEnum.PROJECT_GROUP.getValue())) { + //项目小组 + NodeProfile.ProjectGroupProfile projectGroupProfile = node.resolveProfile(); + return Optional.ofNullable(projectGroupProfile).orElse(new NodeProfile.ProjectGroupProfile()).getBelongProjectTeamId(); + } + return null; + } + + /** + * 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用 + * @return + */ + public static Long resolvePlatTeamId(OrgNodeBriefDTO node) { + if (node == null || node.getNodeType() == null) { + return null; + } + Integer nodeType = node.getNodeType(); + if (nodeType.equals(NodeTypeEnum.PROJECT_TEAM.getValue())) { + //项目班组 + NodeProfile.ProjectTeamProfile projectTeamProfile = node.resolveProfile(); + return Optional.ofNullable(projectTeamProfile).orElse(new NodeProfile.ProjectTeamProfile()).getPlatTeamId(); + } + if (nodeType.equals(NodeTypeEnum.PROJECT_GROUP.getValue())) { + //项目小组 + NodeProfile.ProjectGroupProfile projectGroupProfile = node.resolveProfile(); + return Optional.ofNullable(projectGroupProfile).orElse(new NodeProfile.ProjectGroupProfile()).getBelongPlatTeamId(); + } + //TODO 是否还有平台班组类型也有平台班组id?有需要自己下面继续实现 + return null; + } } \ No newline at end of file diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/OrgNodeBriefDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/OrgNodeBriefDTO.java index a418626..e7bd35a 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/OrgNodeBriefDTO.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/OrgNodeBriefDTO.java @@ -57,6 +57,9 @@ public class OrgNodeBriefDTO implements Serializable { /** * 节点信息,json,不同的节点类型,格式不一。如班组节点的解散状态等 + * @see OrgNodeBriefDTO#resolveProfile() + * @see NodeProfile#resolveProjectTeamId + * @see NodeProfile#resolvePlatTeamId */ private JSONObject profile; diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java index d504b34..55db241 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java @@ -9,6 +9,7 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import java.util.Collection; import java.util.Collections; import java.util.Set; @@ -161,4 +162,30 @@ public class ListNodeReq extends PageReqV2 { */ private Integer groupType; + /** + * todo 未实现 + * 小组id列表 + */ + private Collection groupIds; + + /** + * todo 未实现 + * 小组id + */ + private Long groupId; + + /** + * todo 未实现 + * 小组长工人身份id列表 + */ + private Collection ownerWorkerIdentityIds; + + /** + * todo 未实现 + * 小组长工人身份id + */ + private Long ownerWorkerIdentityId; + + + } \ No newline at end of file diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java index cf78f6b..f0f4eee 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java @@ -150,6 +150,8 @@ public class NodeUserDTO implements Serializable { private Integer activeFlag; /** + * @see NodeUserDTO#resolveProfile() + * @see NodeUserProfile#resolveProjectWorkerId * 部门人员信息,json,不同部门类型的部门用户,格式不一。 */ private JSONObject profile; @@ -219,56 +221,4 @@ public class NodeUserDTO implements Serializable { } return (T) Optional.ofNullable(profile).map(p -> JSONObject.parseObject(p.toString(), clazz)).orElse(null); } - - public Long getProjectWorkerId() { - if (ObjectUtil.isEmpty(profile)) { - return null; - } - return profile.getLong("projectWorkerId"); - } - - /** - * 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用 - * @return - */ - public Long getProjectTeamId() { - if (node == null || node.getNodeType() == null) { - return null; - } - Integer nodeType = node.getNodeType(); - if (nodeType.equals(NodeTypeEnum.PROJECT_TEAM.getValue())) { - //项目班组 - NodeProfile.ProjectTeamProfile projectTeamProfile = node.resolveProfile(); - return Optional.ofNullable(projectTeamProfile).orElse(new NodeProfile.ProjectTeamProfile()).getProjectTeamId(); - } - if (nodeType.equals(NodeTypeEnum.PROJECT_GROUP.getValue())) { - //项目小组 - NodeProfile.ProjectGroupProfile projectGroupProfile = node.resolveProfile(); - return Optional.ofNullable(projectGroupProfile).orElse(new NodeProfile.ProjectGroupProfile()).getBelongProjectTeamId(); - } - return null; - } - - /** - * 需指定{@link ListNodeUserReq.Needs#getNode()} ()} 为true才有用 - * @return - */ - public Long getPlatTeamId() { - if (node == null || node.getNodeType() == null) { - return null; - } - Integer nodeType = node.getNodeType(); - if (nodeType.equals(NodeTypeEnum.PROJECT_TEAM.getValue())) { - //项目班组 - NodeProfile.ProjectTeamProfile projectTeamProfile = node.resolveProfile(); - return Optional.ofNullable(projectTeamProfile).orElse(new NodeProfile.ProjectTeamProfile()).getPlatTeamId(); - } - if (nodeType.equals(NodeTypeEnum.PROJECT_GROUP.getValue())) { - //项目小组 - NodeProfile.ProjectGroupProfile projectGroupProfile = node.resolveProfile(); - return Optional.ofNullable(projectGroupProfile).orElse(new NodeProfile.ProjectGroupProfile()).getBelongPlatTeamId(); - } - //TODO 是否还有平台班组类型也有平台班组id?有需要自己下面继续实现 - return null; - } } diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserProfile.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserProfile.java index 435da76..62cb7ea 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserProfile.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserProfile.java @@ -1,6 +1,7 @@ package cn.axzo.orgmanax.dto.nodeuser.dto; import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.ImmutableMap; import lombok.AllArgsConstructor; @@ -134,4 +135,12 @@ public class NodeUserProfile { } return typeClassMapping.getOrDefault(nodeType, JSONObject.class); } + + public static Long resolveProjectWorkerId(NodeUserDTO nodeUserDTO) { + if (ObjectUtil.isEmpty(nodeUserDTO) || ObjectUtil.isEmpty(nodeUserDTO.getProfile())) { + return null; + } + JSONObject profile = nodeUserDTO.getProfile(); + return profile.getLong("projectWorkerId"); + } } \ No newline at end of file diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/controller/OrgProjectWorkerController.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/controller/OrgProjectWorkerController.java index 6a336e0..249610e 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/controller/OrgProjectWorkerController.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/controller/OrgProjectWorkerController.java @@ -32,6 +32,6 @@ public class OrgProjectWorkerController implements OrgProjectWorkerApi { @Override public ApiResult> workerList(@Valid ProjectDirectGroupWorkerListReq req) { - return null; + return ApiResult.success(orgProjectWorkerService.workerList(req)); } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/OrgProjectWorkerService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/OrgProjectWorkerService.java index 8e3db58..6db257f 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/OrgProjectWorkerService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/OrgProjectWorkerService.java @@ -1,7 +1,9 @@ package cn.axzo.orgmanax.server.project.worker.service; import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupUngroupedWorkerReq; +import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupWorkerListReq; import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupUngroupedWorkerResp; +import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupWorkerListResp; import java.util.List; @@ -10,5 +12,17 @@ import java.util.List; * @date 2025/1/8 */ public interface OrgProjectWorkerService { + /** + * 获取班组下未分组的工人 + * @param req + * @return + */ List ungroupedWorker(ProjectDirectGroupUngroupedWorkerReq req); + + /** + * 获取直属小组下工人 + * @param req + * @return + */ + List workerList(ProjectDirectGroupWorkerListReq req); } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java index 70d27b8..57e9d47 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java @@ -4,6 +4,7 @@ import cn.axzo.orgmanax.api.invite.enums.WorkerInviteStatusEnum; import cn.axzo.orgmanax.api.project.group.enums.ProjectGroupTypeEnum; import cn.axzo.orgmanax.api.project.worker.enums.ProjectWorkerStatusEnum; import cn.axzo.orgmanax.dto.common.IdentityType; +import cn.axzo.orgmanax.dto.node.dto.NodeProfile; import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO; import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum; import cn.axzo.orgmanax.dto.node.req.ListNodeReq; @@ -12,7 +13,9 @@ import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserProfile; import cn.axzo.orgmanax.dto.nodeuser.enums.ProjectGroupWorkerStatusEnum; import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupUngroupedWorkerReq; +import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupWorkerListReq; import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupUngroupedWorkerResp; +import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupWorkerListResp; import cn.axzo.orgmanax.dto.project.group.resp.ProjectWorkerProfessionRes; import cn.axzo.orgmanax.dto.project.group.resp.ProjectWorkerSkillTagRes; import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO; @@ -52,6 +55,11 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { private OrgProjectWorkerProfessionSkillService orgProjectWorkerProfessionSkillService; private OrgProjectWorkerProfessionService orgProjectWorkerProfessionService; + /** + * 获取班组下未分组的工人 + * @param req + * @return + */ @Override public List ungroupedWorker(ProjectDirectGroupUngroupedWorkerReq req) { //查询班组下工人 @@ -69,7 +77,7 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { if (ObjectUtil.isEmpty(allNodeUserDTOS)) { return Collections.emptyList(); } - Long projectTeamId = allNodeUserDTOS.get(0).getProjectTeamId(); + Long projectTeamId = NodeProfile.resolveProjectTeamId(allNodeUserDTOS.get(0).getNode()); List ungroupedWorkerList = allNodeUserDTOS; @@ -94,11 +102,11 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { .build()); //直属小组下的工人id列表 List groupProjectWorkerIds = nodeUserDTOS4Group.stream() - .map(nodeUserDTO -> nodeUserDTO.getProjectWorkerId()) + .map(nodeUserDTO -> NodeUserProfile.resolveProjectWorkerId(nodeUserDTO)) .collect(Collectors.toList()); //排除直属小组下的工人 ungroupedWorkerList = allNodeUserDTOS.stream() - .filter(nodeUserDTO -> !groupProjectWorkerIds.contains(nodeUserDTO.getProjectWorkerId())) + .filter(nodeUserDTO -> !groupProjectWorkerIds.contains(NodeUserProfile.resolveProjectWorkerId(nodeUserDTO))) .collect(Collectors.toList()); } @@ -124,12 +132,39 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { return this.convertUngroupedWorkerDto(ungroupedWorkerList); } + /** + * 获取直属小组下工人 + * @param req + * @return + */ + @Override + public List workerList(ProjectDirectGroupWorkerListReq req) { + List orgNodeDTOS = nodeService.list(ListNodeReq.builder() + .includeOrgNodeTypes(Sets.newHashSet(NodeTypeEnum.PROJECT_GROUP.getValue())) + .workspaceIds(Sets.newHashSet(req.getWorkspaceId())) + .groupIds(req.getGroupIdList()) + .groupId(req.getGroupId()) + .ownerWorkerIdentityId(req.getWorkerIdentityId()) + .ownerWorkerIdentityIds(req.getGroupOwnerIdentityIdList()) + .build()); + if (ObjectUtil.isEmpty(orgNodeDTOS)) { + return Collections.emptyList(); + } + List orgNodeIds = orgNodeDTOS.stream().map(OrgNodeDTO::getId).collect(Collectors.toList()); +// nodeUserService.list(orgNodeDTOS.) + + + + + return null; + } + private List convertUngroupedWorkerDto(List nodeUserDTOS) { if (CollUtil.isEmpty(nodeUserDTOS)) { return Collections.emptyList(); } List projectWorkerIdList = nodeUserDTOS.stream() - .map(NodeUserDTO::getProjectWorkerId).collect(Collectors.toList()); + .map(nodeUser -> NodeUserProfile.resolveProjectWorkerId(nodeUser)).collect(Collectors.toList()); List professionDTOS = orgProjectWorkerProfessionService.listValidWorkerProfession(projectWorkerIdList); Map> professionMap = professionDTOS.stream().collect(Collectors.groupingBy(ProfessionDTO::getProjectWorkerId)); @@ -140,11 +175,11 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { ungroupedWorker.setWorkerName(i.getRealName()); ungroupedWorker.setWorkerPhone(i.getPhone()); ungroupedWorker.setWorkerFaceUrl(i.getPersonProfile().getAvatarUrl()); - ungroupedWorker.setPlatTeamId(i.getPlatTeamId()); - ungroupedWorker.setProjectTeamId(i.getProjectTeamId()); + ungroupedWorker.setPlatTeamId(NodeProfile.resolvePlatTeamId(i.getNode())); + ungroupedWorker.setProjectTeamId(NodeProfile.resolveProjectTeamId(i.getNode())); // ungroupedWorker.setBlackType(i.getBlackType()); todo 网关从maokai 宽表中获取 // 工种 - List professions = professionMap.get(i.getProjectWorkerId()); + List professions = professionMap.get(NodeUserProfile.resolveProjectWorkerId(i)); if (CollUtil.isNotEmpty(professions)) { List professionList = professions.stream().map(professionDTO -> { ProjectWorkerProfessionRes res = new ProjectWorkerProfessionRes(); @@ -159,7 +194,7 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { } // 技能标签 - List skillTagDTOS = professionMap.get(i.getProjectWorkerId()).stream().flatMap(professionDTO -> professionDTO.getSkillTags().stream()).collect(Collectors.toList()); + List skillTagDTOS = professionMap.get(NodeUserProfile.resolveProjectWorkerId(i)).stream().flatMap(professionDTO -> professionDTO.getSkillTags().stream()).collect(Collectors.toList()); if (CollUtil.isNotEmpty(skillTagDTOS)) { List workerSkillTagDtoList = skillTagDTOS.stream().map( w -> { 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 898b74e..6b009cc 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 @@ -132,7 +132,7 @@ public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerPr return Collections.emptyMap(); } - List projectWorkerIds = nodeUserDTOS.stream().map(nodeUserDTO -> nodeUserDTO.getProjectWorkerId()).collect(toList()); + List projectWorkerIds = nodeUserDTOS.stream().map(nodeUserDTO -> NodeUserProfile.resolveProjectWorkerId(nodeUserDTO)).collect(toList()); Map nodeUserDTOMap = nodeUserDTOS.stream().collect(toMap(NodeUserDTO::getIdentityId, identity())); //获取工人工种 From 5ddfcaaefcb8a34f8c0070f1b0c2a60784885886 Mon Sep 17 00:00:00 2001 From: zhanghongbo Date: Thu, 9 Jan 2025 15:55:43 +0800 Subject: [PATCH 7/7] =?UTF-8?q?feat(REQ-3488):=20=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=B0=8F=E7=BB=84=E4=B8=8B=E5=B7=A5=E4=BA=BA?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../orgmanax/dto/node/req/ListNodeReq.java | 15 +--- .../group/enums/ProjectGroupStatusEnum.java | 23 ++++++ .../req/ProjectDirectGroupWorkerListReq.java | 12 --- .../enums/ProjectGroupWorkerStatusEnum.java | 23 ++++++ .../workerprofession/enums/SkillTypeEnum.java | 29 ------- .../impl/OrgProjectWorkerServiceImpl.java | 76 ++++++++++++------- ...OrgProjectWorkerProfessionServiceImpl.java | 4 +- 7 files changed, 100 insertions(+), 82 deletions(-) create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/group/enums/ProjectGroupStatusEnum.java create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/worker/enums/ProjectGroupWorkerStatusEnum.java delete mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/workerprofession/enums/SkillTypeEnum.java diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java index 55db241..e1fd085 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/req/ListNodeReq.java @@ -2,6 +2,7 @@ package cn.axzo.orgmanax.dto.node.req; import cn.axzo.foundation.page.PageReqV2; import cn.axzo.orgmanax.dto.common.WorkspaceOuPair; +import cn.axzo.orgmanax.dto.project.group.enums.ProjectGroupStatusEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -168,12 +169,6 @@ public class ListNodeReq extends PageReqV2 { */ private Collection groupIds; - /** - * todo 未实现 - * 小组id - */ - private Long groupId; - /** * todo 未实现 * 小组长工人身份id列表 @@ -182,10 +177,8 @@ public class ListNodeReq extends PageReqV2 { /** * todo 未实现 - * 小组长工人身份id + * 小组状态 0-未激活 1-已激活 2-已结束 + * @see ProjectGroupStatusEnum */ - private Long ownerWorkerIdentityId; - - - + private Integer groupStatus; } \ No newline at end of file diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/group/enums/ProjectGroupStatusEnum.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/group/enums/ProjectGroupStatusEnum.java new file mode 100644 index 0000000..b327138 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/group/enums/ProjectGroupStatusEnum.java @@ -0,0 +1,23 @@ +package cn.axzo.orgmanax.dto.project.group.enums; + +import lombok.Getter; + +/** + * @author wenXueFeng + * @date 2022/10/19 16:35 + */ +@Getter +public enum ProjectGroupStatusEnum { + NOT_ACTIVE(0, "未激活"), + ACTIVE(1, "已激活"), + CLOSED(2, "已结束"); + + Integer value; + String desc; + + + ProjectGroupStatusEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/group/req/ProjectDirectGroupWorkerListReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/group/req/ProjectDirectGroupWorkerListReq.java index 0348964..b1e2794 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/group/req/ProjectDirectGroupWorkerListReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/group/req/ProjectDirectGroupWorkerListReq.java @@ -16,14 +16,6 @@ public class ProjectDirectGroupWorkerListReq { * 小组id集合 */ private List groupIdList; - /** - * 小组id - */ - private Long groupId; - /** - * 工人身份id - */ - private Long workerIdentityId; /** * 工人身份id集合 */ @@ -32,10 +24,6 @@ public class ProjectDirectGroupWorkerListReq { * 项目id */ private Long workspaceId; - /** - * 小组长工人身份id - */ - private Long groupOwnerIdentityId; /** * 小组长工人身份id集合 */ diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/worker/enums/ProjectGroupWorkerStatusEnum.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/worker/enums/ProjectGroupWorkerStatusEnum.java new file mode 100644 index 0000000..ba2d9c3 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/project/worker/enums/ProjectGroupWorkerStatusEnum.java @@ -0,0 +1,23 @@ +package cn.axzo.orgmanax.dto.project.worker.enums; + +import lombok.Getter; + +/** + * @author wenXueFeng + * @date 2022/10/20 13:53 + */ +@Getter +public enum ProjectGroupWorkerStatusEnum { + VALID(0, "有效"), + NO_VALID(1, "无效"), + ; + + Integer value; + String desc; + + + ProjectGroupWorkerStatusEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/workerprofession/enums/SkillTypeEnum.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/workerprofession/enums/SkillTypeEnum.java deleted file mode 100644 index 9e9b5ed..0000000 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/workerprofession/enums/SkillTypeEnum.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.axzo.orgmanax.infra.dao.workerprofession.enums; - -import com.baomidou.mybatisplus.annotation.EnumValue; -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * 技术类型 - * 无->0 - * 普工->1 - * 技工->2 - * - * @author yangzhi - * @Date 2022/5/6 15:06 - **/ -@Getter -@AllArgsConstructor -public enum SkillTypeEnum { - /** - * 技术类型:1普工,2技工 - */ - NONE(0, "无"), - COMMON(1, "普工"), - ENGINE_MAN(2, "技工"), - ; - @EnumValue - private final Integer value; - private final String desc; -} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java index 57e9d47..6c44af5 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/project/worker/service/impl/OrgProjectWorkerServiceImpl.java @@ -12,15 +12,12 @@ import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO; import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserProfile; import cn.axzo.orgmanax.dto.nodeuser.enums.ProjectGroupWorkerStatusEnum; import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; +import cn.axzo.orgmanax.dto.project.group.enums.ProjectGroupStatusEnum; import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupUngroupedWorkerReq; import cn.axzo.orgmanax.dto.project.group.req.ProjectDirectGroupWorkerListReq; -import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupUngroupedWorkerResp; -import cn.axzo.orgmanax.dto.project.group.resp.ProjectDirectGroupWorkerListResp; -import cn.axzo.orgmanax.dto.project.group.resp.ProjectWorkerProfessionRes; -import cn.axzo.orgmanax.dto.project.group.resp.ProjectWorkerSkillTagRes; +import cn.axzo.orgmanax.dto.project.group.resp.*; import cn.axzo.orgmanax.dto.workerprofession.dto.ProfessionDTO; import cn.axzo.orgmanax.dto.workerprofession.dto.SkillTagDTO; -import cn.axzo.orgmanax.dto.workerprofession.dto.WorkerProfessionDto; import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionSkillTypeEnum; import cn.axzo.orgmanax.server.invite.service.ProjectWorkerInviteService; import cn.axzo.orgmanax.server.node.service.NodeService; @@ -38,6 +35,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -129,7 +127,23 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { ungroupedWorkerList = lpw; } } - return this.convertUngroupedWorkerDto(ungroupedWorkerList); + + if (ObjectUtil.isEmpty(ungroupedWorkerList)) { + return Collections.emptyList(); + } + + List projectWorkerBaseInfos = this.getProjectWorkerBaseInfos(ungroupedWorkerList); + List resps = BeanUtil.copyToList(projectWorkerBaseInfos, ProjectDirectGroupUngroupedWorkerResp.class); + + Map nodeUserDTOMap = ungroupedWorkerList.stream().collect(Collectors.toMap(NodeUserDTO::getIdentityId, Function.identity(), (o, n) -> o)); + for (ProjectDirectGroupUngroupedWorkerResp resp : resps) { + NodeUserDTO nodeUserDTO = nodeUserDTOMap.get(resp.getWorkerIdentityId()); + if (nodeUserDTO != null) { + resp.setPlatTeamId(NodeProfile.resolvePlatTeamId(nodeUserDTO.getNode())); + resp.setProjectTeamId(NodeProfile.resolvePlatTeamId(nodeUserDTO.getNode())); + } + } + return resps; } /** @@ -139,27 +153,37 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { */ @Override public List workerList(ProjectDirectGroupWorkerListReq req) { + //查询小组信息 List orgNodeDTOS = nodeService.list(ListNodeReq.builder() .includeOrgNodeTypes(Sets.newHashSet(NodeTypeEnum.PROJECT_GROUP.getValue())) .workspaceIds(Sets.newHashSet(req.getWorkspaceId())) .groupIds(req.getGroupIdList()) - .groupId(req.getGroupId()) - .ownerWorkerIdentityId(req.getWorkerIdentityId()) .ownerWorkerIdentityIds(req.getGroupOwnerIdentityIdList()) + .groupType(ProjectGroupTypeEnum.DIRECTLY_UNDER.getValue()) + .groupStatus(ProjectGroupStatusEnum.ACTIVE.getValue()) .build()); if (ObjectUtil.isEmpty(orgNodeDTOS)) { return Collections.emptyList(); } List orgNodeIds = orgNodeDTOS.stream().map(OrgNodeDTO::getId).collect(Collectors.toList()); -// nodeUserService.list(orgNodeDTOS.) + //查询小组下工人信息 + List nodeUserDTOS = nodeUserService.list(ListNodeUserReq.builder() + .organizationalNodeIds(orgNodeIds) + .identityIds(req.getWorkerIdentityIdList()) + .projectGroupWorkerStatus(ProjectGroupWorkerStatusEnum.VALID.getValue()) + .identityType(IdentityType.WORKER.getCode()) + .needs(ListNodeUserReq.Needs.builder().personProfile(true).build()) + .build()); + if (ObjectUtil.isEmpty(nodeUserDTOS)) { + return Collections.emptyList(); + } - - - return null; + List projectWorkerBaseInfos = getProjectWorkerBaseInfos(nodeUserDTOS); + return BeanUtil.copyToList(projectWorkerBaseInfos, ProjectDirectGroupWorkerListResp.class); } - private List convertUngroupedWorkerDto(List nodeUserDTOS) { + private List getProjectWorkerBaseInfos(List nodeUserDTOS) { if (CollUtil.isEmpty(nodeUserDTOS)) { return Collections.emptyList(); } @@ -169,14 +193,12 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { Map> professionMap = professionDTOS.stream().collect(Collectors.groupingBy(ProfessionDTO::getProjectWorkerId)); return nodeUserDTOS.stream().map(i -> { - ProjectDirectGroupUngroupedWorkerResp ungroupedWorker = new ProjectDirectGroupUngroupedWorkerResp(); - ungroupedWorker.setWorkerPersonId(i.getPersonId()); - ungroupedWorker.setWorkerIdentityId(i.getIdentityId()); - ungroupedWorker.setWorkerName(i.getRealName()); - ungroupedWorker.setWorkerPhone(i.getPhone()); - ungroupedWorker.setWorkerFaceUrl(i.getPersonProfile().getAvatarUrl()); - ungroupedWorker.setPlatTeamId(NodeProfile.resolvePlatTeamId(i.getNode())); - ungroupedWorker.setProjectTeamId(NodeProfile.resolveProjectTeamId(i.getNode())); + ProjectWorkerBaseInfo workerBaseInfo = new ProjectDirectGroupUngroupedWorkerResp(); + workerBaseInfo.setWorkerPersonId(i.getPersonId()); + workerBaseInfo.setWorkerIdentityId(i.getIdentityId()); + workerBaseInfo.setWorkerName(i.getRealName()); + workerBaseInfo.setWorkerPhone(i.getPhone()); + workerBaseInfo.setWorkerFaceUrl(i.getPersonProfile().getAvatarUrl()); // ungroupedWorker.setBlackType(i.getBlackType()); todo 网关从maokai 宽表中获取 // 工种 List professions = professionMap.get(NodeUserProfile.resolveProjectWorkerId(i)); @@ -188,9 +210,9 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { return res; }).collect(Collectors.toList()); - ungroupedWorker.setProfessionList(professionList); + workerBaseInfo.setProfessionList(professionList); // 技工 or 普工, 经讨论,取第一个即可 - ungroupedWorker.setProfessionCategoryName(DataCollectionSkillTypeEnum.getType(professions.get(0).getSkillType()).getDesc()); + workerBaseInfo.setProfessionCategoryName(DataCollectionSkillTypeEnum.getType(professions.get(0).getSkillType()).getDesc()); } // 技能标签 @@ -204,13 +226,13 @@ public class OrgProjectWorkerServiceImpl implements OrgProjectWorkerService { return res; } ).collect(Collectors.toList()); - ungroupedWorker.setSkillTagList(workerSkillTagDtoList); + workerBaseInfo.setSkillTagList(workerSkillTagDtoList); } NodeUserProfile.ProjectWorkerProfile projectWorkerProfile = i.resolveProfile(); - ungroupedWorker.setStatus(projectWorkerProfile.getProjectWorkerStatus()); - ungroupedWorker.setJoinAt(i.getJoinAt()); - return ungroupedWorker; + workerBaseInfo.setStatus(projectWorkerProfile.getProjectWorkerStatus()); + workerBaseInfo.setJoinAt(i.getJoinAt()); + return workerBaseInfo; }).collect(Collectors.toList()); } 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 6b009cc..8fb3d82 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 @@ -27,7 +27,6 @@ import cn.axzo.orgmanax.infra.client.datacollection.DataCollectionDictInfoClient import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionListProfessionCategoriesResp; import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionSkillTypeEnum; import cn.axzo.orgmanax.infra.dao.workerprofession.entity.WorkerProfessionTag; -import cn.axzo.orgmanax.infra.dao.workerprofession.enums.SkillTypeEnum; import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionHistoryRepository; import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionSkillTagRepository; import cn.axzo.orgmanax.infra.dao.workerprofession.repository.WorkerProfessionTagRepository; @@ -46,7 +45,6 @@ import com.alibaba.fastjson.JSON; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; @@ -385,7 +383,7 @@ public class OrgProjectWorkerProfessionServiceImpl implements OrgProjectWorkerPr private ProjectWorkerProfessionResp convertTagToResp(WorkerProfessionTag workerProfessionTag) { ProjectWorkerProfessionResp workerProfessionTagResp = BeanUtil.copyProperties(workerProfessionTag, ProjectWorkerProfessionResp.class); - workerProfessionTagResp.setType(Optional.ofNullable(workerProfessionTag.getType()).orElse(SkillTypeEnum.COMMON.getValue())); + workerProfessionTagResp.setType(Optional.ofNullable(workerProfessionTag.getType()).orElse(DataCollectionSkillTypeEnum.COMMON.getValue())); return workerProfessionTagResp; }