feature(REQ-3282): 提交 创建部门代码;提交部分单位代码;

This commit is contained in:
周敏 2024-12-10 18:50:48 +08:00
parent af27f5c52f
commit 0357481bf4
63 changed files with 690 additions and 385 deletions

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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 {
}

View File

@ -0,0 +1,9 @@
package cn.axzo.orgmanax.api.unit.req;
import lombok.Data;
import java.io.Serializable;
@Data
public class CreateUnitReq implements Serializable {
}

View File

@ -11,7 +11,7 @@ import java.io.Serializable;
@AllArgsConstructor
@Data
@Builder
public class ListOrgUnitReq implements Serializable {
public class ListUnitReq implements Serializable {
private String test;

View File

@ -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 {
}

View File

@ -0,0 +1,9 @@
package cn.axzo.orgmanax.api.unit.req;
import lombok.Data;
import java.io.Serializable;
@Data
public class UpdateUnitReq implements Serializable {
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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 {
}

View File

@ -0,0 +1,9 @@
package cn.axzo.orgmanax.api.unit.resp;
import lombok.Data;
import java.io.Serializable;
@Data
public class ListUnitResp implements Serializable {
}

View File

@ -4,6 +4,6 @@ import lombok.Data;
import java.io.Serializable;
@Data
public class UpdateOrgUnitResp implements Serializable {
public class UpdateUnitResp implements Serializable {
}

View File

@ -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>

View File

@ -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);
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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);
}

View File

@ -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));
}
}

View File

@ -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);
}
}
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -1,4 +1,4 @@
package cn.axzo.orgmanax.infra.dao.orguser.DO;
package cn.axzo.orgmanax.infra.dao.orguser.entity;
import java.util.Date;

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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));
}
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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();
}
}

View File

@ -0,0 +1,4 @@
/**
* 部门MQ事件相关的内容
*/
package cn.axzo.orgmanax.server.node.event;

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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()));
// 获取上级节点为了重新计算pathtopNodeId等数据
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);
// 重新计算pathtopNodeId等数据 未来也可以添加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());

View File

@ -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);
// terminalpage 信息存储到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);
}
}

View File

@ -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();
}

View File

@ -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);

View File

@ -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, "操作人不能为空");
}
}
}

View File

@ -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;
}
}

View File

@ -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 {
}

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -0,0 +1,4 @@
/**
* 单位MQ事件相关的内容
*/
package cn.axzo.orgmanax.server.unit.event;

View File

@ -0,0 +1,4 @@
package cn.axzo.orgmanax.server.unit.foundation;
public interface UnitFoundationService {
}

View File

@ -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 {
}

View File

@ -0,0 +1,5 @@
package cn.axzo.orgmanax.server.unit.service;
public interface UnitService {
}