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

# Conflicts:
#	orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/orgjob/repository/OrgJobQueryRepository.java
This commit is contained in:
liuyang 2024-12-23 16:25:15 +08:00
commit dfc0b93b93
16 changed files with 407 additions and 64 deletions

View File

@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -12,7 +13,7 @@ import java.util.Date;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Data @Data
@Builder @SuperBuilder
public class OrgNodeDTO implements Serializable { public class OrgNodeDTO implements Serializable {
protected Long id; protected Long id;

View File

@ -4,7 +4,7 @@ import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult; import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq;
import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO; import cn.axzo.orgmanax.api.nodeuser.resp.NodeUserDTO;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -40,6 +40,6 @@ public interface OrgNodeUserApi {
* @see ListNodeUserReq#getPageSize() * @see ListNodeUserReq#getPageSize()
*/ */
@PostMapping("/api/node-user/list") @PostMapping("/api/node-user/list")
ApiResult<PageResp<OrgNodeUserDTO>> list(@RequestBody @Validated ListNodeUserReq req); ApiResult<PageResp<NodeUserDTO>> list(@RequestBody @Validated ListNodeUserReq req);
} }

View File

@ -0,0 +1,45 @@
package cn.axzo.orgmanax.api.nodeuser.req;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.ObjectUtils;
import java.io.Serializable;
import java.util.Collection;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class DistinctRule implements Serializable {
/**
* 如果指定了该值根据distinctKeys做去重处理
*/
private Collection<String> distinctByFields;
/**
* 合并规则1 = 保留第一个2 = 保留最后一个默认为2
*
* @see MergeType
*/
private Integer mergeType;
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum MergeType {
FIRST(1, "保留第一个"), LAST(2, "保留最后一个");
private final Integer value;
private final String desc;
}
public Integer getMergeType() {
// 不指定取最后一个
return ObjectUtils.firstNonNull(mergeType, MergeType.LAST.getValue());
}
}

View File

@ -0,0 +1,15 @@
package cn.axzo.orgmanax.api.nodeuser.req;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
public class IdentityPair {
private Long identityId;
private Integer identityType;
}

View File

@ -3,11 +3,15 @@ package cn.axzo.orgmanax.api.nodeuser.req;
import cn.axzo.foundation.dao.support.wrapper.CriteriaField; import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
import cn.axzo.foundation.dao.support.wrapper.Operator; import cn.axzo.foundation.dao.support.wrapper.Operator;
import cn.axzo.foundation.page.PageReqV2; import cn.axzo.foundation.page.PageReqV2;
import lombok.*; import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
import java.util.Collection;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Set;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@NoArgsConstructor @NoArgsConstructor
@ -18,8 +22,10 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField @CriteriaField
private Long id; private Long id;
@CriteriaField(field = "id", operator = Operator.GT)
private Long idGt;
@CriteriaField(field = "id", operator = Operator.IN) @CriteriaField(field = "id", operator = Operator.IN)
private Set<Long> ids; private Collection<Long> ids;
/** /**
* identity_id * identity_id
@ -27,7 +33,7 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField @CriteriaField
private Long identityId; private Long identityId;
@CriteriaField(field = "identityId", operator = Operator.IN) @CriteriaField(field = "identityId", operator = Operator.IN)
private Set<Long> identityIds; private Collection<Long> identityIds;
/** /**
* 身份类型 0-无效类型, 1-工人, 2-班组长, 3-从业人员, 4-政务人员5-运营人员 * 身份类型 0-无效类型, 1-工人, 2-班组长, 3-从业人员, 4-政务人员5-运营人员
@ -35,7 +41,7 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField @CriteriaField
private Integer identityType; private Integer identityType;
@CriteriaField(field = "identityType", operator = Operator.IN) @CriteriaField(field = "identityType", operator = Operator.IN)
private Set<Integer> identityTypes; private Collection<Integer> identityTypes;
/** /**
* 自然人id * 自然人id
@ -43,13 +49,17 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField @CriteriaField
private Long personId; private Long personId;
@CriteriaField(field = "personId", operator = Operator.IN) @CriteriaField(field = "personId", operator = Operator.IN)
private Set<Long> personIds; private Collection<Long> personIds;
@CriteriaField(field = "personId", operator = Operator.NOT_IN)
private Collection<Long> excludePersonIds;
/** /**
* 主电话 * 主电话
*/ */
@CriteriaField @CriteriaField
private String phone; private String phone;
@CriteriaField(field = "phone", operator = Operator.NOT_IN)
private Collection<String> phones;
/** /**
* 名字 * 名字
@ -65,7 +75,7 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField @CriteriaField
private String idNumber; private String idNumber;
@CriteriaField(field = "idNumber", operator = Operator.IN) @CriteriaField(field = "idNumber", operator = Operator.IN)
private Set<String> idNumbers; private Collection<String> idNumbers;
/** /**
* 单位id * 单位id
@ -73,7 +83,7 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField @CriteriaField
private Long organizationalUnitId; private Long organizationalUnitId;
@CriteriaField(field = "organizationalUnitId", operator = Operator.IN) @CriteriaField(field = "organizationalUnitId", operator = Operator.IN)
private Set<Long> organizationalUnitIds; private Collection<Long> organizationalUnitIds;
/** /**
* 组织节点id * 组织节点id
@ -81,7 +91,9 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField @CriteriaField
private Long organizationalNodeId; private Long organizationalNodeId;
@CriteriaField(field = "organizationalNodeId", operator = Operator.IN) @CriteriaField(field = "organizationalNodeId", operator = Operator.IN)
private Set<Long> organizationalNodeIds; private Collection<Long> organizationalNodeIds;
@CriteriaField(field = "organizationalNodeId", operator = Operator.NOT_IN)
private Collection<Long> excludeOrganizationalNodeIds;
/** /**
* 顶级节点id * 顶级节点id
@ -89,7 +101,9 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField @CriteriaField
private Long topNodeId; private Long topNodeId;
@CriteriaField(field = "topNodeId", operator = Operator.IN) @CriteriaField(field = "topNodeId", operator = Operator.IN)
private Set<Long> topNodeIds; private Collection<Long> topNodeIds;
@CriteriaField(field = "topNodeId", operator = Operator.GT)
private Long topNodeIdGt;
/** /**
* 部门管理员 1是 0否 * 部门管理员 1是 0否
@ -103,7 +117,7 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField @CriteriaField
private Long organizationalJobId; private Long organizationalJobId;
@CriteriaField(field = "organizationalJobId", operator = Operator.IN) @CriteriaField(field = "organizationalJobId", operator = Operator.IN)
private Set<Long> organizationalJobIds; private Collection<Long> organizationalJobIds;
/** /**
* 工作台ID * 工作台ID
@ -111,7 +125,7 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField @CriteriaField
private Long workspaceId; private Long workspaceId;
@CriteriaField(field = "workspaceId", operator = Operator.IN) @CriteriaField(field = "workspaceId", operator = Operator.IN)
private Long workspaceIds; private Collection<Long> workspaceIds;
/** /**
* 0:普通岗位1:主岗位 * 0:普通岗位1:主岗位
@ -136,6 +150,8 @@ public class ListNodeUserReq extends PageReqV2 {
*/ */
@CriteriaField @CriteriaField
private Long syncDataId; private Long syncDataId;
@CriteriaField(field = "syncDataId", operator = Operator.IN)
private List<Long> syncDataIds;
/** /**
* 工号 * 工号
@ -146,18 +162,200 @@ public class ListNodeUserReq extends PageReqV2 {
@CriteriaField @CriteriaField
private Integer activeFlag; 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直接可查询的字段
/**
* leaderPersonId. 根据personId=leaderPersonId and manager = true查询node然后查询整个node下面的人
*/
@CriteriaField(ignore = true) // TODO: 待实现
private Long leaderPersonId;
/**
* 下属personId根据personId=subordinatePersonId查询到node然后返回node的manager
*/
@CriteriaField(ignore = true) @CriteriaField(ignore = true)
private Boolean needNode; private Long subordinatePersonId; // TODO: 待实现
// 岗位code
@CriteriaField(ignore = true)
private String organizationalJobCode; // TODO: 待实现
@CriteriaField(ignore = true) @CriteriaField(ignore = true)
@Builder.Default private Collection<String> organizationalJobCodes; // TODO: 待实现
Integer page = 1; @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: 待实现
/** /**
* 最大支持1000条数据不支持单页超过1000的查询接入方按需分页 * 查询返回数据包含逻辑删除数据即查询未删除和已删除的数据
*/ */
@Builder.Default
@CriteriaField(ignore = true) @CriteriaField(ignore = true)
Integer pageSize = 1000; private Boolean includeDeleted; // TODO: 待实现
/**
* 仅查询已删除的数据
*/
@CriteriaField(ignore = true) @CriteriaField(ignore = true)
List<String> sort; private Boolean deletedOnly; // TODO: 待实现
@CriteriaField(ignore = true)
private Integer nodeState; // TODO: 待实现
// ~ 后置过滤的字段
/**
* 包含的单位类型
*/
private Collection<Integer> filterIncludeUnitTypes; // TODO: 待实现
/**
* 排除的单位类型
*/
private Collection<Integer> filterExcludeUnitTypes; // TODO: 待实现
private Integer filterIncludeWorkspaceType; // TODO: 待实现
/**
* 包含的协作类型
*/
private Integer filterIncludeCooperateType; // TODO: 待实现
private Collection<Integer> filterIncludeCooperateTypes; // TODO: 待实现
private Collection<Integer> filterExcludeCooperateTypes; // TODO: 待实现
/**
* 是否只返回顶级节点
*/
private Boolean filterTopNodeOnly; // TODO: 待实现
/**
* 返回directManager不为空的
*/
private Boolean filterDirectManagerNotNull; // TODO: 待实现
/**
* 数据权限
*/
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
/**
* 根据顶级节点查人指定该值为true了会根据nodeUser查询topNodeId然后根据topNodeId进一步查询人员
* nodeUser.topNodeId 作为参数之前的nodeId参数不再使用
*/
private Boolean findByTopNodeId; // TODO: 待实现
/**
* 去重规则如果指定该值会按照去重规则进行去重
* 使用该参数会影响分页准确性不建议分页时使用先查询分页数据再去重
*/
private DistinctRule distinctRule; // TODO: 待实现
// 指定聚合信息
/**
* 聚合信息needs
*/
@CriteriaField(ignore = true)
private Needs needs;
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
public static class Needs {
// ~ 指定聚合返回字段
/**
* 是否返回单位信息
*/
private Boolean unit;
/**
* 是否返回部门信息
*/
private Boolean node;
/**
* 返回node and path
*/
private Boolean nodeAndPath;
/**
* 返回参与项目数量
*/
private Boolean projectOrgCnt;
/**
* 是否返回岗位信息
*/
private Boolean job;
/**
* 是否岗位组信息对应返回字段里面的organizationalJobWorkspaceType
*/
private Boolean jobGroup;
/**
* 是否查询下级组织人员所在节点的下级节点的
*/
private Boolean childNodeUser;
/**
* 是否查询下属directManagerPersonId等于自己的
*/
private Boolean subordinate;
/**
* 是否需要角色信息
*/
private Boolean role;
/**
* 是否需要部门及父级部门信息默认不返回
*/
private Boolean ancestorNode;
private Boolean cooperateShip;
private Boolean personProfile;
}
} }

