Merge remote-tracking branch 'origin/feature/REQ-3488' into feature/REQ-3488-zhh

This commit is contained in:
zhanghonghao 2025-01-13 18:10:17 +08:00
commit aa7abc347c
7 changed files with 149 additions and 109 deletions

View File

@ -12,6 +12,7 @@ import lombok.experimental.SuperBuilder;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@EqualsAndHashCode(callSuper = true)
@ -170,7 +171,6 @@ public class ListNodeReq extends PageReqV2 {
private Collection<Long> ownerWorkerIdentityIds;
/**
* todo 未实现
* 小组长项目工人id列表
*/
private Collection<Long> ownerProjectWorkerIds;

View File

@ -147,7 +147,18 @@ public interface NodeQueryRepository {
* 扩展信息查询条件
*/
@CriteriaField(field = "profile", operator = Operator.JSON_QUERY)
private Collection<MybatisPlusOperatorProcessor.JSONQuery> profileQueries;
private Collection<MybatisPlusOperatorProcessor.JSONQuery> profileQueries = new ArrayList<>();
/**
* 增加profile查询条件
* @param jsonQuery
*/
public void addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery jsonQuery) {
if (this.profileQueries == null) {
this.profileQueries = new ArrayList<>();
}
this.profileQueries.add(jsonQuery);
}
}
}

View File

@ -18,11 +18,7 @@ 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.Optional;
import java.util.Set;
import java.util.*;
public interface NodeUserQueryRepository {
@ -281,6 +277,28 @@ public interface NodeUserQueryRepository {
returnEmpty = true;
return this;
}
/**
* 增加profile搜索条件
* @param jsonQuery
*/
public void addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery jsonQuery) {
if (this.profileQueries == null) {
this.profileQueries = new ArrayList<>();
}
this.profileQueries.add(jsonQuery);
}
/**
* 增加ext搜索条件
* @param jsonQuery
*/
public void addExtraQueries(MybatisPlusOperatorProcessor.JSONQuery jsonQuery) {
if (this.extraQueries == null) {
this.extraQueries = new ArrayList<>();
}
this.extraQueries.add(jsonQuery);
}
}
@NoArgsConstructor

View File

