From 31aa1b00a77d285097e4a8fea8a915b20f882afa Mon Sep 17 00:00:00 2001 From: zhanghongbo Date: Wed, 25 Dec 2024 14:35:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-3282):=20=E6=96=B0=E5=A2=9E=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E7=94=A8=E6=88=B7=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/nodeuser/feign/OrgNodeUserApi.java | 12 +++ orgmanax-dto/pom.xml | 4 + .../nodeuser/req/SearchEntNodeUserReq.java | 48 ++++++++++++ .../nodeuser/resp/SearchEntNodeUserResp.java | 45 +++++++++++ .../mapper/OrganizationalNodeUserMapper.java | 6 ++ .../mapper/OrganizationalNodeUserMapper.xml | 74 +++++++++++++++++++ .../controller/NodeUserController.java | 9 +++ .../foundation/NodeUserFoundationService.java | 9 +++ .../impl/NodeUserFoundationServiceImpl.java | 18 ++++- .../nodeuser/service/NodeUserService.java | 4 + .../service/impl/NodeUserServiceImpl.java | 11 +++ 11 files changed, 237 insertions(+), 3 deletions(-) create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/req/SearchEntNodeUserReq.java create mode 100644 orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/resp/SearchEntNodeUserResp.java create mode 100644 orgmanax-infra/src/main/resources/mapper/OrganizationalNodeUserMapper.xml diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/feign/OrgNodeUserApi.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/feign/OrgNodeUserApi.java index fa98958..6104b89 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/feign/OrgNodeUserApi.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/nodeuser/feign/OrgNodeUserApi.java @@ -5,12 +5,16 @@ import cn.axzo.foundation.result.ApiResult; 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.dto.nodeuser.req.SearchEntNodeUserReq; +import cn.axzo.orgmanax.dto.nodeuser.resp.SearchEntNodeUserResp; import com.alibaba.fastjson.JSONObject; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import java.util.List; + /** * 部门相关基础API * @@ -42,4 +46,12 @@ public interface OrgNodeUserApi { @PostMapping("/api/node-user/list") ApiResult> list(@RequestBody @Validated ListNodeUserReq req); + /** + * 根据条件聚合查询节点用户 + * @param req + * @return + */ + @PostMapping("/api/node-user/searchEntUser") + ApiResult> searchEntUser(@RequestBody @Validated SearchEntNodeUserReq req); + } diff --git a/orgmanax-dto/pom.xml b/orgmanax-dto/pom.xml index bcb70b5..22caeac 100644 --- a/orgmanax-dto/pom.xml +++ b/orgmanax-dto/pom.xml @@ -36,6 +36,10 @@ org.hibernate.validator hibernate-validator + + cn.axzo.trade + trade-data-security-core + \ No newline at end of file diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/req/SearchEntNodeUserReq.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/req/SearchEntNodeUserReq.java new file mode 100644 index 0000000..60f197c --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/req/SearchEntNodeUserReq.java @@ -0,0 +1,48 @@ +package cn.axzo.orgmanax.dto.nodeuser.req; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.util.Set; + +/** + * @author zhanghongbo + * @date 2024/12/24 + */ +@NoArgsConstructor +@AllArgsConstructor +@Data +@Builder +public class SearchEntNodeUserReq { + private Long workspaceId; + + /** 企业组织节点ID - 不一定是topNodeId **/ + @NotNull + private Long entNodeId; + /** 搜索关键字 - 为空直接返空 **/ + private String keyword; + + /** 加密关键字 **/ + private String encryptKeyword; + /** 隐私设置排除的人员 **/ + private Set excludePersonIds; + /** 隐私设置排除的部门 **/ + private Set excludeNodeIds; + + /** + * 数据权限缓存数据key + */ + private String dataPermissionCacheKey; + + /** + * 数据权限解析后的节点ID(不作接口的查询条件) + */ + private Set dataPermissionNodeIds; + /** + * 数据权限解析后的人员ID(不作接口的查询条件) + */ + private Set dataPermissionPersonIds; +} diff --git a/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/resp/SearchEntNodeUserResp.java b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/resp/SearchEntNodeUserResp.java new file mode 100644 index 0000000..ba39126 --- /dev/null +++ b/orgmanax-dto/src/main/java/cn/axzo/orgmanax/dto/nodeuser/resp/SearchEntNodeUserResp.java @@ -0,0 +1,45 @@ +package cn.axzo.orgmanax.dto.nodeuser.resp; + +import cn.axzo.trade.datasecurity.core.annotation.CryptField; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 通讯录用户搜索结果 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2024/1/18 17:44 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SearchEntNodeUserResp { + + private Long nodeUserId; + + private Long personId; + + private Long identityId; + + private Integer identityType; + + private String realName; + + @CryptField + private String phone; + + private Long orgNodeId; + + private String orgNodeName; + + private Long jobId; + + private String jobName; + + private boolean primaryJob; + +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/mapper/OrganizationalNodeUserMapper.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/mapper/OrganizationalNodeUserMapper.java index d6d88b7..9b0d78d 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/mapper/OrganizationalNodeUserMapper.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/nodeuser/mapper/OrganizationalNodeUserMapper.java @@ -1,12 +1,18 @@ package cn.axzo.orgmanax.infra.dao.nodeuser.mapper; +import cn.axzo.orgmanax.dto.nodeuser.req.SearchEntNodeUserReq; +import cn.axzo.orgmanax.dto.nodeuser.resp.SearchEntNodeUserResp; import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @author liuyang */ @Mapper public interface OrganizationalNodeUserMapper extends BaseMapper { + List searchEntUser(@Param("query") SearchEntNodeUserReq req); } diff --git a/orgmanax-infra/src/main/resources/mapper/OrganizationalNodeUserMapper.xml b/orgmanax-infra/src/main/resources/mapper/OrganizationalNodeUserMapper.xml new file mode 100644 index 0000000..6889099 --- /dev/null +++ b/orgmanax-infra/src/main/resources/mapper/OrganizationalNodeUserMapper.xml @@ -0,0 +1,74 @@ + + + + + + + \ No newline at end of file diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/controller/NodeUserController.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/controller/NodeUserController.java index 8e884b8..07741cb 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/controller/NodeUserController.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/controller/NodeUserController.java @@ -7,6 +7,8 @@ import cn.axzo.orgmanax.api.nodeuser.feign.OrgNodeUserApi; 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.dto.nodeuser.req.SearchEntNodeUserReq; +import cn.axzo.orgmanax.dto.nodeuser.resp.SearchEntNodeUserResp; import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService; import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor; import com.alibaba.fastjson.JSONObject; @@ -14,6 +16,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + import static cn.axzo.orgmanax.common.config.BizResultCode.NODE_USER_PROCESS_FAILED; /** @@ -46,4 +50,9 @@ public class NodeUserController implements OrgNodeUserApi { public ApiResult> list(ListNodeUserReq req) { return ApiResult.success(nodeUserService.page(req)); } + + @Override + public ApiResult> searchEntUser(SearchEntNodeUserReq req) { + return ApiResult.success(nodeUserService.searchEntUser(req)); + } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/foundation/NodeUserFoundationService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/foundation/NodeUserFoundationService.java index c58bdc2..8f23c91 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/foundation/NodeUserFoundationService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/foundation/NodeUserFoundationService.java @@ -1,6 +1,8 @@ package cn.axzo.orgmanax.server.nodeuser.foundation; import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO; +import cn.axzo.orgmanax.dto.nodeuser.req.SearchEntNodeUserReq; +import cn.axzo.orgmanax.dto.nodeuser.resp.SearchEntNodeUserResp; import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser; import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository; import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJob; @@ -35,4 +37,11 @@ public interface NodeUserFoundationService { * @param orgJobs */ void filterByJobs(List nodeUsers, List orgJobs); + + /** + * 根据条件聚合查询节点用户 + * @param req + * @return + */ + List searchEntUser(SearchEntNodeUserReq req); } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/foundation/impl/NodeUserFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/foundation/impl/NodeUserFoundationServiceImpl.java index c0c99e2..5aa6d98 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/foundation/impl/NodeUserFoundationServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/foundation/impl/NodeUserFoundationServiceImpl.java @@ -4,8 +4,9 @@ import cn.axzo.foundation.event.support.Event; import cn.axzo.foundation.event.support.producer.EventProducer; import cn.axzo.foundation.exception.Axssert; import cn.axzo.orgmanax.common.config.BizResultCode; -import cn.axzo.orgmanax.dto.nodeuser.dto.NodeUserDTO; import cn.axzo.orgmanax.dto.nodeuser.enums.NodeUserTypeEnum; +import cn.axzo.orgmanax.dto.nodeuser.req.SearchEntNodeUserReq; +import cn.axzo.orgmanax.dto.nodeuser.resp.SearchEntNodeUserResp; import cn.axzo.orgmanax.infra.client.profile.PersonProfileGateway; import cn.axzo.orgmanax.infra.client.profile.dto.ProfileIdentityResp; import cn.axzo.orgmanax.infra.client.profile.dto.ProfilePersonResp; @@ -14,6 +15,7 @@ import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRep import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser; +import cn.axzo.orgmanax.infra.dao.nodeuser.mapper.OrganizationalNodeUserMapper; import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository; import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserUpsertRepository; import cn.axzo.orgmanax.infra.dao.orgjob.entity.OrgJob; @@ -28,11 +30,9 @@ import cn.hutool.core.util.BooleanUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; /** * @author tanjie@axzo.cn @@ -48,6 +48,8 @@ public class NodeUserFoundationServiceImpl implements NodeUserFoundationService private final CooperateShipQueryRepository cooperateShipQueryRepository; private final EventProducer eventProducer; private final PersonProfileGateway profileGateway; + private final OrganizationalNodeUserMapper organizationalNodeUserMapper; + /** * 创建部门标准接口 @@ -142,6 +144,16 @@ public class NodeUserFoundationServiceImpl implements NodeUserFoundationService nodeUsers.removeIf(e -> !jobIds.contains(e.getOrganizationalJobId())); } + /** + * 根据条件聚合查询节点用户 + * @param req + * @return + */ + @Override + public List searchEntUser(SearchEntNodeUserReq req) { + return organizationalNodeUserMapper.searchEntUser(req); + } + private Long resolveWorkspaceId(OrganizationalNode node) { if (Objects.equals(node.getNodeType(), NodeUserTypeEnum.TEAM.getValue())) { return 0L; diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/NodeUserService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/NodeUserService.java index e3b73ea..49dfeb8 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/NodeUserService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/NodeUserService.java @@ -7,6 +7,8 @@ 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.nodeuser.req.SearchEntNodeUserReq; +import cn.axzo.orgmanax.dto.nodeuser.resp.SearchEntNodeUserResp; import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; @@ -26,6 +28,8 @@ public interface NodeUserService { return page(req).getData(); } + List searchEntUser(SearchEntNodeUserReq req); + @NoArgsConstructor @AllArgsConstructor @Data diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/impl/NodeUserServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/impl/NodeUserServiceImpl.java index fd31a14..5542958 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/impl/NodeUserServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/nodeuser/service/impl/NodeUserServiceImpl.java @@ -9,10 +9,13 @@ 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.req.SearchEntNodeUserReq; +import cn.axzo.orgmanax.dto.nodeuser.resp.SearchEntNodeUserResp; 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.foundation.NodeUserFoundationService; 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; @@ -49,6 +52,9 @@ public class NodeUserServiceImpl implements NodeUserService { @Autowired private UnitService unitService; private final ApplicationContext applicationContext; + private final NodeUserFoundationService nodeUserFoundationService; + + @Override public NodeUserProcessor.ProcessResult process(ProcessNodeUserReq req) { @@ -102,6 +108,11 @@ public class NodeUserServiceImpl implements NodeUserService { return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records); } + @Override + public List searchEntUser(SearchEntNodeUserReq req) { + return nodeUserFoundationService.searchEntUser(req); + } + private void assembleUnit(ListNodeUserReq req, List records) { if (CollUtil.isEmpty(records) || req.getNeeds() == null) {