View File

@ -1,11 +1,13 @@
package cn.axzo.orgmanax.api.nodeuser.resp; package cn.axzo.orgmanax.api.nodeuser.resp;
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO; import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
import cn.axzo.orgmanax.api.orgjob.resp.OrgJobDTO;
import cn.axzo.orgmanax.api.unit.resp.OrgUnitDTO;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@ -13,8 +15,8 @@ import java.util.Date;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Data @Data
@Builder @SuperBuilder
public class OrgNodeUserDTO implements Serializable { public class NodeUserDTO implements Serializable {
private Long id; private Long id;
@ -138,6 +140,13 @@ public class OrgNodeUserDTO implements Serializable {
*/ */
private Integer activeFlag; private Integer activeFlag;
/**
* 部门人员信息json不同部门类型的部门用户格式不一
*/
private JSONObject profile;
// ~ 聚合信息 // ~ 聚合信息
private OrgNodeDTO node; private OrgNodeDTO node;
private OrgUnitDTO unit;
private OrgJobDTO job;
} }

View File

@ -2,12 +2,8 @@ package cn.axzo.orgmanax.api.orguser.feign;
import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult; import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq;
import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO;
import cn.axzo.orgmanax.api.orguser.req.ListOrgUserReq; import cn.axzo.orgmanax.api.orguser.req.ListOrgUserReq;
import cn.axzo.orgmanax.api.orguser.resp.OrgUserDTO; import cn.axzo.orgmanax.api.orguser.resp.OrgUserDTO;
import com.alibaba.fastjson.JSONObject;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;

View File

@ -9,6 +9,13 @@ import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionListTeamCa
import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionListTeamCategoryTreeByCodesReq; import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionListTeamCategoryTreeByCodesReq;
import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionProfessionResp; import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionProfessionResp;
import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionTeamCategoryResp; import cn.axzo.orgmanax.infra.client.datacollection.dto.DataCollectionTeamCategoryResp;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -71,12 +78,26 @@ public interface DataCollectionDictInfoClient {
List<DataCollectionListSkillLabelByCodesResp> listSkillLabelByCodes(List<String> codes); List<DataCollectionListSkillLabelByCodesResp> listSkillLabelByCodes(List<String> codes);
public static void main(String[] args) { public static void main(String[] args) {
Stream.of("one", "two", "three", "four")
.filter(e -> e.length() > 3) ImmutableList<ImmutableMap<String, String>> immutableMaps = ImmutableList.of(
.peek(e -> System.out.println("Filtered value: " + e)) ImmutableMap.of("amt", "1", "tot", "13"),
.map(String::toUpperCase) ImmutableMap.of("amt", "2", "tot", "23"),
.peek(e -> System.out.println("Mapped value: " + e)) ImmutableMap.of("amt", "3", "tot", "33"),
.collect(Collectors.toList()); ImmutableMap.of("amt", "4", "tot", "43")
);
List<Amtot> amtots = JSON.parseArray(JSON.toJSONString(immutableMaps), Amtot.class);
System.out.println(JSON.toJSONString(amtots));
}
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
class Amtot{
private String amt;
private String tot;
} }
} }

