feat:[REQ-3282] 编写组织节点相关代码
This commit is contained in:
parent
6163706230
commit
e8e939cd87
@ -12,16 +12,6 @@ import java.util.Set;
|
||||
@Data
|
||||
@SuperBuilder
|
||||
public class ListNodeReq extends PageReqV2 {
|
||||
/**
|
||||
* 页数
|
||||
*/
|
||||
private Integer page;
|
||||
|
||||
/**
|
||||
* 条数
|
||||
*/
|
||||
private Integer pageSize;
|
||||
|
||||
/**
|
||||
* ids
|
||||
*/
|
||||
@ -57,14 +47,29 @@ public class ListNodeReq extends PageReqV2 {
|
||||
private Set<Long> topNodeIds;
|
||||
|
||||
/**
|
||||
* 是否查询祖先节点
|
||||
* 是否包含祖先节点
|
||||
*/
|
||||
private Boolean isSelectAncestors;
|
||||
@Builder.Default
|
||||
private Boolean includeAncestors = false;
|
||||
|
||||
/**
|
||||
* 是否查询子孙节点
|
||||
* 是否包含子孙节点
|
||||
*/
|
||||
private Boolean isSelectDescendant;
|
||||
@Builder.Default
|
||||
private Boolean includeDescendants = false;
|
||||
|
||||
/**
|
||||
* 是否包含父节点
|
||||
*/
|
||||
@Builder.Default
|
||||
private Boolean includeParent = false;
|
||||
|
||||
/**
|
||||
* 是否包含子节点
|
||||
*/
|
||||
@Builder.Default
|
||||
private Boolean includeChildren = false;
|
||||
|
||||
|
||||
/**
|
||||
* 是否查询节点用户
|
||||
@ -74,7 +79,7 @@ public class ListNodeReq extends PageReqV2 {
|
||||
/**
|
||||
* 是否查询删除的
|
||||
*/
|
||||
private Boolean isSelectDelete;
|
||||
private Boolean includeDelete;
|
||||
|
||||
/**
|
||||
* 数据权限缓存数据key
|
||||
@ -92,6 +97,11 @@ public class ListNodeReq extends PageReqV2 {
|
||||
*/
|
||||
private Set<WorkspaceOuPair> workspaceOuPairs;
|
||||
|
||||
/**
|
||||
* 项目id集合
|
||||
*/
|
||||
private Set<Long> workspaceIds;
|
||||
|
||||
/**
|
||||
* 需要返回管理员信息
|
||||
*/
|
||||
|
||||
@ -132,6 +132,32 @@ public interface CooperateShipQueryRepository {
|
||||
@Builder.Default
|
||||
private Set<Long> parentIds = Collections.emptySet();
|
||||
|
||||
/**
|
||||
* path右值
|
||||
*/
|
||||
@CriteriaField(field = "isDelete", operator = Operator.EQ)
|
||||
@Builder.Default
|
||||
private Long isDelete = 0L;
|
||||
|
||||
/**
|
||||
* 项目单位关系聚合查询
|
||||
*/
|
||||
private List<WorkspaceOuPair> workspaceOuPairs;
|
||||
|
||||
}
|
||||
|
||||
@Data
|
||||
class WorkspaceOuPair {
|
||||
|
||||
/**
|
||||
* 项目ID
|
||||
*/
|
||||
private Long workspaceId;
|
||||
|
||||
/**
|
||||
* 单位ID
|
||||
*/
|
||||
private Long ouId;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -16,6 +16,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -39,6 +40,20 @@ public class CooperateShipQueryRepositoryImpl implements CooperateShipQueryRepos
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (CollUtil.isNotEmpty(req.getWorkspaceOuPairs())) {
|
||||
wrapper.and(j -> {
|
||||
for (WorkspaceOuPair workspaceOuPair : req.getWorkspaceOuPairs()) {
|
||||
j.or(k -> {
|
||||
k.eq(Objects.nonNull(workspaceOuPair.getOuId()), "organizational_unit_id", workspaceOuPair.getOuId());
|
||||
k.eq(Objects.nonNull(workspaceOuPair.getWorkspaceId()), "workspace_id", workspaceOuPair.getWorkspaceId());
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (wrapper.isEmptyOfWhere()) {
|
||||
log.warn("CooperateShipResp empty of where query. return empty list. req = {}", req);
|
||||
return Collections.emptyList();
|
||||
|
||||
@ -51,7 +51,7 @@ public class NodeQueryRepositoryImpl implements NodeQueryRepository {
|
||||
}
|
||||
|
||||
private void assembleParentNode(ListNodeReq req, List<NodeResp> records) {
|
||||
if (!BooleanUtil.isTrue(req.getIsSelectAncestors())) {
|
||||
if (!BooleanUtil.isTrue(req.getIncludeAncestors())) {
|
||||
return;
|
||||
}
|
||||
Map<Long, NodeResp> nodesById = records.stream().collect(Collectors.toMap(NodeResp::getId, Function.identity()));
|
||||
|
||||
@ -1,19 +1,45 @@
|
||||
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.OrgJob;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
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;
|
||||
|
||||
public interface OrgJobQueryRepository {
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
PageResp<OrgJob> page(ListReq req);
|
||||
|
||||
/**
|
||||
* 列表查询
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
default List<OrgJob> list(ListReq req) {
|
||||
PageResp<OrgJob> page = page(req);
|
||||
if (page == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return CollUtil.emptyIfNull(page.getData());
|
||||
}
|
||||
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@ -22,8 +48,14 @@ public interface OrgJobQueryRepository {
|
||||
@SuperBuilder
|
||||
class ListReq extends PageReqV2 {
|
||||
|
||||
@CriteriaField
|
||||
private String name;
|
||||
/**
|
||||
* 岗位id
|
||||
*/
|
||||
@CriteriaField(field = "id", operator = Operator.IN)
|
||||
private Collection<Long> ids;
|
||||
|
||||
@CriteriaField(field = "code", operator = Operator.IN)
|
||||
private Collection<String> codes;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -28,6 +28,9 @@ public class OrgJobQueryRepositoryImpl implements OrgJobQueryRepository {
|
||||
public PageResp<OrgJob> page(ListReq req) {
|
||||
IPage<OrgJob> page = PageConverter.toMybatis(req, OrgJob.class);
|
||||
QueryWrapper<OrgJob> wrapper = QueryWrapperHelper.fromBean(req, OrgJob.class);
|
||||
if (wrapper.isEmptyOfWhere()) {
|
||||
return PageResp.<OrgJob>builder().build();
|
||||
}
|
||||
IPage<OrgJob> results = orgJobDao.page(page, wrapper)
|
||||
.convert(e -> BeanUtil.toBean(e, OrgJob.class));
|
||||
PageResp<OrgJob> resp = PageConverter.toResp(results);
|
||||
|
||||
@ -5,17 +5,29 @@ 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.common.config.BizResultCode;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||
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.entity.OrgJob;
|
||||
import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobQueryRepository;
|
||||
import cn.axzo.orgmanax.server.node.service.NodeService;
|
||||
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
|
||||
import cn.axzo.orgmanax.server.nodeuser.foundation.NodeUserFoundationService;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@ -25,6 +37,10 @@ public class NodeServiceImpl implements NodeService {
|
||||
|
||||
private final NodeQueryRepository nodeQueryRepository;
|
||||
private final ApplicationContext applicationContext;
|
||||
private final NodeUserQueryRepository nodeUserQueryRepository;
|
||||
private final OrgJobQueryRepository orgJobQueryRepository;
|
||||
private final NodeUserFoundationService nodeUserFoundationService;
|
||||
private final CooperateShipQueryRepository cooperateShipQueryRepository;
|
||||
|
||||
@Override
|
||||
public NodeProcessor.ProcessResult process(ProcessNodeReq req) {
|
||||
@ -50,6 +66,40 @@ public class NodeServiceImpl implements NodeService {
|
||||
|
||||
@Override
|
||||
public PageResp<OrgNodeDTO> page(ListNodeReq req) {
|
||||
|
||||
List<NodeUserQueryRepository.NodeUserResp> nodeUsers;
|
||||
|
||||
// 获取部门用户信息, 若获取不到直接返回
|
||||
if (Objects.nonNull(req.getPersonId())) {
|
||||
nodeUsers = nodeUserQueryRepository.list(ListNodeUserReq
|
||||
.builder().build());
|
||||
if (CollUtil.isEmpty(nodeUsers)) {
|
||||
return PageResp.<OrgNodeDTO>builder()
|
||||
.current(req.getPage())
|
||||
.size(req.getPageSize())
|
||||
.total(0)
|
||||
.build();
|
||||
}
|
||||
|
||||
// 获取岗位信息
|
||||
if (CollUtil.isNotEmpty(req.getJobCodes())) {
|
||||
List<OrgJob> orgJobs = orgJobQueryRepository.list(OrgJobQueryRepository.ListReq.builder()
|
||||
.ids(CollUtil.map(nodeUsers, OrganizationalNodeUser::getOrganizationalJobId, true))
|
||||
.codes(req.getJobCodes())
|
||||
.build());
|
||||
nodeUserFoundationService.filterByJobs(nodeUsers, orgJobs);
|
||||
}
|
||||
}
|
||||
|
||||
// 项目ID
|
||||
if (CollUtil.isNotEmpty(req.getWorkspaceIds())) {
|
||||
cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq.builder()
|
||||
.workspaceIds(req.getWorkspaceIds())
|
||||
.workspaceOuPairs(BeanUtil.copyToList(req.getWorkspaceIds(), CooperateShipQueryRepository.WorkspaceOuPair.class))
|
||||
.build());
|
||||
}
|
||||
|
||||
|
||||
PageResp<NodeQueryRepository.NodeResp> page = nodeQueryRepository.page(req);
|
||||
List<OrgNodeDTO> records = page.getData().stream().map(e -> BeanUtil.toBean(e, OrgNodeDTO.class)).collect(Collectors.toList());
|
||||
// assemble data if needed
|
||||
|
||||
@ -1,10 +1,14 @@
|
||||
package cn.axzo.orgmanax.server.nodeuser.foundation;
|
||||
|
||||
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.entity.OrgJob;
|
||||
import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserCreate;
|
||||
import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserUpdate;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface NodeUserFoundationService {
|
||||
/**
|
||||
* 创建部门
|
||||
@ -24,4 +28,10 @@ public interface NodeUserFoundationService {
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
OrganizationalNodeUser update(NodeUserUpdate req);
|
||||
|
||||
/**
|
||||
* 根据岗位进行过滤
|
||||
* @param nodeUsers
|
||||
* @param orgJobs
|
||||
*/
|
||||
<T extends OrganizationalNodeUser> void filterByJobs(List<T> nodeUsers, List<OrgJob> orgJobs);
|
||||
}
|
||||
|
||||
@ -14,18 +14,23 @@ import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserUpsertRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJob;
|
||||
import cn.axzo.orgmanax.server.node.event.inner.NodeEventType;
|
||||
import cn.axzo.orgmanax.server.nodeuser.event.inner.payload.NodeUserUpsertedPayload;
|
||||
import cn.axzo.orgmanax.server.nodeuser.foundation.NodeUserFoundationService;
|
||||
import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserCreate;
|
||||
import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserUpdate;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
@ -129,6 +134,12 @@ public class NodeUserFoundationServiceImpl implements NodeUserFoundationService
|
||||
return nodeUserUpsertRepository.update(updateReq);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends OrganizationalNodeUser> void filterByJobs(List<T> nodeUsers, List<OrgJob> orgJobs) {
|
||||
List<Long> jobIds = CollUtil.map(orgJobs, OrgJob::getId, true);
|
||||
nodeUsers.removeIf(e -> !jobIds.contains(e.getOrganizationalJobId()));
|
||||
}
|
||||
|
||||
private Long resolveWorkspaceId(NodeQueryRepository.NodeResp node) {
|
||||
if (Objects.equals(node.getNodeType(), OrganizationalNode.TypeEnum.TEAM.getValue())) {
|
||||
return 0L;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user