feat(REQ-3282): 提供briefDTO,用于聚合

This commit is contained in:
周敏 2024-12-25 15:28:36 +08:00
parent 2965d1c0b2
commit 3d4788d670
8 changed files with 229 additions and 40 deletions

View File

@ -4,7 +4,18 @@ Content-Type: application/json
Accept: application/json
{
"id": 984
// "id": 984,
"realNameLike": "周阳",
"phone": "18530039500",
"idNumber": "410205198601221016",
"personId": 5354,
"includeDeleted": true,
"pageSize": 2,
"needs": {
"job": true,
"node": true,
"unit": true
}
}
###

View File

@ -0,0 +1,42 @@
package cn.axzo.orgmanax.dto.job.dto;
import cn.axzo.orgmanax.dto.job.enums.OrgJobFlagEnum;
import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
public class OrgJobBriefDTO {
/**
* 主键
*/
private Long id;
/**
* 名称
*/
private String name;
/**
* 别名
*/
private String alias;
/**
* 编码
*/
private String code;
/**
* 岗位类型SYSTEM - 系统CUSTOM - 自定义
*/
private OrgJobTypeEnum type;
/**
* 岗位标签SYSTEM - 系统岗BUSINESS - 业务岗
*/
private OrgJobFlagEnum flag;
}

View File

@ -0,0 +1,62 @@
package cn.axzo.orgmanax.dto.node.dto;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
public class OrgNodeBriefDTO implements Serializable {
protected Long id;
/**
* 上级id,为0时为顶级节点
*/
private Long parentId;
/**
* 单位id
*/
private Long organizationalUnitId;
/**
* 节点类型 1.部门 2.班组 3.小组
*/
private Integer nodeType;
/**
* 节点名称
*/
private String nodeName;
/**
* 层级路由
*/
private String path;
/**
* 扩展字段
*/
private JSONObject extra;
/**
* 顶级节点的nodeId
*/
private Long topNodeId;
/**
* 节点状态 1-正常 0-停用
**/
private Integer nodeState;
/**
* 节点信息json不同的节点类型格式不一如班组节点的解散状态等
*/
private JSONObject profile;
}

View File

@ -1,8 +1,10 @@
package cn.axzo.orgmanax.dto.nodeuser.dto;
import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO;
import cn.axzo.orgmanax.dto.job.dto.OrgJobBriefDTO;
import cn.axzo.orgmanax.dto.node.dto.OrgNodeBriefDTO;
import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitBriefDTO;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitDTO;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
@ -150,13 +152,13 @@ public class NodeUserDTO implements Serializable {
/**
* 需指定{@link ListNodeUserReq.Needs#getNode()} 为true才会返回
*/
private OrgNodeDTO node;
private OrgNodeBriefDTO node;
/**
* 需指定{@link ListNodeUserReq.Needs#getUnit()} 为true才会返回
*/
private OrgUnitDTO unit;
private OrgUnitBriefDTO unit;
/**
* 需指定{@link ListNodeUserReq.Needs#getJob()} 为true才会返回
*/
private OrgJobDTO job;
private OrgJobBriefDTO job;
}

View File

@ -0,0 +1,63 @@
package cn.axzo.orgmanax.dto.unit.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
@NoArgsConstructor
@SuperBuilder
@Data
@AllArgsConstructor
public class OrgUnitBriefDTO implements Serializable {
private Long id;
/**
* 父单位id
*/
private Long parentId;
/**
* 单位名称
*/
private String name;
/**
* 单位logo url地址
*/
private String logoUrl;
/**
* 单位类型 1:总包单位 2:建设单位 3:监理单位 4:劳务分包 5:专业分包 6.项目外班组 7.安心筑平台
*/
private Integer type;
/**
* 单位性质0其他 1团队 2企业 3班组
*/
private Integer nature;
/**
* 统一社会信用码
*/
private String uniformSocialCreditCode;
/**
* 班组长身份id
*/
private Long identityId;
/**
* 身份类型 1.无身份 2.班组长
*/
private Integer identityType;
/**
* 企业标签1正式企业 2测试企业
*/
private Integer entTag;
}