View File

@ -4,6 +4,8 @@ import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser; import cn.axzo.orgmanax.infra.dao.nodeuser.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.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
@ -57,11 +59,25 @@ public interface NodeUserQueryRepository {
@SuperBuilder @SuperBuilder
class NodeUserResp extends OrganizationalNodeUser { class NodeUserResp extends OrganizationalNodeUser {
/** /**
* 查询参数指定 needNode = true才会返回 * 查询参数指定 needs.node = true才会返回
* *
* @see ListNodeUserReq#getNeedNode() * @see ListNodeUserReq.Needs#getNode()
*/ */
private NodeQueryRepository.NodeResp nodeResp; 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;
} }
} }

View File

@ -9,6 +9,8 @@ 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.dao.NodeUserDao;
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser; import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository; 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.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.BooleanUtil;
@ -31,11 +33,15 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository {
private final NodeUserDao nodeUserDao; private final NodeUserDao nodeUserDao;
private final NodeQueryRepository nodeQueryRepository; private final NodeQueryRepository nodeQueryRepository;
private final OrgJobQueryRepository jobQueryRepository;
private final UnitQueryRepository unitQueryRepository;
@Override @Override
public PageResp<NodeUserResp> page(ListNodeUserReq req) { public PageResp<NodeUserResp> page(ListNodeUserReq req) {
IPage<OrganizationalNodeUser> page = PageConverter.toMybatis(req, OrganizationalNodeUser.class); IPage<OrganizationalNodeUser> page = PageConverter.toMybatis(req, OrganizationalNodeUser.class);
QueryWrapper<OrganizationalNodeUser> wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNodeUser.class); QueryWrapper<OrganizationalNodeUser> wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNodeUser.class);
// 查询参数过滤
IPage<NodeUserResp> results = nodeUserDao.page(page, wrapper) IPage<NodeUserResp> results = nodeUserDao.page(page, wrapper)
.convert(e -> BeanUtil.toBean(e, NodeUserResp.class)); .convert(e -> BeanUtil.toBean(e, NodeUserResp.class));
PageResp<NodeUserResp> resp = PageConverter.toResp(results); PageResp<NodeUserResp> resp = PageConverter.toResp(results);
@ -44,16 +50,47 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository {
return resp; return resp;
} }
// assemble node // assembles
assembleNode(req, records); assembleNode(req, records);
assembleJob(req, records);
assembleUnit(req, records);
return resp; return resp;
} }
private void assembleNode(ListNodeUserReq req, List<NodeUserResp> records) { private void assembleUnit(ListNodeUserReq req, List<NodeUserResp> records) {
if (CollUtil.isEmpty(records)) { if (CollUtil.isEmpty(records) || req.getNeeds() == null) {
return; return;
} }
if (!BooleanUtil.isTrue(req.getNeedNode())) { 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; return;
} }
Set<Long> nodeIds = records.stream().map(NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet()); Set<Long> nodeIds = records.stream().map(NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet());
@ -62,7 +99,7 @@ public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository {
.ids(nodeIds) .ids(nodeIds)
.build()).stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity())); .build()).stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity()));
records.forEach(r -> r.setNodeResp(nodesById.get(r.getOrganizationalNodeId()))); records.forEach(r -> r.setNode(nodesById.get(r.getOrganizationalNodeId())));
} }
} }

