Merge remote-tracking branch 'refs/remotes/origin/feature/REQ-3282' into feature/REQ-3282-zhh
This commit is contained in:
commit
e2312518a9
@ -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条数据。调用方使用时需注意。
|
||||
|
||||
@ -23,6 +23,10 @@
|
||||
<version>2.0.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,35 @@
|
||||
package cn.axzo.orgmanax.common.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IBaseTree<T extends IBaseTree<T, O>, O> {
|
||||
|
||||
/**
|
||||
* 节点编码
|
||||
*
|
||||
* @return 节点编码
|
||||
*/
|
||||
O getNodeCode();
|
||||
|
||||
/**
|
||||
* 父节点编码
|
||||
*
|
||||
* @return 父节点编码
|
||||
*/
|
||||
O getParentNodeCode();
|
||||
|
||||
/**
|
||||
* 子节点
|
||||
*
|
||||
* @return 子节点
|
||||
*/
|
||||
List<T> getNodeChildren();
|
||||
|
||||
/**
|
||||
* 设置子节点
|
||||
*
|
||||
* @param nodeChildren
|
||||
*/
|
||||
void setNodeChildren(List<T> nodeChildren);
|
||||
|
||||
}
|
||||
@ -0,0 +1,246 @@
|
||||
package cn.axzo.orgmanax.common.util;
|
||||
|
||||
import cn.axzo.orgmanax.common.model.IBaseTree;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.lang.Pair;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class TreeUtil {
|
||||
|
||||
|
||||
/**
|
||||
* 合并两个树 极大合并<p/> 这里以新树为基础:<br/> 同层级树: <br/> 1).如果新树的当前节点在旧树中存在,则直接使用新树的当前节点,并保持当前节点的顺序不变<br/>
|
||||
* 2).如果新树的当前节点在旧树中存在,在 1)的基础上,去递归比较新树的子节点<br/> 3).如果新树的当前节点在旧树中不存在,直接使用新树的当前节点,并保持当前节点的顺序不变<br/>
|
||||
* 4).如果旧树的节点在新树中不存在,则直接附加到新树之后,并保持旧树的顺序<br/>
|
||||
* <p/>
|
||||
* snabbdom:https://github.com/snabbdom/snabbdom/blob/master/src/init.ts#L277
|
||||
*
|
||||
* @param oldTree
|
||||
* @param newTree
|
||||
* @return
|
||||
*/
|
||||
public static <T extends IBaseTree<T, O>, O> List<T> largeMergeTree(List<T> oldTree,
|
||||
List<T> newTree) {
|
||||
return largeMergeTree(oldTree, newTree, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 合并树
|
||||
*
|
||||
* @param oldTree
|
||||
* @param newTree
|
||||
* @param oldTreeConsumer 对需要附加到新树的节点进行操作
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
public static <T extends IBaseTree<T, O>, O> List<T> largeMergeTree(List<T> oldTree,
|
||||
List<T> newTree,
|
||||
Consumer<List<T>> oldTreeConsumer) {
|
||||
//为空直接返回
|
||||
if (CollectionUtils.isEmpty(oldTree)) {
|
||||
return newTree;
|
||||
}
|
||||
if (CollectionUtils.isEmpty(newTree)) {
|
||||
return oldTree;
|
||||
}
|
||||
//构造老树code与所在索引的map
|
||||
Map<O, Integer> oldTreeIndexMap = new HashMap<>(oldTree.size());
|
||||
for (int i = 0; i < oldTree.size(); i++) {
|
||||
oldTreeIndexMap.put(oldTree.get(i).getNodeCode(), i);
|
||||
}
|
||||
|
||||
//循环新树,找到新树中的当前节点在老树中的索引
|
||||
for (T t : newTree) {
|
||||
Integer oldTreeIndex = oldTreeIndexMap.get(t.getNodeCode());
|
||||
//找到了,则直接使用新树的当前节点,并保持当前节点的顺序不变
|
||||
if (oldTreeIndex != null) {
|
||||
t.setNodeChildren(
|
||||
largeMergeTree(oldTree.get(oldTreeIndex).getNodeChildren(), t.getNodeChildren(),
|
||||
oldTreeConsumer));
|
||||
oldTreeIndexMap.put(t.getNodeCode(), null);
|
||||
}
|
||||
}
|
||||
List<T> tempOldTree = null;
|
||||
if (oldTreeConsumer != null) {
|
||||
tempOldTree = new ArrayList<>();
|
||||
}
|
||||
List<T> finalResult = tempOldTree;
|
||||
//将所有老树中未找到的节点附加到新树之后,并保持旧树的顺序
|
||||
oldTreeIndexMap.values().stream().filter(Objects::nonNull).sorted().forEach(e -> {
|
||||
T t = oldTree.get(e);
|
||||
newTree.add(t);
|
||||
if (oldTreeConsumer != null) {
|
||||
finalResult.add(t);
|
||||
}
|
||||
});
|
||||
if (oldTreeConsumer != null) {
|
||||
oldTreeConsumer.accept(tempOldTree);
|
||||
}
|
||||
return newTree;
|
||||
}
|
||||
|
||||
|
||||
public static <T extends IBaseTree<T, O>, O> List<T> buildTree(List<T> treeList) {
|
||||
if (CollectionUtils.isEmpty(treeList)) {
|
||||
return treeList;
|
||||
}
|
||||
Set<O> codes = treeList.stream().map(IBaseTree::getNodeCode).collect(Collectors.toSet());
|
||||
List<T> rootList = treeList.stream().filter(e -> !codes.contains(e.getParentNodeCode()))
|
||||
.collect(Collectors.toList());
|
||||
List<T> children = treeList.stream().filter(e -> codes.contains(e.getParentNodeCode()))
|
||||
.collect(Collectors.toList());
|
||||
for (T t : rootList) {
|
||||
t.setNodeChildren(buildTree(children, t.getNodeCode()));
|
||||
}
|
||||
return rootList;
|
||||
}
|
||||
|
||||
public static <T extends IBaseTree<T, O>, O> List<T> buildTree(List<T> treeList, O rootCode) {
|
||||
if (CollectionUtils.isEmpty(treeList)) {
|
||||
return treeList;
|
||||
}
|
||||
//root级树
|
||||
List<T> rootList = treeList.stream()
|
||||
.filter(e -> Objects.equals(e.getParentNodeCode(), rootCode))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<T> childrenList = treeList.stream()
|
||||
.filter(e -> !Objects.equals(e.getParentNodeCode(), rootCode))
|
||||
.collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(childrenList)) {
|
||||
return CollectionUtils.isEmpty(rootList) ? null : rootList;
|
||||
}
|
||||
for (T t : rootList) {
|
||||
t.setNodeChildren(buildTree(childrenList, t.getNodeCode()));
|
||||
}
|
||||
return CollectionUtils.isEmpty(rootList) ? null : rootList;
|
||||
}
|
||||
|
||||
// public static <T extends IBaseTree<T, O>, O> List<T> buildFastTree(List<T> treeList, O rootCode) {
|
||||
// if (CollectionUtils.isEmpty(treeList)) {
|
||||
// return treeList;
|
||||
// }
|
||||
// //root级树
|
||||
// List<T> rootList = treeList.stream().filter(e -> Objects.equals(e.getParentNodeCode(), rootCode))
|
||||
// .collect(Collectors.toList());
|
||||
//
|
||||
// List<T> notRootList = treeList.stream().filter(e -> !Objects.equals(e.getParentNodeCode(), rootCode))
|
||||
// .collect(Collectors.toList());
|
||||
//
|
||||
// Map<O, List<T>> childrenMap = notRootList.stream()
|
||||
// .collect(Collectors.groupingBy(IBaseTree::getParentNodeCode));
|
||||
//
|
||||
// for (T t : rootList) {
|
||||
// List<T> children = childrenMap.get(t.getNodeCode());
|
||||
// if(children==null){
|
||||
// children=new ArrayList<>();
|
||||
// }
|
||||
// t.setNodeChildren(children);
|
||||
// }
|
||||
// return rootList;
|
||||
// }
|
||||
|
||||
/**
|
||||
* 树的扁平化操作
|
||||
*
|
||||
* @param trees 树列表
|
||||
* @param maxLevel 业务场景所允许的最大的树高
|
||||
*/
|
||||
public static <T extends IBaseTree<T, O>, O> List<T> flattening(List<T> trees, int maxLevel) {
|
||||
if (CollUtil.isEmpty(trees)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return trees.stream()
|
||||
.flatMap(e -> flattening(e, maxLevel).stream())
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 树的扁平化操作
|
||||
*
|
||||
* @param tree 树
|
||||
* @param maxLevel 业务场景所允许的最大的树高
|
||||
*/
|
||||
public static <T extends IBaseTree<T, O>, O> List<T> flattening(T tree, int maxLevel) {
|
||||
if (Objects.isNull(tree)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<T> result = new ArrayList<>();
|
||||
// 根节点放入栈中
|
||||
LinkedList<Pair<Integer, T>> stack = new LinkedList<>();
|
||||
stack.push(Pair.of(1, tree));
|
||||
Pair<Integer, T> pointer;
|
||||
do {
|
||||
// 出栈
|
||||
pointer = stack.pop();
|
||||
// 校验当前遍历的层级是否过深
|
||||
Assert.isTrue(pointer.getKey() <= maxLevel, "层数过深,请检查数据的准确性");
|
||||
// 数据放入结果集
|
||||
result.add(pointer.getValue());
|
||||
if (CollUtil.isNotEmpty(pointer.getValue().getNodeChildren())) {
|
||||
// 子集层级自增并入栈
|
||||
int recursiveLevel = pointer.getKey() + 1;
|
||||
pointer.getValue().getNodeChildren().stream()
|
||||
.map(e -> Pair.of(recursiveLevel, e))
|
||||
.forEach(stack::push);
|
||||
}
|
||||
} while (CollUtil.isNotEmpty(stack));
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 树的剪枝操作
|
||||
*
|
||||
* @param root 树
|
||||
* @param treeNodeCode 剪枝切入点
|
||||
*/
|
||||
public static <T extends IBaseTree<T, O>, O> T pruning(T root, O treeNodeCode) {
|
||||
if (Objects.isNull(root) || Objects.isNull(treeNodeCode)) {
|
||||
return root;
|
||||
}
|
||||
// 根节点放入栈中
|
||||
LinkedList<T> stack = new LinkedList<>();
|
||||
stack.push(root);
|
||||
T node;
|
||||
do {
|
||||
// 出栈
|
||||
node = stack.pop();
|
||||
if (Objects.equals(node.getNodeCode(), treeNodeCode)) {
|
||||
return node;
|
||||
}
|
||||
if (CollUtil.isNotEmpty(node.getNodeChildren())) {
|
||||
stack.addAll(node.getNodeChildren());
|
||||
}
|
||||
} while (CollUtil.isNotEmpty(stack));
|
||||
return null;
|
||||
}
|
||||
|
||||
public static <T extends IBaseTree<T, O>, O> List<T> buildTree(List<T> treeList, Function<T, Boolean> filter) {
|
||||
Objects.requireNonNull(filter);
|
||||
|
||||
if (CollectionUtils.isEmpty(treeList)) {
|
||||
return treeList;
|
||||
}
|
||||
|
||||
Set<O> codes = treeList.stream().map(IBaseTree::getNodeCode).collect(Collectors.toSet());
|
||||
List<T> rootList = treeList.stream()
|
||||
.filter(filter::apply)
|
||||
.filter(e -> !codes.contains(e.getParentNodeCode()))
|
||||
.collect(Collectors.toList());
|
||||
List<T> children = treeList.stream()
|
||||
.filter(filter::apply)
|
||||
.filter(e -> codes.contains(e.getParentNodeCode()))
|
||||
.collect(Collectors.toList());
|
||||
for (T t : rootList) {
|
||||
t.setNodeChildren(buildTree(children, t.getNodeCode()));
|
||||
}
|
||||
return rootList;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,15 @@
|
||||
package cn.axzo.orgmanax.dto.common;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public class WorkspaceOuPair {
|
||||
private Long workspaceId;
|
||||
private Long ouId;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package cn.axzo.orgmanax.dto.node.req;
|
||||
|
||||
import cn.axzo.foundation.page.PageReqV2;
|
||||
import cn.axzo.orgmanax.dto.common.WorkspaceOuPair;
|
||||
import lombok.*;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
@ -118,13 +119,4 @@ public class ListNodeReq extends PageReqV2 {
|
||||
private Long personId;
|
||||
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public static class WorkspaceOuPair {
|
||||
private Long workspaceId;
|
||||
private Long ouId;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,10 +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.orgmanax.dto.common.DistinctRule;
|
||||
import cn.axzo.orgmanax.dto.common.IdentityPair;
|
||||
import cn.axzo.orgmanax.dto.common.WorkspaceOuPair;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@ -22,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;
|
||||
|
||||
/**
|
||||
@ -126,7 +99,6 @@ public class ListNodeUserReq extends PageReqV2 {
|
||||
*/
|
||||
@CriteriaField
|
||||
private Long workspaceId;
|
||||
@CriteriaField(field = "workspaceId", operator = Operator.IN)
|
||||
private Collection<Long> workspaceIds;
|
||||
|
||||
/**
|
||||
@ -152,7 +124,6 @@ public class ListNodeUserReq extends PageReqV2 {
|
||||
*/
|
||||
@CriteriaField
|
||||
private Long syncDataId;
|
||||
@CriteriaField(field = "syncDataId", operator = Operator.IN)
|
||||
private List<Long> syncDataIds;
|
||||
|
||||
/**
|
||||
@ -167,78 +138,84 @@ 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。用 idNumber,phone,jobNumber精确匹配,或者realName模糊匹配
|
||||
*/
|
||||
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: 待实现
|
||||
|
||||
// ~ 结束。
|
||||
|
||||
// ~ 后置过滤的字段
|
||||
/**
|
||||
* 包含的单位类型
|
||||
@ -267,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
|
||||
|
||||
/**
|
||||
@ -301,10 +262,8 @@ public class ListNodeUserReq extends PageReqV2 {
|
||||
/**
|
||||
* 聚合信息needs
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private Needs needs;
|
||||
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@ -360,4 +319,5 @@ public class ListNodeUserReq extends PageReqV2 {
|
||||
|
||||
private Boolean personProfile;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -72,7 +72,6 @@ public interface NodeQueryRepository {
|
||||
}
|
||||
|
||||
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@ -143,6 +142,16 @@ public interface NodeQueryRepository {
|
||||
@Builder.Default
|
||||
private Boolean isSelectTopNodeOnly = false;
|
||||
|
||||
/**
|
||||
* 是否返回祖先节点 TODO:liuyang
|
||||
*/
|
||||
private Boolean needAncestorNode;
|
||||
|
||||
/**
|
||||
* 根据workspace和ouId组合查询
|
||||
*/
|
||||
private Set<cn.axzo.orgmanax.dto.common.WorkspaceOuPair> workspaceOuPairs;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.google.common.collect.Sets;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -28,7 +29,7 @@ import java.util.stream.Stream;
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class NodeQueryRepositoryImpl implements NodeQueryRepository {
|
||||
public class NodeQueryRepositoryImpl extends ServiceImpl implements NodeQueryRepository {
|
||||
|
||||
private final NodeDao nodeDao;
|
||||
|
||||
@ -58,9 +59,6 @@ public class NodeQueryRepositoryImpl implements NodeQueryRepository {
|
||||
if (CollUtil.isEmpty(records)) {
|
||||
return resp;
|
||||
}
|
||||
|
||||
// assemble parent node
|
||||
assembleParentNode(req, records);
|
||||
return resp;
|
||||
}
|
||||
|
||||
|
||||
@ -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。用 idNumber,phone,jobNumber精确匹配,或者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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3,28 +3,21 @@ 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.node.req.ListNodeReq;
|
||||
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.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;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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
|
||||
@ -32,74 +25,40 @@ 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);
|
||||
// 查询参数过滤
|
||||
|
||||
// 查询参数处理 ~
|
||||
// keyword
|
||||
if (StrUtil.isNotBlank(req.getKeyword())) {
|
||||
wrapper.and(w -> {
|
||||
w.like("real_name", req.getKeyword())
|
||||
.or().eq("phone", req.getKeyword())
|
||||
.or().eq("job_number", req.getKeyword())
|
||||
.or().eq("phone", req.getKeyword());
|
||||
});
|
||||
}
|
||||
// 处理删除标记
|
||||
if (BooleanUtil.isTrue(req.getDeletedOnly())) {
|
||||
wrapper.ne("is_delete", 0);
|
||||
}
|
||||
if (!BooleanUtil.isTrue(req.getIncludeDeleted())) {
|
||||
wrapper.eq("is_delete", 0);
|
||||
}
|
||||
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())) {
|
||||
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)
|
||||
.build()).stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity()));
|
||||
|
||||
records.forEach(r -> r.setNode(nodesById.get(r.getOrganizationalNodeId())));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -9,9 +9,10 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @description 岗位分组表
|
||||
@ -20,7 +21,8 @@ import lombok.NoArgsConstructor;
|
||||
* @date 2024/9/9
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName(value = "org_job_group", autoResultMap = true)
|
||||
|
||||
@ -4,11 +4,13 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @description 岗位与分组的关系表
|
||||
@ -17,11 +19,12 @@ import lombok.NoArgsConstructor;
|
||||
* @date 2024/9/9
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName(value = "org_job_group_relation", autoResultMap = true)
|
||||
public class OrgJobGroupRelation {
|
||||
public class OrgJobGroupRelation implements Serializable {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
|
||||
@ -9,9 +9,10 @@ import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @description 岗位与分组的关系历史表
|
||||
@ -20,7 +21,8 @@ import lombok.NoArgsConstructor;
|
||||
* @date 2024/9/9
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName(value = "org_job_group_relation_history", autoResultMap = true)
|
||||
|
||||
@ -10,9 +10,10 @@ import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @description 岗位变更历史表
|
||||
@ -21,7 +22,8 @@ import lombok.NoArgsConstructor;
|
||||
* @date 2024/9/9
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@TableName(value = "org_job_history", autoResultMap = true)
|
||||
|
||||
@ -29,15 +29,17 @@ public interface OrgJobGroupRelationRepository {
|
||||
/**
|
||||
* 分组id集合
|
||||
*/
|
||||
@CriteriaField(field = "id", operator = Operator.IN)
|
||||
@CriteriaField(ignore = true)
|
||||
private Collection<Long> groupIds;
|
||||
/**
|
||||
* 岗位分组编码集合
|
||||
*/
|
||||
@CriteriaField(field = "group_code", operator = Operator.IN)
|
||||
private Collection<String> groupCodes;
|
||||
/**
|
||||
* 岗位编码集合
|
||||
*/
|
||||
@CriteriaField(field = "job_code", operator = Operator.IN)
|
||||
private Collection<String> jobCodes;
|
||||
|
||||
public boolean isInvalid() {
|
||||
|
||||
@ -16,6 +16,17 @@ 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 {
|
||||
|
||||
|
||||
@ -23,6 +34,7 @@ public interface OrgJobQueryRepository {
|
||||
|
||||
/**
|
||||
* 列表查询
|
||||
*
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@ -50,6 +62,8 @@ public interface OrgJobQueryRepository {
|
||||
|
||||
@CriteriaField(field = "code", operator = Operator.IN)
|
||||
private Collection<String> codes;
|
||||
@CriteriaField
|
||||
private String code;
|
||||
|
||||
/**
|
||||
* 岗位类型
|
||||
@ -63,6 +77,9 @@ public interface OrgJobQueryRepository {
|
||||
*/
|
||||
@CriteriaField(ignore = true)
|
||||
private String keyword;
|
||||
@CriteriaField(field = "name", operator = Operator.LIKE)
|
||||
private String nameLike;
|
||||
|
||||
}
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
|
||||
@ -1,14 +1,11 @@
|
||||
package cn.axzo.orgmanax.infra.dao.orgjob.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.infra.dao.orgjob.dao.OrgJobGroupRelationDao;
|
||||
import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJobGroupRelation;
|
||||
import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobGroupRelationRepository;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -26,9 +23,11 @@ public class OrgJobGroupRelationRepositoryImpl implements OrgJobGroupRelationRep
|
||||
@Override
|
||||
public PageResp<OrgJobGroupRelation> page(PageReq req) {
|
||||
IPage<OrgJobGroupRelation> page = PageConverter.toMybatis(req, OrgJobGroupRelation.class);
|
||||
QueryWrapper<OrgJobGroupRelation> wrapper = QueryWrapperHelper.fromBean(req, OrgJobGroupRelation.class);
|
||||
IPage<OrgJobGroupRelation> results = orgJobGroupRelationDao.page(page, wrapper)
|
||||
.convert(e -> BeanUtil.toBean(e, OrgJobGroupRelation.class));
|
||||
IPage<OrgJobGroupRelation> results = orgJobGroupRelationDao.lambdaQuery()
|
||||
.in(CollUtil.isNotEmpty(req.getGroupCodes()), OrgJobGroupRelation::getGroupCode, req.getGroupCodes())
|
||||
.in(CollUtil.isNotEmpty(req.getJobCodes()), OrgJobGroupRelation::getJobCode, req.getJobCodes())
|
||||
.eq(OrgJobGroupRelation::getIsDelete, 0L)
|
||||
.page(page);
|
||||
PageResp<OrgJobGroupRelation> resp = PageConverter.toResp(results);
|
||||
List<OrgJobGroupRelation> records = resp.getData();
|
||||
if (CollUtil.isEmpty(records)) {
|
||||
|
||||
@ -1,14 +1,11 @@
|
||||
package cn.axzo.orgmanax.infra.dao.orgjob.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.infra.dao.orgjob.dao.OrgJobGroupDao;
|
||||
import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJobGroup;
|
||||
import cn.axzo.orgmanax.infra.dao.orgjob.repository.OrgJobGroupRepository;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -27,9 +24,12 @@ public class OrgJobGroupRepositoryImpl implements OrgJobGroupRepository {
|
||||
@Override
|
||||
public PageResp<OrgJobGroup> page(PageReq req) {
|
||||
IPage<OrgJobGroup> page = PageConverter.toMybatis(req, OrgJobGroup.class);
|
||||
QueryWrapper<OrgJobGroup> wrapper = QueryWrapperHelper.fromBean(req, OrgJobGroup.class);
|
||||
IPage<OrgJobGroup> results = orgJobGroupDao.page(page, wrapper)
|
||||
.convert(e -> BeanUtil.toBean(e, OrgJobGroup.class));
|
||||
IPage<OrgJobGroup> results = orgJobGroupDao.lambdaQuery()
|
||||
.in(CollUtil.isNotEmpty(req.getOrgJobGroupFlags()), OrgJobGroup::getFlag, req.getOrgJobGroupFlags())
|
||||
.in(CollUtil.isNotEmpty(req.getGroupCodes()), OrgJobGroup::getCode, req.getGroupCodes())
|
||||
.in(CollUtil.isNotEmpty(req.getGroupIds()), OrgJobGroup::getId, req.getGroupIds())
|
||||
.eq(OrgJobGroup::getIsDelete, 0L)
|
||||
.page(page);
|
||||
PageResp<OrgJobGroup> resp = PageConverter.toResp(results);
|
||||
List<OrgJobGroup> records = resp.getData();
|
||||
if (CollUtil.isEmpty(records)) {
|
||||
|
||||
@ -166,6 +166,7 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
resultNodeList.addAll(ancestorShipNodes);
|
||||
}
|
||||
|
||||
|
||||
// 是否查询父级节点
|
||||
if (BooleanUtil.isTrue(req.getIncludeAncestors())) {
|
||||
Set<Long> ancestorIds = cooperateShipFoundationService.extractAncestorIds(currentNodeList);
|
||||
|
||||
@ -97,7 +97,7 @@ public class NodeServiceImpl implements NodeService {
|
||||
// 获取部门用户信息, 若获取不到直接返回
|
||||
if (Objects.nonNull(req.getPersonId())) {
|
||||
List<NodeUserQueryRepository.NodeUserResp> nodeUsers = nodeUserQueryRepository.list(ListNodeUserReq
|
||||
.builder().build());
|
||||
.builder().personId(req.getPersonId()).build());
|
||||
if (CollUtil.isEmpty(nodeUsers)) {
|
||||
return emptyPageResp;
|
||||
}
|
||||
|
||||
@ -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())));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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)));
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user