diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java index 4551d89..37208a7 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/node/dto/NodeProfile.java @@ -33,7 +33,9 @@ public class NodeProfile { * 平台班组所属团队/单位 id */ private Long ouId; - // + + // org_project_team 字段 + private Long projectTeamId; /** * 总包ID */ @@ -110,11 +112,11 @@ public class NodeProfile { // 新冗余字段 private Long belongProjectTeamNodeId; - + // org_project_group 字段 /** * 主键id */ - private Long id; + private Long projectGroupId; /** * 小组类型 0-直属小组 1-合作小组 diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java index ab60e55..2913255 100644 --- a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserDTO.java @@ -16,6 +16,7 @@ import lombok.experimental.SuperBuilder; import java.io.Serializable; import java.util.Date; import java.util.List; +import java.util.Optional; @NoArgsConstructor @AllArgsConstructor @@ -186,4 +187,33 @@ public class NodeUserDTO implements Serializable { */ private List subordinateUsers; + + /** + * 解析profile + * 调用方需要根据nodeType来解析profile,自行使用正确的对象来接收
。 + * 解析对象需要 {@link #getNode()}.nodType信息,请确认{@link ListNodeUserReq.Needs#getNode()} = true,否则仅会返回json的profile。
+ *
+     *     NodeUserProfile.ProjectWorkerProfile projectTeamProfile = projectTeamNodeUser.resolveProfile(); // nodeType = 4
+     *     NodeUserProfile.PlatTeamProfile platTeamProfile = platTeamNodeUser.resolveProfile(); // nodeType = 2
+     *     JSONObject normalProfile = normalNodeUser.resolveProfile(); // nodeType = 1
+     *
+     * 
+ * + * @return + * @see NodeUserProfile#resolveProfileClass(Integer) + */ + public T resolveProfile() { + if (profile == null || profile.isEmpty()) { + return (T) profile; + } + if (node == null || node.getNodeType() == null) { + // 没有聚合node信息的情况,直接返回JSONObject的profile + return (T) profile; + } + Class clazz = NodeUserProfile.resolveProfileClass(node.getNodeType()); + if (clazz == null) { + return (T) profile; + } + return (T) Optional.ofNullable(profile).map(p -> JSONObject.parseObject(p.toString(), clazz)).orElse(null); + } } diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserProfile.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserProfile.java new file mode 100644 index 0000000..387072d --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/dto/NodeUserProfile.java @@ -0,0 +1,108 @@ +package cn.axzo.orgmanax.dto.nodeuser.dto; + +import cn.axzo.orgmanax.dto.node.enums.NodeTypeEnum; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.ImmutableMap; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.Date; +import java.util.Map; + +/** + * 部门人员Profile定义 + */ +public class NodeUserProfile { + + /** + * 项目工人Profile,为了方便直观看到对应关系,字段和 org_project_team 保持一致 + */ + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @Data + public static class ProjectWorkerProfile { + // org_project_worker 字段 + /** + * 项目班组节点id。 + */ + private Long projectWorkerId; + /** + * 状态:0、未激活 1、已激活 3已退场 + */ + private Integer status; + /** + * 工种类别 + */ + private String professionCategoryName; + + /** + * 是否删除 0:未删除 其他:已删除 + */ + private Long isDelete; + + /** + * 最后一次进工地的时间,进场打卡更新 + * 进场打卡更新, + */ + private Date lastCheckInTime; + + /** + * 最后一次出工地的时间,出场打卡更新 + */ + private Date lastCheckOutTime; + + /** + * 工人施工开始时间,工人所有任务单中最早开始时间 + */ + private Date constructionStartTime; + + /** + * 工人施工结束时间 + */ + private Date constructionEndTime; + /** + * 在岗、待岗 + */ + private Integer occupyStatus; + /** + * 提醒推送未备案消息次数。(xxljob在给未备案的工人发送消息。为了避免多次提醒。这里记录了一个提醒的次数。) + * 参考 maokai代码:cn.axzo.apollo.labour.service.job.PushSupervisionMsgJob#execute + */ + private Integer pushSupervisionMsgCount; + } + + @NoArgsConstructor + @AllArgsConstructor + @SuperBuilder + @Data + /** + * 项目小组人员Profile + */ + public static class ProjectGroupWorkerProfile { + + // 新冗余字段 + /** + * 项目小组人员id + */ + private Long projectGroupWorkerId; + /** + * 状态 状态 0-有效 1-无效 + */ + private Integer status; + } + + private static final Map> typeClassMapping = ImmutableMap.of( + NodeTypeEnum.PROJECT_TEAM.getValue(), ProjectWorkerProfile.class, + NodeTypeEnum.PROJECT_GROUP.getValue(), ProjectGroupWorkerProfile.class + ); + + public static Class resolveProfileClass(Integer nodeType) { + if (nodeType == null) { + return JSONObject.class; + } + return typeClassMapping.getOrDefault(nodeType, JSONObject.class); + } +} \ No newline at end of file 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 df4dae6..c5ef062 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 @@ -262,7 +262,13 @@ public interface NodeUserQueryRepository { private Collection orgUserStatus; // TODO: 待实现 @CriteriaField(ignore = true) - List> selects; + private List> selects; + + /** + * 直接返回空 + */ + @CriteriaField(ignore = true) + private Boolean returnEmpty; } @NoArgsConstructor 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 8a4a6c2..63498ef 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 @@ -33,6 +33,9 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository { public PageResp page(ListReq req) { IPage page = PageConverter.toMybatis(req, OrganizationalNodeUser.class); PageResp emptyPage = PageResp.builder().size(req.getPageSize()).current(req.getPage()).total(0L).data(ImmutableList.of()).build(); + if (BooleanUtil.isTrue(req.getReturnEmpty())) { + return emptyPage; + } LambdaQueryWrapper wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNodeUser.class).lambda(); // 查询参数处理 ~ // keyword 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 9499302..a75a547 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 @@ -97,63 +97,8 @@ public class NodeUserServiceImpl implements NodeUserService { public PageResp page(ListNodeUserReq req) { PageResp emptyPage = PageResp.builder().size(req.getPageSize()) .current(req.getPage()).total(0L).data(ImmutableList.of()).build(); - NodeUserQueryRepository.ListReq listReq = BeanUtil.toBean(req, NodeUserQueryRepository.ListReq.class); - // jobCodes -> jobIds - if (CollUtil.isNotEmpty(req.getOrganizationalJobCodes()) - || StrUtil.isNotBlank(req.getOrganizationalJobCode()) - || StrUtil.isNotBlank(req.getOrganizationalJobNameLike()) - || StrUtil.isNotBlank(req.getOrganizationalJobName())) { - Set jobIds = jobQueryRepository.list(OrgJobQueryRepository.ListReq.builder() - .codes(req.getOrganizationalJobCodes()) - .code(req.getOrganizationalJobCode()) - .nameLike(req.getOrganizationalJobNameLike()) - .name(req.getOrganizationalJobName()) - .searchCount(false) - .build()).stream().map(OrgJobQueryRepository.JobResp::getId).collect(Collectors.toSet()); - if (jobIds.isEmpty()) { - return emptyPage; - } - listReq.setOrganizationalJobIds(QueryConditionAssembler.assemble(listReq.getOrganizationalJobIds(), jobIds)); - } - - // 根据managerPersonId进行查询 -> 找到 manage的nodeId,作为查询条件,往下查 - if (req.getManagerPersonId() != null) { - Set managedOrgNodeId = nodeUserQueryRepository.list(NodeUserQueryRepository.ListReq.builder() - .manager(true) - .personId(req.getManagerPersonId()) - .selects(ImmutableList.of(OrganizationalNodeUser::getOrganizationalNodeId)) - .searchCount(false) - .pageSize(100000) - .build()).stream() - .map(NodeUserQueryRepository.NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet()); - if (managedOrgNodeId.isEmpty()) { - return emptyPage; - } - listReq.setOrganizationalNodeIds(QueryConditionAssembler.assemble(listReq.getOrganizationalNodeIds(), managedOrgNodeId)); - } - - // subordinatePersonId - if (req.getSubordinatePersonId() != null) { - Set nodeIds = nodeUserQueryRepository.list(NodeUserQueryRepository.ListReq.builder() - .personId(req.getSubordinatePersonId()) - .manager(false) - .selects(ImmutableList.of(OrganizationalNodeUser::getOrganizationalNodeId)) - .searchCount(false) - .build()) - .stream().map(NodeUserQueryRepository.NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet()); - if (nodeIds.isEmpty()) { - return emptyPage; - } - // 查询 subordinatePersonId 所在节点的管理员 - listReq.setOrganizationalNodeIds(QueryConditionAssembler.assemble(listReq.getOrganizationalNodeIds(), nodeIds)); - listReq.setManager(true); - } - if (req.getDirectManagerPersonId() != null) { - listReq.setExtraQueries(QueryConditionAssembler.assemble(listReq.getExtraQueries(), ImmutableList.of(MybatisPlusOperatorProcessor.JSONQuery.builder() - .jsonPath("$.directManagerPersonId") - .data(req.getDirectManagerPersonId()) - .build()))); - } + // 构建 repository层查询参数 + NodeUserQueryRepository.ListReq listReq = resolveListReq(req); PageResp page = nodeUserQueryRepository.page(listReq); if (CollUtil.isEmpty(page.getData())) { @@ -184,6 +129,71 @@ public class NodeUserServiceImpl implements NodeUserService { return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records); } + private NodeUserQueryRepository.ListReq resolveListReq(ListNodeUserReq req) { + NodeUserQueryRepository.ListReq listReq = BeanUtil.toBean(req, NodeUserQueryRepository.ListReq.class); + // jobCodes -> jobIds + if (CollUtil.isNotEmpty(req.getOrganizationalJobCodes()) + || StrUtil.isNotBlank(req.getOrganizationalJobCode()) + || StrUtil.isNotBlank(req.getOrganizationalJobNameLike()) + || StrUtil.isNotBlank(req.getOrganizationalJobName())) { + Set jobIds = jobQueryRepository.list(OrgJobQueryRepository.ListReq.builder() + .codes(req.getOrganizationalJobCodes()) + .code(req.getOrganizationalJobCode()) + .nameLike(req.getOrganizationalJobNameLike()) + .name(req.getOrganizationalJobName()) + .searchCount(false) + .build()).stream().map(OrgJobQueryRepository.JobResp::getId).collect(Collectors.toSet()); + if (jobIds.isEmpty()) { + listReq.setReturnEmpty(true); + return listReq; + } + listReq.setOrganizationalJobIds(QueryConditionAssembler.assemble(listReq.getOrganizationalJobIds(), jobIds)); + } + + // 根据managerPersonId进行查询 -> 找到 manage的nodeId,作为查询条件,往下查 + if (req.getManagerPersonId() != null) { + Set managedOrgNodeId = nodeUserQueryRepository.list(NodeUserQueryRepository.ListReq.builder() + .manager(true) + .personId(req.getManagerPersonId()) + .selects(ImmutableList.of(OrganizationalNodeUser::getOrganizationalNodeId)) + .searchCount(false) + .pageSize(100000) + .build()).stream() + .map(NodeUserQueryRepository.NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet()); + if (managedOrgNodeId.isEmpty()) { + listReq.setReturnEmpty(true); + return listReq; + } + listReq.setOrganizationalNodeIds(QueryConditionAssembler.assemble(listReq.getOrganizationalNodeIds(), managedOrgNodeId)); + } + + // subordinatePersonId + if (req.getSubordinatePersonId() != null) { + Set nodeIds = nodeUserQueryRepository.list(NodeUserQueryRepository.ListReq.builder() + .personId(req.getSubordinatePersonId()) + .manager(false) + .selects(ImmutableList.of(OrganizationalNodeUser::getOrganizationalNodeId)) + .searchCount(false) + .build()) + .stream().map(NodeUserQueryRepository.NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet()); + if (nodeIds.isEmpty()) { + listReq.setReturnEmpty(true); + return listReq; + } + // 查询 subordinatePersonId 所在节点的管理员 + listReq.setOrganizationalNodeIds(QueryConditionAssembler.assemble(listReq.getOrganizationalNodeIds(), nodeIds)); + listReq.setManager(true); + } + // directManagerPersonId + if (req.getDirectManagerPersonId() != null) { + listReq.setExtraQueries(QueryConditionAssembler.assemble(listReq.getExtraQueries(), ImmutableList.of(MybatisPlusOperatorProcessor.JSONQuery.builder() + .jsonPath("$.directManagerPersonId") + .data(req.getDirectManagerPersonId()) + .build()))); + } + return listReq; + } + @Override public List searchEntUser(SearchEntNodeUserReq req) { return nodeUserFoundationService.searchEntUser(req);