View File

@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*; import lombok.*;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import lombok.experimental.SuperBuilder;
import java.io.Serializable; import java.io.Serializable;
@ -23,7 +24,7 @@ import java.io.Serializable;
@Accessors(chain = true) @Accessors(chain = true)
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @SuperBuilder
@ToString(callSuper = true) @ToString(callSuper = true)
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class OrgJob implements Serializable { public class OrgJob implements Serializable {

View File

@ -18,14 +18,12 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.Collection;
public interface OrgJobQueryRepository { public interface OrgJobQueryRepository {
/**
* 分页查询 PageResp<JobResp> page(ListReq req);
* @param req
* @return
*/
PageResp<OrgJob> page(ListReq req);
/** /**
* 列表查询 * 列表查询
@ -33,7 +31,7 @@ public interface OrgJobQueryRepository {
* @return * @return
*/ */
default List<OrgJob> list(ListReq req) { default List<OrgJob> list(ListReq req) {
PageResp<OrgJob> page = page(req); PageResp<JobResp> page = page(req);
if (page == null) { if (page == null) {
return Collections.emptyList(); return Collections.emptyList();
} }
@ -59,5 +57,13 @@ public interface OrgJobQueryRepository {
} }
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Data
@SuperBuilder
class JobResp extends OrgJob {
private String other;
}
} }

View File

@ -6,7 +6,7 @@ import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.api.nodeuser.feign.OrgNodeUserApi; import cn.axzo.orgmanax.api.nodeuser.feign.OrgNodeUserApi;
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq;
import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO; import cn.axzo.orgmanax.api.nodeuser.resp.NodeUserDTO;
import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService; import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService;
import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor; import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@ -43,7 +43,7 @@ public class NodeUserController implements OrgNodeUserApi {
} }
@Override @Override
public ApiResult<PageResp<OrgNodeUserDTO>> list(ListNodeUserReq req) { public ApiResult<PageResp<NodeUserDTO>> list(ListNodeUserReq req) {
return ApiResult.success(nodeUserService.page(req)); return ApiResult.success(nodeUserService.page(req));
} }
} }