View File

@ -5,15 +5,22 @@ 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.node.req.ListNodeReq;
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.google.common.base.Preconditions;
import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.Set;
/**
* @author tanjie@axzo.cn
@ -24,6 +31,7 @@ public interface NodeQueryRepository {
PageResp<OrganizationalNode> page(ListReq req);
default List<OrganizationalNode> list(ListReq req) {
req.setSearchCount(false);
return page(req).getData();
}
@ -36,6 +44,7 @@ public interface NodeQueryRepository {
ListReq page = BeanUtil.toBean(req, ListReq.class);
page.setPage(1);
page.setPageSize(1);
page.setSearchCount(false);
return page(page).getData().stream().findFirst();
}

View File

@ -11,7 +11,6 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.google.common.base.Preconditions;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@ -28,6 +27,7 @@ public interface NodeUserQueryRepository {
PageResp<NodeUserResp> page(ListReq req);
default List<NodeUserResp> list(ListReq req) {
req.setSearchCount(false);
return page(req).getData();
}
@ -40,6 +40,7 @@ public interface NodeUserQueryRepository {
ListReq page = BeanUtil.toBean(req, ListReq.class);
page.setPage(1);
page.setPageSize(1);
page.setSearchCount(false);
return page(page).getData().stream().findFirst();
}

View File

@ -3,24 +3,21 @@ package cn.axzo.orgmanax.server.nodeuser.service.impl;
import cn.axzo.foundation.exception.Axssert;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO;
import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO;
import cn.axzo.orgmanax.dto.node.req.ListNodeReq;
import cn.axzo.orgmanax.dto.job.dto.OrgJobBriefDTO;
import cn.axzo.orgmanax.dto.node.dto.OrgNodeBriefDTO;
import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.dto.nodeuser.req.ProcessNodeUserReq;
import cn.axzo.orgmanax.dto.nodeuser.req.SearchEntNodeUserReq;
import cn.axzo.orgmanax.dto.nodeuser.resp.SearchEntNodeUserResp;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitDTO;
import cn.axzo.orgmanax.dto.unit.req.ListUnitReq;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitBriefDTO;
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
import cn.axzo.orgmanax.server.node.service.NodeService;
import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobQueryRepository;
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
import cn.axzo.orgmanax.server.nodeuser.foundation.NodeUserFoundationService;
import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService;
import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor;
import cn.axzo.orgmanax.server.orgjob.service.OrgJobService;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam;
import cn.axzo.orgmanax.server.unit.service.UnitService;
import cn.axzo.orgmanax.server.util.QueryConditionAssembler;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
@ -46,11 +43,11 @@ public class NodeUserServiceImpl implements NodeUserService {
private final NodeUserQueryRepository nodeUserQueryRepository;
@Autowired
private NodeService nodeService;
private NodeQueryRepository nodeQueryRepository;
@Autowired
private OrgJobService jobService;
private OrgJobQueryRepository jobQueryRepository;
@Autowired
private UnitService unitService;
private UnitQueryRepository unitQueryRepository;
private final ApplicationContext applicationContext;
private final NodeUserFoundationService nodeUserFoundationService;
@ -87,12 +84,11 @@ public class NodeUserServiceImpl implements NodeUserService {
if (CollUtil.isNotEmpty(req.getOrganizationalJobCodes())
|| StrUtil.isNotBlank(req.getOrganizationalJobCode())
|| StrUtil.isNotBlank(req.getOrganizationalJobNameLike())) {
Set<Long> jobIds = jobService.page(OrgJobPageParam.builder()
.jobCodes(req.getOrganizationalJobCodes())
.jobCode(req.getOrganizationalJobCode())
.jobNameLike(req.getOrganizationalJobNameLike())
.build())
.getData().stream().map(OrgJobDTO::getId).collect(Collectors.toSet());
Set<Long> jobIds = jobQueryRepository.list(OrgJobQueryRepository.ListReq.builder()
.codes(req.getOrganizationalJobCodes())
.code(req.getOrganizationalJobCode())
.nameLike(req.getOrganizationalJobNameLike())
.build()).stream().map(OrgJobQueryRepository.JobResp::getId).collect(Collectors.toSet());
if (jobIds.isEmpty()) {
return emptyPage;
}
@ -113,7 +109,6 @@ public class NodeUserServiceImpl implements NodeUserService {
return nodeUserFoundationService.searchEntUser(req);
}
private void assembleUnit(ListNodeUserReq req, List<NodeUserDTO> records) {
if (CollUtil.isEmpty(records) || req.getNeeds() == null) {
return;
@ -122,10 +117,11 @@ public class NodeUserServiceImpl implements NodeUserService {
return;
}
Set<Long> unitIds = records.stream().map(NodeUserDTO::getOrganizationalUnitId).collect(Collectors.toSet());
Map<Long, OrgUnitDTO> unitsById = unitService.list(ListUnitReq.builder()
Map<Long, OrgUnitBriefDTO> unitsById = unitQueryRepository.list(UnitQueryRepository.ListReq.builder()
.ids(unitIds)
.searchCount(false)
.build()).getData().stream().collect(Collectors.toMap(OrgUnitDTO::getId, Function.identity()));
.build())
.stream().map(unit -> BeanUtil.toBean(unit, OrgUnitBriefDTO.class))
.collect(Collectors.toMap(OrgUnitBriefDTO::getId, Function.identity()));
records.forEach(r -> r.setUnit(unitsById.get(r.getOrganizationalUnitId())));
}
@ -138,9 +134,11 @@ public class NodeUserServiceImpl implements NodeUserService {
}
Set<Long> jobIds = records.stream().map(NodeUserDTO::getOrganizationalJobId).collect(Collectors.toSet());
// assemble job
Map<Long, OrgJobDTO> jobsById = jobService.page(OrgJobPageParam.builder()
.jobIds(jobIds)
.build()).getData().stream().collect(Collectors.toMap(OrgJobDTO::getId, Function.identity()));
Map<Long, OrgJobBriefDTO> jobsById = jobQueryRepository.list(OrgJobQueryRepository.ListReq.builder()
.ids(jobIds)
.build()).stream()
.map(job -> BeanUtil.toBean(job, OrgJobBriefDTO.class))
.collect(Collectors.toMap(OrgJobBriefDTO::getId, Function.identity()));
records.forEach(r -> r.setJob(jobsById.get(r.getOrganizationalJobId())));
}
@ -152,11 +150,12 @@ public class NodeUserServiceImpl implements NodeUserService {
return;
}
Set<Long> nodeIds = records.stream().map(NodeUserDTO::getOrganizationalNodeId).collect(Collectors.toSet());
// assemble parentNode
Map<Long, OrgNodeDTO> nodesById = nodeService.list(ListNodeReq.builder()
// assemble node
Map<Long, OrgNodeBriefDTO> nodesById = nodeQueryRepository.list(NodeQueryRepository.ListReq.builder()
.ids(nodeIds)
.includeAncestors(BooleanUtil.isTrue(req.getNeeds().getAncestorNode()))
.build()).stream().collect(Collectors.toMap(OrgNodeDTO::getId, Function.identity()));
.build()).stream()
.map(node -> BeanUtil.toBean(node, OrgNodeBriefDTO.class))
.collect(Collectors.toMap(OrgNodeBriefDTO::getId, Function.identity()));
records.forEach(r -> r.setNode(nodesById.get(r.getOrganizationalNodeId())));
}