@ -5,42 +5,35 @@ import cn.axzo.apollo.workspace.api.v2.workspace.resp.WorkspaceDetailResp;
import cn.axzo.foundation.event.support.Event;
import cn.axzo.foundation.event.support.producer.EventProducer;
import cn.axzo.foundation.exception.Axssert;
import cn.axzo.orgmanax.dto.cooperateship.req.CreateOrgCooperateShipReq;
import cn.axzo.orgmanax.dto.cooperateship.req.ListOrgCooperateShipReq;
import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO;
import cn.axzo.orgmanax.dto.cooperateship.enums.CooperateShipStatusEnum;
import cn.axzo.orgmanax.dto.cooperateship.enums.CooperateShipTypeEnum;
import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO;
import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.axzo.orgmanax.dto.cooperateship.req.UpdateOrgCooperateShipReq;
import cn.axzo.orgmanax.dto.cooperateship.req.CreateOrgCooperateShipReq;
import cn.axzo.orgmanax.dto.cooperateship.req.ListOrgCooperateShipReq;
import cn.axzo.orgmanax.infra.client.workspace.WorkspaceGateway;
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRepository;
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipUpsertRepository;
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
import cn.axzo.orgmanax.server.cooperateship.event.inner.CooperateShipEventType;
import cn.axzo.orgmanax.server.cooperateship.event.inner.payload.CoopeateShipUpsertedPayload;
import cn.axzo.orgmanax.server.cooperateship.foundation.CooperateShipFoundationService;
import cn.axzo.orgmanax.server.cooperateship.service.CooperateShipService;
import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobFoundationService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollStreamUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.google.common.collect.ImmutableSet;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service
@ -146,21 +139,21 @@ public class CooperateShipServiceImpl implements CooperateShipService {
boolean isFilterCurrentAndBelowByPerson = !isFilterCurrentNodeByPerson && ObjectUtil.isNotNull(req.getFilterByPersonId())
&& Objects.equals(req.getFilterMethod(), ListOrgCooperateShipReq.FILTER_PERSON_TYPE_CURRENT_AND_BELOW_NODE);
if (Objects.nonNull(req.getFilterByPersonId()) && !isFilterCurrentAndBelowByPerson && !isFilterCurrentAndBelowByPerson) {
if (Objects.nonNull(req.getFilterByPersonId()) && !isFilterCurrentNodeByPerson && !isFilterCurrentAndBelowByPerson) {
Axssert.check(false, BizResultCode.INVALID_PARAM, "filterMethod的参数不正确");
}
// 构建查询条件
CooperateShipQueryRepository.ListReq listReq = CooperateShipQueryRepository.ListReq.builder()
.ids(req.getIds())
.workspaceIds(req.getWorkspaceIds())
.workspaceTypes(req.getWorkspaceTypes())
.ouIds(req.getOuIds())
.includeCooperateTypes(req.getIncludeCooperateTypes())
.excludeCooperateTypes(req.getExcludeCooperateTypes())
.organizationNodeIds(req.getOrganizationNodeIds())
.partnerShips(req.getPartnerShips())
.statuses(req.getStatuses())
.ids(filterNullValues(req.getIds()))
.workspaceIds(filterNullValues(req.getWorkspaceIds()))
.workspaceTypes(filterNullValues(req.getWorkspaceTypes()))
.ouIds(filterNullValues(req.getOuIds()))
.includeCooperateTypes(filterNullValues(req.getIncludeCooperateTypes()))
.excludeCooperateTypes(filterNullValues(req.getExcludeCooperateTypes()))
.organizationNodeIds(filterNullValues(req.getOrganizationNodeIds()))
.partnerShips(filterNullValues(req.getPartnerShips()))
.statuses(filterNullValues(req.getStatuses()))
.build();
// 根据入参查询数据
List<SaasCooperateShip> currentNodeList = cooperateShipQueryRepository.list(listReq);
@ -225,4 +218,17 @@ public class CooperateShipServiceImpl implements CooperateShipService {
resultNodeList.sort(Comparator.comparing(SaasCooperateShip::getPath));
return BeanUtil.copyToList(CollUtil.distinct(resultNodeList, SaasCooperateShip::getId, true), OrgCooperateShipDTO.class);
}
/**
* 过滤空值
* @param collection
* @return
* @param <T>
*/
private <C extends Collection<T>, T> C filterNullValues(C collection) {
if (CollUtil.isEmpty(collection)) {
return collection;
}
return CollUtil.filter(collection, Objects::nonNull);
}
}

View File

@ -59,7 +59,7 @@ public class ListNodeCmdExe {
// 条件: 当入参传入岗位标签并且组织用户有数据时
// 场景查询指定人员所在的组织节点并且岗位标签匹配
if (CollUtil.isNotEmpty(req.getJobCodes()) && CollUtil.isNotEmpty(nodeUsers)) {
nodeUserFoundationService.filterByJobs(nodeUsers, req.getJobCodes());
nodeUserFoundationService.filterByJobs(nodeUsers, filterNullValues(req.getJobCodes()));
if (CollUtil.isEmpty(nodeUsers)) {
return emptyPageResp;
}
@ -71,8 +71,8 @@ public class ListNodeCmdExe {
if (CollUtil.isNotEmpty(req.getWorkspaceIds()) || CollUtil.isNotEmpty(req.getWorkspaceOuPairs())) {
List<Long> topNodeIds = CollUtil.map(cooperateShipQueryRepository.list(CooperateShipQueryRepository.ListReq
.builder()
.workspaceIds(req.getWorkspaceIds())
.workspaceOuPairs(req.getWorkspaceOuPairs())
.workspaceIds(filterNullValues((req.getWorkspaceIds())))
.workspaceOuPairs(filterNullValues((req.getWorkspaceOuPairs())))
.build()), SaasCooperateShip::getOrganizationalNodeId, true);
if (CollUtil.isEmpty(topNodeIds)) {
return emptyPageResp;
@ -110,72 +110,76 @@ public class ListNodeCmdExe {
NodeQueryRepository.ListReq listReq = reqListBuilder
.page(req.getPage())
.pageSize(req.getPageSize())
.ids(req.getIds())
.parentIds(req.getParentIds())
.ouIds(req.getOuIds())
.topNodeIds(req.getTopNodeIds())
.ids(filterNullValues(req.getIds()))
.parentIds(filterNullValues(req.getParentIds()))
.ouIds(filterNullValues(req.getOuIds()))
.topNodeIds(filterNullValues(req.getTopNodeIds()))
.nodeName(req.getNodeName())
.nodeNames(req.getNodeNames())
.includeOrgNodeTypes(req.getIncludeOrgNodeTypes())
.excludeOrgNodeTypes(req.getExcludeOrgNodeTypes())
.nodeNames(filterNullValues(req.getNodeNames()))
.includeOrgNodeTypes(filterNullValues(req.getIncludeOrgNodeTypes()))
.excludeOrgNodeTypes(filterNullValues(req.getExcludeOrgNodeTypes()))
.includeDelete(req.getIncludeDelete())
.isSelectTopNodeOnly(req.getIsSelectTopNodeOnly()).build();
// 平台班组id
if (CollUtil.isNotEmpty(req.getPlatTeamIds())) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.platTeamId")
.operator(Operator.IN)
.data(req.getPlatTeamIds())
.build())));
.build());
}
// 项目内班组ID
if (CollUtil.isNotEmpty(req.getProjectTeamIds())) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.projectTeamId")
.operator(Operator.IN)
.data(req.getProjectTeamIds())
.build())));
.build());
}
// 项目内小组类型
if (req.getProjectGroupType() != null) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(
MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.type")
.data(req.getProjectGroupType())
.build())));
.build());
}
// 项目内小组ID
if (CollUtil.isNotEmpty(req.getProjectGroupIds())) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.projectGroupId")
.operator(Operator.IN)
.data(req.getProjectGroupIds())
.build())));
.build());
}
// 小组长工人身份id
if (CollUtil.isNotEmpty(req.getOwnerWorkerIdentityIds())) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.ownerWorkerIdentityId")
.operator(Operator.IN)
.data(req.getOwnerWorkerIdentityIds())
.build())));
.build());
}
// 项目内小组状态
if (req.getProjectGroupStatus() != null) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.status")
.data(req.getProjectGroupStatus())
.build())));
.build());
}
// 项目内小组状态
if (CollUtil.isNotEmpty(req.getOwnerProjectWorkerIds())) {
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.ownerProjectWorkerId")
.operator(Operator.IN)
.data(req.getOwnerProjectWorkerIds())
.build());
}
return listReq;
}
@ -259,4 +263,17 @@ public class ListNodeCmdExe {
});
}
/**
* 过滤空值
* @param collection
* @return
* @param <T>
*/
private <C extends Collection<T>, T> C filterNullValues(C collection) {
if (CollUtil.isEmpty(collection)) {
return collection;
}
return CollUtil.filter(collection, Objects::nonNull);
}
}

