Merge remote-tracking branch 'origin/feature/REQ-3282' into feature/REQ-3282

This commit is contained in:
liuyang 2024-12-24 15:03:35 +08:00
commit d945124ff4
25 changed files with 535 additions and 402 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

@ -1,13 +1,10 @@
package cn.axzo.orgmanax.dto.nodeuser.req;
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.common.DistinctRule;
import cn.axzo.orgmanax.dto.common.IdentityPair;
import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO;
import com.google.common.collect.ImmutableList;
import cn.axzo.orgmanax.dto.common.WorkspaceOuPair;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -25,103 +22,76 @@ import java.util.List;
@SuperBuilder
public class ListNodeUserReq extends PageReqV2 {
@CriteriaField
private Long id;
@CriteriaField(field = "id", operator = Operator.GT)
private Long idGt;
@CriteriaField(field = "id", operator = Operator.IN)
private Collection<Long> ids;
/**
* identity_id
*/
@CriteriaField
private Long identityId;
@CriteriaField(field = "identityId", operator = Operator.IN)
private Collection<Long> identityIds;
/**
* 身份类型 0-无效类型, 1-工人, 2-班组长, 3-从业人员, 4-政务人员5-运营人员
*/
@CriteriaField
private Integer identityType;
@CriteriaField(field = "identityType", operator = Operator.IN)
private Collection<Integer> identityTypes;
/**
* 自然人id
*/
@CriteriaField
private Long personId;
@CriteriaField(field = "personId", operator = Operator.IN)
private Collection<Long> personIds;
@CriteriaField(field = "personId", operator = Operator.NOT_IN)
private Collection<Long> excludePersonIds;
/**
* 主电话
*/
@CriteriaField
private String phone;
@CriteriaField(field = "phone", operator = Operator.NOT_IN)
private Collection<String> phones;
/**
* 名字
*/
@CriteriaField
private String realName;
@CriteriaField(field = "realName", operator = Operator.LIKE)
private String realNameLike;
/**
* 身份证号
*/
@CriteriaField
private String idNumber;
@CriteriaField(field = "idNumber", operator = Operator.IN)
private Collection<String> idNumbers;
/**
* 单位id
*/
@CriteriaField
private Long organizationalUnitId;
@CriteriaField(field = "organizationalUnitId", operator = Operator.IN)
private Collection<Long> organizationalUnitIds;
/**
* 组织节点id
*/
@CriteriaField
private Long organizationalNodeId;
@CriteriaField(field = "organizationalNodeId", operator = Operator.IN)
private Collection<Long> organizationalNodeIds;
@CriteriaField(field = "organizationalNodeId", operator = Operator.NOT_IN)
private Collection<Long> excludeOrganizationalNodeIds;
/**
* 顶级节点id
*/
@CriteriaField
private Long topNodeId;
@CriteriaField(field = "topNodeId", operator = Operator.IN)
private Collection<Long> topNodeIds;
@CriteriaField(field = "topNodeId", operator = Operator.GT)
private Long topNodeIdGt;
/**
* 部门管理员 1是 0否
*/
@CriteriaField
private Boolean manager;
/**
* 岗位id
*/
@CriteriaField
private Long organizationalJobId;
@CriteriaField(field = "organizationalJobId", operator = Operator.IN)
private Collection<Long> organizationalJobIds;
/**
@ -129,7 +99,6 @@ public class ListNodeUserReq extends PageReqV2 {
*/
@CriteriaField
private Long workspaceId;
@CriteriaField(field = "workspaceId", operator = Operator.IN)
private Collection<Long> workspaceIds;
/**
@ -155,7 +124,6 @@ public class ListNodeUserReq extends PageReqV2 {
*/
@CriteriaField
private Long syncDataId;
@CriteriaField(field = "syncDataId", operator = Operator.IN)
private List<Long> syncDataIds;
/**
@ -170,83 +138,83 @@ public class ListNodeUserReq extends PageReqV2 {
/**
* 入职时间大于等于
*/
@CriteriaField(field = "joinAt", operator = Operator.GE)
private Date joinAtGe;
/**
* 入职时间小于等于
*/
@CriteriaField(field = "joinAt", operator = Operator.LE)
private Date joinAtLe;
/**
* 离职时间大于等于
*/
@CriteriaField(field = "leaveAt", operator = Operator.GE)
private Date leaveAtGe;
/**
* 离职时间小于等于
*/
@CriteriaField(field = "leaveAt", operator = Operator.LE)
private Date leaveAtLe;
/**
* 更新时间大于等于
*/
@CriteriaField(field = "updateAt", operator = Operator.GE)
private Date updateAtGe;
/**
* 更新时间小于等于
*/
@CriteriaField(field = "updateAt", operator = Operator.LE)
private Date updateAtLe;
// ~ 需特殊实现的查询字段非CriteriaField直接可查询的字段
private Collection<WorkspaceOuPair> workspaceOuPairs;
/**
* leaderPersonId. 根据personId=leaderPersonId and manager = true查询node然后查询整个node下面的人
*/
@CriteriaField(ignore = true) // TODO: 待实现
private Long leaderPersonId;
/**
* 下属personId根据personId=subordinatePersonId查询到node然后返回node的manager
*/
@CriteriaField(ignore = true)
private Long subordinatePersonId; // TODO: 待实现
// 岗位code
@CriteriaField(ignore = true)
private String organizationalJobCode; // TODO: 待实现
@CriteriaField(ignore = true)
private Collection<String> organizationalJobCodes; // TODO: 待实现
@CriteriaField(ignore = true)
private String organizationalJobName; // TODO: 待实现
@CriteriaField(ignore = true)
private String organizationalJobNameLike; // TODO: 待实现
@CriteriaField(ignore = true)
private Boolean onlyHasJob; // TODO: 待实现
@CriteriaField(ignore = true)
private Collection<IdentityPair> identityPairs; // TODO: 待实现
/**
* 查询返回数据包含逻辑删除数据即查询未删除和已删除的数据
*/
@CriteriaField(ignore = true)
private Boolean includeDeleted; // TODO: 待实现
/**
* 仅查询已删除的数据
*/
@CriteriaField(ignore = true)
private Boolean deletedOnly; // TODO: 待实现
@CriteriaField(ignore = true)
private Integer nodeState; // TODO: 待实现
/**
* keyword idNumberphonejobNumber精确匹配或者realName模糊匹配
*/
@CriteriaField(ignore = true)
private String keyword;
/**
* 状态1未激活 2已激活 3施工中 4已退场
*/
private Collection<Integer> projectWorkerStatuses; // TODO: 待实现
/**
* orgUserStatus
*/
private Collection<String> orgUserStatus; // TODO: 待实现
// ~ 不同部门类型的nodeUser的差异化查询字段 项目内工人 项目班组id平台班组id等 start
private Long platTeamId; // TODO: 待实现
private Long projectTeamId; // TODO: 待实现
private Collection<Long> projectTeamIds; // TODO: 待实现
private Long projectWorkerId; // TODO: 待实现
private Long projectGroupId; // TODO: 待实现
// ~ 结束
// ~ 后置过滤的字段
/**
@ -276,22 +244,6 @@ public class ListNodeUserReq extends PageReqV2 {
* 数据权限
*/
private String dataPermissionCacheKey; // TODO: 待实现
/**
* orgUserStatus
*/
private Collection<String> orgUserStatus; // TODO: 待实现
// ~ 不同部门类型的nodeUser的差异化查询字段 项目内工人 项目班组id平台班组id等 start
private Long platTeamId; // TODO: 待实现
private Long projectTeamId; // TODO: 待实现
private Collection<Long> projectTeamIds; // TODO: 待实现
private Long projectWorkerId; // TODO: 待实现
private Long projectGroupId; // TODO: 待实现
/**
* 状态1未激活 2已激活 3施工中 4已退场
*/
private Collection<Integer> projectWorkerStatuses; // TODO: 待实现
// ~ 不同部门类型的nodeUser的差异化查询字段 项目内工人 项目班组id平台班组id等 end
/**
@ -310,10 +262,8 @@ public class ListNodeUserReq extends PageReqV2 {
/**
* 聚合信息needs
*/
@CriteriaField(ignore = true)
private Needs needs;
@NoArgsConstructor
@AllArgsConstructor
@Data

View File

@ -50,6 +50,8 @@ public class ListUnitReq extends PageReqV2 {
private Set<Long> identityIds;
@CriteriaField(field = "legalIdCard", operator = Operator.IN)
private Set<String> legalIdCards;
@CriteriaField(field = "legalPhone", operator = Operator.IN)
private Set<String> legalPhones;
@CriteriaField(field = "identityType", operator = Operator.EQ)
private Integer identityType;
/**

View File

@ -192,5 +192,9 @@ public class UpdateUnitReq implements Serializable {
* 市名称
*/
private String cityName;
/**
* 历史平台班组的同步数据0还未同步1同步完成
*/
private Integer syncState;
}

View File

@ -1,26 +1,33 @@
package cn.axzo.orgmanax.infra.dao.nodeuser.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.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
import cn.axzo.orgmanax.dto.common.IdentityPair;
import cn.axzo.orgmanax.dto.common.WorkspaceOuPair;
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobQueryRepository;
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
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.Collection;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.Set;
public interface NodeUserQueryRepository {
PageResp<NodeUserResp> page(ListNodeUserReq req);
PageResp<NodeUserResp> page(ListReq req);
default List<NodeUserResp> list(ListNodeUserReq req) {
default List<NodeUserResp> list(ListReq req) {
return page(req).getData();
}
@ -30,12 +37,249 @@ public interface NodeUserQueryRepository {
default Optional<NodeUserResp> oneOpt(OneReq req) {
req.check();
ListNodeUserReq page = BeanUtil.toBean(req, ListNodeUserReq.class);
ListReq page = BeanUtil.toBean(req, ListReq.class);
page.setPage(1);
page.setPageSize(1);
return page(page).getData().stream().findFirst();
}
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
class ListReq extends PageReqV2 {
@CriteriaField
private Long id;
@CriteriaField(field = "id", operator = Operator.GT)
private Long idGt;
@CriteriaField(field = "id", operator = Operator.IN)
private Collection<Long> ids;
/**
* identity_id
*/
@CriteriaField
private Long identityId;
@CriteriaField(field = "identityId", operator = Operator.IN)
private Collection<Long> identityIds;
/**
* 身份类型 0-无效类型, 1-工人, 2-班组长, 3-从业人员, 4-政务人员5-运营人员
*/
@CriteriaField
private Integer identityType;
@CriteriaField(field = "identityType", operator = Operator.IN)
private Collection<Integer> identityTypes;
/**
* 自然人id
*/
@CriteriaField
private Long personId;
@CriteriaField(field = "personId", operator = Operator.IN)
private Collection<Long> personIds;
@CriteriaField(field = "personId", operator = Operator.NOT_IN)
private Collection<Long> excludePersonIds;
/**
* 主电话
*/
@CriteriaField
private String phone;
@CriteriaField(field = "phone", operator = Operator.NOT_IN)
private Collection<String> phones;
/**
* 名字
*/
@CriteriaField
private String realName;
@CriteriaField(field = "realName", operator = Operator.LIKE)
private String realNameLike;
/**
* 身份证号
*/
@CriteriaField
private String idNumber;
@CriteriaField(field = "idNumber", operator = Operator.IN)
private Collection<String> idNumbers;
/**
* 单位id
*/
@CriteriaField
private Long organizationalUnitId;
@CriteriaField(field = "organizationalUnitId", operator = Operator.IN)
private Collection<Long> organizationalUnitIds;
/**
* 组织节点id
*/
@CriteriaField
private Long organizationalNodeId;
@CriteriaField(field = "organizationalNodeId", operator = Operator.IN)
private Collection<Long> organizationalNodeIds;
@CriteriaField(field = "organizationalNodeId", operator = Operator.NOT_IN)
private Collection<Long> excludeOrganizationalNodeIds;
/**
* 顶级节点id
*/
@CriteriaField
private Long topNodeId;
@CriteriaField(field = "topNodeId", operator = Operator.IN)
private Collection<Long> topNodeIds;
@CriteriaField(field = "topNodeId", operator = Operator.GT)
private Long topNodeIdGt;
/**
* 部门管理员 1是 0否
*/
@CriteriaField
private Boolean manager;
/**
* 岗位id
*/
@CriteriaField
private Long organizationalJobId;
@CriteriaField(field = "organizationalJobId", operator = Operator.IN)
private Collection<Long> organizationalJobIds;
/**
* 工作台ID
*/
@CriteriaField
private Long workspaceId;
@CriteriaField(field = "workspaceId", operator = Operator.IN)
private Collection<Long> workspaceIds;
/**
* 0:普通岗位1:主岗位
*/
@CriteriaField
private Integer primaryJob;
/**
* 是否允许进入工地 1.允许 2.不允许
*/
@CriteriaField
private Integer isAllowed;
/**
* 迁移数据临时源id
*/
@CriteriaField
private Long tempSourceId;
/**
* 数据同步ID
*/
@CriteriaField
private Long syncDataId;
@CriteriaField(field = "syncDataId", operator = Operator.IN)
private List<Long> syncDataIds;
/**
* 工号
*/
@CriteriaField
private String jobNumber;
@CriteriaField
private Integer activeFlag;
/**
* 入职时间大于等于
*/
@CriteriaField(field = "joinAt", operator = Operator.GE)
private Date joinAtGe;
/**
* 入职时间小于等于
*/
@CriteriaField(field = "joinAt", operator = Operator.LE)
private Date joinAtLe;
/**
* 离职时间大于等于
*/
@CriteriaField(field = "leaveAt", operator = Operator.GE)
private Date leaveAtGe;
/**
* 离职时间小于等于
*/
@CriteriaField(field = "leaveAt", operator = Operator.LE)
private Date leaveAtLe;
/**
* 更新时间大于等于
*/
@CriteriaField(field = "updateAt", operator = Operator.GE)
private Date updateAtGe;
/**
* 更新时间小于等于
*/
@CriteriaField(field = "updateAt", operator = Operator.LE)
private Date updateAtLe;
// ~ 需特殊实现的查询字段非CriteriaField直接可查询的字段
@CriteriaField(ignore = true)
private Collection<WorkspaceOuPair> workspaceOuPairs;
/**
* leaderPersonId. 根据personId=leaderPersonId and manager = true查询node然后查询整个node下面的人
*/
@CriteriaField(ignore = true) // TODO: 待实现
private Long leaderPersonId;
/**
* 下属personId根据personId=subordinatePersonId查询到node然后返回node的manager
*/
@CriteriaField(ignore = true)
private Long subordinatePersonId; // TODO: 待实现
// 岗位code
@CriteriaField(ignore = true)
private String organizationalJobCode; // TODO: 待实现
@CriteriaField(ignore = true)
private Collection<String> organizationalJobCodes; // TODO: 待实现
@CriteriaField(ignore = true)
private String organizationalJobName; // TODO: 待实现
@CriteriaField(ignore = true)
private String organizationalJobNameLike; // TODO: 待实现
@CriteriaField(ignore = true)
private Boolean onlyHasJob; // TODO: 待实现
@CriteriaField(ignore = true)
private Collection<IdentityPair> identityPairs; // TODO: 待实现
/**
* 查询返回数据包含逻辑删除数据即查询未删除和已删除的数据
*/
@CriteriaField(ignore = true)
private Boolean includeDeleted; // TODO: 待实现
/**
* 仅查询已删除的数据
*/
@CriteriaField(ignore = true)
private Boolean deletedOnly; // TODO: 待实现
@CriteriaField(ignore = true)
private Integer nodeState; // TODO: 待实现
/**
* keyword idNumberphonejobNumber精确匹配或者realName模糊匹配
*/
@CriteriaField(ignore = true)
private String keyword;
/**
* orgUserStatus
*/
@CriteriaField(ignore = true)
private Collection<String> orgUserStatus; // TODO: 待实现
}
@NoArgsConstructor
@AllArgsConstructor
@Data
@ -55,26 +299,7 @@ public interface NodeUserQueryRepository {
@Data
@SuperBuilder
class NodeUserResp extends OrganizationalNodeUser {
/**
* 查询参数指定 needs.node = true才会返回
*
* @see ListNodeUserReq.Needs#getNode()
*/
private NodeQueryRepository.NodeResp node;
/**
* 查询参数指定 needs.unit = true才会返回
*
* @see ListNodeUserReq.Needs#getUnit()
*/
private UnitQueryRepository.UnitResp unit;
/**
* 查询参数指定 needs.job = true才会返回
*
* @see ListNodeUserReq.Needs#getJob()
*/
private OrgJobQueryRepository.JobResp job;
private String xx;
}
}

View File

@ -3,14 +3,9 @@ package cn.axzo.orgmanax.infra.dao.nodeuser.repository.impl;
import cn.axzo.foundation.dao.support.converter.PageConverter;
import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
import cn.axzo.orgmanax.infra.dao.nodeuser.dao.NodeUserDao;
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.infra.dao.unit.repository.UnitQueryRepository;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.BooleanUtil;
@ -20,14 +15,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.collect.ImmutableList;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@ -35,12 +25,9 @@ import java.util.stream.Collectors;
public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository {
private final NodeUserDao nodeUserDao;
private final NodeQueryRepository nodeQueryRepository;
private final OrgJobQueryRepository jobQueryRepository;
private final UnitQueryRepository unitQueryRepository;
@Override
public PageResp<NodeUserResp> page(ListNodeUserReq req) {
public PageResp<NodeUserResp> page(ListReq req) {
IPage<OrganizationalNodeUser> page = PageConverter.toMybatis(req, OrganizationalNodeUser.class);
PageResp<NodeUserResp> emptyPage = PageResp.<NodeUserResp>builder().size(req.getPageSize()).current(req.getPage()).total(0L).data(ImmutableList.of()).build();
QueryWrapper<OrganizationalNodeUser> wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNodeUser.class);
@ -61,91 +48,17 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository {
if (!BooleanUtil.isTrue(req.getIncludeDeleted())) {
wrapper.eq("is_delete", 0);
}
// jobIds查询 - 这里可以合并对orgJob的查询后续优化
if (CollUtil.isNotEmpty(req.getOrganizationalJobCodes())) {
Set<Long> jobIds = jobQueryRepository.list(OrgJobQueryRepository.ListReq.builder().codes(req.getOrganizationalJobCodes()).build())
.stream().map(OrgJob::getId).collect(Collectors.toSet());
if (jobIds.isEmpty()) {
return emptyPage;
}
wrapper.in("organizational_job_id", jobIds);
}
if (StrUtil.isNotBlank(req.getOrganizationalJobCode())) {
Set<Long> jobIds = jobQueryRepository.list(OrgJobQueryRepository.ListReq.builder().codes(req.getOrganizationalJobCodes()).build())
.stream().map(OrgJob::getId).collect(Collectors.toSet());
if (jobIds.isEmpty()) {
return emptyPage;
}
wrapper.eq("organizational_job_id", jobIds);
}
if (StringUtils.isNotBlank(req.getOrganizationalJobNameLike())) {
Set<Long> jobIds = jobQueryRepository.list(OrgJobQueryRepository.ListReq.builder().nameLike(req.getOrganizationalJobNameLike()).build())
.stream().map(OrgJob::getId).collect(Collectors.toSet());
if (jobIds.isEmpty()) {
return emptyPage;
}
wrapper.in("organizational_job_id", jobIds);
}
IPage<NodeUserResp> results = nodeUserDao.page(page, wrapper)
.convert(e -> BeanUtil.toBean(e, NodeUserResp.class));
PageResp<NodeUserResp> resp = PageConverter.toResp(results);
if (CollUtil.isEmpty(results.getRecords())) {
return emptyPage;
}
PageResp resp = PageConverter.toResp(results);
List<NodeUserResp> records = resp.getData();
if (CollUtil.isEmpty(records)) {
return resp;
}
// assembles
assembleNode(req, records);
assembleJob(req, records);
assembleUnit(req, records);
return resp;
}
private void assembleUnit(ListNodeUserReq req, List<NodeUserResp> records) {
if (CollUtil.isEmpty(records) || req.getNeeds() == null) {
return;
}
if (!BooleanUtil.isTrue(req.getNeeds().getUnit())) {
return;
}
Set<Long> unitIds = records.stream().map(NodeUserResp::getOrganizationalUnitId).collect(Collectors.toSet());
Map<Long, UnitQueryRepository.UnitResp> unitsById = unitQueryRepository.list(UnitQueryRepository.ListReq.builder()
.ids(unitIds)
.build()).stream().collect(Collectors.toMap(UnitQueryRepository.UnitResp::getId, Function.identity()));
records.forEach(r -> r.setUnit(unitsById.get(r.getOrganizationalUnitId())));
}
private void assembleJob(ListNodeUserReq req, List<NodeUserResp> records) {
if (CollUtil.isEmpty(records) || req.getNeeds() == null) {
return;
}
if (!BooleanUtil.isTrue(req.getNeeds().getJob())) {
return;
}
Set<Long> jobIds = records.stream().map(NodeUserResp::getOrganizationalJobId).collect(Collectors.toSet());
// assemble job
Map<Long, OrgJobQueryRepository.JobResp> jobsById = jobQueryRepository.page(OrgJobQueryRepository.ListReq.builder()
.ids(jobIds)
.build()).getData().stream().collect(Collectors.toMap(OrgJobQueryRepository.JobResp::getId, Function.identity()));
records.forEach(r -> r.setJob(jobsById.get(r.getOrganizationalJobId())));
}
private void assembleNode(ListNodeUserReq req, List<NodeUserResp> records) {
if (CollUtil.isEmpty(records) || req.getNeeds() == null) {
return;
}
if (!BooleanUtil.isTrue(req.getNeeds().getNode()) && !BooleanUtil.isTrue(req.getNeeds().getAncestorNode())) {
return;
}
Set<Long> nodeIds = records.stream().map(NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet());
// assemble parentNode
Map<Long, NodeQueryRepository.NodeResp> nodesById = nodeQueryRepository.list(NodeQueryRepository.ListReq.builder()
.ids(nodeIds)
.needAncestorNode(BooleanUtil.isTrue(req.getNeeds().getAncestorNode()))
.build()).stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity()));
records.forEach(r -> r.setNode(nodesById.get(r.getOrganizationalNodeId())));
}
}

View File

@ -62,6 +62,8 @@ public interface OrgJobQueryRepository {
@CriteriaField(field = "code", operator = Operator.IN)
private Collection<String> codes;
@CriteriaField
private String code;
/**
* 岗位类型

View File

@ -1,5 +1,6 @@
package cn.axzo.orgmanax.infra.dao.unit.entity;
import cn.axzo.trade.datasecurity.core.annotation.CryptField;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
@ -99,6 +100,7 @@ public class OrganizationalUnit implements Serializable {
/**
* 法人代表身份证
*/
@CryptField
private String legalIdCard;
/**

View File

@ -108,6 +108,8 @@ public interface UnitQueryRepository {
private Set<Long> identityIds;
@CriteriaField(field = "legalIdCard", operator = Operator.IN)
private Set<String> legalIdCards;
@CriteriaField(field = "legalPhone", operator = Operator.IN)
private Set<String> legalPhones;
@CriteriaField(field = "identityType", operator = Operator.EQ)
private Integer identityType;
}

View File

@ -2,21 +2,38 @@ 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.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.dto.NodeUserDTO;
import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.axzo.orgmanax.dto.unit.dto.OrgUnitDTO;
import cn.axzo.orgmanax.dto.unit.req.ListUnitReq;
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
import cn.axzo.orgmanax.server.node.service.NodeService;
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;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.StrUtil;
import com.google.common.collect.ImmutableList;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
@Service
@ -24,6 +41,9 @@ import java.util.List;
public class NodeUserServiceImpl implements NodeUserService {
private final NodeUserQueryRepository nodeUserQueryRepository;
private final NodeService nodeService;
private final OrgJobService jobService;
private final UnitService unitService;
private final ApplicationContext applicationContext;
@Override
@ -50,9 +70,80 @@ public class NodeUserServiceImpl implements NodeUserService {
@Override
public PageResp<NodeUserDTO> page(ListNodeUserReq req) {
PageResp<NodeUserQueryRepository.NodeUserResp> page = nodeUserQueryRepository.page(req);
PageResp<NodeUserDTO> emptyPage = PageResp.<NodeUserDTO>builder().size(req.getPageSize())
.current(req.getPage()).total(0L).data(ImmutableList.of()).build();
NodeUserQueryRepository.ListReq listReq = BeanUtil.toBean(req, NodeUserQueryRepository.ListReq.class);
// jobCodes -> jobIds
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());
if (jobIds.isEmpty()) {
return emptyPage;
}
req.setOrganizationalJobIds(QueryConditionAssembler.assemble(req.getOrganizationalJobIds(), jobIds));
}
PageResp<NodeUserQueryRepository.NodeUserResp> page = nodeUserQueryRepository.page(listReq);
List<NodeUserDTO> records = BeanUtil.copyToList(CollUtil.emptyIfNull(page.getData()), NodeUserDTO.class);
// assemble data if needed
assembleUnit(req, records);
assembleJob(req, records);
assembleNode(req, records);
return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records);
}
private void assembleUnit(ListNodeUserReq req, List<NodeUserDTO> records) {
if (CollUtil.isEmpty(records) || req.getNeeds() == null) {
return;
}
if (!BooleanUtil.isTrue(req.getNeeds().getUnit())) {
return;
}
Set<Long> unitIds = records.stream().map(NodeUserDTO::getOrganizationalUnitId).collect(Collectors.toSet());
Map<Long, OrgUnitDTO> unitsById = unitService.list(ListUnitReq.builder()
.ids(unitIds)
.searchCount(false)
.build()).getData().stream().collect(Collectors.toMap(OrgUnitDTO::getId, Function.identity()));
records.forEach(r -> r.setUnit(unitsById.get(r.getOrganizationalUnitId())));
}
private void assembleJob(ListNodeUserReq req, List<NodeUserDTO> records) {
if (CollUtil.isEmpty(records) || req.getNeeds() == null) {
return;
}
if (!BooleanUtil.isTrue(req.getNeeds().getJob())) {
return;
}
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()));
records.forEach(r -> r.setJob(jobsById.get(r.getOrganizationalJobId())));
}
private void assembleNode(ListNodeUserReq req, List<NodeUserDTO> records) {
if (CollUtil.isEmpty(records) || req.getNeeds() == null) {
return;
}
if (!BooleanUtil.isTrue(req.getNeeds().getNode()) && !BooleanUtil.isTrue(req.getNeeds().getAncestorNode())) {
return;
}
Set<Long> nodeIds = records.stream().map(NodeUserDTO::getOrganizationalNodeId).collect(Collectors.toSet());
// assemble parentNode
Map<Long, OrgNodeDTO> nodesById = nodeService.list(ListNodeReq.builder()
.ids(nodeIds)
.includeAncestors(BooleanUtil.isTrue(req.getNeeds().getAncestorNode()))
.build()).stream().collect(Collectors.toMap(OrgNodeDTO::getId, Function.identity()));
records.forEach(r -> r.setNode(nodesById.get(r.getOrganizationalNodeId())));
}
}

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,10 +49,12 @@ 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());
param.setCode(req.getJobCode());
param.setNameLike(req.getJobNameLike());
return param;
}
}

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,22 +1,25 @@
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.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;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.Set;
/**
* @author luofu
* @version 1.0
* @date 2024/9/18
* @date 2024/9/12
*/
@Data
@SuperBuilder
@ -25,8 +28,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集合
*/
@ -34,7 +44,9 @@ public class OrgJobPageParam extends PageReqV2 {
/**
* 岗位编码集合
*/
private Set<String> jobCodes;
private Collection<String> jobCodes;
private String jobCode;
private String jobNameLike;
/**
* 岗位类型
*/
@ -45,36 +57,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());
}

View File

@ -190,5 +190,8 @@ public class UpdateUnitReq {
* 市名称
*/
private String cityName;
/**
* 历史平台班组的同步数据0还未同步1同步完成
*/
private Integer syncState;
}

View File

@ -0,0 +1,38 @@
package cn.axzo.orgmanax.server.util;
import cn.hutool.core.collection.CollUtil;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class QueryConditionAssembler {
/**
* 组装查询条件的逻辑
* 1如果没有参数或者所有参数都是empty则返回empty
* 2如果仅有一个参数不为empty则返回该参数
* 3如果存在多个不为empty的参数将这些参数去交集
*
* @param collections
* @param <T>
* @return
*/
@SafeVarargs
public static <T> Collection<T> assemble(Collection<T>... collections) {
if (collections == null || collections.length == 0) {
return ImmutableList.of();
}
Collection<Collection<T>> nonEmptyCollections = Stream.of(collections).filter(CollUtil::isNotEmpty).collect(Collectors.toList());
if (nonEmptyCollections.isEmpty()) {
return ImmutableList.of();
}
Collection<T> c1 = nonEmptyCollections.stream().findFirst().orElse(null);
Collection<T> c2 = nonEmptyCollections.stream().skip(1).findFirst().orElse(null);
if (CollUtil.isEmpty(c2)) {
return c1;
}
Collection<T>[] others = nonEmptyCollections.stream().skip(2).toArray(Collection[]::new);
return CollUtil.intersectionDistinct(c1, c2, others);
}
}