feat(REQ-3282): 岗位接口调整和处理服务启动问题

This commit is contained in:
songyuanlun 2024-12-24 15:49:16 +08:00
parent 7e7bd19b74
commit ddaa3f7c1b
11 changed files with 143 additions and 75 deletions

View File

@ -30,6 +30,6 @@ public interface OrgJobApi {
* 分页列表接口
* XXX本接口默认分页单页最多返回1000条数据调用方使用时需注意
*/
@PostMapping("/api/job/page")
ApiResult<PageResp<OrgJobDTO>> page(@RequestBody @Validated PageOrgJobReq req);
@PostMapping("/api/job/list")
ApiResult<PageResp<OrgJobDTO>> list(@RequestBody @Validated PageOrgJobReq req);
}

View File

@ -2,7 +2,6 @@ package cn.axzo.orgmanax.dto.job.req;
import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.orgmanax.dto.job.enums.OrgJobGroupFlagEnum;
import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum;
import java.util.List;
import java.util.Set;
import lombok.AllArgsConstructor;
@ -54,30 +53,24 @@ public class PageOrgJobReq extends PageReqV2 {
*/
private String keyword;
/**
* 岗位类型
*/
private OrgJobTypeEnum type;
/**
* 岗位类型 1总包单位 2建设单位 3监理单位 4劳务分包 5专业分包 6:OMS 7企业通用 9:班组项目内
*/
private List<Integer> types;
private List<Integer> cooperateTypes;
/**
* 可为空,即加载默认和自定义所有岗位 true预定义岗位 false 自定义岗位
*/
private Boolean readonly;
// workspace和unitId 只有自定义类型使用
/**
* 单位/团队 ID 列表
* 单位/团队 ID.
*/
private List<Long> unitIds;
private Long ouId;
/**
* 工作台id 列表
* 工作台id
*/
private List<Long> workspaceIds;
private Long workspaceId;
}

View File