View File

@ -48,11 +48,6 @@ 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;
private final NodeFoundationService nodeFoundationService;
private final ListNodeCmdExe listNodeCmdExe;
@Override

View File

@ -183,10 +183,10 @@ public class NodeUserServiceImpl implements NodeUserService {
}
// directManagerPersonId
if (req.getDirectManagerPersonId() != null) {
listReq.setExtraQueries(QueryConditionAssembler.assemble(listReq.getExtraQueries(), ImmutableList.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addExtraQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.directManagerPersonId")
.data(req.getDirectManagerPersonId())
.build())));
.build());
}
// dataPermissionCacheKey
if (StrUtil.isNotBlank(req.getDataPermissionCacheKey())) {
@ -209,62 +209,55 @@ public class NodeUserServiceImpl implements NodeUserService {
}
// projectWorkerStatuses
if (CollUtil.isNotEmpty(req.getProjectWorkerStatuses())) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.projectWorkerStatus")
.operator(Operator.IN)
.data(req.getProjectWorkerStatuses())
.build())));
.build());
}
// platTeamId
if (req.getPlatTeamId() != null) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.platTeamId")
.data(req.getPlatTeamId())
.build())));
.build());
}
// projectTeamIds
if (CollUtil.isNotEmpty(req.getProjectTeamIds())) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.projectTeamId")
.operator(Operator.IN)
.data(req.getProjectTeamIds())
.build())));
.build());
}
// projectTeamId
if (req.getProjectTeamId() != null) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.projectTeamId")
.data(req.getProjectTeamId())
.build())));
.build());
}
// projectWorkerIds
if (CollUtil.isNotEmpty(req.getProjectWorkerIds())) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.projectWorkerId")
.operator(Operator.IN)
.data(req.getProjectWorkerIds())
.build())));
.build());
}
// projectWorkerId
if (req.getProjectWorkerId() != null) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.projectWorkerId")
.data(req.getProjectWorkerId())
.build())));
.build());
}
// projectGroupId
if (req.getProjectGroupId() != null) {
listReq.setProfileQueries(QueryConditionAssembler.assemble(listReq.getProfileQueries(),
ImmutableSet.of(MybatisPlusOperatorProcessor.JSONQuery.builder()
listReq.addProfileQueries(MybatisPlusOperatorProcessor.JSONQuery.builder()
.jsonPath("$.projectGroupId")
.data(req.getProjectGroupId())
.build())));
.build());
}
return listReq;
}