From 58d057b62d06b0aa547cd95495a7926902181c0c Mon Sep 17 00:00:00 2001 From: songyuanlun Date: Thu, 9 Jan 2025 13:57:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-3488):=20=E7=8F=AD=E7=BB=84=E7=B1=BB?= =?UTF-8?q?=E5=88=AB=E6=A0=91=E5=BD=A2=E7=BB=93=E6=9E=84=E5=AE=9E=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();