@ -16,17 +16,6 @@ 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;
import java.util.Collection;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public interface OrgJobQueryRepository {
@ -68,7 +57,7 @@ public interface OrgJobQueryRepository {
/**
* 岗位类型
*/
@CriteriaField
@CriteriaField(field = "type")
private OrgJobTypeEnum type;
/**

View File

@ -3,24 +3,23 @@ package cn.axzo.orgmanax.server.cooperateship.foundation.impl;
import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
import cn.axzo.orgmanax.server.cooperateship.foundation.CooperateShipFoundationService;
import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@RequiredArgsConstructor
@Service
public class CooperateShipFoundationServiceImpl implements CooperateShipFoundationService {
private final NodeUserService nodeUserService;
@Autowired
private NodeUserService nodeUserService;
@Override
public void filterByPerson(Long filterPersonId, List<SaasCooperateShip> list) {

View File

@ -28,6 +28,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.ImmutableSet;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
@ -54,7 +55,8 @@ public class CooperateShipServiceImpl implements CooperateShipService {
private final UnitQueryRepository unitQueryRepository;
private final WorkspaceGateway workspaceGateway;
private final EventProducer eventProducer;
private final CooperateShipFoundationService cooperateShipFoundationService;
@Autowired
private CooperateShipFoundationService cooperateShipFoundationService;
private final NodeUserQueryRepository nodeUserQueryRepository;
@Override

View File

@ -2,23 +2,16 @@ package cn.axzo.orgmanax.server.node.service.impl;
import cn.axzo.foundation.exception.Axssert;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.cooperateship.enums.SaasCooperateShipCooperateTypeEnum;
import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO;
import cn.axzo.orgmanax.dto.node.req.ListNodeReq;
import cn.axzo.orgmanax.dto.node.req.ProcessNodeReq;
import cn.axzo.orgmanax.dto.node.dto.OrgNodeDTO;
import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO;
import cn.axzo.orgmanax.infra.client.tyr.TyrSaasRoleUserClient;
import cn.axzo.orgmanax.infra.client.tyr.dto.BatchSuperAdminListReq;
import cn.axzo.orgmanax.infra.client.tyr.dto.BatchSuperAdminListResp;
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRepository;
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.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.foundation.NodeFoundationService;
import cn.axzo.orgmanax.server.node.service.NodeService;
@ -27,20 +20,20 @@ import cn.axzo.orgmanax.server.nodeuser.foundation.NodeUserFoundationService;
import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.BooleanUtil;
import com.google.common.collect.ImmutableMap;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.function.Consumer;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
@Slf4j
@Service
@ -54,7 +47,8 @@ public class NodeServiceImpl implements NodeService {
private final NodeUserFoundationService nodeUserFoundationService;
private final CooperateShipQueryRepository cooperateShipQueryRepository;
private final NodeFoundationService nodeFoundationService;
private final NodeUserService nodeUserService;
@Autowired
private NodeUserService nodeUserService;
@Override
public NodeProcessor.ProcessResult process(ProcessNodeReq req) {

View File

@ -26,6 +26,7 @@ import cn.hutool.core.util.StrUtil;
import com.google.common.collect.ImmutableList;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
@ -41,9 +42,12 @@ import java.util.stream.Collectors;
public class NodeUserServiceImpl implements NodeUserService {
private final NodeUserQueryRepository nodeUserQueryRepository;
private final NodeService nodeService;
private final OrgJobService jobService;
private final UnitService unitService;
@Autowired
private NodeService nodeService;
@Autowired
private OrgJobService jobService;
@Autowired
private UnitService unitService;
private final ApplicationContext applicationContext;
@Override

View File

@ -39,7 +39,7 @@ public class OrgJobController implements OrgJobApi {
}
@Override
public ApiResult<PageResp<OrgJobDTO>> page(PageOrgJobReq req) {
public ApiResult<PageResp<OrgJobDTO>> list(PageOrgJobReq req) {
return ApiResult.success(orgJobService.page(BeanUtil.copyProperties(req, OrgJobPageParam.class)));
}
}

View File

@ -4,6 +4,11 @@ import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.orgmanax.dto.job.enums.OrgJobGroupFlagEnum;
import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum;
import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.Sets;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -11,11 +16,6 @@ import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.apache.commons.lang3.StringUtils;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.Set;
/**
* @author luofu
* @version 1.0
@ -71,7 +71,7 @@ public class OrgJobPageParam extends PageReqV2 {
/**
* 岗位类型 1总包单位 2建设单位 3监理单位 4劳务分包 5专业分包 6:OMS 7企业通用 9:班组项目内
*/
private List<Integer> types;
private List<Integer> cooperateTypes;
/**
* 可为空,即加载默认和自定义所有岗位 true预定义岗位 false 自定义岗位
@ -79,22 +79,29 @@ public class OrgJobPageParam extends PageReqV2 {
private Boolean readonly;
// workspace和unitId 只有自定义类型使用
/**
* 单位/团队 ID 列表
*/
private List<Long> unitIds;
/**
* 工作台id 列表
* 单位/团队 ID.
*/
private List<Long> workspaceIds;
private Long ouId;
/**
* 工作台id
*/
private Long workspaceId;
public Set<Integer> fetchTypes() {
if (CollUtil.isNotEmpty(cooperateTypes)) {
return Sets.newHashSet(cooperateTypes);
}
return Collections.emptySet();
}
public boolean isInvalid() {
return CollUtil.isEmpty(orgJobGroupFlags)
&& CollUtil.isEmpty(orgJobGroupCodes)
&& CollUtil.isEmpty(jobIds)
&& CollUtil.isEmpty(jobCodes)
&& Objects.isNull(type)
&& StringUtils.isBlank(keyword);
}

View File

@ -6,15 +6,20 @@ import static cn.axzo.orgmanax.dto.job.dto.OrgJobConstants.OLD_CONFIG;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobConstants.OLD_NEW_JOB_CODE_MAP_KEY;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.cooperateship.dto.OrgCooperateShipDTO;
import cn.axzo.orgmanax.dto.cooperateship.req.ListOrgCooperateShipReq;
import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO;
import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupDTO;
import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupRelationDTO;
import cn.axzo.orgmanax.dto.job.dto.RoleDTO;
import cn.axzo.orgmanax.dto.job.enums.OrgJobGroupFlagEnum;
import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum;
import cn.axzo.orgmanax.dto.job.req.CreateOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.DeleteOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.UpdateOrgJobReq;
import cn.axzo.orgmanax.infra.client.tyr.RoleGateway;
import cn.axzo.orgmanax.infra.client.workspace.dto.Workspace.WorkspaceTypeEnum;
import cn.axzo.orgmanax.server.cooperateship.service.CooperateShipService;
import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobFoundationService;
import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobGroupFoundationService;
import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobGroupRelationFoundationService;
@ -43,6 +48,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -50,6 +56,7 @@ import java.util.stream.IntStream;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@ -61,6 +68,8 @@ public class OrgJobServiceImpl implements OrgJobService {
private final OrgJobGroupFoundationService orgJobGroupService;
private final OrgJobGroupRelationFoundationService orgJobGroupRelationService;
private final RoleGateway roleGateway;
@Autowired
private CooperateShipService cooperateShipService;
private final LoadingCache<String, ImmutableMap<String, String>> jobCodeMappingCache = CacheBuilder.newBuilder()
.expireAfterWrite(Duration.ofMinutes(30))
@ -89,6 +98,7 @@ public class OrgJobServiceImpl implements OrgJobService {
log.info("org job page param is invalid. param:{}", JSONUtil.toJsonStr(param));
return PageResp.<OrgJobDTO>builder().build();
}
resolveCooperateTypes(param);
OrgJobPageParam orgJobPageParam = resolveJobPageParam(param);
PageResp<OrgJobDTO> orgJobs = foundationService.page(param);
if (CollUtil.isEmpty(orgJobs.getData())) {
@ -106,6 +116,72 @@ public class OrgJobServiceImpl implements OrgJobService {
return orgJobs;
}
private void resolveCooperateTypes(OrgJobPageParam param) {
Set<Integer> cooperateTypes = param.fetchTypes();
if (CollUtil.isNotEmpty(cooperateTypes)) {
// 优先使用指定的cooperateType
param.setOrgJobGroupFlags(mapper(cooperateTypes));
return;
}
List<OrgCooperateShipDTO> cooperateShips = resolve(param.getOuId(), param.getWorkspaceId());
if (CollUtil.isNotEmpty(cooperateShips)) {
param.setOrgJobGroupFlags(mapper(cooperateShips));
}
}
private List<OrgCooperateShipDTO> resolve(Long ouId, Long workspaceId) {
if (Objects.isNull(ouId) && Objects.isNull(workspaceId)) {
return Collections.emptyList();
}
if (Objects.isNull(ouId)) {
return resolve(Collections.emptyList(), Collections.singletonList(workspaceId));
}
if (Objects.isNull(workspaceId)) {
return resolve(Collections.singletonList(ouId), Collections.emptyList());
}
return resolve(Collections.singletonList(ouId), Collections.singletonList(workspaceId));
}
private List<OrgCooperateShipDTO> resolve(Collection<Long> ouIds, Collection<Long> workspaceIds) {
if (CollUtil.isEmpty(ouIds)
&& CollUtil.isEmpty(workspaceIds)) {
return Collections.emptyList();
}
ListOrgCooperateShipReq req = ListOrgCooperateShipReq.builder()
.ouIds(Sets.newHashSet(ouIds))
.workspaceIds(Sets.newHashSet(workspaceIds))
.build();
if (CollUtil.isEmpty(workspaceIds)) {
// 未传workspaceId时仅查询单位自身的
req.setWorkspaceTypes(Sets.newHashSet(WorkspaceTypeEnum.GENERAL_ENT.value));
}
return cooperateShipService.list(req);
}
private Set<OrgJobGroupFlagEnum> mapper(Set<Integer> cooperateTypes) {
if (CollUtil.isEmpty(cooperateTypes)) {
return Collections.emptySet();
}
return cooperateTypes.stream()
.map(e -> OrgJobGroupFlagEnum.cooperateTypeOf(e).orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toSet());
}
private Set<OrgJobGroupFlagEnum> mapper(Collection<OrgCooperateShipDTO> cooperateShips) {
if (CollUtil.isEmpty(cooperateShips)) {
return Collections.emptySet();
}
Set<OrgJobGroupFlagEnum> flags = cooperateShips.stream()
.map(e -> OrgJobGroupFlagEnum.cooperateTypeOf(e.getCooperateType()).orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toSet());
if (flags.contains(OrgJobGroupFlagEnum.ENT_COMMON)) {
flags.add(OrgJobGroupFlagEnum.ENT_TEAM);
}
return flags;
}
private void buildSaasRole4OrgJob(List<OrgJobDTO> orgJobs) {
Set<Long> roleIds = orgJobs.stream()
.flatMap(e -> e.mergeAndDistinctRolesIds().stream())
@ -177,6 +253,8 @@ public class OrgJobServiceImpl implements OrgJobService {
}
private OrgJobPageParam resolveJobPageParam(OrgJobPageParam param) {
param.setType(Optional.ofNullable(param.getReadonly())
.map(v -> v ? OrgJobTypeEnum.SYSTEM : OrgJobTypeEnum.CUSTOM).orElse(null));
param.setJobCodes(resolveJobCodes(param.getJobCodes()));
if (CollUtil.isEmpty(param.getOrgJobGroupCodes())
&& CollUtil.isEmpty(param.getOrgJobGroupFlags())) {
@ -230,7 +308,7 @@ public class OrgJobServiceImpl implements OrgJobService {
private ImmutableMap<String, String> loadJobCodeMappingCache() {
OrgJobPageParam listParam = OrgJobPageParam.builder().type(OrgJobTypeEnum.SYSTEM).build();
List<OrgJobDTO> orgJobs = this.whileQuery(listParam);
List<OrgJobDTO> orgJobs = this.pageAll(listParam);
if (CollUtil.isEmpty(orgJobs)) {
return ImmutableMap.<String, String>builder().build();
}
@ -242,7 +320,7 @@ public class OrgJobServiceImpl implements OrgJobService {
return ImmutableMap.copyOf(map);
}
public List<OrgJobDTO> whileQuery(OrgJobPageParam param) {
public List<OrgJobDTO> pageAll(OrgJobPageParam param) {
List<OrgJobDTO> jobs = new ArrayList<>();
PageResp<OrgJobDTO> jobPage;
int pageNumber = 0;

View File

@ -25,6 +25,7 @@ import cn.hutool.core.util.BooleanUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
@ -34,7 +35,8 @@ import org.springframework.transaction.support.TransactionTemplate;
public class UnitServiceImpl implements UnitService {
private final UnitFoundationService unitFoundationService;
private final NodeService nodeService;
@Autowired
private NodeService nodeService;
private final UnitQueryRepository unitQueryRepository;
private final TransactionTemplate transactionTemplate;
private final WorkspaceGateway workspaceGateway;