From 34e89461bb5a9f2c5b1ee227ad495fbfa7783bfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E6=95=8F?= Date: Tue, 10 Dec 2024 15:31:34 +0800 Subject: [PATCH] =?UTF-8?q?feature(REQ-3282):=20=E8=B0=83=E6=95=B4api?= =?UTF-8?q?=E5=BC=95=E5=85=A5=E7=9A=84=E5=8C=85=E3=80=82=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?node=E7=9A=84=E9=83=A8=E5=88=86=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- orgmanax-api/pom.xml | 9 +- .../orgmanax/api/node/feign/OrgNodeApi.java | 20 +++- .../orgmanax/api/node/req/NodeListReq.java | 36 +++++++ ...rocessNodeReq.java => NodeProcessReq.java} | 48 ++------- .../orgmanax/api/node/resp/OrgNodeDTO.java | 100 ++++++++++++++++++ .../api/node/resp/ProcessOrgNodeResp.java | 76 ------------- .../orgmanax/api/unit/feign/OrgUnitApi.java | 8 +- .../infra/dao/node/DO/OrganizationalNode.java | 2 + .../node/repository/NodeQueryRepository.java | 15 ++- .../impl/NodeQueryRepositoryImpl.java | 46 +++++--- .../impl/NodeUpsertRepositoryImpl.java | 7 +- .../node/controller/NodeController.java | 27 +++-- .../foundation/NodeFoundationService.java | 1 - .../impl/NodeFoundationServiceImpl.java | 3 +- .../server/node/service/NodeService.java | 16 +-- .../node/service/impl/NodeServiceImpl.java | 24 +++-- .../node/service/processor/NodeProcessor.java | 4 +- .../processor/impl/CreateNodeProcessor.java | 7 +- 18 files changed, 268 insertions(+), 181 deletions(-) create mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/NodeListReq.java rename orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/{ProcessNodeReq.java => NodeProcessReq.java} (61%) create mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrgNodeDTO.java delete mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/ProcessOrgNodeResp.java diff --git a/orgmanax-api/pom.xml b/orgmanax-api/pom.xml index 0f39e1c..cba92c3 100644 --- a/orgmanax-api/pom.xml +++ b/orgmanax-api/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 cn.axzo.orgmanax @@ -23,9 +24,9 @@ spring-cloud-starter-openfeign - cn.axzo.framework - axzo-common-domain - 1.0.0-SNAPSHOT + cn.axzo.foundation + common-lib + 2.0.0-SNAPSHOT org.projectlombok diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/feign/OrgNodeApi.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/feign/OrgNodeApi.java index 2d2b916..f6ab8b9 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/feign/OrgNodeApi.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/feign/OrgNodeApi.java @@ -1,8 +1,13 @@ package cn.axzo.orgmanax.api.node.feign; -import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.foundation.page.PageResp; +import cn.axzo.foundation.result.ApiResult; +import cn.axzo.orgmanax.api.node.req.NodeListReq; +import cn.axzo.orgmanax.api.node.req.NodeProcessReq; +import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO; 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; @@ -20,10 +25,19 @@ public interface OrgNodeApi { /** * 处理部门相关的逻辑 * - * @param param why json: 由于不同行为,需要的参数和返回信息均不一致。jsonObject用来统一接收参数和返回数据。具体消费参数的地方「service、processor」来定义具体的类型。 + * @param req * @return */ @PostMapping("/api/org/node/process") - ApiResult process(@RequestBody JSONObject param); + ApiResult process(@RequestBody @Validated NodeProcessReq req); + + /** + * 分页列表接口 + * + * @param req + * @return + */ + @PostMapping("/api/org/node/list") + ApiResult> list(@RequestBody @Validated NodeListReq req); } diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/NodeListReq.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/NodeListReq.java new file mode 100644 index 0000000..ba0c80e --- /dev/null +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/NodeListReq.java @@ -0,0 +1,36 @@ +package cn.axzo.orgmanax.api.node.req; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; +import java.util.Set; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@SuperBuilder +public class NodeListReq { + private Long id; + private Set ids; + /** + * 用于遍历数据 + */ + private Long idGt; + private Long organizationalUnitId; + private Long organizationalUnitIds; + private Boolean needParent; + + // 分页参数 + @Builder.Default + private Integer page = 1; + /** + * 最大支持1000条数据,不支持单页超过1000的查询,接入方按需分页 + */ + @Builder.Default + private Integer pageSize = 1000; + private List sort; +} diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/ProcessNodeReq.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/NodeProcessReq.java similarity index 61% rename from orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/ProcessNodeReq.java rename to orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/NodeProcessReq.java index 7f8bc8d..a45973b 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/ProcessNodeReq.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/NodeProcessReq.java @@ -8,50 +8,14 @@ import lombok.Data; import lombok.Getter; import lombok.NoArgsConstructor; - -/** - * @author tanjie@axzo.cn - * @date 2024/12/2 16:09 - */ +@NoArgsConstructor +@AllArgsConstructor @Data @Builder -@AllArgsConstructor -@NoArgsConstructor -public class ProcessNodeReq { - - /** - * 单位ID - */ - private Long organizationalUnitId; - - /** - * 部门名称 - */ - private String organizationalNodeName; - - /** - * 部门类型 - */ - private Integer nodeType; - - /** - * 上级部门ID - */ - private Long parentId; - - /** - * 简介 - */ - private String remark; - - /** - * 操作人 - */ +public class NodeProcessReq { + private Long id; private Long operatorId; - - /** - * 参数 - */ + private Action action; private JSONObject param; @AllArgsConstructor(access = AccessLevel.PRIVATE) @@ -65,5 +29,5 @@ public class ProcessNodeReq { private final String desc; private final String processor; } - } + diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrgNodeDTO.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrgNodeDTO.java new file mode 100644 index 0000000..696f8e4 --- /dev/null +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrgNodeDTO.java @@ -0,0 +1,100 @@ +package cn.axzo.orgmanax.api.node.resp; + +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Builder +public class OrgNodeDTO implements Serializable { + + protected Long id; + /** + * 上级id,为0时为顶级节点 + */ + private Long parentId; + + /** + * 单位id + */ + private Long organizationalUnitId; + + /** + * 节点类型 1.部门 2.班组 3.小组 + */ + private Integer nodeType; + + /** + * 节点名称 + */ + private String nodeName; + + /** + * 层级路由 + */ + private String path; + + /** + * 扩展字段 + */ + private JSONObject extra; + + /** + * 排序 + */ + private Integer sort; + + /** + * 节点描述 + */ + private String remark; + + /** + * 迁移数据原始id + */ + private Long tempTransferId; + + /** + * 顶级节点的nodeId + */ + private Long topNodeId; + /** + * 节点状态 1-正常 0-停用 + **/ + private Integer nodeState; + + /** + * 节点同步状态 1-正常 0-停用 + **/ + private Integer syncState; + + /** + * 节点扩展类型 1-正常 2-隐藏 + **/ + private Integer extType; + + /** + * 节点同步ID + **/ + private Long syncDataId; + + private String createScene; + + /** + * 节点信息,json,不同的节点类型,格式不一。如班组节点的解散状态等 + */ + private JSONObject profile; + + protected Date createAt; + protected Long createBy; + protected Date updateAt; + protected Long updateBy; + protected Long isDelete = 0L; +} diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/ProcessOrgNodeResp.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/ProcessOrgNodeResp.java deleted file mode 100644 index ee50512..0000000 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/ProcessOrgNodeResp.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.axzo.orgmanax.api.node.resp; - -import com.alibaba.fastjson.JSONObject; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.Date; - -/** - * 部门信息 - * - * @author tanjie@axzo.cn - * @date 2024/12/2 16:20 - */ -@Data -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class ProcessOrgNodeResp { - - /** - * 部门ID - */ - private Long id; - /** - * 单位id - */ - private Long organizationalUnitId; - /** - * 部门名称 - */ - private String organizationalNodeName; - - /** - * 节点类型 节点类型 1.部门 2.班组 3.小组 - */ - private Integer nodeType; - - /** - * 上级部门ID - */ - private Long parentId; - /** - * 顶级部门ID - */ - private Long topNodeId; - /** - * 层级信息 - */ - private String path; - - /** - * 状态 - */ - private Integer status; - - /** - * 创建人。自然人ID - */ - private Long createBy; - /** - * 创建时间 - */ - private Date createAt; - /** - * 业务数据。业务需要使用的数据,如「小组-盈亏模型、平台班组-platTeamId等」,不同nodeType,里面的内容不一样。 - */ - private JSONObject bizData; - /** - * 扩展信息。 - */ - private JSONObject extra; - -} diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/unit/feign/OrgUnitApi.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/unit/feign/OrgUnitApi.java index 226b5a3..fbdd528 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/unit/feign/OrgUnitApi.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/unit/feign/OrgUnitApi.java @@ -1,6 +1,7 @@ package cn.axzo.orgmanax.api.unit.feign; +import cn.axzo.foundation.result.ApiResult; import cn.axzo.orgmanax.api.unit.req.CreateOrgUnitReq; import cn.axzo.orgmanax.api.unit.req.ListOrgUnitReq; import cn.axzo.orgmanax.api.unit.req.UpdateOrgUnitReq; @@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.PostMapping; /** * 单位API + * * @author tanjie@axzo.cn */ @FeignClient( @@ -20,12 +22,12 @@ import org.springframework.web.bind.annotation.PostMapping; public interface OrgUnitApi { @PostMapping("/api/org/unit/create") - CreateOrgUnitResp create(CreateOrgUnitReq req); + ApiResult create(CreateOrgUnitReq req); @PostMapping("/api/org/unit/update") - UpdateOrgUnitResp update(UpdateOrgUnitReq req); + ApiResult update(UpdateOrgUnitReq req); @PostMapping("/api/org/unit/list") - ListOrgUnitResp list(ListOrgUnitReq req); + ApiResult list(ListOrgUnitReq req); } diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/DO/OrganizationalNode.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/DO/OrganizationalNode.java index 26ddf47..570d542 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/DO/OrganizationalNode.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/DO/OrganizationalNode.java @@ -119,6 +119,8 @@ public class OrganizationalNode implements Serializable { @TableField("sync_data_id") private Long syncDataId; + private String createScene; + /** * 节点信息,json,不同的节点类型,格式不一。如班组节点的解散状态等 */ diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java index 8c9c880..7e4d6df 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/NodeQueryRepository.java @@ -1,6 +1,7 @@ package cn.axzo.orgmanax.infra.dao.node.repository; +import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper; import cn.axzo.foundation.dao.support.wrapper.CriteriaField; import cn.axzo.foundation.dao.support.wrapper.Operator; import cn.axzo.foundation.page.IPageReq; @@ -8,6 +9,7 @@ import cn.axzo.foundation.page.PageResp; import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.common.base.Preconditions; import lombok.AllArgsConstructor; import lombok.Data; @@ -25,7 +27,12 @@ import java.util.Set; */ public interface NodeQueryRepository { - List list(ListReq req); + default List list(ListReq req) { + PageReq pageReq = BeanUtil.toBean(req, PageReq.class); + pageReq.setPage(1); + pageReq.setPageSize(1000); + return page(pageReq).getData(); + } PageResp page(PageReq req); @@ -75,6 +82,12 @@ public interface NodeQueryRepository { @CriteriaField private Boolean needParent; + + public QueryWrapper toWrapper() { + QueryWrapper wrapper = QueryWrapperHelper.fromBean(this, OrganizationalNode.class); + + return wrapper; + } } @EqualsAndHashCode(callSuper = true) diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeQueryRepositoryImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeQueryRepositoryImpl.java index fc6f624..faf206b 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeQueryRepositoryImpl.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeQueryRepositoryImpl.java @@ -1,18 +1,24 @@ package cn.axzo.orgmanax.infra.dao.node.repository.impl; -import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper; +import cn.axzo.foundation.dao.support.converter.PageConverter; import cn.axzo.foundation.page.PageResp; import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode; import cn.axzo.orgmanax.infra.dao.node.dao.NodeDao; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; import cn.hutool.core.bean.BeanUtil; +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.google.common.collect.Sets; import lombok.RequiredArgsConstructor; 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; +import java.util.stream.Stream; /** * @author tanjie@axzo.cn @@ -25,18 +31,34 @@ public class NodeQueryRepositoryImpl implements NodeQueryRepository { private final NodeDao nodeDao; @Override - public List list(ListReq req) { - QueryWrapper wrapper = QueryWrapperHelper.fromBean(this, OrganizationalNode.class); - List results = nodeDao.list(wrapper).stream().map(e -> BeanUtil.toBean(e, NodeResp.class)).collect(Collectors.toList()); - if (BooleanUtil.isTrue(req.getNeedParent())) { - // assemble parentNode + public PageResp page(PageReq req) { + IPage page = PageConverter.toMybatis(req, OrganizationalNode.class); + IPage results = nodeDao.page(page, req.toWrapper()) + .convert(e -> BeanUtil.toBean(e, NodeResp.class)); + PageResp resp = PageConverter.toResp(results); + List records = resp.getData(); + if (CollUtil.isEmpty(records)) { + return resp; } - return results; + + // assemble parent node + assembleParentNode(req, records); + return resp; } - @Override - public PageResp page(PageReq req) { - // TODO - return null; + private void assembleParentNode(PageReq req, List records) { + if (!BooleanUtil.isTrue(req.getNeedParent())) { + return; + } + Map nodesById = records.stream().collect(Collectors.toMap(NodeResp::getId, Function.identity())); + // assemble parentNode + Set parentNodeIds = records.stream().map(OrganizationalNode::getParentId).collect(Collectors.toSet()); + Set needQueryDbParentNodeIds = Sets.difference(nodesById.keySet(), parentNodeIds); + Stream queryDbParentNodes = needQueryDbParentNodeIds.isEmpty() ? Stream.of() + : nodeDao.listByIds(needQueryDbParentNodeIds).stream().map(e -> BeanUtil.toBean(e, NodeResp.class)); + Map parentNodeByParentId = Stream.concat(records.stream().filter(s -> parentNodeIds.contains(s.getId())), queryDbParentNodes) + .collect(Collectors.toMap(OrganizationalNode::getId, Function.identity())); + records.forEach(r -> r.setParentNode(parentNodeByParentId.get(r.getParentId()))); } + } diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeUpsertRepositoryImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeUpsertRepositoryImpl.java index e370451..2cb6118 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeUpsertRepositoryImpl.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/repository/impl/NodeUpsertRepositoryImpl.java @@ -1,5 +1,6 @@ package cn.axzo.orgmanax.infra.dao.node.repository.impl; +import cn.axzo.foundation.exception.Axssert; import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode; import cn.axzo.orgmanax.infra.dao.node.dao.NodeDao; import cn.axzo.orgmanax.infra.dao.node.repository.NodeUpsertRepository; @@ -20,13 +21,13 @@ public class NodeUpsertRepositoryImpl implements NodeUpsertRepository { @Override public OrganizationalNode create(OrganizationalNode node) { nodeDao.save(node); - node.setId(node.getId()); - return node; + return nodeDao.getById(node.getId()); } @Override public OrganizationalNode update(OrganizationalNode node) { + Axssert.checkNonNull(node.getId(), "更新部门,部门id不能为空"); nodeDao.updateById(node); - return node; + return nodeDao.getById(node.getId()); } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/controller/NodeController.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/controller/NodeController.java index cf6d594..f42d96b 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/controller/NodeController.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/controller/NodeController.java @@ -1,9 +1,12 @@ package cn.axzo.orgmanax.server.node.controller; import cn.axzo.foundation.exception.Axssert; -import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.foundation.page.PageResp; +import cn.axzo.foundation.result.ApiResult; import cn.axzo.orgmanax.api.node.feign.OrgNodeApi; -import cn.axzo.orgmanax.api.node.req.ProcessNodeReq; +import cn.axzo.orgmanax.api.node.req.NodeListReq; +import cn.axzo.orgmanax.api.node.req.NodeProcessReq; +import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO; import cn.axzo.orgmanax.server.node.service.NodeService; import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor; import com.alibaba.fastjson.JSONObject; @@ -29,22 +32,18 @@ public class NodeController implements OrgNodeApi { *

* XXX: why json: 由于不同行为,需要的参数和返回信息均不一致。jsonObject用来统一接收参数和返回数据。具体消费参数的地方「service、processor」来定义具体的类型。 * - * @param param 创建部门参数 + * @param req 创建部门参数 * @return */ @Override - public ApiResult process(JSONObject param) { - NodeService.ProcessReq processReq = NodeService.ProcessReq.builder() - .id(param.getLong("id")) - .operatorId(param.getLong("operatorId")) - .action(param.getObject("action", ProcessNodeReq.Action.class)) - .param(param) - .build(); - NodeProcessor.ProcessResult processResult = nodeService.process(processReq); + public ApiResult process(NodeProcessReq req) { + NodeProcessor.ProcessResult processResult = nodeService.process(req); Axssert.isTrue(processResult.getSuccess(), NODE_PROCESS_FAILED, processResult.getMsg()); - return ApiResult.ok(processResult.getContext()); + return ApiResult.success(processResult.getContext()); } - - + @Override + public ApiResult> list(NodeListReq req) { + return ApiResult.success(nodeService.page(req)); + } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/NodeFoundationService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/NodeFoundationService.java index 194febb..976a0f1 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/NodeFoundationService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/NodeFoundationService.java @@ -1,6 +1,5 @@ package cn.axzo.orgmanax.server.node.foundation; -import cn.axzo.orgmanax.api.node.resp.ProcessOrgNodeResp; import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode; import cn.axzo.orgmanax.server.node.foundation.entity.NodeCreate; import org.springframework.transaction.annotation.Transactional; diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/impl/NodeFoundationServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/impl/NodeFoundationServiceImpl.java index a074e46..c33d1c1 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/impl/NodeFoundationServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/foundation/impl/NodeFoundationServiceImpl.java @@ -1,5 +1,6 @@ package cn.axzo.orgmanax.server.node.foundation.impl; +import cn.axzo.foundation.event.support.producer.EventProducer; import cn.axzo.orgmanax.common.config.BizResultCode; import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; @@ -21,7 +22,7 @@ public class NodeFoundationServiceImpl implements NodeFoundationService { private final NodeQueryRepository nodeQueryRepository; private final NodeUpsertRepository nodeUpsertRepository; - + private final EventProducer eventProducer; /** * 创建部门标准接口 diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/NodeService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/NodeService.java index 9a7395b..176c697 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/NodeService.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/NodeService.java @@ -2,9 +2,10 @@ package cn.axzo.orgmanax.server.node.service; import cn.axzo.foundation.exception.Axssert; import cn.axzo.foundation.page.PageResp; -import cn.axzo.orgmanax.api.node.req.ProcessNodeReq; +import cn.axzo.orgmanax.api.node.req.NodeListReq; +import cn.axzo.orgmanax.api.node.req.NodeProcessReq; +import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO; import cn.axzo.orgmanax.common.config.BizResultCode; -import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; @@ -16,11 +17,13 @@ import java.util.List; public interface NodeService { - NodeProcessor.ProcessResult process(ProcessReq req); + NodeProcessor.ProcessResult process(NodeProcessReq req); - List list(NodeQueryRepository.ListReq req); + PageResp page(NodeListReq req); - PageResp page(NodeQueryRepository.PageReq req); + default List list(NodeListReq req) { + return page(req).getData(); + } @NoArgsConstructor @AllArgsConstructor @@ -29,7 +32,7 @@ public interface NodeService { class ProcessReq { private Long id; private Long operatorId; - private ProcessNodeReq.Action action; + private NodeProcessReq.Action action; private JSONObject param; /** @@ -41,5 +44,4 @@ public interface NodeService { } } - } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java index 6e12370..994d4da 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/impl/NodeServiceImpl.java @@ -1,16 +1,22 @@ package cn.axzo.orgmanax.server.node.service.impl; +import cn.axzo.foundation.exception.Axssert; import cn.axzo.foundation.page.PageResp; +import cn.axzo.orgmanax.api.node.req.NodeListReq; +import cn.axzo.orgmanax.api.node.req.NodeProcessReq; +import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO; import cn.axzo.orgmanax.common.config.BizResultCode; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; import cn.axzo.orgmanax.server.node.service.NodeService; import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor; +import cn.hutool.core.bean.BeanUtil; 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.stream.Collectors; @Slf4j @Service @@ -21,9 +27,10 @@ public class NodeServiceImpl implements NodeService { private final ApplicationContext applicationContext; @Override - public NodeProcessor.ProcessResult process(ProcessReq req) { + public NodeProcessor.ProcessResult process(NodeProcessReq req) { // 通用check - req.check(); + Axssert.notNull(req.getAction(), BizResultCode.INVALID_PARAM, "执行行为不能为空"); + Axssert.notNull(req.getOperatorId(), BizResultCode.INVALID_PARAM, "操作人不能为空"); // 如果指定了id,校验部门是否存在,并加载出node,以便后续使用 NodeQueryRepository.NodeResp current = req.getId() == null ? null : nodeQueryRepository.oneOpt(NodeQueryRepository.OneReq.builder().id(req.getId()).build()) @@ -42,12 +49,11 @@ public class NodeServiceImpl implements NodeService { } @Override - public List list(NodeQueryRepository.ListReq req) { - return nodeQueryRepository.list(req); - } - - @Override - public PageResp page(NodeQueryRepository.PageReq req) { - return nodeQueryRepository.page(req); + public PageResp page(NodeListReq req) { + NodeQueryRepository.PageReq pageReq = BeanUtil.toBean(req, NodeQueryRepository.PageReq.class); + PageResp page = nodeQueryRepository.page(pageReq); + List records = page.getData().stream().map(e -> BeanUtil.toBean(e, OrgNodeDTO.class)).collect(Collectors.toList()); + // assemble data if needed + return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records); } } diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/NodeProcessor.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/NodeProcessor.java index 67e5e39..78123d6 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/NodeProcessor.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/NodeProcessor.java @@ -1,6 +1,6 @@ package cn.axzo.orgmanax.server.node.service.processor; -import cn.axzo.orgmanax.api.node.req.ProcessNodeReq; +import cn.axzo.orgmanax.api.node.req.NodeProcessReq; import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository; import com.alibaba.fastjson.JSONObject; import lombok.AccessLevel; @@ -24,7 +24,7 @@ public interface NodeProcessor { @AllArgsConstructor class ProcessContext { NodeQueryRepository.NodeResp node; - ProcessNodeReq.Action action; + NodeProcessReq.Action action; JSONObject params; diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateNodeProcessor.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateNodeProcessor.java index 514e525..2f3b2a6 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateNodeProcessor.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/node/service/processor/impl/CreateNodeProcessor.java @@ -1,11 +1,11 @@ package cn.axzo.orgmanax.server.node.service.processor.impl; -import cn.axzo.foundation.event.support.producer.EventProducer; import cn.axzo.foundation.exception.Axssert; -import cn.axzo.orgmanax.api.node.resp.ProcessOrgNodeResp; import cn.axzo.orgmanax.common.config.BizResultCode; import cn.axzo.orgmanax.server.node.foundation.NodeFoundationService; +import cn.axzo.orgmanax.server.node.foundation.entity.NodeCreate; import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor; +import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; import lombok.Builder; @@ -31,7 +31,8 @@ public class CreateNodeProcessor implements NodeProcessor { // basic check param.check(); // 创建普通部门数据 - ProcessOrgNodeResp processOrgNodeResp = null; // nodeFoundationService.create(null); + NodeCreate nodeCreate = BeanUtil.toBean(param, NodeCreate.class); +// ProcessOrgNodeResp processOrgNodeResp = nodeFoundationService.create(nodeCreate); // 发送部门创建MQ消息 - 业务事件 // eventProducer.send(null);