diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrgNodeDTO.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrgNodeDTO.java index fad9595..c26c71f 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrgNodeDTO.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrgNodeDTO.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; import java.io.Serializable; import java.util.Date; @@ -12,7 +13,7 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor @Data -@Builder +@SuperBuilder public class OrgNodeDTO implements Serializable { protected Long id; diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/feign/OrgNodeUserApi.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/feign/OrgNodeUserApi.java index aa021a8..c3da8f1 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/feign/OrgNodeUserApi.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/feign/OrgNodeUserApi.java @@ -4,7 +4,7 @@ import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.result.ApiResult; import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq; -import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO; +import cn.axzo.orgmanax.api.nodeuser.resp.NodeUserDTO; import com.alibaba.fastjson.JSONObject; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; @@ -40,6 +40,6 @@ public interface OrgNodeUserApi { * @see ListNodeUserReq#getPageSize() */ @PostMapping("/api/node-user/list") - ApiResult> list(@RequestBody @Validated ListNodeUserReq req); + ApiResult> list(@RequestBody @Validated ListNodeUserReq req); } diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/req/DistinctRule.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/req/DistinctRule.java new file mode 100644 index 0000000..cb3474f --- /dev/null +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/req/DistinctRule.java @@ -0,0 +1,45 @@ +package cn.axzo.orgmanax.api.nodeuser.req; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.ObjectUtils; + +import java.io.Serializable; +import java.util.Collection; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Builder +public class DistinctRule implements Serializable { + + /** + * 如果指定了该值,根据distinctKeys做去重处理 + */ + private Collection distinctByFields; + + /** + * 合并规则,1 = 保留第一个,2 = 保留最后一个,默认为2。 + * + * @see MergeType + */ + private Integer mergeType; + + @Getter + @AllArgsConstructor(access = AccessLevel.PRIVATE) + public enum MergeType { + FIRST(1, "保留第一个"), LAST(2, "保留最后一个"); + private final Integer value; + private final String desc; + } + + public Integer getMergeType() { + // 不指定,取最后一个 + return ObjectUtils.firstNonNull(mergeType, MergeType.LAST.getValue()); + } + +} diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/req/IdentityPair.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/req/IdentityPair.java new file mode 100644 index 0000000..4eb4353 --- /dev/null +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/req/IdentityPair.java @@ -0,0 +1,15 @@ +package cn.axzo.orgmanax.api.nodeuser.req; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@SuperBuilder +public class IdentityPair { + private Long identityId; + private Integer identityType; +} diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/req/ListNodeUserReq.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/req/ListNodeUserReq.java index 6578985..95bae1f 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/req/ListNodeUserReq.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/req/ListNodeUserReq.java @@ -3,11 +3,15 @@ package cn.axzo.orgmanax.api.nodeuser.req; import cn.axzo.foundation.dao.support.wrapper.CriteriaField; import cn.axzo.foundation.dao.support.wrapper.Operator; import cn.axzo.foundation.page.PageReqV2; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import java.util.Collection; +import java.util.Date; import java.util.List; -import java.util.Set; @EqualsAndHashCode(callSuper = true) @NoArgsConstructor @@ -18,8 +22,10 @@ public class ListNodeUserReq extends PageReqV2 { @CriteriaField private Long id; + @CriteriaField(field = "id", operator = Operator.GT) + private Long idGt; @CriteriaField(field = "id", operator = Operator.IN) - private Set ids; + private Collection ids; /** * identity_id @@ -27,7 +33,7 @@ public class ListNodeUserReq extends PageReqV2 { @CriteriaField private Long identityId; @CriteriaField(field = "identityId", operator = Operator.IN) - private Set identityIds; + private Collection identityIds; /** * 身份类型 0-无效类型, 1-工人, 2-班组长, 3-从业人员, 4-政务人员,5-运营人员 @@ -35,7 +41,7 @@ public class ListNodeUserReq extends PageReqV2 { @CriteriaField private Integer identityType; @CriteriaField(field = "identityType", operator = Operator.IN) - private Set identityTypes; + private Collection identityTypes; /** * 自然人id @@ -43,13 +49,17 @@ public class ListNodeUserReq extends PageReqV2 { @CriteriaField private Long personId; @CriteriaField(field = "personId", operator = Operator.IN) - private Set personIds; + private Collection personIds; + @CriteriaField(field = "personId", operator = Operator.NOT_IN) + private Collection excludePersonIds; /** * 主电话 */ @CriteriaField private String phone; + @CriteriaField(field = "phone", operator = Operator.NOT_IN) + private Collection phones; /** * 名字 @@ -65,7 +75,7 @@ public class ListNodeUserReq extends PageReqV2 { @CriteriaField private String idNumber; @CriteriaField(field = "idNumber", operator = Operator.IN) - private Set idNumbers; + private Collection idNumbers; /** * 单位id @@ -73,7 +83,7 @@ public class ListNodeUserReq extends PageReqV2 { @CriteriaField private Long organizationalUnitId; @CriteriaField(field = "organizationalUnitId", operator = Operator.IN) - private Set organizationalUnitIds; + private Collection organizationalUnitIds; /** * 组织节点id @@ -81,7 +91,9 @@ public class ListNodeUserReq extends PageReqV2 { @CriteriaField private Long organizationalNodeId; @CriteriaField(field = "organizationalNodeId", operator = Operator.IN) - private Set organizationalNodeIds; + private Collection organizationalNodeIds; + @CriteriaField(field = "organizationalNodeId", operator = Operator.NOT_IN) + private Collection excludeOrganizationalNodeIds; /** * 顶级节点id @@ -89,7 +101,9 @@ public class ListNodeUserReq extends PageReqV2 { @CriteriaField private Long topNodeId; @CriteriaField(field = "topNodeId", operator = Operator.IN) - private Set topNodeIds; + private Collection topNodeIds; + @CriteriaField(field = "topNodeId", operator = Operator.GT) + private Long topNodeIdGt; /** * 部门管理员 1是 0否 @@ -103,7 +117,7 @@ public class ListNodeUserReq extends PageReqV2 { @CriteriaField private Long organizationalJobId; @CriteriaField(field = "organizationalJobId", operator = Operator.IN) - private Set organizationalJobIds; + private Collection organizationalJobIds; /** * 工作台ID @@ -111,7 +125,7 @@ public class ListNodeUserReq extends PageReqV2 { @CriteriaField private Long workspaceId; @CriteriaField(field = "workspaceId", operator = Operator.IN) - private Long workspaceIds; + private Collection workspaceIds; /** * 0:普通岗位、1:主岗位 @@ -136,6 +150,8 @@ public class ListNodeUserReq extends PageReqV2 { */ @CriteriaField private Long syncDataId; + @CriteriaField(field = "syncDataId", operator = Operator.IN) + private List syncDataIds; /** * 工号 @@ -146,18 +162,200 @@ public class ListNodeUserReq extends PageReqV2 { @CriteriaField private Integer activeFlag; + /** + * 入职时间,大于等于 + */ + @CriteriaField(field = "joinAt", operator = Operator.GE) + private Date joinAtGe; + + /** + * 入职时间,小于等于 + */ + @CriteriaField(field = "joinAt", operator = Operator.LE) + private Date joinAtLe; + /** + * 离职时间,大于等于 + */ + @CriteriaField(field = "leaveAt", operator = Operator.GE) + private Date leaveAtGe; + /** + * 离职时间,小于等于 + */ + @CriteriaField(field = "leaveAt", operator = Operator.LE) + private Date leaveAtLe; + /** + * 更新时间,大于等于 + */ + @CriteriaField(field = "updateAt", operator = Operator.GE) + private Date updateAtGe; + /** + * 更新时间,小于等于 + */ + @CriteriaField(field = "updateAt", operator = Operator.LE) + private Date updateAtLe; + + + // ~ 需特殊实现的查询字段。(非CriteriaField直接可查询的字段) + + /** + * leaderPersonId. 根据personId=leaderPersonId and manager = true,查询node。然后查询整个node下面的人 + */ + @CriteriaField(ignore = true) // TODO: 待实现 + private Long leaderPersonId; + /** + * 下属personId,根据personId=subordinatePersonId,查询到node,然后返回node的manager。 + */ @CriteriaField(ignore = true) - private Boolean needNode; + private Long subordinatePersonId; // TODO: 待实现 + // 岗位code + @CriteriaField(ignore = true) + private String organizationalJobCode; // TODO: 待实现 @CriteriaField(ignore = true) - @Builder.Default - Integer page = 1; + private Collection organizationalJobCodes; // TODO: 待实现 + @CriteriaField(ignore = true) + private String organizationalJobName; // TODO: 待实现 + @CriteriaField(ignore = true) + private String organizationalJobNameLike; // TODO: 待实现 + @CriteriaField(ignore = true) + private Boolean onlyHasJob; // TODO: 待实现 + + @CriteriaField(ignore = true) + private Collection identityPairs; // TODO: 待实现 + /** - * 最大支持1000条数据,不支持单页超过1000的查询,接入方按需分页 + * 查询返回数据包含,逻辑删除数据,即查询未删除和已删除的数据。 */ - @Builder.Default @CriteriaField(ignore = true) - Integer pageSize = 1000; + private Boolean includeDeleted; // TODO: 待实现 + /** + * 仅查询已删除的数据 + */ @CriteriaField(ignore = true) - List sort; + private Boolean deletedOnly; // TODO: 待实现 + + @CriteriaField(ignore = true) + private Integer nodeState; // TODO: 待实现 + + // ~ 后置过滤的字段 + /** + * 包含的单位类型 + */ + private Collection filterIncludeUnitTypes; // TODO: 待实现 + /** + * 排除的单位类型 + */ + private Collection filterExcludeUnitTypes; // TODO: 待实现 + private Integer filterIncludeWorkspaceType; // TODO: 待实现 + /** + * 包含的协作类型 + */ + private Integer filterIncludeCooperateType; // TODO: 待实现 + private Collection filterIncludeCooperateTypes; // TODO: 待实现 + private Collection filterExcludeCooperateTypes; // TODO: 待实现 + /** + * 是否只返回顶级节点 + */ + private Boolean filterTopNodeOnly; // TODO: 待实现 + /** + * 返回directManager不为空的 + */ + private Boolean filterDirectManagerNotNull; // TODO: 待实现 + /** + * 数据权限 + */ + private String dataPermissionCacheKey; // TODO: 待实现 + + /** + * orgUserStatus + */ + private Collection orgUserStatus; // TODO: 待实现 + + // ~ 不同部门类型的nodeUser的差异化查询字段。如 项目内工人 的 项目班组id,平台班组id等。 start + private Long platTeamId; // TODO: 待实现 + private Long projectTeamId; // TODO: 待实现 + private Collection projectTeamIds; // TODO: 待实现 + private Long projectWorkerId; // TODO: 待实现 + private Long projectGroupId; // TODO: 待实现 + /** + * 状态:1未激活 2、已激活 3、施工中 4、已退场 + */ + private Collection projectWorkerStatuses; // TODO: 待实现 + // ~ 不同部门类型的nodeUser的差异化查询字段。如 项目内工人 的 项目班组id,平台班组id等。 end + + /** + * 根据顶级节点查人,指定该值为true了,会根据nodeUser查询topNodeId,然后根据topNodeId进一步查询人员 + * 即:nodeUser.topNodeId 作为参数。之前的nodeId参数不再使用 + */ + private Boolean findByTopNodeId; // TODO: 待实现 + + /** + * 去重规则,如果指定该值,会按照去重规则进行去重。 + * 使用该参数,会影响分页准确性。不建议分页时使用(先查询分页数据,再去重)。 + */ + private DistinctRule distinctRule; // TODO: 待实现 + + // 指定聚合信息 + /** + * 聚合信息needs + */ + @CriteriaField(ignore = true) + private Needs needs; + + + @NoArgsConstructor + @AllArgsConstructor + @Data + @SuperBuilder + public static class Needs { + + // ~ 指定聚合返回字段 + /** + * 是否返回单位信息 + */ + private Boolean unit; + /** + * 是否返回部门信息 + */ + private Boolean node; + /** + * 返回node and path + */ + private Boolean nodeAndPath; + /** + * 返回参与项目数量 + */ + private Boolean projectOrgCnt; + /** + * 是否返回岗位信息 + */ + private Boolean job; + /** + * 是否岗位组信息,对应返回字段里面的organizationalJobWorkspaceType + */ + private Boolean jobGroup; + + /** + * 是否查询下级组织人员。所在节点的下级节点的 + */ + private Boolean childNodeUser; + + /** + * 是否查询下属。(directManagerPersonId等于自己的) + */ + private Boolean subordinate; + + /** + * 是否需要角色信息 + */ + private Boolean role; + /** + * 是否需要部门及父级部门信息,默认不返回 + */ + private Boolean ancestorNode; + + private Boolean cooperateShip; + + private Boolean personProfile; + } } diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/resp/OrgNodeUserDTO.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/resp/NodeUserDTO.java similarity index 84% rename from orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/resp/OrgNodeUserDTO.java rename to orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/resp/NodeUserDTO.java index e802f9b..e36e02b 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/resp/OrgNodeUserDTO.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/resp/NodeUserDTO.java @@ -1,11 +1,13 @@ package cn.axzo.orgmanax.api.nodeuser.resp; import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO; +import cn.axzo.orgmanax.api.orgjob.resp.OrgJobDTO; +import cn.axzo.orgmanax.api.unit.resp.OrgUnitDTO; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; import java.io.Serializable; import java.util.Date; @@ -13,8 +15,8 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor @Data -@Builder -public class OrgNodeUserDTO implements Serializable { +@SuperBuilder +public class NodeUserDTO implements Serializable { private Long id; @@ -138,6 +140,13 @@ public class OrgNodeUserDTO implements Serializable { */ private Integer activeFlag; + /** + * 部门人员信息,json,不同部门类型的部门用户,格式不一。 + */ + private JSONObject profile; + // ~ 聚合信息 private OrgNodeDTO node; + private OrgUnitDTO unit; + private OrgJobDTO job; } diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/orguser/feign/OrgUserApi.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/orguser/feign/OrgUserApi.java index 2c75317..9ab7d34 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/orguser/feign/OrgUserApi.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/orguser/feign/OrgUserApi.java @@ -2,12 +2,8 @@ package cn.axzo.orgmanax.api.orguser.feign; import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.result.ApiResult; -import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq; -import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq; -import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO; import cn.axzo.orgmanax.api.orguser.req.ListOrgUserReq; import cn.axzo.orgmanax.api.orguser.resp.OrgUserDTO; -import com.alibaba.fastjson.JSONObject; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datacollection/DataCollectionDictInfoClient.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datacollection/DataCollectionDictInfoClient.java index 4893c98..40ee9de 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datacollection/DataCollectionDictInfoClient.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/client/datacollection/DataCollectionDictInfoClient.java @@ -9,6 +9,13 @@ import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionListTeamCa import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionListTeamCategoryTreeByCodesReq; import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionProfessionResp; import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionTeamCategoryResp; +import com.alibaba.fastjson.JSON; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; import java.util.Set; @@ -71,12 +78,26 @@ public interface DataCollectionDictInfoClient { List listSkillLabelByCodes(List codes); public static void main(String[] args) { - Stream.of("one", "two", "three", "four") - .filter(e -> e.length() > 3) - .peek(e -> System.out.println("Filtered value: " + e)) - .map(String::toUpperCase) - .peek(e -> System.out.println("Mapped value: " + e)) - .collect(Collectors.toList()); + + ImmutableList> immutableMaps = ImmutableList.of( + ImmutableMap.of("amt", "1", "tot", "13"), + ImmutableMap.of("amt", "2", "tot", "23"), + ImmutableMap.of("amt", "3", "tot", "33"), + ImmutableMap.of("amt", "4", "tot", "43") + ); + + List amtots = JSON.parseArray(JSON.toJSONString(immutableMaps), Amtot.class); + + System.out.println(JSON.toJSONString(amtots)); + } + + @NoArgsConstructor + @AllArgsConstructor + @Builder + @Data + class Amtot{ + private String amt; + private String tot; } } diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/NodeUserQueryRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/NodeUserQueryRepository.java index d73bf82..f673e2f 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/NodeUserQueryRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/NodeUserQueryRepository.java @@ -4,6 +4,8 @@ import cn.axzo.foundation.page.PageResp; import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser; +import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobQueryRepository; +import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.google.common.base.Preconditions; @@ -57,11 +59,25 @@ public interface NodeUserQueryRepository { @SuperBuilder class NodeUserResp extends OrganizationalNodeUser { /** - * 查询参数指定 needNode = true,才会返回 + * 查询参数指定 needs.node = true,才会返回 * - * @see ListNodeUserReq#getNeedNode() + * @see ListNodeUserReq.Needs#getNode() */ - private NodeQueryRepository.NodeResp nodeResp; + private NodeQueryRepository.NodeResp node; + + /** + * 查询参数指定 needs.unit = true,才会返回 + * + * @see ListNodeUserReq.Needs#getUnit() + */ + private UnitQueryRepository.UnitResp unit; + + /** + * 查询参数指定 needs.job = true,才会返回 + * + * @see ListNodeUserReq.Needs#getJob() + */ + private OrgJobQueryRepository.JobResp job; } } diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/impl/NodeUserQueryRepositoryImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/impl/NodeUserQueryRepositoryImpl.java index dd73926..b74c0f3 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/impl/NodeUserQueryRepositoryImpl.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/repository/impl/NodeUserQueryRepositoryImpl.java @@ -9,6 +9,8 @@ import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; import cn.axzo.orgmanax.infra.dao.nodeuser.dao.NodeUserDao; import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser; import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository; +import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobQueryRepository; +import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.BooleanUtil; @@ -31,11 +33,15 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository { private final NodeUserDao nodeUserDao; private final NodeQueryRepository nodeQueryRepository; + private final OrgJobQueryRepository jobQueryRepository; + private final UnitQueryRepository unitQueryRepository; @Override public PageResp page(ListNodeUserReq req) { IPage page = PageConverter.toMybatis(req, OrganizationalNodeUser.class); QueryWrapper wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNodeUser.class); + // 查询参数过滤 + IPage results = nodeUserDao.page(page, wrapper) .convert(e -> BeanUtil.toBean(e, NodeUserResp.class)); PageResp resp = PageConverter.toResp(results); @@ -44,16 +50,47 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository { return resp; } - // assemble node + // assembles assembleNode(req, records); + assembleJob(req, records); + assembleUnit(req, records); return resp; } - private void assembleNode(ListNodeUserReq req, List records) { - if (CollUtil.isEmpty(records)) { + private void assembleUnit(ListNodeUserReq req, List records) { + if (CollUtil.isEmpty(records) || req.getNeeds() == null) { return; } - if (!BooleanUtil.isTrue(req.getNeedNode())) { + if (!BooleanUtil.isTrue(req.getNeeds().getUnit())) { + return; + } + Set unitIds = records.stream().map(NodeUserResp::getOrganizationalUnitId).collect(Collectors.toSet()); + Map unitsById = unitQueryRepository.list(UnitQueryRepository.ListReq.builder() + .ids(unitIds) + .build()).stream().collect(Collectors.toMap(UnitQueryRepository.UnitResp::getId, Function.identity())); + records.forEach(r -> r.setUnit(unitsById.get(r.getOrganizationalUnitId()))); + } + + private void assembleJob(ListNodeUserReq req, List records) { + if (CollUtil.isEmpty(records) || req.getNeeds() == null) { + return; + } + if (!BooleanUtil.isTrue(req.getNeeds().getJob())) { + return; + } + Set jobIds = records.stream().map(NodeUserResp::getOrganizationalJobId).collect(Collectors.toSet()); + // assemble job + Map jobsById = jobQueryRepository.page(OrgJobQueryRepository.ListReq.builder() + .ids(jobIds) + .build()).getData().stream().collect(Collectors.toMap(OrgJobQueryRepository.JobResp::getId, Function.identity())); + records.forEach(r -> r.setJob(jobsById.get(r.getOrganizationalJobId()))); + } + + private void assembleNode(ListNodeUserReq req, List records) { + if (CollUtil.isEmpty(records) || req.getNeeds() == null) { + return; + } + if (!BooleanUtil.isTrue(req.getNeeds().getNode())) { return; } Set nodeIds = records.stream().map(NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet()); @@ -62,7 +99,7 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository { .ids(nodeIds) .build()).stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity())); - records.forEach(r -> r.setNodeResp(nodesById.get(r.getOrganizationalNodeId()))); + records.forEach(r -> r.setNode(nodesById.get(r.getOrganizationalNodeId()))); } } 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 f932063..1b05d68 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 @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; import lombok.experimental.Accessors; +import lombok.experimental.SuperBuilder; import java.io.Serializable; @@ -23,7 +24,7 @@ import java.io.Serializable; @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor -@Builder +@SuperBuilder @ToString(callSuper = true) @EqualsAndHashCode(callSuper = false) public class OrgJob implements Serializable { 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 e21381c..b011306 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 @@ -18,14 +18,12 @@ import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.Collection; + public interface OrgJobQueryRepository { - /** - * 分页查询 - * @param req - * @return - */ - PageResp page(ListReq req); + + PageResp page(ListReq req); /** * 列表查询 @@ -33,7 +31,7 @@ public interface OrgJobQueryRepository { * @return */ default List list(ListReq req) { - PageResp page = page(req); + PageResp page = page(req); if (page == null) { return Collections.emptyList(); } @@ -59,5 +57,13 @@ public interface OrgJobQueryRepository { } + @EqualsAndHashCode(callSuper = true) + @NoArgsConstructor + @AllArgsConstructor + @Data + @SuperBuilder + class JobResp extends OrgJob { + private String other; + } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/controller/NodeUserController.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/controller/NodeUserController.java index 85dc790..c592dd8 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/controller/NodeUserController.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/controller/NodeUserController.java @@ -6,7 +6,7 @@ import cn.axzo.foundation.result.ApiResult; import cn.axzo.orgmanax.api.nodeuser.feign.OrgNodeUserApi; import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq; -import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO; +import cn.axzo.orgmanax.api.nodeuser.resp.NodeUserDTO; import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService; import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor; import com.alibaba.fastjson.JSONObject; @@ -43,7 +43,7 @@ public class NodeUserController implements OrgNodeUserApi { } @Override - public ApiResult> list(ListNodeUserReq req) { + public ApiResult> list(ListNodeUserReq req) { return ApiResult.success(nodeUserService.page(req)); } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/NodeUserService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/NodeUserService.java index 023409f..7551606 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/NodeUserService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/NodeUserService.java @@ -2,14 +2,11 @@ package cn.axzo.orgmanax.server.nodeuser.service; import cn.axzo.foundation.exception.Axssert; import cn.axzo.foundation.page.PageResp; -import cn.axzo.orgmanax.api.node.req.ListNodeReq; import cn.axzo.orgmanax.api.node.req.ProcessNodeReq; -import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO; import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq; -import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO; +import cn.axzo.orgmanax.api.nodeuser.resp.NodeUserDTO; import cn.axzo.orgmanax.common.config.BizResultCode; -import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor; import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; @@ -23,9 +20,9 @@ public interface NodeUserService { NodeUserProcessor.ProcessResult process(ProcessNodeUserReq req); - PageResp page(ListNodeUserReq req); + PageResp page(ListNodeUserReq req); - default List list(ListNodeUserReq req) { + default List list(ListNodeUserReq req) { return page(req).getData(); } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/impl/NodeUserServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/impl/NodeUserServiceImpl.java index ccd7bcf..4c866f8 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/impl/NodeUserServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/impl/NodeUserServiceImpl.java @@ -4,19 +4,19 @@ import cn.axzo.foundation.exception.Axssert; import cn.axzo.foundation.page.PageResp; import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq; -import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO; +import cn.axzo.orgmanax.api.nodeuser.resp.NodeUserDTO; import cn.axzo.orgmanax.common.config.BizResultCode; import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository; import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService; import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; import java.util.List; -import java.util.stream.Collectors; @Slf4j @Service @@ -49,9 +49,9 @@ public class NodeUserServiceImpl implements NodeUserService { } @Override - public PageResp page(ListNodeUserReq req) { + public PageResp page(ListNodeUserReq req) { PageResp page = nodeUserQueryRepository.page(req); - List records = page.getData().stream().map(e -> BeanUtil.toBean(e, OrgNodeUserDTO.class)).collect(Collectors.toList()); + List records = BeanUtil.copyToList(CollUtil.emptyIfNull(page.getData()), NodeUserDTO.class); // assemble data if needed return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records); } diff --git a/orgmanax-starter/src/main/java/cn/axzo/orgmanax/DevApplication.java b/orgmanax-starter/src/main/java/cn/axzo/orgmanax/DevApplication.java index dda6cd5..fcf4a80 100644 --- a/orgmanax-starter/src/main/java/cn/axzo/orgmanax/DevApplication.java +++ b/orgmanax-starter/src/main/java/cn/axzo/orgmanax/DevApplication.java @@ -19,7 +19,7 @@ public class DevApplication { public static final String DEFAULT_DIR = "cn.axzo.orgmanax"; public static void main(String[] args) { -// System.setProperty("rocket.consumer.listeners.disable", "true"); + System.setProperty("rocket.consumer.listeners.disable", "true"); System.setProperty("spring.profiles.active","dev"); System.setProperty("NACOS_HOST","https://dev-nacos.axzo.cn"); System.setProperty("NACOS_PORT","443"); @@ -32,6 +32,7 @@ public class DevApplication { System.setProperty("spring.redis.password","!rHV2!fctYtV4vF"); System.setProperty("xxl.job.admin.addresses","http://dev-xxl-job.axzo.cn/xxl-job-admin"); System.setProperty("rocketmq.name-server", "172.16.2.82:9876"); + System.setProperty("logback.path", "/tmp"); SpringApplication application = new SpringApplication(DevApplication.class); ConfigurableApplicationContext run = application.run(args); Environment env = run.getEnvironment();