From 19228b041255aa472a605e2236011ea16c4e466e Mon Sep 17 00:00:00 2001 From: TanJ Date: Mon, 2 Dec 2024 20:12:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=84=E8=8C=83maven=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=88=9B=E5=BB=BA=E9=83=A8=E9=97=A8=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- orgmanax-api/pom.xml | 15 ++- .../basic/OrganizationalNodeBasicApi.java | 31 +++++ .../feign/biz/OrganizationalNodeBizApi.java} | 7 +- .../node/req/OrganizationalNodeCreateReq.java | 50 +++++++ .../orgmanax/api/node/req/package-info.java | 1 + .../node/resp/OrganizationalNodeInfoResp.java | 58 ++++++++ .../axzo/orgmanax/api/req/package-info.java | 1 - .../axzo/orgmanax/api/resp/package-info.java | 1 - .../basic/OrganizationalUnitBasicApi.java} | 4 +- .../feign/biz/OrganizationalUnitBizApi.java | 18 +++ orgmanax-domain/pom.xml | 6 + .../node/entity/OrganizationalNode.java | 80 +++++++++++ .../node/gateway/NodeUpsertGateway.java | 14 ++ orgmanax-infra/pom.xml | 51 ++++--- .../infra/config/MybatisPlusConfig.java | 2 +- .../infra/config/RocketMQEventConfig.java | 2 +- .../dao/node/convert/NodeInfraConvert.java | 20 +++ .../orgmanax/infra/dao/node/dao/NodeDao.java | 21 +++ .../infra/dao/node/entity/BaseEntity.java | 37 +++++ .../dao/node/entity/OrganizationalNodeDo.java | 127 ++++++++++++++++++ .../dao/node/gateway/NodeQueryGateway.java | 11 ++ .../gateway/impl/NodeQueryGatewayImpl.java | 22 +++ .../gateway/impl/NodeUpsertGatewayImpl.java | 35 +++++ .../node/mapper/OrganizationalNodeMapper.java | 19 +++ orgmanax-server/pom.xml | 8 +- .../orgmanax/server/OrgmanaxApplication.java | 7 +- .../OrganizationalNodeBasicController.java | 34 +++++ .../server/service/node/NodeBasicService.java | 54 ++++++++ .../service/node/convert/NodeConvert.java | 18 +++ pom.xml | 25 +++- 30 files changed, 741 insertions(+), 38 deletions(-) create mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/feign/basic/OrganizationalNodeBasicApi.java rename orgmanax-api/src/main/java/cn/axzo/orgmanax/api/{feign/OrganizationalNodeApi.java => node/feign/biz/OrganizationalNodeBizApi.java} (61%) create mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/OrganizationalNodeCreateReq.java create mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/package-info.java create mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrganizationalNodeInfoResp.java delete mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/req/package-info.java delete mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/resp/package-info.java rename orgmanax-api/src/main/java/cn/axzo/orgmanax/api/{feign/OrganizationalUnitApi.java => unit/feign/basic/OrganizationalUnitBasicApi.java} (68%) create mode 100644 orgmanax-api/src/main/java/cn/axzo/orgmanax/api/unit/feign/biz/OrganizationalUnitBizApi.java create mode 100644 orgmanax-domain/src/main/java/cn/axzo/orgmanax/domain/node/entity/OrganizationalNode.java create mode 100644 orgmanax-domain/src/main/java/cn/axzo/orgmanax/domain/node/gateway/NodeUpsertGateway.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/convert/NodeInfraConvert.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/dao/NodeDao.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/BaseEntity.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/OrganizationalNodeDo.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/NodeQueryGateway.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/impl/NodeQueryGatewayImpl.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/impl/NodeUpsertGatewayImpl.java create mode 100644 orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/mapper/OrganizationalNodeMapper.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/controller/node/OrganizationalNodeBasicController.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/service/node/NodeBasicService.java create mode 100644 orgmanax-server/src/main/java/cn/axzo/orgmanax/server/service/node/convert/NodeConvert.java diff --git a/orgmanax-api/pom.xml b/orgmanax-api/pom.xml index 74485d7..985d89f 100644 --- a/orgmanax-api/pom.xml +++ b/orgmanax-api/pom.xml @@ -2,9 +2,9 @@ 4.0.0 - cn.axzo.infra - axzo-parent - 2.4.13.4 + cn.axzo.orgmanax + orgmanax + ${revision} cn.axzo.orgmanax @@ -22,6 +22,15 @@ org.springframework.cloud spring-cloud-starter-openfeign + + cn.axzo.framework + axzo-common-domain + 1.0.0-SNAPSHOT + + + org.projectlombok + lombok + diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/feign/basic/OrganizationalNodeBasicApi.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/feign/basic/OrganizationalNodeBasicApi.java new file mode 100644 index 0000000..2acf3ab --- /dev/null +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/feign/basic/OrganizationalNodeBasicApi.java @@ -0,0 +1,31 @@ +package cn.axzo.orgmanax.api.node.feign.basic; + +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.orgmanax.api.node.req.OrganizationalNodeCreateReq; +import cn.axzo.orgmanax.api.node.resp.OrganizationalNodeInfoResp; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * 部门相关基础API + * @author tanjie@axzo.cn + * @date 2024/12/2 15:40 + */ +@FeignClient( + value = "orgmanax", + url = "${axzo.service.orgmanax:http://orgmanax:8080}") +public interface OrganizationalNodeBasicApi { + + + /** + * 创建部门标准接口 + * @param organizationalNodeCreateReq + * @return + */ + @PostMapping("/api/org/node/basic/create") + ApiResult create(@RequestBody OrganizationalNodeCreateReq organizationalNodeCreateReq); + +} diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/feign/OrganizationalNodeApi.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/feign/biz/OrganizationalNodeBizApi.java similarity index 61% rename from orgmanax-api/src/main/java/cn/axzo/orgmanax/api/feign/OrganizationalNodeApi.java rename to orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/feign/biz/OrganizationalNodeBizApi.java index 0d9c0ee..57c42dd 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/feign/OrganizationalNodeApi.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/feign/biz/OrganizationalNodeBizApi.java @@ -1,15 +1,18 @@ -package cn.axzo.orgmanax.api.feign; +package cn.axzo.orgmanax.api.node.feign.biz; import org.springframework.cloud.openfeign.FeignClient; /** + * business-oriented api related to node * @author tanjie@axzo.cn * @date 2024/12/2 15:40 */ @FeignClient( value = "orgmanax", url = "${axzo.service.orgmanax:http://orgmanax:8080}") -public interface OrganizationalNodeApi { +public interface OrganizationalNodeBizApi { + + } diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/OrganizationalNodeCreateReq.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/OrganizationalNodeCreateReq.java new file mode 100644 index 0000000..3fe9515 --- /dev/null +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/OrganizationalNodeCreateReq.java @@ -0,0 +1,50 @@ +package cn.axzo.orgmanax.api.node.req; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * @author tanjie@axzo.cn + * @date 2024/12/2 16:09 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class OrganizationalNodeCreateReq { + + /** + * 单位ID + */ + private Long organizationalUnitId; + + /** + * 部门名称 + */ + private String organizationalNodeName; + + /** + * 部门类型 + */ + private Integer nodeType; + + /** + * 上级部门ID + */ + private Long parentId; + + /** + * 简介 + */ + private String remark; + + /** + * 创建人 + */ + private Long crateBy; + + +} diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/package-info.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/package-info.java new file mode 100644 index 0000000..40f0690 --- /dev/null +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/req/package-info.java @@ -0,0 +1 @@ +package cn.axzo.orgmanax.api.node.req; \ No newline at end of file diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrganizationalNodeInfoResp.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrganizationalNodeInfoResp.java new file mode 100644 index 0000000..920499f --- /dev/null +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/node/resp/OrganizationalNodeInfoResp.java @@ -0,0 +1,58 @@ +package cn.axzo.orgmanax.api.node.resp; + +import lombok.Data; + +import java.util.Date; + +/** + * 部门信息 + * @author tanjie@axzo.cn + * @date 2024/12/2 16:20 + */ +@Data +public class OrganizationalNodeInfoResp { + /** + * 单位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; + /** + * 扩展信息 + */ + private String extra; + + /** + * 创建人。自然人ID + */ + private Long createBy; + /** + * 创建时间 + */ + private Date createAt; +} diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/req/package-info.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/req/package-info.java deleted file mode 100644 index b47014b..0000000 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/req/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.orgmanax.api.req; \ No newline at end of file diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/resp/package-info.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/resp/package-info.java deleted file mode 100644 index 88341a1..0000000 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/resp/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.orgmanax.api.resp; \ No newline at end of file diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/feign/OrganizationalUnitApi.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/unit/feign/basic/OrganizationalUnitBasicApi.java similarity index 68% rename from orgmanax-api/src/main/java/cn/axzo/orgmanax/api/feign/OrganizationalUnitApi.java rename to orgmanax-api/src/main/java/cn/axzo/orgmanax/api/unit/feign/basic/OrganizationalUnitBasicApi.java index d2e9fd9..1147040 100644 --- a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/feign/OrganizationalUnitApi.java +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/unit/feign/basic/OrganizationalUnitBasicApi.java @@ -1,4 +1,4 @@ -package cn.axzo.orgmanax.api.feign; +package cn.axzo.orgmanax.api.unit.feign.basic; @@ -11,7 +11,7 @@ import org.springframework.cloud.openfeign.FeignClient; @FeignClient( value = "orgmanax", url = "${axzo.service.orgmanax:http://orgmanax:8080}") -public interface OrganizationalUnitApi { +public interface OrganizationalUnitBasicApi { } diff --git a/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/unit/feign/biz/OrganizationalUnitBizApi.java b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/unit/feign/biz/OrganizationalUnitBizApi.java new file mode 100644 index 0000000..1411762 --- /dev/null +++ b/orgmanax-api/src/main/java/cn/axzo/orgmanax/api/unit/feign/biz/OrganizationalUnitBizApi.java @@ -0,0 +1,18 @@ +package cn.axzo.orgmanax.api.unit.feign.biz; + +import org.springframework.cloud.openfeign.FeignClient; + +/** + * business-oriented api related to unit + * @author tanjie@axzo.cn + * @date 2024/12/2 15:40 + */ +@FeignClient( + value = "orgmanax", + url = "${axzo.service.orgmanax:http://orgmanax:8080}") +public interface OrganizationalUnitBizApi { + + + + +} diff --git a/orgmanax-domain/pom.xml b/orgmanax-domain/pom.xml index eeb43a5..04d14cb 100644 --- a/orgmanax-domain/pom.xml +++ b/orgmanax-domain/pom.xml @@ -17,4 +17,10 @@ UTF-8 + + + cn.hutool + hutool-all + + \ No newline at end of file diff --git a/orgmanax-domain/src/main/java/cn/axzo/orgmanax/domain/node/entity/OrganizationalNode.java b/orgmanax-domain/src/main/java/cn/axzo/orgmanax/domain/node/entity/OrganizationalNode.java new file mode 100644 index 0000000..204c1e0 --- /dev/null +++ b/orgmanax-domain/src/main/java/cn/axzo/orgmanax/domain/node/entity/OrganizationalNode.java @@ -0,0 +1,80 @@ +package cn.axzo.orgmanax.domain.node.entity; + +import cn.hutool.core.lang.Assert; +import lombok.Data; + +import java.util.Date; +import java.util.Objects; + +/** + * 领域对象 + * @author tanjie@axzo.cn + * @date 2024/12/2 17:08 + */ +@Data +public class OrganizationalNode { + + + 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; + /** + * 扩展信息 + */ + private String extra; + + /** + * 创建人。自然人ID + */ + private Long createBy; + /** + * 创建时间 + */ + private Date createAt; + + /** + * 计算path、topNodeId等信息 + * + * @param parentNode 父节点 + */ + public void calcPath(OrganizationalNode parentNode) { + if (Objects.equals(this.getParentId(), 0L)) { + this.topNodeId = id; + this.path = id + ","; + return; + } + + Assert.notNull(parentNode, "重置路径时,父节点不能为空"); + this.topNodeId = parentNode.getTopNodeId(); + this.path = parentNode.path + id + ","; + } +} diff --git a/orgmanax-domain/src/main/java/cn/axzo/orgmanax/domain/node/gateway/NodeUpsertGateway.java b/orgmanax-domain/src/main/java/cn/axzo/orgmanax/domain/node/gateway/NodeUpsertGateway.java new file mode 100644 index 0000000..1174b56 --- /dev/null +++ b/orgmanax-domain/src/main/java/cn/axzo/orgmanax/domain/node/gateway/NodeUpsertGateway.java @@ -0,0 +1,14 @@ +package cn.axzo.orgmanax.domain.node.gateway; + +import cn.axzo.orgmanax.domain.node.entity.OrganizationalNode; + +/** + * @author tanjie@axzo.cn + * @date 2024/12/2 18:21 + */ +public interface NodeUpsertGateway { + + OrganizationalNode create(OrganizationalNode node); + + OrganizationalNode update(OrganizationalNode node); +} diff --git a/orgmanax-infra/pom.xml b/orgmanax-infra/pom.xml index f8f7dec..fb26153 100644 --- a/orgmanax-infra/pom.xml +++ b/orgmanax-infra/pom.xml @@ -22,22 +22,22 @@ orgmanax-domain ${project.version} - - - org.apache.rocketmq - rocketmq-spring-boot-starter - - + + + org.apache.rocketmq + rocketmq-spring-boot-starter + + - - mysql - mysql-connector-java - - - com.baomidou - mybatis-plus-boot-starter + + mysql + mysql-connector-java + + + com.baomidou + mybatis-plus-boot-starter - + @@ -64,10 +64,23 @@ unittest-support-lib test - - net.logstash.logback - logstash-logback-encoder - 6.6 - + + net.logstash.logback + logstash-logback-encoder + 6.6 + + + org.mapstruct + mapstruct + + + org.mapstruct + mapstruct-jdk8 + + + org.mapstruct + mapstruct-processor + + \ No newline at end of file diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/config/MybatisPlusConfig.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/config/MybatisPlusConfig.java index 4ba6c81..f9654de 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/config/MybatisPlusConfig.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/config/MybatisPlusConfig.java @@ -14,7 +14,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @Slf4j @EnableTransactionManagement -@MapperScan("cn.axzo.**.mapper") +@MapperScan("cn.axzo.orgmanax.**.mapper") public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/config/RocketMQEventConfig.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/config/RocketMQEventConfig.java index 25e9dd4..675ad2f 100644 --- a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/config/RocketMQEventConfig.java +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/config/RocketMQEventConfig.java @@ -18,7 +18,7 @@ import org.springframework.stereotype.Component; */ @Slf4j public class RocketMQEventConfig { - public static final String DEFAULT_MODULE = "archetype-server"; + public static final String DEFAULT_MODULE = "orgmanax-server"; @Value("topic_${spring.application.name}_${spring.profiles.active}") private String currentTopic; diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/convert/NodeInfraConvert.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/convert/NodeInfraConvert.java new file mode 100644 index 0000000..c6c7310 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/convert/NodeInfraConvert.java @@ -0,0 +1,20 @@ +package cn.axzo.orgmanax.infra.dao.node.convert; + +import cn.axzo.orgmanax.domain.node.entity.OrganizationalNode; +import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNodeDo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author tanjie@axzo.cn + * @date 2024/12/2 18:13 + */ +@Mapper +public interface NodeInfraConvert { + + NodeInfraConvert INSTANCE = Mappers.getMapper(NodeInfraConvert.class); + + OrganizationalNode toDomain(OrganizationalNodeDo doo); + + OrganizationalNodeDo toEntity(OrganizationalNode doo); +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/dao/NodeDao.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/dao/NodeDao.java new file mode 100644 index 0000000..6920e56 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/dao/NodeDao.java @@ -0,0 +1,21 @@ +package cn.axzo.orgmanax.infra.dao.node.dao; + +import cn.axzo.orgmanax.domain.node.entity.OrganizationalNode; +import cn.axzo.orgmanax.infra.dao.node.convert.NodeInfraConvert; +import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNodeDo; +import cn.axzo.orgmanax.infra.dao.node.mapper.OrganizationalNodeMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +/** + * @author tanjie@axzo.cn + * @date 2024/12/2 18:10 + */ +@Repository +public class NodeDao extends ServiceImpl { + + public OrganizationalNode findById(Long id) { + return NodeInfraConvert.INSTANCE.toDomain(getById(id)); + } + +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/BaseEntity.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/BaseEntity.java new file mode 100644 index 0000000..f490bb1 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/BaseEntity.java @@ -0,0 +1,37 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package cn.axzo.orgmanax.infra.dao.node.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NonNull; + +import java.io.Serializable; +import java.util.Date; + +@Data +public abstract class BaseEntity> extends Model implements Serializable { + @TableId( + type = IdType.AUTO + ) + protected Long id; + @TableField( + fill = FieldFill.INSERT + ) + protected Date createAt; + @TableField( + fill = FieldFill.UPDATE + ) + protected Date updateAt; + @TableField("is_delete") + protected Long isDelete = 0L; + +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/OrganizationalNodeDo.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/OrganizationalNodeDo.java new file mode 100644 index 0000000..5165136 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/entity/OrganizationalNodeDo.java @@ -0,0 +1,127 @@ +package cn.axzo.orgmanax.infra.dao.node.entity; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; +import lombok.*; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 组织节点表表实体类 + * + * @author makejava + * @since 2022-06-05 10:59:31 + */ +@TableName(value = "organizational_node", autoResultMap = true) +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class OrganizationalNodeDo extends BaseEntity implements Serializable { + + private static final long serialVersionUID = -14708237380609631L; + + /** + * 上级id,为0时为顶级节点 + */ + @TableField("parent_id") + private Long parentId; + + /** + * 单位id + */ + @TableField("organizational_unit_id") + private Long organizationalUnitId; + + /** + * 节点类型 1.部门 2.班组 3.小组 + */ + @TableField("node_type") + private Integer nodeType; + + /** + * 节点名称 + */ + @TableField("node_name") + private String nodeName; + + /** + * 层级路由 + */ + @TableField("path") + private String path; + + /** + * 扩展字段 + */ + @TableField(value = "extra", typeHandler = FastjsonTypeHandler.class) + private JSONObject extra; + + /** + * 排序 + */ + @TableField("sort") + private Integer sort; + + /** + * 节点描述 + */ + @TableField("remark") + private String remark; + + /** + * 迁移数据原始id + */ + @TableField("temp_transfer_id") + private Long tempTransferId; + + /** + * 顶级节点的nodeId + */ + @TableField("top_node_id") + private Long topNodeId; + /** + * 节点状态 1-正常 0-停用 + **/ + @TableField("node_state") + private Integer nodeState; + + /** + * 节点同步状态 1-正常 0-停用 + **/ + @TableField("sync_state") + private Integer syncState; + + /** + * 节点扩展类型 1-正常 2-隐藏 + **/ + @TableField("ext_type") + private Integer extType; + + /** + * 节点同步ID + **/ + @TableField("sync_data_id") + private Long syncDataId; + + /** + * 节点信息,json,不同的节点类型,格式不一。如班组节点的解散状态等 + */ + @TableField(value = "profile", typeHandler = FastjsonTypeHandler.class) + private JSONObject profile; + + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } + +} + diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/NodeQueryGateway.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/NodeQueryGateway.java new file mode 100644 index 0000000..a2978a3 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/NodeQueryGateway.java @@ -0,0 +1,11 @@ +package cn.axzo.orgmanax.infra.dao.node.gateway; + +import cn.axzo.orgmanax.domain.node.entity.OrganizationalNode; + +/** + * @author tanjie@axzo.cn + * @date 2024/12/2 18:00 + */ +public interface NodeQueryGateway { + OrganizationalNode findById(Long id); +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/impl/NodeQueryGatewayImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/impl/NodeQueryGatewayImpl.java new file mode 100644 index 0000000..ddc3214 --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/impl/NodeQueryGatewayImpl.java @@ -0,0 +1,22 @@ +package cn.axzo.orgmanax.infra.dao.node.gateway.impl; + +import cn.axzo.orgmanax.domain.node.entity.OrganizationalNode; +import cn.axzo.orgmanax.infra.dao.node.dao.NodeDao; +import cn.axzo.orgmanax.infra.dao.node.gateway.NodeQueryGateway; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * @author tanjie@axzo.cn + * @date 2024/12/2 18:05 + */ +@Service +@RequiredArgsConstructor +public class NodeQueryGatewayImpl implements NodeQueryGateway { + + private final NodeDao nodeDao; + @Override + public OrganizationalNode findById(Long id) { + return nodeDao.findById(id); + } +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/impl/NodeUpsertGatewayImpl.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/impl/NodeUpsertGatewayImpl.java new file mode 100644 index 0000000..3f32c5d --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/gateway/impl/NodeUpsertGatewayImpl.java @@ -0,0 +1,35 @@ +package cn.axzo.orgmanax.infra.dao.node.gateway.impl; + +import cn.axzo.orgmanax.domain.node.entity.OrganizationalNode; +import cn.axzo.orgmanax.domain.node.gateway.NodeUpsertGateway; +import cn.axzo.orgmanax.infra.dao.node.convert.NodeInfraConvert; +import cn.axzo.orgmanax.infra.dao.node.dao.NodeDao; +import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNodeDo; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +/** + * @author tanjie@axzo.cn + * @date 2024/12/2 18:22 + */ + +@Repository +@RequiredArgsConstructor +public class NodeUpsertGatewayImpl implements NodeUpsertGateway { + + private final NodeDao nodeDao; + @Override + public OrganizationalNode create(OrganizationalNode node) { + OrganizationalNodeDo nodeEntity = NodeInfraConvert.INSTANCE.toEntity(node); + nodeDao.save(nodeEntity); + node.setId(nodeEntity.getId()); + return node; + } + + @Override + public OrganizationalNode update(OrganizationalNode node) { + OrganizationalNodeDo nodeEntity = NodeInfraConvert.INSTANCE.toEntity(node); + nodeDao.updateById(nodeEntity); + return node; + } +} diff --git a/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/mapper/OrganizationalNodeMapper.java b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/mapper/OrganizationalNodeMapper.java new file mode 100644 index 0000000..ca2f00e --- /dev/null +++ b/orgmanax-infra/src/main/java/cn/axzo/orgmanax/infra/dao/node/mapper/OrganizationalNodeMapper.java @@ -0,0 +1,19 @@ +package cn.axzo.orgmanax.infra.dao.node.mapper; + + +import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNodeDo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + + +/** + * 组织节点表表数据库访问层 + * + * @author makejava + * @since 2022-05-21 18:53:19 + */ +@Mapper +public interface OrganizationalNodeMapper extends BaseMapper { + +} + diff --git a/orgmanax-server/pom.xml b/orgmanax-server/pom.xml index 1c6172c..a4f4861 100644 --- a/orgmanax-server/pom.xml +++ b/orgmanax-server/pom.xml @@ -18,6 +18,7 @@ + cn.axzo.orgmanax orgmanax-domain @@ -29,7 +30,12 @@ orgmanax-infra ${project.version} - + + cn.axzo.orgmanax + orgmanax-api + ${project.version} + + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/OrgmanaxApplication.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/OrgmanaxApplication.java index 8947a64..b70b2e4 100644 --- a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/OrgmanaxApplication.java +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/OrgmanaxApplication.java @@ -6,13 +6,18 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.Environment; +import static cn.axzo.orgmanax.server.OrgmanaxApplication.DEFAULT_DIR; + /** * @author tanjie@axzo.cn * @date 2024/11/28 15:54 */ -@SpringBootApplication +@SpringBootApplication(scanBasePackages = DEFAULT_DIR) @Slf4j public class OrgmanaxApplication { + + public static final String DEFAULT_DIR = "cn.axzo.orgmanax"; + public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(OrgmanaxApplication.class, args); Environment env = run.getEnvironment(); diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/controller/node/OrganizationalNodeBasicController.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/controller/node/OrganizationalNodeBasicController.java new file mode 100644 index 0000000..7a6aae5 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/controller/node/OrganizationalNodeBasicController.java @@ -0,0 +1,34 @@ +package cn.axzo.orgmanax.server.controller.node; + +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.orgmanax.api.node.feign.basic.OrganizationalNodeBasicApi; +import cn.axzo.orgmanax.api.node.req.OrganizationalNodeCreateReq; +import cn.axzo.orgmanax.api.node.resp.OrganizationalNodeInfoResp; +import cn.axzo.orgmanax.server.service.node.NodeBasicService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author tanjie@axzo.cn + * @date 2024/12/2 16:47 + */ +@RestController +@RequestMapping +@RequiredArgsConstructor +public class OrganizationalNodeBasicController implements OrganizationalNodeBasicApi { + + private final NodeBasicService nodeBasicService; + + /** + * 创建部门 + * @param organizationalNodeCreateReq 创建部门参数 + * @return + */ + @Override + public ApiResult create(OrganizationalNodeCreateReq organizationalNodeCreateReq) { + return ApiResult.ok(nodeBasicService.create(organizationalNodeCreateReq)); + } + + +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/service/node/NodeBasicService.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/service/node/NodeBasicService.java new file mode 100644 index 0000000..ac85ad7 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/service/node/NodeBasicService.java @@ -0,0 +1,54 @@ +package cn.axzo.orgmanax.server.service.node; + +import cn.axzo.orgmanax.api.node.req.OrganizationalNodeCreateReq; +import cn.axzo.orgmanax.api.node.resp.OrganizationalNodeInfoResp; +import cn.axzo.orgmanax.domain.node.entity.OrganizationalNode; +import cn.axzo.orgmanax.domain.node.gateway.NodeUpsertGateway; +import cn.axzo.orgmanax.infra.dao.node.gateway.NodeQueryGateway; +import cn.axzo.orgmanax.server.service.node.convert.NodeConvert; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author tanjie@axzo.cn + * @date 2024/12/2 16:55 + */ +@Service +@RequiredArgsConstructor +public class NodeBasicService { + + private final NodeQueryGateway nodeQueryGateway; + private final NodeUpsertGateway nodeUpsertGateway; + + + /** + * 创建部门 + * + * @param organizationalNodeCreateReq 创建部门参数 + * @return + */ + @Transactional + public OrganizationalNodeInfoResp create(OrganizationalNodeCreateReq organizationalNodeCreateReq) { + OrganizationalNode node = NodeConvert.INSTANCE.toNode(organizationalNodeCreateReq); + // 业务校验 + + // 持久化 + nodeUpsertGateway.create(node); + + // 获取上级节点,为了重新计算path、topNodeId等数据 + OrganizationalNode parentNode = nodeQueryGateway.findById(node.getParentId()); + + // 重新计算path、topNodeId等数据。 未来也可以添加workspaceId等信息 + node.calcPath(parentNode); + + //更新数据 + nodeUpsertGateway.update(node); + + // 发送消息 + + + // 返回结果 + return null; + } +} diff --git a/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/service/node/convert/NodeConvert.java b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/service/node/convert/NodeConvert.java new file mode 100644 index 0000000..7e54145 --- /dev/null +++ b/orgmanax-server/src/main/java/cn/axzo/orgmanax/server/service/node/convert/NodeConvert.java @@ -0,0 +1,18 @@ +package cn.axzo.orgmanax.server.service.node.convert; + +import cn.axzo.orgmanax.api.node.req.OrganizationalNodeCreateReq; +import cn.axzo.orgmanax.domain.node.entity.OrganizationalNode; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author tanjie@axzo.cn + * @date 2024/12/2 17:26 + */ +@Mapper +public interface NodeConvert { + NodeConvert INSTANCE = Mappers.getMapper(NodeConvert.class); + + OrganizationalNode toNode(OrganizationalNodeCreateReq req); + +} diff --git a/pom.xml b/pom.xml index 2b472f6..63f0cbd 100644 --- a/pom.xml +++ b/pom.xml @@ -13,16 +13,33 @@ 8 8 UTF-8 + 2.0.0-SNAPSHOT 2.0.0-SNAPSHOT 2021.1 3.0.6 3.5.6 2.2.3 - 2.0.0-SNAPSHOT + 2.0.0-SNAPSHOT + 2.0.0-SNAPSHOT + + + cn.axzo.infra + axzo-bom + ${axzo-bom.version} + pom + import + + + cn.axzo.infra + axzo-dependencies + ${axzo-dependencies.version} + pom + import + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config @@ -48,11 +65,7 @@ event-support-lib ${foundation-support-lib} - - cn.axzo.foundation - redis-support-lib - ${foundation-support-lib} - + cn.axzo.foundation unittest-support-lib