Merge branch 'feature/REQ-3282-syl' into 'feature/REQ-3282'

feat(REQ-3282): 调整岗位分页的参数

See merge request universal/infrastructure/backend/orgmanax!20
This commit is contained in:
宋远伦 2024-12-24 06:03:07 +00:00
commit fa3ef66f7b
14 changed files with 100 additions and 205 deletions

View File

@ -5,7 +5,6 @@ import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO;
import cn.axzo.orgmanax.dto.job.req.CreateOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.DeleteOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.PageOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.UpdateOrgJobReq;
import org.springframework.cloud.openfeign.FeignClient;
@ -27,9 +26,6 @@ public interface OrgJobApi {
@PostMapping("/api/job/delete")
ApiResult<Void> delete(@RequestBody @Validated DeleteOrgJobReq req);
@PostMapping("/api/job/list")
ApiResult<PageResp<OrgJobDTO>> list(@RequestBody @Validated ListOrgJobReq req);
/**
* 分页列表接口
* XXX本接口默认分页单页最多返回1000条数据调用方使用时需注意

View File

@ -7,7 +7,7 @@ package cn.axzo.orgmanax.dto.job.dto;
* @date 2024/2/27
* @version 1.0
*/
public interface OrgJobCodeConstants {
public interface OrgJobConstants {
/** 项目内工人 **/
String PROJ_WORKER = "projWorker";
@ -36,4 +36,5 @@ public interface OrgJobCodeConstants {
String OLD_CONFIG = "oldJobConfigs";
String CODE_KEY = "code";
String OLD_NEW_JOB_CODE_MAP_KEY = "job_code_mapping";
Integer JOB_PAGE_SIZE = 1000;
}

View File

@ -1,7 +1,7 @@
package cn.axzo.orgmanax.dto.job.dto;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobCodeConstants.CODE_KEY;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobCodeConstants.OLD_CONFIG;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobConstants.CODE_KEY;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobConstants.OLD_CONFIG;
import cn.axzo.orgmanax.dto.job.enums.OrgJobFlagEnum;
import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum;

View File

@ -1,42 +0,0 @@
package cn.axzo.orgmanax.dto.job.req;
import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
public class ListOrgJobReq extends PageReqV2 {
/**
* 名称
*/
private String name;
/**
* 岗位id集合
*/
private Set<Long> jobIds;
/**
* 岗位编码集合
*/
private Set<String> jobCodes;
/**
* 岗位类型
*/
private OrgJobTypeEnum type;
/**
* 搜索关键字
* Notice: 名称或别名的模糊搜索
*/
private String keyword;
}

View File

@ -59,4 +59,25 @@ public class PageOrgJobReq extends PageReqV2 {
*/
private OrgJobTypeEnum type;
/**
* 岗位类型 1总包单位 2建设单位 3监理单位 4劳务分包 5专业分包 6:OMS 7企业通用 9:班组项目内
*/
private List<Integer> types;
/**
* 可为空,即加载默认和自定义所有岗位 true预定义岗位 false 自定义岗位
*/
private Boolean readonly;
// workspace和unitId 只有自定义类型使用
/**
* 单位/团队 ID 列表
*/
private List<Long> unitIds;
/**
* 工作台id 列表
*/
private List<Long> workspaceIds;
}

View File

@ -6,11 +6,10 @@ import cn.axzo.orgmanax.api.orgjob.feign.OrgJobApi;
import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO;
import cn.axzo.orgmanax.dto.job.req.CreateOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.DeleteOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.PageOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.UpdateOrgJobReq;
import cn.axzo.orgmanax.server.orgjob.service.OrgJobService;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobAggregatePageParam;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam;
import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
@ -39,13 +38,8 @@ public class OrgJobController implements OrgJobApi {
return ApiResult.success();
}
@Override
public ApiResult<PageResp<OrgJobDTO>> list(ListOrgJobReq req) {
return ApiResult.success(orgJobService.list(req));
}
@Override
public ApiResult<PageResp<OrgJobDTO>> page(PageOrgJobReq req) {
return ApiResult.success(orgJobService.page(BeanUtil.copyProperties(req, OrgJobAggregatePageParam.class)));
return ApiResult.success(orgJobService.page(BeanUtil.copyProperties(req, OrgJobPageParam.class)));
}
}

View File

@ -1,9 +1,9 @@
package cn.axzo.orgmanax.server.orgjob.foundation;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq;
import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO;
import cn.axzo.orgmanax.server.orgjob.foundation.dto.OrgJobCreator;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam;
/**
*
@ -35,5 +35,5 @@ public interface OrgJobFoundationService {
* 查询岗位信息
* @return
*/
PageResp<OrgJobDTO> page(ListOrgJobReq req);
PageResp<OrgJobDTO> page(OrgJobPageParam req);
}

View File

@ -2,12 +2,12 @@ package cn.axzo.orgmanax.server.orgjob.foundation.impl;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO;
import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq;
import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJob;
import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobQueryRepository;
import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobUpsertRepository;
import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobFoundationService;
import cn.axzo.orgmanax.server.orgjob.foundation.dto.OrgJobCreator;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam;
import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@ -39,7 +39,7 @@ public class OrgJobFoundationServiceImpl implements OrgJobFoundationService {
}
@Override
public PageResp<OrgJobDTO> page(ListOrgJobReq req) {
public PageResp<OrgJobDTO> page(OrgJobPageParam req) {
PageResp<OrgJobQueryRepository.JobResp> page = orgJobQueryRepository.page(convert(req));
return PageResp.<OrgJobDTO>builder()
.size(page.getSize())
@ -49,7 +49,7 @@ public class OrgJobFoundationServiceImpl implements OrgJobFoundationService {
.build();
}
public OrgJobQueryRepository.ListReq convert(ListOrgJobReq req) {
public OrgJobQueryRepository.ListReq convert(OrgJobPageParam req) {
OrgJobQueryRepository.ListReq param = BeanUtil.copyProperties(req, OrgJobQueryRepository.ListReq.class);
param.setIds(req.getJobIds());
param.setCodes(req.getJobCodes());

View File

@ -1,6 +1,6 @@
package cn.axzo.orgmanax.server.orgjob.foundation.impl;
import static cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam.JOB_PAGE_SIZE;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobConstants.JOB_PAGE_SIZE;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupDTO;

View File

@ -1,6 +1,6 @@
package cn.axzo.orgmanax.server.orgjob.foundation.impl;
import static cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam.JOB_PAGE_SIZE;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobConstants.JOB_PAGE_SIZE;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupRelationDTO;

View File

@ -4,9 +4,8 @@ import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.job.dto.OrgJobDTO;
import cn.axzo.orgmanax.dto.job.req.CreateOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.DeleteOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.UpdateOrgJobReq;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobAggregatePageParam;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam;
public interface OrgJobService {
@ -32,14 +31,7 @@ public interface OrgJobService {
void delete(DeleteOrgJobReq req);
/**
* 查询岗位
* @param req
* @return
* 分页查询岗位
*/
PageResp<OrgJobDTO> list(ListOrgJobReq req);
/**
* 聚合查询岗位
*/
PageResp<OrgJobDTO> page(OrgJobAggregatePageParam req);
PageResp<OrgJobDTO> page(OrgJobPageParam req);
}

View File

@ -1,77 +0,0 @@
package cn.axzo.orgmanax.server.orgjob.service.dto;
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 java.util.Objects;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.apache.commons.lang3.StringUtils;
/**
* @author luofu
* @version 1.0
* @date 2024/9/12
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class OrgJobAggregatePageParam extends PageReqV2 {
/**
* 岗位分组标识集合
*/
private Set<OrgJobGroupFlagEnum> orgJobGroupFlags;
/**
* 分组编码集合
*/
private Set<String> orgJobGroupCodes;
/**
* 岗位id集合
*/
private Set<Long> jobIds;
/**
* 岗位编码集合
*/
private Set<String> jobCodes;
/**
* 岗位类型
*/
private OrgJobTypeEnum type;
/**
* 搜索关键字
* Notice: 名称或别名的模糊搜索
*/
private String keyword;
/**
* 是否需要查询角色信息
*/
@Builder.Default
private Boolean needSaasRole = false;
/**
* 是否需要查询岗位分组信息
*/
@Builder.Default
private Boolean needJobGroup = false;
public boolean isInvalid() {
return CollUtil.isEmpty(orgJobGroupFlags)
&& CollUtil.isEmpty(orgJobGroupCodes)
&& CollUtil.isEmpty(jobIds)
&& CollUtil.isEmpty(jobCodes)
&& Objects.isNull(type)
&& StringUtils.isBlank(keyword);
}
@Override
public String toString() {
return super.toString();
}
}

View File

@ -1,13 +1,14 @@
package cn.axzo.orgmanax.server.orgjob.service.dto;
import cn.axzo.foundation.page.PageReqV2;
import cn.axzo.orgmanax.dto.job.enums.OrgJobGroupFlagEnum;
import cn.axzo.orgmanax.dto.job.enums.OrgJobTypeEnum;
import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@ -16,7 +17,7 @@ import org.apache.commons.lang3.StringUtils;
/**
* @author luofu
* @version 1.0
* @date 2024/9/18
* @date 2024/9/12
*/
@Data
@SuperBuilder
@ -25,8 +26,15 @@ import org.apache.commons.lang3.StringUtils;
public class OrgJobPageParam extends PageReqV2 {
public static final OrgJobPageParam EMPTY_INSTANCE = new OrgJobPageParam();
public static final Integer JOB_PAGE_SIZE = 1000;
/**
* 岗位分组标识集合
*/
private Set<OrgJobGroupFlagEnum> orgJobGroupFlags;
/**
* 分组编码集合
*/
private Set<String> orgJobGroupCodes;
/**
* 岗位id集合
*/
@ -45,36 +53,47 @@ public class OrgJobPageParam extends PageReqV2 {
*/
private String keyword;
public static OrgJobPageParam from(OrgJobAggregatePageParam param) {
OrgJobPageParam jobPageParam = new OrgJobPageParam();
jobPageParam.setType(param.getType());
jobPageParam.setKeyword(param.getKeyword());
jobPageParam.setJobIds(param.getJobIds());
jobPageParam.setJobCodes(param.getJobCodes());
jobPageParam.setPage(param.getPage());
jobPageParam.setPageSize(param.getPageSize());
return jobPageParam;
}
/**
* 是否需要查询角色信息
*/
@Builder.Default
private Boolean needSaasRole = false;
/**
* 是否需要查询岗位分组信息
*/
@Builder.Default
private Boolean needJobGroup = false;
/**
* 岗位类型 1总包单位 2建设单位 3监理单位 4劳务分包 5专业分包 6:OMS 7企业通用 9:班组项目内
*/
private List<Integer> types;
/**
* 可为空,即加载默认和自定义所有岗位 true预定义岗位 false 自定义岗位
*/
private Boolean readonly;
// workspace和unitId 只有自定义类型使用
/**
* 单位/团队 ID 列表
*/
private List<Long> unitIds;
/**
* 工作台id 列表
*/
private List<Long> workspaceIds;
public boolean isInvalid() {
return CollUtil.isEmpty(jobIds)
return CollUtil.isEmpty(orgJobGroupFlags)
&& CollUtil.isEmpty(orgJobGroupCodes)
&& CollUtil.isEmpty(jobIds)
&& CollUtil.isEmpty(jobCodes)
&& Objects.isNull(type)
&& StringUtils.isBlank(keyword);
}
public ListOrgJobReq convert() {
return BeanUtil.toBean(this, ListOrgJobReq.class);
}
// public Integer getPage() {
// return Optional.ofNullable(super.getPage()).orElse(1);
// }
//
// public Integer getPageSize() {
// return Optional.ofNullable(super.getPageSize()).orElse(20);
// }
@Override
public String toString() {
return super.toString();

View File

@ -1,27 +1,25 @@
package cn.axzo.orgmanax.server.orgjob.service.impl;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobCodeConstants.CODE_KEY;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobCodeConstants.OLD_CONFIG;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobCodeConstants.OLD_NEW_JOB_CODE_MAP_KEY;
import static cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam.JOB_PAGE_SIZE;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobConstants.CODE_KEY;
import static cn.axzo.orgmanax.dto.job.dto.OrgJobConstants.JOB_PAGE_SIZE;
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.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.OrgJobTypeEnum;
import cn.axzo.orgmanax.dto.job.req.CreateOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.DeleteOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.ListOrgJobReq;
import cn.axzo.orgmanax.dto.job.req.UpdateOrgJobReq;
import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupDTO;
import cn.axzo.orgmanax.dto.job.dto.OrgJobGroupRelationDTO;
import cn.axzo.orgmanax.infra.client.tyr.RoleGateway;
import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobFoundationService;
import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobGroupFoundationService;
import cn.axzo.orgmanax.server.orgjob.foundation.OrgJobGroupRelationFoundationService;
import cn.axzo.orgmanax.server.orgjob.foundation.dto.OrgJobCreator;
import cn.axzo.orgmanax.server.orgjob.service.OrgJobService;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobAggregatePageParam;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobGroupPageParam;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobGroupRelationPageParam;
import cn.axzo.orgmanax.server.orgjob.service.dto.OrgJobPageParam;
@ -86,18 +84,13 @@ public class OrgJobServiceImpl implements OrgJobService {
}
@Override
public PageResp<OrgJobDTO> list(ListOrgJobReq req) {
return foundationService.page(req);
}
@Override
public PageResp<OrgJobDTO> page(OrgJobAggregatePageParam param) {
public PageResp<OrgJobDTO> page(OrgJobPageParam param) {
if (param.isInvalid()) {
log.info("org job page param is invalid. param:{}", JSONUtil.toJsonStr(param));
return PageResp.<OrgJobDTO>builder().build();
}
OrgJobPageParam orgJobPageParam = resolveJobPageParam(param);
PageResp<OrgJobDTO> orgJobs = foundationService.page(orgJobPageParam.convert());
PageResp<OrgJobDTO> orgJobs = foundationService.page(param);
if (CollUtil.isEmpty(orgJobs.getData())) {
log.info("org job page there is not any job. param:{}", JSONUtil.toJsonStr(orgJobPageParam));
return PageResp.<OrgJobDTO>builder().build();
@ -183,12 +176,11 @@ public class OrgJobServiceImpl implements OrgJobService {
.forEach(e -> e.setJobGroup(groupMap.get(relationGroup.get(e.getCode()))));
}
private OrgJobPageParam resolveJobPageParam(OrgJobAggregatePageParam param) {
OrgJobPageParam jobPageParam = OrgJobPageParam.from(param);
jobPageParam.setJobCodes(resolveJobCodes(param.getJobCodes()));
private OrgJobPageParam resolveJobPageParam(OrgJobPageParam param) {
param.setJobCodes(resolveJobCodes(param.getJobCodes()));
if (CollUtil.isEmpty(param.getOrgJobGroupCodes())
&& CollUtil.isEmpty(param.getOrgJobGroupFlags())) {
return jobPageParam;
return param;
}
// 通过分组相关参数参数JOB
OrgJobGroupPageParam groupListParam = OrgJobGroupPageParam.builder()
@ -201,20 +193,20 @@ public class OrgJobServiceImpl implements OrgJobService {
JSONUtil.toJsonStr(groupListParam));
return OrgJobPageParam.EMPTY_INSTANCE;
}
if (CollUtil.isEmpty(jobPageParam.getJobCodes())) {
if (CollUtil.isEmpty(param.getJobCodes())) {
// 直接设置jobCodes入参
jobPageParam.setJobCodes(jobCodes);
param.setJobCodes(jobCodes);
} else {
// jobCodes取交集
Collection<String> intersection = CollUtil.intersection(jobPageParam.getJobCodes(), jobCodes);
Collection<String> intersection = CollUtil.intersection(param.getJobCodes(), jobCodes);
if (CollUtil.isEmpty(intersection)) {
log.info("resolveJobPageParam the intersection is empty. param:{}",
JSONUtil.toJsonStr(groupListParam));
return OrgJobPageParam.EMPTY_INSTANCE;
}
jobPageParam.setJobCodes(Sets.newHashSet(intersection));
param.setJobCodes(Sets.newHashSet(intersection));
}
return jobPageParam;
return param;
}
private Set<String> resolveJobCodesByGroup(OrgJobGroupPageParam groupListParam) {
@ -251,14 +243,13 @@ public class OrgJobServiceImpl implements OrgJobService {
}
public List<OrgJobDTO> whileQuery(OrgJobPageParam param) {
ListOrgJobReq listParam = ListOrgJobReq.builder().type(param.getType()).build();
List<OrgJobDTO> jobs = new ArrayList<>();
PageResp<OrgJobDTO> jobPage;
int pageNumber = 0;
param.setPageSize(JOB_PAGE_SIZE);
do {
param.setPage(++pageNumber);
jobPage = foundationService.page(listParam);
jobPage = foundationService.page(param);
if (CollUtil.isNotEmpty(jobPage.getData())) {
jobs.addAll(jobPage.getData());
}