From 22d1ab0f05c07362dcf251b5aaec55a1b558b113 Mon Sep 17 00:00:00 2001 From: songyuanlun Date: Mon, 23 Dec 2024 22:23:58 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(REQ-3282):=20=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E5=B2=97=E4=BD=8D=E5=88=86=E9=A1=B5=E6=8E=A5=E5=8F=A3=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../orgmanax/api/orgjob/feign/OrgJobApi.java | 10 +- .../test/resources/http/orgjob/org-job.http | 13 +- .../dto/job/dto/OrgJobCodeConstants.java | 39 +++ .../axzo/orgmanax/dto/job/dto/OrgJobDTO.java | 78 +++++- .../orgmanax/dto/job/dto/OrgJobGroupDTO.java | 72 +++++ .../dto/job/dto/OrgJobGroupRelationDTO.java | 59 ++++ .../dto/OrgJobGroupRelationHistoryDTO.java | 60 ++++ .../dto/job/dto/OrgJobHistoryDTO.java | 64 +++++ .../cn/axzo/orgmanax/dto/job/dto/RoleDTO.java | 92 +++++++ .../dto/job/enums/VisibilityEnum.java | 24 ++ .../orgmanax/dto/job/req/ListOrgJobReq.java | 24 +- .../orgmanax/dto/job/req/PageOrgJobReq.java | 64 ++--- orgmanax-infra/pom.xml | 6 + .../infra/client/tyr/RoleGateway.java | 26 ++ .../infra/client/tyr/enums/RoleTypeEnum.java | 37 +++ .../infra/client/util/RpcWrapper.java | 30 ++ .../infra/dao/orgjob/entity/OrgJob.java | 30 +- .../infra/dao/orgjob/entity/OrgJobGroup.java | 4 - .../orgjob/entity/OrgJobGroupRelation.java | 8 +- .../entity/OrgJobGroupRelationHistory.java | 6 +- .../dao/orgjob/entity/OrgJobHistory.java | 4 - .../OrgJobGroupRelationRepository.java | 50 ++++ .../repository/OrgJobGroupRepository.java | 52 ++++ .../repository/OrgJobQueryRepository.java | 24 +- .../OrgJobGroupRelationRepositoryImpl.java | 39 +++ .../impl/OrgJobGroupRepositoryImpl.java | 40 +++ .../impl/OrgJobQueryRepositoryImpl.java | 13 +- .../orgjob/controller/OrgJobController.java | 10 +- .../OrgJobGroupFoundationService.java | 27 ++ .../OrgJobGroupRelationFoundationService.java | 26 ++ .../impl/OrgJobFoundationServiceImpl.java | 10 +- .../OrgJobGroupFoundationServiceImpl.java | 55 ++++ ...JobGroupRelationFoundationServiceImpl.java | 55 ++++ .../orgjob/service/OrgJobBizService.java | 23 ++ .../server/orgjob/service/OrgJobService.java | 8 +- .../service/dto/OrgJobAggregatePageParam.java | 77 ++++++ .../service/dto/OrgJobGroupPageParam.java | 47 ++++ .../dto/OrgJobGroupRelationPageParam.java | 45 +++ .../orgjob/service/dto/OrgJobListParam.java | 64 +++++ .../orgjob/service/dto/OrgJobPageParam.java | 82 ++++++ .../service/impl/OrgJobServiceImpl.java | 260 +++++++++++++++++- 41 files changed, 1648 insertions(+), 109 deletions(-) create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobCodeConstants.java create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupDTO.java create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupRelationDTO.java create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupRelationHistoryDTO.java create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobHistoryDTO.java create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/RoleDTO.java create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/enums/VisibilityEnum.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/tyr/RoleGateway.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/tyr/enums/RoleTypeEnum.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/util/RpcWrapper.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobGroupRelationRepository.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobGroupRepository.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobGroupRelationRepositoryImpl.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobGroupRepositoryImpl.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/OrgJobGroupFoundationService.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/OrgJobGroupRelationFoundationService.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobGroupFoundationServiceImpl.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobGroupRelationFoundationServiceImpl.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/OrgJobBizService.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobAggregatePageParam.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobGroupPageParam.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobGroupRelationPageParam.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobListParam.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobPageParam.java diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/orgjob/feign/OrgJobApi.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/orgjob/feign/OrgJobApi.java index 5ca81a7..3ec3ec4 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/orgjob/feign/OrgJobApi.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/orgjob/feign/OrgJobApi.java @@ -2,11 +2,12 @@ package cn.axzo.orgmanax.api.orgjob.feign; import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.result.ApiResult; +import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO; import cn.axzo.orgmanax.dto.job.req.CreateOrgJobReq; import cn.axzo.orgmanax.dto.job.req.DeleteOrgJobReq; import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq; +import cn.axzo.orgmanax.dto.job.req.PageOrgJobReq; import cn.axzo.orgmanax.dto.job.req.UpdateOrgJobReq; -import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -28,4 +29,11 @@ public interface OrgJobApi { @PostMapping("/api/job/list") ApiResult> list(@RequestBody @Validated ListOrgJobReq req); + + /** + * 分页列表接口。 + * XXX:本接口默认分页,单页最多返回1000条数据。调用方使用时需注意。 + */ + @PostMapping("/api/job/page") + ApiResult> page(@RequestBody @Validated PageOrgJobReq req); } diff --git a/orgmanax-api/src/test/resources/http/orgjob/org-job.http b/orgmanax-api/src/test/resources/http/orgjob/org-job.http index bd2503a..c57ff61 100644 --- a/orgmanax-api/src/test/resources/http/orgjob/org-job.http +++ b/orgmanax-api/src/test/resources/http/orgjob/org-job.http @@ -43,4 +43,15 @@ Accept: application/json "name": "项目负责人" } -### \ No newline at end of file +### +# 查询 +POST {{host}}/api/job/page +Content-Type: application/json +Accept: application/json + +{ + "jobIds": [3103, 3104, 3105], + "jobCodes": ["coTheprojectmanager", "cosurveyor"], + "needSaasRole": true, + "needJobGroup": true +} \ No newline at end of file diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobCodeConstants.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobCodeConstants.java new file mode 100644 index 0000000..1b1911a --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobCodeConstants.java @@ -0,0 +1,39 @@ +package cn.axzo.orgmanax.dto.job.dto; + +/** + * @description + * 岗位编码厂里 + * @author luofu + * @date 2024/2/27 + * @version 1.0 + */ +public interface OrgJobCodeConstants { + + /** 项目内工人 **/ + String PROJ_WORKER = "projWorker"; + + /** 企业内班组长 **/ + String ENT_TEAM_LEADER = "entTeamLeader"; + + /** 企业内班组管理员 **/ + String ENT_TEAM_MANAGER = "entTeamManager"; + + /** 企业内工人 **/ + String ENT_TEAM_WORKER = "entWorker"; + + /** 项目内班组长 **/ + String PROJ_TEAM_LEADER = "projTeamLeader"; + /** 项目内带班长 **/ + String PROJ_TEAM_MANAGER = "projectTeamManager"; + + /** 项目内小组长 **/ + String PROJ_GROUP_LEADER = "projectTeamGPLeader"; + + /** + * org_job.record_ext 的数据key + * 罗福那边确认,需要保留 + */ + String OLD_CONFIG = "oldJobConfigs"; + String CODE_KEY = "code"; + String OLD_NEW_JOB_CODE_MAP_KEY = "job_code_mapping"; +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobDTO.java index 6a5b641..b5e88cf 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobDTO.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobDTO.java @@ -1,11 +1,31 @@ package cn.axzo.orgmanax.dto.job.dto; -import com.alibaba.fastjson.JSONObject; -import lombok.Data; +import static cn.axzo.orgmanax.dto.job.dto.OrgJobCodeConstants.CODE_KEY; +import static cn.axzo.orgmanax.dto.job.dto.OrgJobCodeConstants.OLD_CONFIG; +import cn.axzo.orgmanax.dto.job.enums.OrgJobFlagEnum; +import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum; +import cn.axzo.orgmanax.dto.job.enums.VisibilityEnum; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Sets; import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; @Data +@Builder +@NoArgsConstructor +@AllArgsConstructor public class OrgJobDTO { /** @@ -31,7 +51,7 @@ public class OrgJobDTO { /** * 可见性: SHOW-可见,HIDE-隐藏 */ - private String visible; + private VisibilityEnum visible; /** * 是否为默认岗的标识: 0-非默认,1-默认 @@ -46,12 +66,11 @@ public class OrgJobDTO { /** * 岗位类型:SYSTEM - 系统,CUSTOM - 自定义 */ - private String type; - + private OrgJobTypeEnum type; /** * 岗位标签:SYSTEM - 系统岗,BUSINESS - 业务岗 */ - private String flag; + private OrgJobFlagEnum flag; /** * 单位id,自定义类型时该值才有意义 @@ -76,12 +95,12 @@ public class OrgJobDTO { /** * 默认角色id列表 */ - private JSONObject defRoleIds; + private List defRoleIds; /** * 待排除的角色id列表 */ - private JSONObject excludeRoleIds; + private List excludeRoleIds; /** * 扩展字段 @@ -108,4 +127,47 @@ public class OrgJobDTO { */ private Long isDelete; + /** + * 岗位分组 + */ + private OrgJobGroupDTO jobGroup; + + /** + * 角色信息 + */ + private List saasRoles; + + public Set mergeAndDistinctRolesIds() { + Set roleIds = Sets.newHashSet(); + if (CollectionUtils.isNotEmpty(defRoleIds)) { + roleIds.addAll(defRoleIds); + } + if (CollectionUtils.isNotEmpty(excludeRoleIds)) { + roleIds.addAll(excludeRoleIds); + } + return roleIds; + } + + public boolean isEqual(String code) { + if (StringUtils.isBlank(code)) { + return false; + } + if (Objects.equals(code, this.code)) { + return true; + } + // 旧的岗位code比较 + return Objects.nonNull(recordExt) && contains(recordExt, code); + } + + public boolean contains(JSONObject recordExt, String oldJobCode) { + JSONArray oldJobConfigs = recordExt.getJSONArray(OLD_CONFIG); + if (CollectionUtils.isEmpty(oldJobConfigs)) { + return false; + } + return IntStream.range(0, oldJobConfigs.size()) + .mapToObj(oldJobConfigs::getJSONObject) + .collect(Collectors.toList()).stream() + .map(e -> e.getString(CODE_KEY)) + .anyMatch(c -> Objects.equals(c, oldJobCode)); + } } diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupDTO.java new file mode 100644 index 0000000..51ba161 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupDTO.java @@ -0,0 +1,72 @@ +package cn.axzo.orgmanax.dto.job.dto; + +import cn.axzo.orgmanax.dto.job.enums.OrgJobGroupFlagEnum; +import com.alibaba.fastjson.JSON; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description 岗位分组表 + * @author luofu + * @version 1.0 + * @date 2024/9/9 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrgJobGroupDTO { + + /** + * 主键 + */ + private Long id; + + /** + * 创建时间 + */ + private Date createAt; + + /** + * 更新时间 + */ + private Date updateAt; + + /** + * 逻辑删除标识(0:未删除,其它:已删除) + */ + private Long isDelete; + + /** + * 父节点id + */ + private Long parentId; + /** + * 编码 + */ + private String code; + /** + * 分组名称 + */ + private String name; + /** + * 优先级,同一层级的分组优先级才有意义 + */ + private Integer priority; + /** + * 分组标识,其与工作台类型及参建类型在后端进行映射 + */ + private OrgJobGroupFlagEnum flag; + /** + * 变更人的自然人id + */ + private Long operatorId; + + @Override + public String toString() { + return JSON.toJSONString(this); + } +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupRelationDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupRelationDTO.java new file mode 100644 index 0000000..b2b2f67 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupRelationDTO.java @@ -0,0 +1,59 @@ +package cn.axzo.orgmanax.dto.job.dto; + +import com.alibaba.fastjson.JSON; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description 岗位与分组的关系表 + * @author luofu + * @version 1.0 + * @date 2024/9/9 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrgJobGroupRelationDTO { + + /** + * 主键 + */ + private Long id; + + /** + * 创建时间 + */ + private Date createAt; + + /** + * 更新时间 + */ + private Date updateAt; + + /** + * 逻辑删除标识(0:未删除,其它:已删除) + */ + private Long isDelete; + + /** + * 分组编码 + */ + private String groupCode; + /** + * 岗位编码 + */ + private String jobCode; + /** + * 变更人的自然人id + */ + private Long operatorId; + + @Override + public String toString() { + return JSON.toJSONString(this); + } +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupRelationHistoryDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupRelationHistoryDTO.java new file mode 100644 index 0000000..9f66711 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobGroupRelationHistoryDTO.java @@ -0,0 +1,60 @@ +package cn.axzo.orgmanax.dto.job.dto; + +import com.alibaba.fastjson.JSON; +import java.util.Date; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description 岗位与分组的关系历史表 + * @author luofu + * @version 1.0 + * @date 2024/9/9 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrgJobGroupRelationHistoryDTO { + + /** + * 主键 + */ + private Long id; + + /** + * 创建时间 + */ + private Date createAt; + + /** + * 更新时间 + */ + private Date updateAt; + + /** + * 逻辑删除标识(0:未删除,其它:已删除) + */ + private Long isDelete; + + /** + * 分组编码 + */ + private String groupCode; + /** + * 岗位编码列表 + */ + private List jobCodes; + /** + * 变更人的自然人id + */ + private Long operatorId; + + @Override + public String toString() { + return JSON.toJSONString(this); + } +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobHistoryDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobHistoryDTO.java new file mode 100644 index 0000000..e0a15a7 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/OrgJobHistoryDTO.java @@ -0,0 +1,64 @@ +package cn.axzo.orgmanax.dto.job.dto; + +import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @description 岗位变更历史表 + * @author luofu + * @version 1.0 + * @date 2024/9/9 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrgJobHistoryDTO { + + /** + * 主键ID + */ + private Long id; + + /** + * 创建时间 + */ + private Date createAt; + + /** + * 更新时间 + */ + private Date updateAt; + + /** + * 逻辑删除标识(0:未删除,其它:已删除) + */ + private Long isDelete; + /** + * 编码 + */ + private String code; + /** + * 岗位类型:SYSTEM - 系统,CUSTOM - 自定义 + */ + private OrgJobTypeEnum type; + /** + * 变更人的自然人id + */ + private Long operatorId; + /** + * 岗位数据 + */ + private JSONObject dataContent; + + @Override + public String toString() { + return JSON.toJSONString(this); + } +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/RoleDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/RoleDTO.java new file mode 100644 index 0000000..79d1d22 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/dto/RoleDTO.java @@ -0,0 +1,92 @@ +package cn.axzo.orgmanax.dto.job.dto; + +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RoleDTO { + + /** + * 角色id + */ + private Long roleId; + + /** + * 角色编码 + */ + private String roleCode; + + /** + * 角色名称 + */ + private String name; + + /** + * 角色描述 + */ + private String description; + + /** + * 角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 + * @see RoleTypeEnum + */ + private String roleType; + + /** + * 角色所属租户id,预设角色的workspaceId <= 0 + */ + private Long workspaceId; + + /** + * 角色所属单位id,预设角色的ouId <= 0 + */ + private Long ouId; + + /** + * 协同关系类型 + * 1:总包 2:建设单位 3:监理单位 4:劳务分包 5:专业分包 6:OMS通用 7:企业通用 8:企业内班组 9:项目内班组 + * @see cn.axzo.maokai.common.enums.SaasCooperateShipCooperateTypeEnum + */ + private Integer cooperateShipType; + + /** + * 创建者 + */ + private Long createBy; + + /** + * 更新者 + */ + private Long updateBy; + + /** + * 是否显示 + */ + private Boolean isDisplay; + /** + * 是否启用 + */ + private Boolean enabled; + + /** + * 排序 + */ + private Integer sort; + + /** + * 添加时间 + */ + private Date createAt; + + /** + * 更新时间 + */ + private Date updateAt; + +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/enums/VisibilityEnum.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/enums/VisibilityEnum.java new file mode 100644 index 0000000..b766493 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/enums/VisibilityEnum.java @@ -0,0 +1,24 @@ +package cn.axzo.orgmanax.dto.job.enums; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @description 可见性的枚举 + * @author luofu + * @version 1.0 + * @date 2024/9/9 + */ +@Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public enum VisibilityEnum { + + SHOW("显示"), HIDE("隐藏"); + + private final String desc; + + public String getCode() { + return name(); + } +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/req/ListOrgJobReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/req/ListOrgJobReq.java index 3ce618d..d9257c0 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/req/ListOrgJobReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/req/ListOrgJobReq.java @@ -1,7 +1,12 @@ package cn.axzo.orgmanax.dto.job.req; import cn.axzo.foundation.page.PageReqV2; -import lombok.*; +import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum; +import java.util.Set; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; @EqualsAndHashCode(callSuper = true) @@ -16,5 +21,22 @@ public class ListOrgJobReq extends PageReqV2 { */ private String name; + /** + * 岗位id集合 + */ + private Set jobIds; + /** + * 岗位编码集合 + */ + private Set jobCodes; + /** + * 岗位类型 + */ + private OrgJobTypeEnum type; + /** + * 搜索关键字 + * Notice: 名称或别名的模糊搜索 + */ + private String keyword; } diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/req/PageOrgJobReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/req/PageOrgJobReq.java index 2140962..8f01bbb 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/req/PageOrgJobReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/job/req/PageOrgJobReq.java @@ -1,14 +1,16 @@ package cn.axzo.orgmanax.dto.job.req; -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.orgmanax.dto.job.enums.OrgJobGroupFlagEnum; -import lombok.*; -import lombok.experimental.SuperBuilder; - +import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum; import java.util.List; import java.util.Set; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; @EqualsAndHashCode(callSuper = true) @Data @@ -19,13 +21,11 @@ public class PageOrgJobReq extends PageReqV2 { /** * 岗位ids */ - @CriteriaField(field = "id", operator = Operator.IN) private Set jobIds; /** * 岗位codes */ - @CriteriaField(field = "code", operator = Operator.IN) private Set jobCodes; /** @@ -42,53 +42,21 @@ public class PageOrgJobReq extends PageReqV2 { */ @Builder.Default private Boolean needSaasRole = false; - // 以上参数优先实现 - - - // v1 版本接口入参兼容 - /** - * 单位/团队 ID 列表 - */ - private List unitIds; /** - * 工作台id 列表 + * 是否需要查询岗位分组信息 */ - private List workspaceIds; - - /** - * 岗位类型 1:总包单位 2:建设单位 3:监理单位 4:劳务分包 5:专业分包 6:OMS 7:企业通用 9:班组项目内 - */ - private List types; - - /** - * 可为空,即加载默认和自定义所有岗位 true预定义岗位 false 自定义岗位 - */ - private Boolean readonly; - - /** - * 岗位搜索关键字 - */ - private String searchKey; - - /** - * 全匹配 - */ - private String equalSearchKey; - - /** 是否需要推荐角色 默认false-不需要**/ - private boolean needRole = false; - - /** 是否需要推荐角色的详情(id和name) 默认false-不需要**/ - private boolean needRoleDetail = false; - - /** - * 是否让后端查询unit的workspaceId. 配合unitId使用 - */ - private Boolean queryUnitWorkspaceId; + @Builder.Default + private Boolean needJobGroup = false; /** * 岗位搜索关键字 */ private String keyword; + + /** + * 岗位类型 + */ + private OrgJobTypeEnum type; + } diff --git a/orgmanax-infra/pom.xml b/orgmanax-infra/pom.xml index cacf0b9..9f422d9 100644 --- a/orgmanax-infra/pom.xml +++ b/orgmanax-infra/pom.xml @@ -114,5 +114,11 @@ apollo-workspace-api-v2 ${revision} + + + cn.axzo.tyr + tyr-client + ${revision} + \ No newline at end of file diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/tyr/RoleGateway.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/tyr/RoleGateway.java new file mode 100644 index 0000000..d5389c4 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/tyr/RoleGateway.java @@ -0,0 +1,26 @@ +package cn.axzo.orgmanax.infra.client.tyr; + +import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.infra.client.util.RpcWrapper; +import cn.axzo.tyr.feign.api.RoleApi; +import cn.axzo.tyr.feign.req.PageRoleReq; +import cn.axzo.tyr.feign.resp.RoleResp; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author syl + * @date 2024/12/23 + */ +@Component +@Slf4j +@RequiredArgsConstructor +public class RoleGateway { + + private final RoleApi roleApi; + + public PageResp page(PageRoleReq req) { + return RpcWrapper.wrapApiResult(() -> roleApi.page(req)); + } +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/tyr/enums/RoleTypeEnum.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/tyr/enums/RoleTypeEnum.java new file mode 100644 index 0000000..ab027d8 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/tyr/enums/RoleTypeEnum.java @@ -0,0 +1,37 @@ +package cn.axzo.orgmanax.infra.client.tyr.enums; + +import java.util.Arrays; +import java.util.Objects; +import java.util.Optional; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +/** + * @author tanjie@axzo.cn + * @date 2023/9/13 16:35 + */ +@Getter +@AllArgsConstructor +public enum RoleTypeEnum { + + //角色类型:common 自定义角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 auto_own自定义角色(禁止删除)<承载向用户单独分配的自定义权限> + COMMON("common", "自定义角色",false), + SUPER_ADMIN("super_admin", "超级管理员",true), + ADMIN("admin", "子管理员",true), + INIT("init", "初始化内置角色-标准角色",false), + AUTO_OWN("auto_own", "虚拟角色(自定义权限使用)",false); + + private final String value; + private final String desc; + private final boolean isAdmin; + + public static Optional fromValue(String value) { + if (StringUtils.isBlank(value)) { + return Optional.empty(); + } + return Arrays.stream(RoleTypeEnum.values()) + .filter(e -> Objects.equals(e.getValue(), value)) + .findFirst(); + } +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/util/RpcWrapper.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/util/RpcWrapper.java new file mode 100644 index 0000000..45e1eb0 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/util/RpcWrapper.java @@ -0,0 +1,30 @@ +package cn.axzo.orgmanax.infra.client.util; + +import cn.axzo.foundation.exception.BusinessException; +import cn.axzo.orgmanax.common.config.BizResultCode; +import cn.hutool.core.convert.Convert; +import cn.hutool.http.HttpStatus; +import java.util.Objects; +import java.util.function.Supplier; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class RpcWrapper { + + /** + * Api result 返回 + * @param supplier + * @return + * @param + */ + public static T wrapApiResult(Supplier> supplier) { + cn.axzo.foundation.result.ApiResult result = supplier.get(); + if (result == null) { + throw new BusinessException(BizResultCode.RPC_ERROR); + } + if (!Objects.equals(result.getCode(), HttpStatus.HTTP_OK)) { + throw new BusinessException(Convert.toStr(result.getCode()), result.getMsg(), null); + } + return result.getData(); + } +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJob.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJob.java index 1b05d68..b3ff94e 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJob.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJob.java @@ -1,18 +1,22 @@ package cn.axzo.orgmanax.infra.dao.orgjob.entity; +import cn.axzo.foundation.dao.support.mysql.type.BaseListTypeHandler; import com.alibaba.fastjson.JSONObject; - -import java.util.Date; - 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 lombok.*; +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; import lombok.experimental.Accessors; import lombok.experimental.SuperBuilder; -import java.io.Serializable; - /** * 组织岗位表(OrgJob)表实体类 * @@ -29,9 +33,6 @@ import java.io.Serializable; @EqualsAndHashCode(callSuper = false) public class OrgJob implements Serializable { - /** - * 主键 - */ /** * 主键 */ @@ -101,14 +102,16 @@ public class OrgJob implements Serializable { private Integer identityType; /** - * 默认角色id列表 + * 默认角色id列表 todo */ - private JSONObject defRoleIds; + @TableField(typeHandler = LongListTypeHandler.class) + private List defRoleIds; /** * 待排除的角色id列表 */ - private JSONObject excludeRoleIds; + @TableField(typeHandler = LongListTypeHandler.class) + private List excludeRoleIds; /** * 扩展字段 @@ -134,5 +137,8 @@ public class OrgJob implements Serializable { * 逻辑删除标识(0:未删除,其它:已删除) */ private Long isDelete; + + public static class LongListTypeHandler extends BaseListTypeHandler { + } } diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroup.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroup.java index 64834b6..e2bea3f 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroup.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroup.java @@ -28,10 +28,6 @@ public class OrgJobGroup implements Serializable { private static final long serialVersionUID = 5424203030547622211L; - - /** - * 主键 - */ /** * 主键 */ diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroupRelation.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroupRelation.java index e38a1a9..bf6a3bc 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroupRelation.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroupRelation.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import java.io.Serializable; import java.util.Date; import lombok.AllArgsConstructor; import lombok.Builder; @@ -22,13 +21,8 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor @TableName(value = "org_job_group_relation", autoResultMap = true) -public class OrgJobGroupRelation implements Serializable { +public class OrgJobGroupRelation { - private static final long serialVersionUID = 2195750914706800541L; - - /** - * 主键 - */ /** * 主键 */ diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroupRelationHistory.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroupRelationHistory.java index f8b10d5..2206d21 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroupRelationHistory.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobGroupRelationHistory.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; -import java.io.Serializable; import java.util.Date; import java.util.List; import lombok.AllArgsConstructor; @@ -25,11 +24,8 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor @TableName(value = "org_job_group_relation_history", autoResultMap = true) -public class OrgJobGroupRelationHistory implements Serializable { +public class OrgJobGroupRelationHistory { - /** - * 主键 - */ /** * 主键 */ diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobHistory.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobHistory.java index 56529cc..12519dc 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobHistory.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/entity/OrgJobHistory.java @@ -29,10 +29,6 @@ public class OrgJobHistory implements Serializable { private static final long serialVersionUID = -273293135363926439L; - - /** - * 主键 - */ /** * 主键 */ diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobGroupRelationRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobGroupRelationRepository.java new file mode 100644 index 0000000..d8435de --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobGroupRelationRepository.java @@ -0,0 +1,50 @@ +package cn.axzo.orgmanax.infra.dao.orgjob.repository; + +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.infra.dao.orgjob.entity.OrgJobGroupRelation; +import cn.hutool.core.collection.CollUtil; +import java.util.Collection; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @author syl + * @date 2024/12/23 + */ +public interface OrgJobGroupRelationRepository { + + PageResp page(PageReq req); + + @NoArgsConstructor + @AllArgsConstructor + @Data + @SuperBuilder + class PageReq extends PageReqV2 { + + /** + * 分组id集合 + */ + @CriteriaField(field = "id", operator = Operator.IN) + private Collection groupIds; + /** + * 岗位分组编码集合 + */ + private Collection groupCodes; + /** + * 岗位编码集合 + */ + private Collection jobCodes; + + public boolean isInvalid() { + return CollUtil.isEmpty(groupIds) + && CollUtil.isEmpty(groupCodes) + && CollUtil.isEmpty(jobCodes); + } + + } +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobGroupRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobGroupRepository.java new file mode 100644 index 0000000..c599e2c --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobGroupRepository.java @@ -0,0 +1,52 @@ +package cn.axzo.orgmanax.infra.dao.orgjob.repository; + +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.job.enums.OrgJobGroupFlagEnum; +import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJobGroup; +import cn.hutool.core.collection.CollUtil; +import java.util.Collection; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +public interface OrgJobGroupRepository { + + PageResp page(PageReq req); + + + @NoArgsConstructor + @AllArgsConstructor + @Data + @SuperBuilder + class PageReq extends PageReqV2 { + + /** + * 分组编码集合 + */ + @CriteriaField(field = "id", operator = Operator.IN) + private Collection groupIds; + /** + * 分组编码集合 + */ + @CriteriaField(field = "code", operator = Operator.IN) + private Collection groupCodes; + /** + * 岗位分组标识集合 + */ + @CriteriaField(field = "flag", operator = Operator.IN) + private Collection orgJobGroupFlags; + + public boolean isInvalid() { + return CollUtil.isEmpty(groupIds) + && CollUtil.isEmpty(groupCodes) + && CollUtil.isEmpty(orgJobGroupFlags); + } + + } + + +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobQueryRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobQueryRepository.java index ac58336..d0963da 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobQueryRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobQueryRepository.java @@ -4,22 +4,18 @@ 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.job.enums.OrgJobTypeEnum; import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJob; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.convert.Convert; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import java.util.Collection; - public interface OrgJobQueryRepository { @@ -55,6 +51,18 @@ public interface OrgJobQueryRepository { @CriteriaField(field = "code", operator = Operator.IN) private Collection codes; + /** + * 岗位类型 + */ + @CriteriaField + private OrgJobTypeEnum type; + + /** + * 搜索关键字 + * Notice: 名称或别名的模糊搜索 + */ + @CriteriaField(ignore = true) + private String keyword; } @EqualsAndHashCode(callSuper = true) diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobGroupRelationRepositoryImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobGroupRelationRepositoryImpl.java new file mode 100644 index 0000000..13cac76 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobGroupRelationRepositoryImpl.java @@ -0,0 +1,39 @@ +package cn.axzo.orgmanax.infra.dao.orgjob.repository.impl; + +import cn.axzo.foundation.dao.support.converter.PageConverter; +import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper; +import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.infra.dao.orgjob.dao.OrgJobGroupRelationDao; +import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJobGroupRelation; +import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobGroupRelationRepository; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +/** + * @author syl + * @date 2024/12/23 + */ +@RequiredArgsConstructor +@Repository +public class OrgJobGroupRelationRepositoryImpl implements OrgJobGroupRelationRepository { + + private final OrgJobGroupRelationDao orgJobGroupRelationDao; + @Override + public PageResp page(PageReq req) { + IPage page = PageConverter.toMybatis(req, OrgJobGroupRelation.class); + QueryWrapper wrapper = QueryWrapperHelper.fromBean(req, OrgJobGroupRelation.class); + IPage results = orgJobGroupRelationDao.page(page, wrapper) + .convert(e -> BeanUtil.toBean(e, OrgJobGroupRelation.class)); + PageResp resp = PageConverter.toResp(results); + List records = resp.getData(); + if (CollUtil.isEmpty(records)) { + return resp; + } + return resp; + } +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobGroupRepositoryImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobGroupRepositoryImpl.java new file mode 100644 index 0000000..b500a99 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobGroupRepositoryImpl.java @@ -0,0 +1,40 @@ +package cn.axzo.orgmanax.infra.dao.orgjob.repository.impl; + +import cn.axzo.foundation.dao.support.converter.PageConverter; +import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper; +import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.infra.dao.orgjob.dao.OrgJobGroupDao; +import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJobGroup; +import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobGroupRepository; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +/** + * @author syl + * @date 2024/12/23 + */ +@RequiredArgsConstructor +@Repository +public class OrgJobGroupRepositoryImpl implements OrgJobGroupRepository { + + private final OrgJobGroupDao orgJobGroupDao; + + @Override + public PageResp page(PageReq req) { + IPage page = PageConverter.toMybatis(req, OrgJobGroup.class); + QueryWrapper wrapper = QueryWrapperHelper.fromBean(req, OrgJobGroup.class); + IPage results = orgJobGroupDao.page(page, wrapper) + .convert(e -> BeanUtil.toBean(e, OrgJobGroup.class)); + PageResp resp = PageConverter.toResp(results); + List records = resp.getData(); + if (CollUtil.isEmpty(records)) { + return resp; + } + return resp; + } +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobQueryRepositoryImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobQueryRepositoryImpl.java index 48c6e80..9c2c04c 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobQueryRepositoryImpl.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/impl/OrgJobQueryRepositoryImpl.java @@ -6,16 +6,14 @@ import cn.axzo.foundation.page.PageResp; import cn.axzo.orgmanax.infra.dao.orgjob.dao.OrgJobDao; import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJob; import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobQueryRepository; -import cn.axzo.orgmanax.infra.dao.unit.entity.OrganizationalUnit; -import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - import java.util.List; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Repository; @RequiredArgsConstructor @Repository @@ -28,6 +26,11 @@ public class OrgJobQueryRepositoryImpl implements OrgJobQueryRepository { public PageResp page(ListReq req) { IPage page = PageConverter.toMybatis(req, OrgJob.class); QueryWrapper wrapper = QueryWrapperHelper.fromBean(req, OrgJob.class); + if (StringUtils.isNotBlank(req.getKeyword())) { + wrapper.and(wr -> wr.like("name", req.getKeyword()) + .or() + .like("alias", req.getKeyword())); + } if (wrapper.isEmptyOfWhere()) { return PageResp.builder().build(); } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/controller/OrgJobController.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/controller/OrgJobController.java index 3866d57..3de9f77 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/controller/OrgJobController.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/controller/OrgJobController.java @@ -3,12 +3,15 @@ package cn.axzo.orgmanax.server.orgjob.controller; import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.result.ApiResult; import cn.axzo.orgmanax.api.orgjob.feign.OrgJobApi; +import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO; import cn.axzo.orgmanax.dto.job.req.CreateOrgJobReq; import cn.axzo.orgmanax.dto.job.req.DeleteOrgJobReq; import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq; +import cn.axzo.orgmanax.dto.job.req.PageOrgJobReq; import cn.axzo.orgmanax.dto.job.req.UpdateOrgJobReq; -import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO; import cn.axzo.orgmanax.server.orgjob.service.OrgJobService; +import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobAggregatePageParam; +import cn.hutool.core.bean.BeanUtil; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -40,4 +43,9 @@ public class OrgJobController implements OrgJobApi { public ApiResult> list(ListOrgJobReq req) { return ApiResult.success(orgJobService.list(req)); } + + @Override + public ApiResult> page(PageOrgJobReq req) { + return ApiResult.success(orgJobService.page(BeanUtil.copyProperties(req, OrgJobAggregatePageParam.class))); + } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/OrgJobGroupFoundationService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/OrgJobGroupFoundationService.java new file mode 100644 index 0000000..2c5faaa --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/OrgJobGroupFoundationService.java @@ -0,0 +1,27 @@ +package cn.axzo.orgmanax.server.orgjob.foundation; + +import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupDTO; +import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobGroupPageParam; +import java.util.List; + +/** + * @author syl + * @date 2024/12/23 + */ +public interface OrgJobGroupFoundationService { + + /** + * 查询岗位分组列表 + * + * @param param 分组列表查询入参 + * @return 分组列表 + */ + PageResp page(OrgJobGroupPageParam param); + + /** + * 查询岗位分组 + */ + List whileQuery(OrgJobGroupPageParam param); + +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/OrgJobGroupRelationFoundationService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/OrgJobGroupRelationFoundationService.java new file mode 100644 index 0000000..4cc7727 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/OrgJobGroupRelationFoundationService.java @@ -0,0 +1,26 @@ +package cn.axzo.orgmanax.server.orgjob.foundation; + +import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupRelationDTO; +import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobGroupRelationPageParam; +import java.util.List; + +/** + * @author syl + * @date 2024/12/23 + */ +public interface OrgJobGroupRelationFoundationService { + + /** + * 查询岗位分组列表 + * + * @param param 分组列表查询入参 + * @return 分组列表 + */ + PageResp page(OrgJobGroupRelationPageParam param); + + /** + * 查询岗位分组 + */ + List whileQuery(OrgJobGroupRelationPageParam param); +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobFoundationServiceImpl.java index 92a7a16..2ac38fc 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobFoundationServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobFoundationServiceImpl.java @@ -1,8 +1,8 @@ package cn.axzo.orgmanax.server.orgjob.foundation.impl; import cn.axzo.foundation.page.PageResp; -import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq; import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO; +import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq; import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJob; import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobQueryRepository; import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobUpsertRepository; @@ -40,7 +40,7 @@ public class OrgJobFoundationServiceImpl implements OrgJobFoundationService { @Override public PageResp page(ListOrgJobReq req) { - PageResp page = orgJobQueryRepository.page(BeanUtil.copyProperties(req, OrgJobQueryRepository.ListReq.class)); + PageResp page = orgJobQueryRepository.page(convert(req)); return PageResp.builder() .size(page.getSize()) .current(page.getCurrent()) @@ -49,4 +49,10 @@ public class OrgJobFoundationServiceImpl implements OrgJobFoundationService { .build(); } + public OrgJobQueryRepository.ListReq convert(ListOrgJobReq req) { + OrgJobQueryRepository.ListReq param = BeanUtil.copyProperties(req, OrgJobQueryRepository.ListReq.class); + param.setIds(req.getJobIds()); + param.setCodes(req.getJobCodes()); + return param; + } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobGroupFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobGroupFoundationServiceImpl.java new file mode 100644 index 0000000..247f48c --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobGroupFoundationServiceImpl.java @@ -0,0 +1,55 @@ +package cn.axzo.orgmanax.server.orgjob.foundation.impl; + +import static cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam.JOB_PAGE_SIZE; + +import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupDTO; +import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJobGroup; +import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobGroupRepository; +import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobGroupFoundationService; +import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobGroupPageParam; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import java.util.ArrayList; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * @author syl + * @date 2024/12/23 + */ +@RequiredArgsConstructor +@Service +public class OrgJobGroupFoundationServiceImpl implements OrgJobGroupFoundationService { + + private final OrgJobGroupRepository orgJobGroupRepository; + + @Override + public PageResp page(OrgJobGroupPageParam param) { + PageResp page = orgJobGroupRepository.page( + BeanUtil.copyProperties(param, OrgJobGroupRepository.PageReq.class)); + return PageResp.builder() + .size(page.getSize()) + .current(page.getCurrent()) + .total(page.getTotal()) + .data(BeanUtil.copyToList(page.getData(), OrgJobGroupDTO.class)) + .build(); + } + + @Override + public List whileQuery(OrgJobGroupPageParam param) { + List jobGroups = new ArrayList<>(); + PageResp jobGroupPage; + int pageNumber = 0; + param.setPageSize(JOB_PAGE_SIZE); + do { + param.setPage(++pageNumber); + jobGroupPage = this.page(param); + if (CollUtil.isNotEmpty(jobGroupPage.getData())) { + jobGroups.addAll(jobGroupPage.getData()); + } + } while (jobGroupPage.hasNext()); + return jobGroups; + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobGroupRelationFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobGroupRelationFoundationServiceImpl.java new file mode 100644 index 0000000..acc91ad --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/foundation/impl/OrgJobGroupRelationFoundationServiceImpl.java @@ -0,0 +1,55 @@ +package cn.axzo.orgmanax.server.orgjob.foundation.impl; + +import static cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam.JOB_PAGE_SIZE; + +import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupRelationDTO; +import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJobGroupRelation; +import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobGroupRelationRepository; +import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobGroupRelationFoundationService; +import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobGroupRelationPageParam; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import java.util.ArrayList; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * @author syl + * @date 2024/12/23 + */ +@RequiredArgsConstructor +@Service +public class OrgJobGroupRelationFoundationServiceImpl implements OrgJobGroupRelationFoundationService { + + private final OrgJobGroupRelationRepository orgJobGroupRelationRepository; + + @Override + public PageResp page(OrgJobGroupRelationPageParam param) { + PageResp page = orgJobGroupRelationRepository.page( + BeanUtil.copyProperties(param, OrgJobGroupRelationRepository.PageReq.class)); + return PageResp.builder() + .size(page.getSize()) + .current(page.getCurrent()) + .total(page.getTotal()) + .data(BeanUtil.copyToList(page.getData(), OrgJobGroupRelationDTO.class)) + .build(); + } + + @Override + public List whileQuery(OrgJobGroupRelationPageParam param) { + List jobGroupRelations = new ArrayList<>(); + PageResp jobGroupPage; + int pageNumber = 0; + param.setPageSize(JOB_PAGE_SIZE); + do { + param.setPage(++pageNumber); + jobGroupPage = this.page(param); + if (CollUtil.isNotEmpty(jobGroupPage.getData())) { + jobGroupRelations.addAll(jobGroupPage.getData()); + } + } while (jobGroupPage.hasNext()); + return jobGroupRelations; + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/OrgJobBizService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/OrgJobBizService.java new file mode 100644 index 0000000..a426151 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/OrgJobBizService.java @@ -0,0 +1,23 @@ +package cn.axzo.orgmanax.server.orgjob.service; + + +public interface OrgJobBizService { + +// List groupAndJobTree(); + +// List page(OrgJobListReq req); + +// void createJob(OrgJobCreateReq req); +// +// void deleteJob(Long jobId, Long operatorId); +// +// void editJob(JobEditReq req); +// +// void setRoles(JobRoleSetReq req); +// +// void move(MoveJobReq req); +// +// OrgJobDTO getById(Long jobId, Boolean needJobGroup); +// +// OrgJobRes queryDefaultOrgJob(Long topNodeId); +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/OrgJobService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/OrgJobService.java index d566042..c66fe27 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/OrgJobService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/OrgJobService.java @@ -1,11 +1,12 @@ package cn.axzo.orgmanax.server.orgjob.service; import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO; import cn.axzo.orgmanax.dto.job.req.CreateOrgJobReq; import cn.axzo.orgmanax.dto.job.req.DeleteOrgJobReq; import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq; import cn.axzo.orgmanax.dto.job.req.UpdateOrgJobReq; -import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO; +import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobAggregatePageParam; public interface OrgJobService { @@ -36,4 +37,9 @@ public interface OrgJobService { * @return */ PageResp list(ListOrgJobReq req); + + /** + * 聚合查询岗位 + */ + PageResp page(OrgJobAggregatePageParam req); } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobAggregatePageParam.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobAggregatePageParam.java new file mode 100644 index 0000000..61e0d89 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobAggregatePageParam.java @@ -0,0 +1,77 @@ +package cn.axzo.orgmanax.server.orgjob.service.dto; + +import cn.axzo.foundation.page.PageReqV2; +import cn.axzo.orgmanax.dto.job.enums.OrgJobGroupFlagEnum; +import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum; +import cn.hutool.core.collection.CollUtil; +import java.util.Objects; +import java.util.Set; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.StringUtils; + +/** + * @author luofu + * @version 1.0 + * @date 2024/9/12 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class OrgJobAggregatePageParam extends PageReqV2 { + + /** + * 岗位分组标识集合 + */ + private Set orgJobGroupFlags; + /** + * 分组编码集合 + */ + private Set orgJobGroupCodes; + /** + * 岗位id集合 + */ + private Set jobIds; + /** + * 岗位编码集合 + */ + private Set jobCodes; + /** + * 岗位类型 + */ + private OrgJobTypeEnum type; + /** + * 搜索关键字 + * Notice: 名称或别名的模糊搜索 + */ + private String keyword; + + /** + * 是否需要查询角色信息 + */ + @Builder.Default + private Boolean needSaasRole = false; + /** + * 是否需要查询岗位分组信息 + */ + @Builder.Default + private Boolean needJobGroup = false; + + public boolean isInvalid() { + return CollUtil.isEmpty(orgJobGroupFlags) + && CollUtil.isEmpty(orgJobGroupCodes) + && CollUtil.isEmpty(jobIds) + && CollUtil.isEmpty(jobCodes) + && Objects.isNull(type) + && StringUtils.isBlank(keyword); + } + + @Override + public String toString() { + return super.toString(); + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobGroupPageParam.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobGroupPageParam.java new file mode 100644 index 0000000..7b88afc --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobGroupPageParam.java @@ -0,0 +1,47 @@ +package cn.axzo.orgmanax.server.orgjob.service.dto; + +import cn.axzo.foundation.page.PageReqV2; +import cn.axzo.orgmanax.dto.job.enums.OrgJobGroupFlagEnum; +import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson.JSON; +import java.util.Collection; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @author luofu + * @version 1.0 + * @date 2024/9/12 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class OrgJobGroupPageParam extends PageReqV2 { + + /** + * 分组编码集合 + */ + private Collection groupIds; + /** + * 分组编码集合 + */ + private Collection groupCodes; + /** + * 岗位分组标识集合 + */ + private Collection orgJobGroupFlags; + + public boolean isInvalid() { + return CollUtil.isEmpty(groupIds) + && CollUtil.isEmpty(groupCodes) + && CollUtil.isEmpty(orgJobGroupFlags); + } + + @Override + public String toString() { + return JSON.toJSONString(this); + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobGroupRelationPageParam.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobGroupRelationPageParam.java new file mode 100644 index 0000000..ccd7244 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobGroupRelationPageParam.java @@ -0,0 +1,45 @@ +package cn.axzo.orgmanax.server.orgjob.service.dto; + +import cn.axzo.foundation.page.PageReqV2; +import cn.hutool.core.collection.CollUtil; +import java.util.Collection; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @author luofu + * @version 1.0 + * @date 2024/9/13 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class OrgJobGroupRelationPageParam extends PageReqV2 { + + /** + * 分组id集合 + */ + private Collection groupIds; + /** + * 岗位分组编码集合 + */ + private Collection groupCodes; + /** + * 岗位编码集合 + */ + private Collection jobCodes; + + public boolean isInvalid() { + return CollUtil.isEmpty(groupCodes) + && CollUtil.isEmpty(jobCodes) + && CollUtil.isEmpty(groupIds); + } + + @Override + public String toString() { + return super.toString(); + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobListParam.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobListParam.java new file mode 100644 index 0000000..fa3aa25 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobListParam.java @@ -0,0 +1,64 @@ +//package cn.axzo.orgmanax.server.orgjob.service.dto; +// +//import cn.axzo.maokai.common.enums.OrgJobTypeEnum; +//import cn.hutool.core.collection.CollUtil; +//import java.util.Collection; +//import java.util.Objects; +//import lombok.AllArgsConstructor; +//import lombok.Builder; +//import lombok.Data; +//import lombok.NoArgsConstructor; +//import org.apache.commons.lang.StringUtils; +// +///** +// * @author luofu +// * @version 1.0 +// * @date 2024/9/12 +// */ +//@Data +//@Builder +//@NoArgsConstructor +//@AllArgsConstructor +//public class OrgJobListParam { +// +// public static final OrgJobListParam EMPTY_INSTANCE = OrgJobListParam.builder().build(); +// +// /** +// * 岗位id集合 +// */ +// private Collection jobIds; +// /** +// * 岗位编码集合 +// */ +// private Collection jobCodes; +// /** +// * 岗位类型 +// */ +// private OrgJobTypeEnum type; +// /** +// * 搜索关键字 +// * Notice: 名称或别名的模糊搜索 +// */ +// private String keyword; +// +// public static OrgJobListParam from(OrgJobAggregateListParam param) { +// return OrgJobListParam.builder() +// .jobIds(param.getJobIds()) +// .jobCodes(param.getJobCodes()) +// .type(param.getType()) +// .keyword(param.getKeyword()) +// .build(); +// } +// +// public boolean isInvalid() { +// return CollUtil.isEmpty(jobIds) +// && CollUtil.isEmpty(jobCodes) +// && Objects.isNull(type) +// && StringUtils.isBlank(keyword); +// } +// +// @Override +// public String toString() { +// return super.toString(); +// } +//} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobPageParam.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobPageParam.java new file mode 100644 index 0000000..081162d --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/dto/OrgJobPageParam.java @@ -0,0 +1,82 @@ +package cn.axzo.orgmanax.server.orgjob.service.dto; + +import cn.axzo.foundation.page.PageReqV2; +import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum; +import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import java.util.Objects; +import java.util.Set; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.StringUtils; + +/** + * @author luofu + * @version 1.0 + * @date 2024/9/18 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class OrgJobPageParam extends PageReqV2 { + + public static final OrgJobPageParam EMPTY_INSTANCE = new OrgJobPageParam(); + public static final Integer JOB_PAGE_SIZE = 1000; + + /** + * 岗位id集合 + */ + private Set jobIds; + /** + * 岗位编码集合 + */ + private Set jobCodes; + /** + * 岗位类型 + */ + private OrgJobTypeEnum type; + /** + * 搜索关键字 + * Notice: 名称或别名的模糊搜索 + */ + private String keyword; + + public static OrgJobPageParam from(OrgJobAggregatePageParam param) { + OrgJobPageParam jobPageParam = new OrgJobPageParam(); + jobPageParam.setType(param.getType()); + jobPageParam.setKeyword(param.getKeyword()); + jobPageParam.setJobIds(param.getJobIds()); + jobPageParam.setJobCodes(param.getJobCodes()); + jobPageParam.setPage(param.getPage()); + jobPageParam.setPageSize(param.getPageSize()); + return jobPageParam; + } + + public boolean isInvalid() { + return CollUtil.isEmpty(jobIds) + && CollUtil.isEmpty(jobCodes) + && Objects.isNull(type) + && StringUtils.isBlank(keyword); + } + + public ListOrgJobReq convert() { + return BeanUtil.toBean(this, ListOrgJobReq.class); + } + +// public Integer getPage() { +// return Optional.ofNullable(super.getPage()).orElse(1); +// } +// +// public Integer getPageSize() { +// return Optional.ofNullable(super.getPageSize()).orElse(20); +// } + + @Override + public String toString() { + return super.toString(); + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/impl/OrgJobServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/impl/OrgJobServiceImpl.java index 83db475..b67bafb 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/impl/OrgJobServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/orgjob/service/impl/OrgJobServiceImpl.java @@ -1,23 +1,72 @@ package cn.axzo.orgmanax.server.orgjob.service.impl; +import static cn.axzo.orgmanax.dto.job.dto.OrgJobCodeConstants.CODE_KEY; +import static cn.axzo.orgmanax.dto.job.dto.OrgJobCodeConstants.OLD_CONFIG; +import static cn.axzo.orgmanax.dto.job.dto.OrgJobCodeConstants.OLD_NEW_JOB_CODE_MAP_KEY; +import static cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam.JOB_PAGE_SIZE; + import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO; +import cn.axzo.orgmanax.dto.job.dto.RoleDTO; +import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum; import cn.axzo.orgmanax.dto.job.req.CreateOrgJobReq; import cn.axzo.orgmanax.dto.job.req.DeleteOrgJobReq; import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq; import cn.axzo.orgmanax.dto.job.req.UpdateOrgJobReq; -import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO; +import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupDTO; +import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupRelationDTO; +import cn.axzo.orgmanax.infra.client.tyr.RoleGateway; import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobFoundationService; +import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobGroupFoundationService; +import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobGroupRelationFoundationService; import cn.axzo.orgmanax.server.orgjob.foundation.dto.OrgJobCreator; import cn.axzo.orgmanax.server.orgjob.service.OrgJobService; +import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobAggregatePageParam; +import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobGroupPageParam; +import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobGroupRelationPageParam; +import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam; +import cn.axzo.tyr.feign.req.PageRoleReq; +import cn.axzo.tyr.feign.resp.RoleResp; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.time.Duration; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.BooleanUtils; import org.springframework.stereotype.Service; +@Slf4j @RequiredArgsConstructor @Service public class OrgJobServiceImpl implements OrgJobService { private final OrgJobFoundationService foundationService; + private final OrgJobGroupFoundationService orgJobGroupService; + private final OrgJobGroupRelationFoundationService orgJobGroupRelationService; + private final RoleGateway roleGateway; + + private final LoadingCache> jobCodeMappingCache = CacheBuilder.newBuilder() + .expireAfterWrite(Duration.ofMinutes(30)) + .build(CacheLoader.from(this::loadJobCodeMappingCache)); @Override public OrgJobDTO create(CreateOrgJobReq req) { @@ -40,4 +89,213 @@ public class OrgJobServiceImpl implements OrgJobService { public PageResp list(ListOrgJobReq req) { return foundationService.page(req); } + + @Override + public PageResp page(OrgJobAggregatePageParam param) { + if (param.isInvalid()) { + log.info("org job page param is invalid. param:{}", JSONUtil.toJsonStr(param)); + return PageResp.builder().build(); + } + OrgJobPageParam orgJobPageParam = resolveJobPageParam(param); + PageResp orgJobs = foundationService.page(orgJobPageParam.convert()); + if (CollUtil.isEmpty(orgJobs.getData())) { + log.info("org job page there is not any job. param:{}", JSONUtil.toJsonStr(orgJobPageParam)); + return PageResp.builder().build(); + } + if (BooleanUtils.isTrue(param.getNeedJobGroup())) { + // 设置岗位信息 + buildOrgGroup4OrgJob(orgJobs.getData()); + } + if (BooleanUtils.isTrue(param.getNeedSaasRole())) { + // 设置角色信息 + buildSaasRole4OrgJob(orgJobs.getData()); + } + return orgJobs; + } + + private void buildSaasRole4OrgJob(List orgJobs) { + Set roleIds = orgJobs.stream() + .flatMap(e -> e.mergeAndDistinctRolesIds().stream()) + .collect(Collectors.toSet()); + Map saasRoleMap = listSaasRoles(roleIds); + if (CollUtil.isEmpty(saasRoleMap)) { + return; + } + orgJobs.forEach(e -> { + Set mergedRoleIds = e.mergeAndDistinctRolesIds(); + if (CollUtil.isNotEmpty(mergedRoleIds)) { + List roles = mergedRoleIds.stream() + .map(saasRoleMap::get) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + e.setSaasRoles(BeanUtil.copyToList(roles, RoleDTO.class)); + } + }); + } + + private Map listSaasRoles(Set roleIds) { + if (CollUtil.isEmpty(roleIds)) { + return Collections.emptyMap(); + } + List roles = new ArrayList<>(); + PageRoleReq param = PageRoleReq.builder().roleIds(roleIds).build(); + + PageResp rolePage; + int pageNumber = 0; + param.setPageSize(JOB_PAGE_SIZE); + do { + param.setPage(++pageNumber); + rolePage = roleGateway.page(param); + if (CollUtil.isNotEmpty(rolePage.getData())) { + roles.addAll(rolePage.getData()); + } + } while (rolePage.hasNext()); + + return roles.stream() + .collect(Collectors.toMap(RoleResp::getRoleId, Function.identity(), (oldVal, newVal) -> oldVal)); + } + + private void buildOrgGroup4OrgJob(List orgJobs) { + // 查询岗位与分组的关联关系 + OrgJobGroupRelationPageParam relationPageParam = OrgJobGroupRelationPageParam.builder() + .jobCodes(orgJobs.stream().map(OrgJobDTO::getCode).collect(Collectors.toSet())) + .build(); + Map relationGroup = orgJobGroupRelationService.whileQuery(relationPageParam) + .stream() + .collect(Collectors.toMap(OrgJobGroupRelationDTO::getJobCode, + OrgJobGroupRelationDTO::getGroupCode, (oldVal, newVal) -> oldVal)); + if (CollUtil.isEmpty(relationGroup)) { + log.info("buildOrgGroup4OrgJob orgJobGroupRelation without any group."); + return; + } + // 查询岗位分组列表 + Set groupCodes = Sets.newHashSet(relationGroup.values()); + OrgJobGroupPageParam groupListParam = OrgJobGroupPageParam.builder().groupCodes(groupCodes).build(); + Map groupMap = orgJobGroupService.whileQuery(groupListParam).stream() + .collect(Collectors.toMap(OrgJobGroupDTO::getCode, Function.identity(), (oldVal, newVal) -> oldVal)); + if (CollUtil.isEmpty(groupMap)) { + log.info("buildOrgGroup4OrgJob orgJobGroup without any group."); + return; + } + // 设置分组编码(自定义可能没有分组编码) + orgJobs.stream() + .filter(e -> relationGroup.containsKey(e.getCode())) + .forEach(e -> e.setJobGroup(groupMap.get(relationGroup.get(e.getCode())))); + } + + private OrgJobPageParam resolveJobPageParam(OrgJobAggregatePageParam param) { + OrgJobPageParam jobPageParam = OrgJobPageParam.from(param); + jobPageParam.setJobCodes(resolveJobCodes(param.getJobCodes())); + if (CollUtil.isEmpty(param.getOrgJobGroupCodes()) + && CollUtil.isEmpty(param.getOrgJobGroupFlags())) { + return jobPageParam; + } + // 通过分组相关参数参数JOB + OrgJobGroupPageParam groupListParam = OrgJobGroupPageParam.builder() + .orgJobGroupFlags(param.getOrgJobGroupFlags()) + .groupCodes(param.getOrgJobGroupCodes()) + .build(); + Set jobCodes = resolveJobCodesByGroup(groupListParam); + if (CollUtil.isEmpty(jobCodes)) { + log.info("resolveJobPageParam the param of job group is invalid. param:{}", + JSONUtil.toJsonStr(groupListParam)); + return OrgJobPageParam.EMPTY_INSTANCE; + } + if (CollUtil.isEmpty(jobPageParam.getJobCodes())) { + // 直接设置jobCodes入参 + jobPageParam.setJobCodes(jobCodes); + } else { + // jobCodes取交集 + Collection intersection = CollUtil.intersection(jobPageParam.getJobCodes(), jobCodes); + if (CollUtil.isEmpty(intersection)) { + log.info("resolveJobPageParam the intersection is empty. param:{}", + JSONUtil.toJsonStr(groupListParam)); + return OrgJobPageParam.EMPTY_INSTANCE; + } + jobPageParam.setJobCodes(Sets.newHashSet(intersection)); + } + return jobPageParam; + } + + private Set resolveJobCodesByGroup(OrgJobGroupPageParam groupListParam) { + List groups = orgJobGroupService.whileQuery(groupListParam); + if (CollUtil.isEmpty(groups)) { + log.info("resolveJobCodesByGroup there is not any job group. param:{}", JSONUtil.toJsonStr(groupListParam)); + return Collections.emptySet(); + } + Set groupCodes = groups.stream().map(OrgJobGroupDTO::getCode).collect(Collectors.toSet()); + OrgJobGroupRelationPageParam relationListParam = OrgJobGroupRelationPageParam.builder() + .groupCodes(groupCodes) + .build(); + List relations = orgJobGroupRelationService.whileQuery(relationListParam); + if (CollUtil.isEmpty(relations)) { + log.info("resolveJobCodesByGroup there is not any job and group relation. param:{}", + JSONUtil.toJsonStr(relationListParam)); + return Collections.emptySet(); + } + return relations.stream().map(OrgJobGroupRelationDTO::getJobCode).collect(Collectors.toSet()); + } + + private ImmutableMap loadJobCodeMappingCache() { + OrgJobPageParam listParam = OrgJobPageParam.builder().type(OrgJobTypeEnum.SYSTEM).build(); + List orgJobs = this.whileQuery(listParam); + if (CollUtil.isEmpty(orgJobs)) { + return ImmutableMap.builder().build(); + } + Map map = Maps.newHashMap(); + orgJobs.stream() + .filter(e -> Objects.nonNull(e.getRecordExt())) + .filter(e -> CollUtil.isNotEmpty(e.getRecordExt().getJSONArray(OLD_CONFIG))) + .forEach(e -> cacheJobCodeMapping(e, map)); + return ImmutableMap.copyOf(map); + } + + public List whileQuery(OrgJobPageParam param) { + ListOrgJobReq listParam = ListOrgJobReq.builder().type(param.getType()).build(); + List jobs = new ArrayList<>(); + PageResp jobPage; + int pageNumber = 0; + param.setPageSize(JOB_PAGE_SIZE); + do { + param.setPage(++pageNumber); + jobPage = foundationService.page(listParam); + if (CollUtil.isNotEmpty(jobPage.getData())) { + jobs.addAll(jobPage.getData()); + } + } while (jobPage.hasNext()); + return jobs; + } + + + private Set resolveJobCodes(Collection jobCodes) { + if (CollUtil.isEmpty(jobCodes)) { + return Collections.emptySet(); + } + ImmutableMap jobCodeMapping = jobCodeMappingCache.getUnchecked(OLD_NEW_JOB_CODE_MAP_KEY); + if (CollUtil.isEmpty(jobCodeMapping)) { + return Sets.newHashSet(jobCodes); + } + + Set mergeJobCodes = Sets.newHashSet(jobCodes); + jobCodes.stream() + .filter(jobCodeMapping::containsKey) + .forEach(e -> mergeJobCodes.add(jobCodeMapping.get(e))); + return mergeJobCodes; + } + + private void cacheJobCodeMapping(OrgJobDTO job, Map map) { + JSONObject recordExt = job.getRecordExt(); + if (Objects.isNull(recordExt)) { + return; + } + JSONArray oldJobConfigs = recordExt.getJSONArray(OLD_CONFIG); + if (CollUtil.isEmpty(oldJobConfigs)) { + return; + } + IntStream.range(0, oldJobConfigs.size()) + .mapToObj(oldJobConfigs::getJSONObject) + .collect(Collectors.toList()).stream() + .filter(e -> e.containsKey(CODE_KEY)) + .forEach(e -> map.put(e.getString(CODE_KEY), job.getCode())); + } } From 8dfb10ba0e2462677941eb8d5f3fca342a074817 Mon Sep 17 00:00:00 2001 From: zhanghonghao Date: Tue, 24 Dec 2024 09:51:59 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(REQ-3282):=20=E5=8D=95=E4=BD=8D?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E5=8A=A0=E4=B8=8A=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E6=9F=A5=E5=88=A0=E9=99=A4=E7=9A=84=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/orgmanax/dto/unit/req/ListUnitReq.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/unit/req/ListUnitReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/unit/req/ListUnitReq.java index 2d77e49..ae7a7c4 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/unit/req/ListUnitReq.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/unit/req/ListUnitReq.java @@ -46,6 +46,12 @@ public class ListUnitReq extends PageReqV2 { private Set types; @CriteriaField(field = "tempSourceId", operator = Operator.IN) private Set sourceIds; + /** + * TODO: 待实现 + * 查询返回数据包含,逻辑删除数据,即查询未删除和已删除的数据。 + */ + @CriteriaField(ignore = true) + private Boolean includeDeleted; @CriteriaField(ignore = true) Integer page; @CriteriaField(ignore = true)