View File

@ -2,14 +2,11 @@ package cn.axzo.orgmanax.server.nodeuser.service;
import cn.axzo.foundation.exception.Axssert; import cn.axzo.foundation.exception.Axssert;
import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
import cn.axzo.orgmanax.api.node.req.ProcessNodeReq; import cn.axzo.orgmanax.api.node.req.ProcessNodeReq;
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq;
import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO; import cn.axzo.orgmanax.api.nodeuser.resp.NodeUserDTO;
import cn.axzo.orgmanax.common.config.BizResultCode; import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor; import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -23,9 +20,9 @@ public interface NodeUserService {
NodeUserProcessor.ProcessResult process(ProcessNodeUserReq req); NodeUserProcessor.ProcessResult process(ProcessNodeUserReq req);
PageResp<OrgNodeUserDTO> page(ListNodeUserReq req); PageResp<NodeUserDTO> page(ListNodeUserReq req);
default List<OrgNodeUserDTO> list(ListNodeUserReq req) { default List<NodeUserDTO> list(ListNodeUserReq req) {
return page(req).getData(); return page(req).getData();
} }

View File

@ -4,19 +4,19 @@ import cn.axzo.foundation.exception.Axssert;
import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.page.PageResp;
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq; import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq;
import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO; import cn.axzo.orgmanax.api.nodeuser.resp.NodeUserDTO;
import cn.axzo.orgmanax.common.config.BizResultCode; import cn.axzo.orgmanax.common.config.BizResultCode;
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository; import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService; import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService;
import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor; import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
@ -49,9 +49,9 @@ public class NodeUserServiceImpl implements NodeUserService {
} }
@Override @Override
public PageResp<OrgNodeUserDTO> page(ListNodeUserReq req) { public PageResp<NodeUserDTO> page(ListNodeUserReq req) {
PageResp<NodeUserQueryRepository.NodeUserResp> page = nodeUserQueryRepository.page(req); PageResp<NodeUserQueryRepository.NodeUserResp> page = nodeUserQueryRepository.page(req);
List<OrgNodeUserDTO> records = page.getData().stream().map(e -> BeanUtil.toBean(e, OrgNodeUserDTO.class)).collect(Collectors.toList()); List<NodeUserDTO> records = BeanUtil.copyToList(CollUtil.emptyIfNull(page.getData()), NodeUserDTO.class);
// assemble data if needed // assemble data if needed
return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records); return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records);
} }

