feature(REQ-3282): 提交 创建部门代码;提交部分单位代码;
This commit is contained in:
parent
af27f5c52f
commit
0357481bf4
@ -2,7 +2,7 @@ package cn.axzo.orgmanax.api.node.feign;
|
||||
|
||||
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.ListNodeReq;
|
||||
import cn.axzo.orgmanax.api.node.req.NodeProcessReq;
|
||||
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@ -32,12 +32,14 @@ public interface OrgNodeApi {
|
||||
ApiResult<JSONObject> process(@RequestBody @Validated NodeProcessReq req);
|
||||
|
||||
/**
|
||||
* 分页列表接口
|
||||
* 分页列表接口。
|
||||
* XXX:本接口默认分页,单页最多返回1000条数据。调用方使用时需注意。
|
||||
*
|
||||
* @param req
|
||||
* @return
|
||||
* @see ListNodeReq#getPageSize()
|
||||
*/
|
||||
@PostMapping("/api/org/node/list")
|
||||
ApiResult<PageResp<OrgNodeDTO>> list(@RequestBody @Validated NodeListReq req);
|
||||
ApiResult<PageResp<OrgNodeDTO>> list(@RequestBody @Validated ListNodeReq req);
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
package cn.axzo.orgmanax.api.node.req;
|
||||
|
||||
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
|
||||
import cn.axzo.foundation.dao.support.wrapper.Operator;
|
||||
import cn.axzo.foundation.page.IPageReq;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public class ListNodeReq implements IPageReq {
|
||||
@CriteriaField
|
||||
private Long id;
|
||||
@CriteriaField(field = "id", operator = Operator.IN)
|
||||
private Set<Long> ids;
|
||||
@CriteriaField
|
||||
private Long parentId;
|
||||
@CriteriaField(field = "parentId", operator = Operator.IN)
|
||||
private Set<Long> parentIds;
|
||||
/**
|
||||
* 用于遍历数据
|
||||
*/
|
||||
@CriteriaField(field = "id", operator = Operator.GT)
|
||||
private Long idGt;
|
||||
@CriteriaField
|
||||
private Long organizationalUnitId;
|
||||
@CriteriaField(field = "organizationalUnitId", operator = Operator.IN)
|
||||
private Long organizationalUnitIds;
|
||||
|
||||
@CriteriaField(ignore = true)
|
||||
private Boolean needParent;
|
||||
|
||||
@CriteriaField(ignore = true)
|
||||
@Builder.Default
|
||||
Integer page = 1;
|
||||
/**
|
||||
* 最大支持1000条数据,不支持单页超过1000的查询,接入方按需分页
|
||||
*/
|
||||
@Builder.Default
|
||||
@CriteriaField(ignore = true)
|
||||
Integer pageSize = 1000;
|
||||
@CriteriaField(ignore = true)
|
||||
List<String> sort;
|
||||
}
|
||||
@ -1,36 +0,0 @@
|
||||
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<Long> 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<String> sort;
|
||||
}
|
||||
@ -2,14 +2,16 @@ 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;
|
||||
import cn.axzo.orgmanax.api.unit.resp.CreateOrgUnitResp;
|
||||
import cn.axzo.orgmanax.api.unit.resp.ListOrgUnitResp;
|
||||
import cn.axzo.orgmanax.api.unit.resp.UpdateOrgUnitResp;
|
||||
import cn.axzo.orgmanax.api.unit.req.CreateUnitReq;
|
||||
import cn.axzo.orgmanax.api.unit.req.ListUnitReq;
|
||||
import cn.axzo.orgmanax.api.unit.req.UpdateUnitReq;
|
||||
import cn.axzo.orgmanax.api.unit.resp.CreateUnitResp;
|
||||
import cn.axzo.orgmanax.api.unit.resp.ListUnitResp;
|
||||
import cn.axzo.orgmanax.api.unit.resp.UpdateUnitResp;
|
||||
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;
|
||||
|
||||
/**
|
||||
* 单位API
|
||||
@ -22,12 +24,12 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
public interface OrgUnitApi {
|
||||
|
||||
@PostMapping("/api/org/unit/create")
|
||||
ApiResult<CreateOrgUnitResp> create(CreateOrgUnitReq req);
|
||||
ApiResult<CreateUnitResp> create(@RequestBody @Validated CreateUnitReq req);
|
||||
|
||||
@PostMapping("/api/org/unit/update")
|
||||
ApiResult<UpdateOrgUnitResp> update(UpdateOrgUnitReq req);
|
||||
ApiResult<UpdateUnitResp> update(@RequestBody @Validated UpdateUnitReq req);
|
||||
|
||||
@PostMapping("/api/org/unit/list")
|
||||
ApiResult<ListOrgUnitResp> list(ListOrgUnitReq req);
|
||||
ApiResult<ListUnitResp> list(@RequestBody @Validated ListUnitReq req);
|
||||
|
||||
}
|
||||
|
||||
@ -1,12 +0,0 @@
|
||||
package cn.axzo.orgmanax.api.unit.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class CreateOrgUnitReq implements Serializable {
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
package cn.axzo.orgmanax.api.unit.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class CreateUnitReq implements Serializable {
|
||||
}
|
||||
@ -11,7 +11,7 @@ import java.io.Serializable;
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public class ListOrgUnitReq implements Serializable {
|
||||
public class ListUnitReq implements Serializable {
|
||||
|
||||
private String test;
|
||||
|
||||
@ -1,12 +0,0 @@
|
||||
package cn.axzo.orgmanax.api.unit.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class UpdateOrgUnitReq implements Serializable {
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
package cn.axzo.orgmanax.api.unit.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class UpdateUnitReq implements Serializable {
|
||||
}
|
||||
@ -1,14 +0,0 @@
|
||||
package cn.axzo.orgmanax.api.unit.resp;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
@Data
|
||||
public class CreateOrgUnitResp implements Serializable {
|
||||
|
||||
private String test;
|
||||
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
package cn.axzo.orgmanax.api.unit.resp;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
@Data
|
||||
public class CreateUnitResp implements Serializable {
|
||||
|
||||
private String test;
|
||||
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
package cn.axzo.orgmanax.api.unit.resp;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
@Data
|
||||
public class ListOrgUnitResp implements Serializable {
|
||||
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
package cn.axzo.orgmanax.api.unit.resp;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
@Data
|
||||
public class ListUnitResp implements Serializable {
|
||||
|
||||
}
|
||||
@ -4,6 +4,6 @@ import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
@Data
|
||||
public class UpdateOrgUnitResp implements Serializable {
|
||||
public class UpdateUnitResp implements Serializable {
|
||||
|
||||
}
|
||||
@ -40,6 +40,12 @@
|
||||
<!-- TODO 根据项目需要, 使用不同的组件-->
|
||||
|
||||
<!---->
|
||||
<dependency>
|
||||
<groupId>cn.axzo.orgmanax</groupId>
|
||||
<artifactId>orgmanax-api</artifactId>
|
||||
<version>2.0.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.axzo.foundation</groupId>
|
||||
<artifactId>dao-support-lib</artifactId>
|
||||
|
||||
@ -1,10 +0,0 @@
|
||||
package cn.axzo.orgmanax.infra.dao.cooperateship.convert;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
public interface SaasCooperateShipInfraConvert {
|
||||
|
||||
SaasCooperateShipInfraConvert INSTANCE = Mappers.getMapper(SaasCooperateShipInfraConvert.class);
|
||||
}
|
||||
@ -1,9 +1,7 @@
|
||||
package cn.axzo.orgmanax.infra.dao.cooperateship.dao;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.DO.SaasCooperateShip;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.mapper.SaasCooperateShipMapper;
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.mapper.OrganizationalNodeMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package cn.axzo.orgmanax.infra.dao.cooperateship.DO;
|
||||
package cn.axzo.orgmanax.infra.dao.cooperateship.entity;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package cn.axzo.orgmanax.infra.dao.cooperateship.mapper;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.DO.SaasCooperateShip;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
|
||||
@ -1,15 +0,0 @@
|
||||
package cn.axzo.orgmanax.infra.dao.node.convert;
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
@ -1,7 +1,6 @@
|
||||
package cn.axzo.orgmanax.infra.dao.node.dao;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.node.convert.NodeInfraConvert;
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.mapper.OrganizationalNodeMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Repository;
|
||||
@ -13,8 +12,4 @@ import org.springframework.stereotype.Repository;
|
||||
@Repository
|
||||
public class NodeDao extends ServiceImpl<OrganizationalNodeMapper, OrganizationalNode> {
|
||||
|
||||
public OrganizationalNode findById(Long id) {
|
||||
return (getById(id));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,19 +1,31 @@
|
||||
package cn.axzo.orgmanax.infra.dao.node.DO;
|
||||
package cn.axzo.orgmanax.infra.dao.node.entity;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||
import lombok.*;
|
||||
import com.fasterxml.jackson.annotation.JsonValue;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import lombok.experimental.Accessors;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 组织节点表表实体类
|
||||
@ -49,7 +61,9 @@ public class OrganizationalNode implements Serializable {
|
||||
private Long organizationalUnitId;
|
||||
|
||||
/**
|
||||
* 节点类型 1.部门 2.班组 3.小组
|
||||
* 节点类型
|
||||
*
|
||||
* @see TypeEnum
|
||||
*/
|
||||
@TableField("node_type")
|
||||
private Integer nodeType;
|
||||
@ -119,8 +133,6 @@ public class OrganizationalNode implements Serializable {
|
||||
@TableField("sync_data_id")
|
||||
private Long syncDataId;
|
||||
|
||||
private String createScene;
|
||||
|
||||
/**
|
||||
* 节点信息,json,不同的节点类型,格式不一。如班组节点的解散状态等
|
||||
*/
|
||||
@ -135,9 +147,9 @@ public class OrganizationalNode implements Serializable {
|
||||
@TableField("is_delete")
|
||||
protected Long isDelete = 0L;
|
||||
|
||||
|
||||
/**
|
||||
* 计算节点路径
|
||||
*
|
||||
* @param parentNode
|
||||
*/
|
||||
public void calcPath(OrganizationalNode parentNode) {
|
||||
@ -151,6 +163,35 @@ public class OrganizationalNode implements Serializable {
|
||||
this.path = parentNode.path + id + ",";
|
||||
}
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public enum TypeEnum {
|
||||
ALL_TYPE(0, "默认节点类型"),
|
||||
DEPARTMENT(1, "部门"),
|
||||
TEAM(2, "平台班组"),
|
||||
GROUP(3, "小组"),
|
||||
PROJECT_TEAM(4, "项目内班组"),
|
||||
PROJECT_GROUP(5, "项目内小组"),
|
||||
PROJECT_DEPARTMENT(6, "项目部门");
|
||||
|
||||
@EnumValue
|
||||
@JsonValue
|
||||
private final Integer value;
|
||||
private final String desc;
|
||||
|
||||
private static final Map<Integer, TypeEnum> byValueMap = Arrays.stream(TypeEnum.values())
|
||||
.collect(Collectors.toMap(TypeEnum::getValue, Function.identity()));
|
||||
|
||||
/**
|
||||
* 根据value返回NodeType,可能为null
|
||||
*
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
public static TypeEnum getByValue(Integer value) {
|
||||
return byValueMap.get(value);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package cn.axzo.orgmanax.infra.dao.node.mapper;
|
||||
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
|
||||
@ -1,15 +1,11 @@
|
||||
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;
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
||||
import cn.axzo.orgmanax.infra.dao.node.entity.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;
|
||||
@ -27,14 +23,11 @@ import java.util.Set;
|
||||
*/
|
||||
public interface NodeQueryRepository {
|
||||
|
||||
default List<NodeResp> list(ListReq req) {
|
||||
PageReq pageReq = BeanUtil.toBean(req, PageReq.class);
|
||||
pageReq.setPage(1);
|
||||
pageReq.setPageSize(1000);
|
||||
return page(pageReq).getData();
|
||||
}
|
||||
PageResp<NodeResp> page(ListNodeReq req);
|
||||
|
||||
PageResp<NodeResp> page(PageReq req);
|
||||
default List<NodeResp> list(ListNodeReq req) {
|
||||
return page(req).getData();
|
||||
}
|
||||
|
||||
default NodeResp one(OneReq req) {
|
||||
return oneOpt(req).orElse(null);
|
||||
@ -42,7 +35,7 @@ public interface NodeQueryRepository {
|
||||
|
||||
default Optional<NodeResp> oneOpt(OneReq req) {
|
||||
req.check();
|
||||
PageReq page = BeanUtil.toBean(req, PageReq.class);
|
||||
ListNodeReq page = BeanUtil.toBean(req, ListNodeReq.class);
|
||||
page.setPage(1);
|
||||
page.setPageSize(1);
|
||||
return page(page).getData().stream().findFirst();
|
||||
@ -61,49 +54,6 @@ public interface NodeQueryRepository {
|
||||
}
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@SuperBuilder
|
||||
class ListReq {
|
||||
@CriteriaField
|
||||
private Long id;
|
||||
@CriteriaField(field = "id", operator = Operator.IN)
|
||||
private Set<Long> ids;
|
||||
/**
|
||||
* 用于遍历数据
|
||||
*/
|
||||
@CriteriaField(field = "id", operator = Operator.GT)
|
||||
private Long idGt;
|
||||
@CriteriaField
|
||||
private Long organizationalUnitId;
|
||||
@CriteriaField(field = "organizationalUnitId", operator = Operator.IN)
|
||||
private Long organizationalUnitIds;
|
||||
|
||||
@CriteriaField
|
||||
private Boolean needParent;
|
||||
|
||||
public QueryWrapper<OrganizationalNode> toWrapper() {
|
||||
QueryWrapper<OrganizationalNode> wrapper = QueryWrapperHelper.fromBean(this, OrganizationalNode.class);
|
||||
|
||||
return wrapper;
|
||||
}
|
||||
}
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@SuperBuilder
|
||||
class PageReq extends ListReq implements IPageReq {
|
||||
@CriteriaField(ignore = true)
|
||||
Integer page;
|
||||
@CriteriaField(ignore = true)
|
||||
Integer pageSize;
|
||||
@CriteriaField(ignore = true)
|
||||
List<String> sort;
|
||||
}
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@ -111,9 +61,9 @@ public interface NodeQueryRepository {
|
||||
@SuperBuilder
|
||||
class NodeResp extends OrganizationalNode {
|
||||
/**
|
||||
* 查询参数指定 needParentInfo = true,才会返回
|
||||
* 查询参数指定 needParent = true,才会返回
|
||||
*
|
||||
* @see ListReq#needParent
|
||||
* @see ListNodeReq#getNeedParent()
|
||||
*/
|
||||
private NodeResp parentNode;
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package cn.axzo.orgmanax.infra.dao.node.repository;
|
||||
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
|
||||
@ -1,13 +1,16 @@
|
||||
package cn.axzo.orgmanax.infra.dao.node.repository.impl;
|
||||
|
||||
import cn.axzo.foundation.dao.support.converter.PageConverter;
|
||||
import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
||||
import cn.axzo.orgmanax.infra.dao.node.dao.NodeDao;
|
||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||
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;
|
||||
@ -31,9 +34,10 @@ public class NodeQueryRepositoryImpl implements NodeQueryRepository {
|
||||
private final NodeDao nodeDao;
|
||||
|
||||
@Override
|
||||
public PageResp<NodeResp> page(PageReq req) {
|
||||
public PageResp<NodeResp> page(ListNodeReq req) {
|
||||
IPage<OrganizationalNode> page = PageConverter.toMybatis(req, OrganizationalNode.class);
|
||||
IPage<NodeResp> results = nodeDao.page(page, req.toWrapper())
|
||||
QueryWrapper<OrganizationalNode> wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNode.class);
|
||||
IPage<NodeResp> results = nodeDao.page(page, wrapper)
|
||||
.convert(e -> BeanUtil.toBean(e, NodeResp.class));
|
||||
PageResp<NodeResp> resp = PageConverter.toResp(results);
|
||||
List<NodeResp> records = resp.getData();
|
||||
@ -46,7 +50,7 @@ public class NodeQueryRepositoryImpl implements NodeQueryRepository {
|
||||
return resp;
|
||||
}
|
||||
|
||||
private void assembleParentNode(PageReq req, List<NodeResp> records) {
|
||||
private void assembleParentNode(ListNodeReq req, List<NodeResp> records) {
|
||||
if (!BooleanUtil.isTrue(req.getNeedParent())) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
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.entity.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.dao.NodeDao;
|
||||
import cn.axzo.orgmanax.infra.dao.node.repository.NodeUpsertRepository;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@ -1,11 +0,0 @@
|
||||
package cn.axzo.orgmanax.infra.dao.nodeuser.convert;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
public interface OrgNodeUserInfraConvert {
|
||||
|
||||
OrgNodeUserInfraConvert INSTANCE = Mappers.getMapper(OrgNodeUserInfraConvert.class);
|
||||
|
||||
}
|
||||
@ -1,8 +1,6 @@
|
||||
package cn.axzo.orgmanax.infra.dao.nodeuser.dao;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.mapper.OrganizationalNodeMapper;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.DO.OrganizationalNodeUser;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.mapper.OrganizationalNodeUserMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package cn.axzo.orgmanax.infra.dao.nodeuser.DO;
|
||||
package cn.axzo.orgmanax.infra.dao.nodeuser.entity;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package cn.axzo.orgmanax.infra.dao.nodeuser.mapper;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.DO.OrganizationalNodeUser;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
|
||||
@ -1,11 +0,0 @@
|
||||
package cn.axzo.orgmanax.infra.dao.orguser.convert;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
public interface OrgUserInfraConvert {
|
||||
|
||||
OrgUserInfraConvert INSTANCE = Mappers.getMapper(OrgUserInfraConvert.class);
|
||||
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
package cn.axzo.orgmanax.infra.dao.orguser.dao;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.orguser.DO.OrgUser;
|
||||
import cn.axzo.orgmanax.infra.dao.orguser.entity.OrgUser;
|
||||
import cn.axzo.orgmanax.infra.dao.orguser.mapper.OrgUserMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package cn.axzo.orgmanax.infra.dao.orguser.DO;
|
||||
package cn.axzo.orgmanax.infra.dao.orguser.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package cn.axzo.orgmanax.infra.dao.orguser.mapper;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.orguser.DO.OrgUser;
|
||||
import cn.axzo.orgmanax.infra.dao.orguser.entity.OrgUser;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
|
||||
@ -1,11 +0,0 @@
|
||||
package cn.axzo.orgmanax.infra.dao.unit.convert;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
public interface UnitInfraConvert {
|
||||
|
||||
UnitInfraConvert INSTANCE = Mappers.getMapper(UnitInfraConvert.class);
|
||||
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
package cn.axzo.orgmanax.infra.dao.unit.dao;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.unit.DO.OrganizationalUnit;
|
||||
import cn.axzo.orgmanax.infra.dao.unit.entity.OrganizationalUnit;
|
||||
import cn.axzo.orgmanax.infra.dao.unit.mapper.OrganizationalUnitMapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package cn.axzo.orgmanax.infra.dao.unit.DO;
|
||||
package cn.axzo.orgmanax.infra.dao.unit.entity;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package cn.axzo.orgmanax.infra.dao.unit.mapper;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.unit.DO.OrganizationalUnit;
|
||||
import cn.axzo.orgmanax.infra.dao.unit.entity.OrganizationalUnit;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
|
||||
@ -1,4 +1,113 @@
|
||||
package cn.axzo.orgmanax.infra.dao.unit.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;
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.orgmanax.infra.dao.unit.entity.OrganizationalUnit;
|
||||
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;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
public interface UnitQueryRepository {
|
||||
|
||||
PageResp<UnitResp> page(PageReq req);
|
||||
|
||||
default List<UnitResp> list(ListReq req) {
|
||||
PageReq pageReq = BeanUtil.toBean(req, PageReq.class);
|
||||
pageReq.setPage(1);
|
||||
pageReq.setPageSize(1000);
|
||||
return page(pageReq).getData();
|
||||
}
|
||||
|
||||
default UnitResp one(OneReq req) {
|
||||
return oneOpt(req).orElse(null);
|
||||
}
|
||||
|
||||
default Optional<UnitResp> oneOpt(OneReq req) {
|
||||
req.check();
|
||||
PageReq page = BeanUtil.toBean(req, PageReq.class);
|
||||
page.setPage(1);
|
||||
page.setPageSize(1);
|
||||
return page(page).getData().stream().findFirst();
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@SuperBuilder
|
||||
class OneReq {
|
||||
private Long id;
|
||||
private Set<Long> ids;
|
||||
|
||||
public void check() {
|
||||
Preconditions.checkArgument(id != null || CollUtil.isNotEmpty(ids), "参数异常");
|
||||
}
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@SuperBuilder
|
||||
class ListReq {
|
||||
@CriteriaField
|
||||
private Long id;
|
||||
@CriteriaField(field = "id", operator = Operator.IN)
|
||||
private Set<Long> ids;
|
||||
/**
|
||||
* 用于遍历数据
|
||||
*/
|
||||
@CriteriaField(field = "id", operator = Operator.GT)
|
||||
private Long idGt;
|
||||
@CriteriaField
|
||||
private Long parentId;
|
||||
@CriteriaField(field = "parentId", operator = Operator.IN)
|
||||
private Set<Long> parentIds;
|
||||
@CriteriaField
|
||||
private String name;
|
||||
@CriteriaField(field = "name", operator = Operator.LIKE)
|
||||
private String nameLike;
|
||||
@CriteriaField
|
||||
private Integer nature;
|
||||
@CriteriaField
|
||||
private String uniformSocialCreditCode;
|
||||
@CriteriaField
|
||||
private Integer entTag;
|
||||
}
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@SuperBuilder
|
||||
class PageReq extends ListReq implements IPageReq {
|
||||
@CriteriaField(ignore = true)
|
||||
Integer page;
|
||||
@CriteriaField(ignore = true)
|
||||
Integer pageSize;
|
||||
@CriteriaField(ignore = true)
|
||||
List<String> sort;
|
||||
}
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@SuperBuilder
|
||||
class UnitResp extends OrganizationalUnit {
|
||||
// 按需扩展字段,占个位。避免报错
|
||||
private String todo;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,10 +1,40 @@
|
||||
package cn.axzo.orgmanax.infra.dao.unit.repository.impl;
|
||||
|
||||
import cn.axzo.foundation.dao.support.converter.PageConverter;
|
||||
import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
|
||||
import cn.axzo.foundation.page.PageResp;
|
||||
import cn.axzo.orgmanax.infra.dao.unit.dao.UnitDao;
|
||||
import cn.axzo.orgmanax.infra.dao.unit.entity.OrganizationalUnit;
|
||||
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class UnitQueryRepositoryImpl implements UnitQueryRepository {
|
||||
|
||||
private final UnitDao unitDao;
|
||||
|
||||
@Override
|
||||
public PageResp<UnitResp> page(PageReq req) {
|
||||
IPage<OrganizationalUnit> page = PageConverter.toMybatis(req, OrganizationalUnit.class);
|
||||
QueryWrapper<OrganizationalUnit> wrapper = QueryWrapperHelper.fromBean(req, OrganizationalUnit.class);
|
||||
IPage<UnitResp> results = unitDao.page(page, wrapper)
|
||||
.convert(e -> BeanUtil.toBean(e, UnitResp.class));
|
||||
PageResp<UnitResp> resp = PageConverter.toResp(results);
|
||||
List<UnitResp> records = resp.getData();
|
||||
if (CollUtil.isEmpty(records)) {
|
||||
return resp;
|
||||
}
|
||||
|
||||
return resp;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@ import cn.axzo.foundation.exception.Axssert;
|
||||
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.NodeListReq;
|
||||
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
||||
import cn.axzo.orgmanax.api.node.req.NodeProcessReq;
|
||||
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
||||
import cn.axzo.orgmanax.server.node.service.NodeService;
|
||||
@ -43,7 +43,7 @@ public class NodeController implements OrgNodeApi {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<PageResp<OrgNodeDTO>> list(NodeListReq req) {
|
||||
public ApiResult<PageResp<OrgNodeDTO>> list(ListNodeReq req) {
|
||||
return ApiResult.success(nodeService.page(req));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
package cn.axzo.orgmanax.server.node.convert;
|
||||
|
||||
import cn.axzo.orgmanax.api.node.req.ProcessNodeReq;
|
||||
import cn.axzo.orgmanax.server.node.foundation.entity.NodeCreate;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/12/5 10:32
|
||||
*/
|
||||
@Mapper
|
||||
public interface NodeApiConvert {
|
||||
|
||||
NodeApiConvert INSTANCE = Mappers.getMapper(NodeApiConvert.class);
|
||||
NodeCreate toFoundation(ProcessNodeReq req);
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
package cn.axzo.orgmanax.server.node.event.inner;
|
||||
|
||||
import cn.axzo.foundation.event.support.Event;
|
||||
import cn.axzo.orgmanax.infra.event.config.RocketMQEventConfig;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public enum NodeEventType {
|
||||
NODE_UPSERTED("node-upserted", "验收单新增/更新事件"),
|
||||
;
|
||||
|
||||
NodeEventType(String name, String desc) {
|
||||
this.eventCode = Event.EventCode.builder()
|
||||
.module(RocketMQEventConfig.DEFAULT_MODULE)
|
||||
.name(name)
|
||||
.build();
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private String desc;
|
||||
private Event.EventCode eventCode;
|
||||
}
|
||||
@ -0,0 +1,29 @@
|
||||
package cn.axzo.orgmanax.server.node.event.inner.payload;
|
||||
|
||||
import cn.axzo.foundation.event.support.AbstractDiffablePayload;
|
||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public class NodeUpsertedPayload extends AbstractDiffablePayload<NodeUpsertedPayload> {
|
||||
private OrganizationalNode oldValue;
|
||||
private OrganizationalNode newValue;
|
||||
private JSONObject ext;
|
||||
|
||||
/**
|
||||
* 勿删除,json序列化会使用
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Integer getNodeType() {
|
||||
return ObjectUtils.firstNonNull(oldValue, newValue).getNodeType();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 部门MQ事件相关的内容
|
||||
*/
|
||||
package cn.axzo.orgmanax.server.node.event;
|
||||
@ -1,7 +1,7 @@
|
||||
package cn.axzo.orgmanax.server.node.foundation;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.server.node.foundation.entity.NodeCreate;
|
||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.server.node.foundation.req.NodeCreate;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
public interface NodeFoundationService {
|
||||
@ -14,4 +14,6 @@ public interface NodeFoundationService {
|
||||
@Transactional(rollbackFor = Throwable.class)
|
||||
OrganizationalNode create(NodeCreate nodeCreate);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,18 +0,0 @@
|
||||
package cn.axzo.orgmanax.server.node.foundation.convert;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.server.node.foundation.entity.NodeCreate;
|
||||
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 toDo(NodeCreate req);
|
||||
|
||||
}
|
||||
@ -1,52 +0,0 @@
|
||||
package cn.axzo.orgmanax.server.node.foundation.entity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 部门相关操作
|
||||
*
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/12/5 10:28
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public class NodeCreate {
|
||||
|
||||
|
||||
/**
|
||||
* 单位ID
|
||||
*/
|
||||
private Long organizationalUnitId;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
private String organizationalNodeName;
|
||||
|
||||
/**
|
||||
* 部门类型
|
||||
*/
|
||||
private Integer nodeType;
|
||||
|
||||
/**
|
||||
* 上级部门ID
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 简介
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private Long operatorId;
|
||||
|
||||
|
||||
}
|
||||
@ -1,13 +1,17 @@
|
||||
package cn.axzo.orgmanax.server.node.foundation.impl;
|
||||
|
||||
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.infra.dao.node.DO.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.node.repository.NodeUpsertRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
|
||||
import cn.axzo.orgmanax.server.node.event.inner.NodeEventType;
|
||||
import cn.axzo.orgmanax.server.node.event.inner.payload.NodeUpsertedPayload;
|
||||
import cn.axzo.orgmanax.server.node.foundation.NodeFoundationService;
|
||||
import cn.axzo.orgmanax.server.node.foundation.convert.NodeConvert;
|
||||
import cn.axzo.orgmanax.server.node.foundation.entity.NodeCreate;
|
||||
import cn.axzo.orgmanax.server.node.foundation.req.NodeCreate;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@ -22,6 +26,7 @@ public class NodeFoundationServiceImpl implements NodeFoundationService {
|
||||
|
||||
private final NodeQueryRepository nodeQueryRepository;
|
||||
private final NodeUpsertRepository nodeUpsertRepository;
|
||||
private final UnitQueryRepository unitQueryRepository;
|
||||
private final EventProducer eventProducer;
|
||||
|
||||
/**
|
||||
@ -33,6 +38,12 @@ public class NodeFoundationServiceImpl implements NodeFoundationService {
|
||||
@Transactional
|
||||
@Override
|
||||
public OrganizationalNode create(NodeCreate nodeCreate) {
|
||||
nodeCreate.check();
|
||||
|
||||
// 单位是否存在
|
||||
unitQueryRepository.oneOpt(UnitQueryRepository.OneReq.builder().id(nodeCreate.getOrganizationalUnitId()).build())
|
||||
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("部门所在单位不存在{}", nodeCreate.getOrganizationalUnitId()));
|
||||
|
||||
// 获取上级节点,为了重新计算path、topNodeId等数据
|
||||
OrganizationalNode parentNode = nodeCreate.getParentId() == null || nodeCreate.getParentId() <= 0L ? null :
|
||||
nodeQueryRepository.oneOpt(NodeQueryRepository.OneReq.builder().id(nodeCreate.getParentId()).build())
|
||||
@ -40,7 +51,7 @@ public class NodeFoundationServiceImpl implements NodeFoundationService {
|
||||
|
||||
// 转换为领域对象
|
||||
// 持久化 -> mapstruct?
|
||||
OrganizationalNode organizationalNode = NodeConvert.INSTANCE.toDo(nodeCreate);
|
||||
OrganizationalNode organizationalNode = nodeCreate.toEntity();
|
||||
nodeUpsertRepository.create(organizationalNode);
|
||||
|
||||
// 重新计算path、topNodeId等数据。 未来也可以添加workspaceId等信息
|
||||
@ -48,9 +59,22 @@ public class NodeFoundationServiceImpl implements NodeFoundationService {
|
||||
|
||||
//更新数据
|
||||
nodeUpsertRepository.update(organizationalNode);
|
||||
NodeQueryRepository.NodeResp saved = nodeQueryRepository.one(NodeQueryRepository.OneReq.builder().id(organizationalNode.getId()).build());
|
||||
|
||||
// 发送数据变更基础MQ
|
||||
// eventProducer.send(null);
|
||||
eventProducer.send(Event.builder()
|
||||
.eventCode(NodeEventType.NODE_UPSERTED.getEventCode())
|
||||
.operatorId(nodeCreate.getOperatorId() + "")
|
||||
.operatorType(getClass().getSimpleName())
|
||||
.targetType("organizational_node_id")
|
||||
.targetId(saved.getId() + "")
|
||||
.shardingKey(saved.getId() + "")
|
||||
.data(NodeUpsertedPayload.builder()
|
||||
.newValue(saved)
|
||||
.oldValue(null)
|
||||
.ext(nodeCreate.getExtra())
|
||||
.build())
|
||||
.build());
|
||||
|
||||
// 返回结果
|
||||
return nodeQueryRepository.one(NodeQueryRepository.OneReq.builder().id(organizationalNode.getId()).build());
|
||||
|
||||
@ -0,0 +1,92 @@
|
||||
package cn.axzo.orgmanax.server.node.foundation.req;
|
||||
|
||||
import cn.axzo.foundation.exception.Axssert;
|
||||
import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.base.Enums;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 部门相关操作
|
||||
*
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/12/5 10:28
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public class NodeCreate {
|
||||
|
||||
/**
|
||||
* 单位ID
|
||||
*/
|
||||
private Long organizationalUnitId;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
private String nodeName;
|
||||
|
||||
/**
|
||||
* 部门类型
|
||||
*/
|
||||
private Integer nodeType;
|
||||
|
||||
/**
|
||||
* 上级部门ID
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 简介
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private Long operatorId;
|
||||
/**
|
||||
* 创建部门的端
|
||||
*/
|
||||
private String terminal;
|
||||
/**
|
||||
* 创建部门的页面,需前端传入
|
||||
*/
|
||||
private String page;
|
||||
/**
|
||||
* 扩展信息
|
||||
*/
|
||||
private JSONObject extra;
|
||||
/**
|
||||
* 扩展信息
|
||||
*/
|
||||
private JSONObject profile;
|
||||
|
||||
public OrganizationalNode toEntity() {
|
||||
OrganizationalNode node = BeanUtil.toBean(this, OrganizationalNode.class);
|
||||
node.setCreateBy(operatorId);
|
||||
// 将 terminal、page 信息存储到ext
|
||||
node.setExtra(Optional.ofNullable(extra).orElseGet(JSONObject::new)
|
||||
.fluentPut("createScene", ImmutableMap.of("terminal", StrUtil.firstNonBlank(terminal, "UNKNOWN"),
|
||||
"page", StrUtil.firstNonBlank(page, "UNKNOWN"))));
|
||||
return node;
|
||||
}
|
||||
|
||||
public void check() {
|
||||
Axssert.notNull(operatorId, BizResultCode.INVALID_PARAM, "操作人不能为空");
|
||||
Axssert.notNull(organizationalUnitId, BizResultCode.INVALID_PARAM, "部门所属单位不能为空");
|
||||
OrganizationalNode.TypeEnum nodeTypeEnum = OrganizationalNode.TypeEnum.getByValue(nodeType);
|
||||
Axssert.check(nodeTypeEnum != null, BizResultCode.INVALID_PARAM, "部门类型不能为空{}", nodeTypeEnum);
|
||||
}
|
||||
}
|
||||
@ -2,7 +2,7 @@ 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.NodeListReq;
|
||||
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
||||
import cn.axzo.orgmanax.api.node.req.NodeProcessReq;
|
||||
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
||||
import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||
@ -19,9 +19,9 @@ public interface NodeService {
|
||||
|
||||
NodeProcessor.ProcessResult process(NodeProcessReq req);
|
||||
|
||||
PageResp<OrgNodeDTO> page(NodeListReq req);
|
||||
PageResp<OrgNodeDTO> page(ListNodeReq req);
|
||||
|
||||
default List<OrgNodeDTO> list(NodeListReq req) {
|
||||
default List<OrgNodeDTO> list(ListNodeReq req) {
|
||||
return page(req).getData();
|
||||
}
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ 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.ListNodeReq;
|
||||
import cn.axzo.orgmanax.api.node.req.NodeProcessReq;
|
||||
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
||||
import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||
@ -34,7 +34,7 @@ public class NodeServiceImpl implements NodeService {
|
||||
// 如果指定了id,校验部门是否存在,并加载出node,以便后续使用
|
||||
NodeQueryRepository.NodeResp current = req.getId() == null ? null
|
||||
: nodeQueryRepository.oneOpt(NodeQueryRepository.OneReq.builder().id(req.getId()).build())
|
||||
.orElseThrow(BizResultCode.ENTITY_NOT_FOUND::toException);
|
||||
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("要操作的部门不存在,{}", req.getId()));
|
||||
|
||||
// 构建processor所需上下文
|
||||
NodeProcessor.ProcessContext processContext = NodeProcessor.ProcessContext.builder()
|
||||
@ -49,9 +49,8 @@ public class NodeServiceImpl implements NodeService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResp<OrgNodeDTO> page(NodeListReq req) {
|
||||
NodeQueryRepository.PageReq pageReq = BeanUtil.toBean(req, NodeQueryRepository.PageReq.class);
|
||||
PageResp<NodeQueryRepository.NodeResp> page = nodeQueryRepository.page(pageReq);
|
||||
public PageResp<OrgNodeDTO> page(ListNodeReq req) {
|
||||
PageResp<NodeQueryRepository.NodeResp> page = nodeQueryRepository.page(req);
|
||||
List<OrgNodeDTO> 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);
|
||||
|
||||
@ -1,11 +1,9 @@
|
||||
package cn.axzo.orgmanax.server.node.service.processor.impl;
|
||||
|
||||
import cn.axzo.foundation.exception.Axssert;
|
||||
import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.server.node.foundation.NodeFoundationService;
|
||||
import cn.axzo.orgmanax.server.node.foundation.entity.NodeCreate;
|
||||
import cn.axzo.orgmanax.server.node.foundation.req.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;
|
||||
@ -27,18 +25,12 @@ public class CreateNodeProcessor implements NodeProcessor {
|
||||
@Override
|
||||
public ProcessResult process(ProcessContext context) {
|
||||
// 转成该处理器关注的参数对象
|
||||
Param param = context.getParams().toJavaObject(Param.class);
|
||||
// basic check
|
||||
param.check();
|
||||
// 创建普通部门数据
|
||||
NodeCreate nodeCreate = BeanUtil.toBean(param, NodeCreate.class);
|
||||
// ProcessOrgNodeResp processOrgNodeResp = nodeFoundationService.create(nodeCreate);
|
||||
|
||||
// 发送部门创建MQ消息 - 业务事件
|
||||
// eventProducer.send(null);
|
||||
NodeCreate nodeCreate = context.getParams().toJavaObject(NodeCreate.class);
|
||||
OrganizationalNode savedNode = nodeFoundationService.create(nodeCreate);
|
||||
// 创建部门的通用MQ,在create方法里面已经处理。此处不用再发MQ
|
||||
|
||||
// 返回数据
|
||||
return ProcessResult.success((JSONObject) JSONObject.toJSON(processOrgNodeResp));
|
||||
return ProcessResult.success((JSONObject) JSONObject.toJSON(savedNode));
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@ -46,12 +38,41 @@ public class CreateNodeProcessor implements NodeProcessor {
|
||||
@Data
|
||||
@Builder
|
||||
public static class Param {
|
||||
|
||||
/**
|
||||
* 单位ID
|
||||
*/
|
||||
private Long organizationalUnitId;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
private String organizationalNodeName;
|
||||
|
||||
/**
|
||||
* 部门类型
|
||||
*/
|
||||
private Integer nodeType;
|
||||
|
||||
/**
|
||||
* 上级部门ID
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 简介
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private Long operatorId;
|
||||
|
||||
private JSONObject ext;
|
||||
|
||||
public void check() {
|
||||
// checks
|
||||
Axssert.notNull(operatorId, BizResultCode.INVALID_PARAM, "操作人不能为空");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,11 @@
|
||||
package cn.axzo.orgmanax.server.node.service.processor.impl;
|
||||
|
||||
import cn.axzo.foundation.exception.Axssert;
|
||||
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -12,7 +17,25 @@ import org.springframework.stereotype.Component;
|
||||
public class UpdateNodeProcessor implements NodeProcessor {
|
||||
@Override
|
||||
public ProcessResult process(ProcessContext context) {
|
||||
Axssert.checkNonNull(context.getParams(), "更新部门失败,参数不能为null");
|
||||
Axssert.checkNonNull(context.getNode(), "要更新的部门不存在");
|
||||
Param param = context.getParams().toJavaObject(Param.class);
|
||||
// check 不可编辑的内容 ()
|
||||
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public static class Param {
|
||||
private Long id;
|
||||
private String nodeName;
|
||||
private String remark;
|
||||
private Integer sort;
|
||||
private Integer syncState;
|
||||
private Integer extType;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,14 +0,0 @@
|
||||
package cn.axzo.orgmanax.server.unit;
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author tanjie@axzo.cn
|
||||
* @date 2024/12/2 15:01
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/organizational-unit")
|
||||
public class OrganizationalUnit {
|
||||
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package cn.axzo.orgmanax.server.unit.controller;
|
||||
|
||||
import cn.axzo.foundation.result.ApiResult;
|
||||
import cn.axzo.orgmanax.api.unit.feign.OrgUnitApi;
|
||||
import cn.axzo.orgmanax.api.unit.req.CreateUnitReq;
|
||||
import cn.axzo.orgmanax.api.unit.req.ListUnitReq;
|
||||
import cn.axzo.orgmanax.api.unit.req.UpdateUnitReq;
|
||||
import cn.axzo.orgmanax.api.unit.resp.CreateUnitResp;
|
||||
import cn.axzo.orgmanax.api.unit.resp.ListUnitResp;
|
||||
import cn.axzo.orgmanax.api.unit.resp.UpdateUnitResp;
|
||||
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 15:01
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping
|
||||
@RequiredArgsConstructor
|
||||
public class UnitController implements OrgUnitApi {
|
||||
|
||||
@Override
|
||||
public ApiResult<CreateUnitResp> create(CreateUnitReq req) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<UpdateUnitResp> update(UpdateUnitReq req) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<ListUnitResp> list(ListUnitReq req) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
package cn.axzo.orgmanax.server.unit.event.inner;
|
||||
|
||||
import cn.axzo.foundation.event.support.Event;
|
||||
import cn.axzo.orgmanax.infra.event.config.RocketMQEventConfig;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public enum UnitEventType {
|
||||
NODE_UPSERTED("unit-upserted", "验收单新增/更新事件"),
|
||||
;
|
||||
|
||||
UnitEventType(String name, String desc) {
|
||||
this.eventCode = Event.EventCode.builder()
|
||||
.module(RocketMQEventConfig.DEFAULT_MODULE)
|
||||
.name(name)
|
||||
.build();
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
private String desc;
|
||||
private Event.EventCode eventCode;
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
package cn.axzo.orgmanax.server.unit.event.inner.payload;
|
||||
|
||||
import cn.axzo.foundation.event.support.AbstractDiffablePayload;
|
||||
import cn.axzo.orgmanax.infra.dao.unit.entity.OrganizationalUnit;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public class UnitUpsertedPayload extends AbstractDiffablePayload<UnitUpsertedPayload> {
|
||||
private OrganizationalUnit oldValue;
|
||||
private OrganizationalUnit newValue;
|
||||
private JSONObject ext;
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
/**
|
||||
* 单位MQ事件相关的内容
|
||||
*/
|
||||
package cn.axzo.orgmanax.server.unit.event;
|
||||
@ -0,0 +1,4 @@
|
||||
package cn.axzo.orgmanax.server.unit.foundation;
|
||||
|
||||
public interface UnitFoundationService {
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package cn.axzo.orgmanax.server.unit.foundation.impl;
|
||||
|
||||
import cn.axzo.orgmanax.server.unit.foundation.UnitFoundationService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class UnitFoundationServiceImpl implements UnitFoundationService {
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
package cn.axzo.orgmanax.server.unit.service;
|
||||
|
||||
public interface UnitService {
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user