View File

@ -19,7 +19,7 @@ public class DevApplication {
public static final String DEFAULT_DIR = "cn.axzo.orgmanax"; public static final String DEFAULT_DIR = "cn.axzo.orgmanax";
public static void main(String[] args) { public static void main(String[] args) {
// System.setProperty("rocket.consumer.listeners.disable", "true"); System.setProperty("rocket.consumer.listeners.disable", "true");
System.setProperty("spring.profiles.active","dev"); System.setProperty("spring.profiles.active","dev");
System.setProperty("NACOS_HOST","https://dev-nacos.axzo.cn"); System.setProperty("NACOS_HOST","https://dev-nacos.axzo.cn");
System.setProperty("NACOS_PORT","443"); System.setProperty("NACOS_PORT","443");
@ -32,6 +32,7 @@ public class DevApplication {
System.setProperty("spring.redis.password","!rHV2!fctYtV4vF"); System.setProperty("spring.redis.password","!rHV2!fctYtV4vF");
System.setProperty("xxl.job.admin.addresses","http://dev-xxl-job.axzo.cn/xxl-job-admin"); System.setProperty("xxl.job.admin.addresses","http://dev-xxl-job.axzo.cn/xxl-job-admin");
System.setProperty("rocketmq.name-server", "172.16.2.82:9876"); System.setProperty("rocketmq.name-server", "172.16.2.82:9876");
System.setProperty("logback.path", "/tmp");
SpringApplication application = new SpringApplication(DevApplication.class); SpringApplication application = new SpringApplication(DevApplication.class);
ConfigurableApplicationContext run = application.run(args); ConfigurableApplicationContext run = application.run(args);
Environment env = run.getEnvironment(); Environment env = run.getEnvironment();