Merge remote-tracking branch 'refs/remotes/origin/feature/REQ-3282' into feature/REQ-3282-zhh
This commit is contained in:
commit
b884d1c05e
3
.gitignore
vendored
3
.gitignore
vendored
@ -33,4 +33,5 @@ build/
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
.DS_Store
|
||||
**/.flattened-pom.xml
|
||||
|
||||
39
README.md
39
README.md
@ -24,17 +24,17 @@
|
||||
-
|
||||
|
||||
## 接口规范
|
||||
- 所有接口统一采用POST,列表接口需要带上分页且设置默认大小1000条
|
||||
- 所有接口统一采用POST,列表接口需要设置默认大小1000条
|
||||
- 接口出入参,必须使用可扩展的对象类型。不能直接是 String,Integer,或者List这些无法扩展的类型。
|
||||
- 为每个接口定义自己的出入参,不要复用出入参
|
||||
- 接口URL使用 【-】符号进行分割,比如: /orgmanax/node/create-team
|
||||
- 接口定义规范: 使用```/api/org/${domain}/${affiliateDomain}/${action}``` 形式进行定义。如:
|
||||
- 接口定义规范: 使用```/api/${domain}/${affiliateDomain}/${action}``` 形式进行定义。如:
|
||||
```
|
||||
/api/org/unit/create
|
||||
/api/org/unit/update
|
||||
/api/org/node-user/list
|
||||
/api/org/org-user/page
|
||||
/api/org/org-user/page
|
||||
/api/unit/create
|
||||
/api/unit/update
|
||||
/api/node-user/list
|
||||
/api/org-user/page
|
||||
/api/org-user/page
|
||||
```
|
||||
* domain 为主要操作/查询的对象。包含以下值
|
||||
```
|
||||
@ -60,14 +60,14 @@
|
||||
|
||||
## 模块描述
|
||||
|
||||
模块名称 | 功能 | 依赖
|
||||
------ |---------------------------------------------------------------------------------------------------------------------------------------| ----
|
||||
`orgmanax-api` | API层,提供给org-gateway的接口 |无
|
||||
`orgmanax-common`| 公共组件、UTIL等 |无
|
||||
`orgmanax-infra` | 基础设施层,隔离非业务变化,防止外部变化引起内部业务变更。<br/>对接外部依赖,数据库,MQ等中件间 | `orgmanax-common`
|
||||
`orgmanax-integration`| 封装了非基础业务的API,防止外部API无用依赖影响内部。如:apollo-api、gaia-api等 | `orgmanax-infra`
|
||||
`orgmanax-server`| 业务层,核心分为两层:<br/>1、基础层:`foundation` 单域核心逻辑如:创建部门,创建单位 <br/>2、业务层:`service` 如:创建班组、创建小组 <br/>`service` 依赖本域 `foundation`或他域service完成业务 | `orgmanax-api` `orgmanax-common` `orgmanax-infra`
|
||||
`orgmanax-starter`| 启动类 | `orgmanax-api` `orgmanax-common` `orgmanax-infra` `orgmanax-server` `orgmanax-integration`
|
||||
模块名称 | 功能 | 依赖
|
||||
------ |--------------------------------------------------------------------------------------------------------------------------------------------| ----
|
||||
`orgmanax-api` | API层,提供给org-gateway的接口 |无
|
||||
`orgmanax-common`| 公共组件、UTIL等 |无
|
||||
`orgmanax-infra` | 基础设施层,隔离非业务变化,防止外部变化引起内部业务变更。<br/>对接二方服务,数据库,MQ等中件间 | `orgmanax-common`
|
||||
`orgmanax-integration`| 封装了二方服务非纯净版本。如:apollo-api、gaia-api等。等两方服务统一规范后,该层就会移除。 | `orgmanax-infra`
|
||||
`orgmanax-server`| 核心能力层,分为两块:<br/>1、通用能力:`foundation` 单域核心逻辑如:创建部门,创建单位 <br/>2、人岗架业务能力:`service` 如:创建班组、创建小组 <br/>`service` 依赖本域 `foundation`或他域service完成业务 | `orgmanax-api` `orgmanax-common` `orgmanax-infra`
|
||||
`orgmanax-starter`| 启动类 | `orgmanax-api` `orgmanax-common` `orgmanax-infra` `orgmanax-server` `orgmanax-integration`
|
||||
|
||||
|
||||
## 各模块参数约束
|
||||
@ -79,7 +79,6 @@
|
||||
- XXXUpdate:更新入参
|
||||
- DO:数据库实体,DO使用充血模型,包括属性和行为,定义行为的范围:只能是本对象内部属性发生变更的行为
|
||||
|
||||
|
||||
## 目录层级
|
||||
```
|
||||
.
|
||||
@ -137,7 +136,7 @@
|
||||
│ │ │ │ ├── mapper
|
||||
│ │ │ │ └── repository
|
||||
│ │ │ │ └── impl
|
||||
├── orgmanax-integration #封装非基础域API,该层会引用其它域的feign
|
||||
├── orgmanax-integration #封装二方非纯净API
|
||||
│ └── src
|
||||
│ └── main
|
||||
│ └── java
|
||||
@ -153,7 +152,7 @@
|
||||
│ ├── elise
|
||||
│ ├── gaia
|
||||
│ └── profile
|
||||
├── orgmanax-server#业务服务层
|
||||
├── orgmanax-server#核心能力层
|
||||
│ └── src
|
||||
│ ├── main
|
||||
│ │ └── java
|
||||
@ -166,14 +165,14 @@
|
||||
│ │ │ ├── event#协同关系事件
|
||||
│ │ │ │ └── inner
|
||||
│ │ │ │ └── payload
|
||||
│ │ │ └── service# 协同关系业务
|
||||
│ │ │ └── service# 协同关系相关业务
|
||||
│ │ │ └── impl
|
||||
│ │ ├── node#部门相关
|
||||
│ │ │ ├── controller
|
||||
│ │ │ ├── event#部门事件
|
||||
│ │ │ │ └── inner
|
||||
│ │ │ │ └── payload
|
||||
│ │ │ ├── foundation#部门基础功能(如创建部门、更新部门)
|
||||
│ │ │ ├── foundation#部门基础能力层
|
||||
│ │ │ │ ├── impl
|
||||
│ │ │ │ └── req
|
||||
│ │ │ └── service# 部门业务(创建班组、解散班组、更换班组长、创建小组)
|
||||
|
||||
@ -0,0 +1 @@
|
||||
-- 待补充
|
||||
@ -27,7 +27,7 @@ public interface OrgCooperateShipApi {
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/org/cooperate-ship/list")
|
||||
@PostMapping("/api/cooperate-ship/list")
|
||||
ApiResult<List<OrgCooperateShipDTO>> list(@RequestBody @Validated ListOrgCooperateShipReq req);
|
||||
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
|
||||
@NoArgsConstructor
|
||||
@ -14,67 +15,111 @@ import java.util.Set;
|
||||
@Data
|
||||
@Builder
|
||||
public class ListOrgCooperateShipReq {
|
||||
@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;
|
||||
@Builder.Default
|
||||
private Set<Long> ids = Collections.emptySet();
|
||||
|
||||
/**
|
||||
* 用于遍历数据
|
||||
* 工作台id
|
||||
*/
|
||||
@CriteriaField(field = "id", operator = Operator.GT)
|
||||
private Long idGt;
|
||||
|
||||
/**
|
||||
* 工作台ID
|
||||
*/
|
||||
@CriteriaField
|
||||
private Long workspaceId;
|
||||
@CriteriaField(field = "workspaceId", operator = Operator.IN)
|
||||
private Long workspaceIds;
|
||||
|
||||
@CriteriaField
|
||||
private Integer workspaceType;
|
||||
@CriteriaField(field = "workspaceType", operator = Operator.IN)
|
||||
private Set<Integer> workspaceTypes;
|
||||
|
||||
@CriteriaField
|
||||
private Integer status;
|
||||
@CriteriaField(field = "status", operator = Operator.IN)
|
||||
private Set<Integer> statuses;
|
||||
|
||||
@CriteriaField
|
||||
private Integer cooperateType;
|
||||
@CriteriaField(field = "cooperateType", operator = Operator.IN)
|
||||
private Set<Integer> cooperateTypes;
|
||||
|
||||
|
||||
@CriteriaField
|
||||
private Integer partnerShip;
|
||||
@CriteriaField(field = "partnerShip", operator = Operator.IN)
|
||||
private Set<Integer> partnerShips;
|
||||
@Builder.Default
|
||||
private Set<Long> workspaceIds = Collections.emptySet();
|
||||
|
||||
/**
|
||||
* 组织节点id
|
||||
* 工作台类型
|
||||
*/
|
||||
@CriteriaField
|
||||
private Long organizationalNodeId;
|
||||
@CriteriaField(field = "organizationalNodeId", operator = Operator.IN)
|
||||
private Set<Long> organizationalNodeIds;
|
||||
@CriteriaField(field = "workspaceType", operator = Operator.IN)
|
||||
@Builder.Default
|
||||
private Set<Integer> workspaceType = Collections.emptySet();
|
||||
|
||||
@CriteriaField
|
||||
private Long organizationalUnitId;
|
||||
/**
|
||||
* 单位id集合(如果是班组则插入队伍id)
|
||||
*/
|
||||
@CriteriaField(field = "organizationalUnitId", operator = Operator.IN)
|
||||
private Long organizationalUnitIds;
|
||||
@Builder.Default
|
||||
private Set<Long> ouIds = Collections.emptySet();
|
||||
|
||||
@CriteriaField(ignore = true)
|
||||
private Long personId;
|
||||
/**
|
||||
* 指定的协同关系类型
|
||||
*/
|
||||
@CriteriaField(field = "cooperateType", operator = Operator.IN)
|
||||
@Builder.Default
|
||||
private Set<Integer> includeCooperateTypes = Collections.emptySet();
|
||||
/**
|
||||
* 待排除的协同关系类型
|
||||
*/
|
||||
@CriteriaField(field = "cooperateType", operator = Operator.NOT_IN)
|
||||
@Builder.Default
|
||||
private Set<Integer> excludeCooperateTypes = Collections.emptySet();
|
||||
|
||||
@CriteriaField(ignore = true)
|
||||
private Boolean needParent;
|
||||
/**
|
||||
* 节点id
|
||||
*/
|
||||
@CriteriaField(field = "organizationalNodeId", operator = Operator.IN)
|
||||
@Builder.Default
|
||||
private Set<Long> organizationNodeIds = Collections.emptySet();
|
||||
|
||||
/**
|
||||
* 合作关系 1.合作 2.直属
|
||||
*/
|
||||
@CriteriaField(field = "partnerShip", operator = Operator.IN)
|
||||
@Builder.Default
|
||||
private Set<Integer> partnerShips = Collections.emptySet();
|
||||
|
||||
|
||||
/**
|
||||
* 在场状态集合
|
||||
*/
|
||||
@CriteriaField(field = "status", operator = Operator.IN)
|
||||
@Builder.Default
|
||||
private Set<Integer> statuses = Collections.emptySet();
|
||||
|
||||
/**
|
||||
* 需要过滤的personId
|
||||
* personId
|
||||
*/
|
||||
private Long filterPersonId;
|
||||
|
||||
/**
|
||||
* 当personId有值时,为必填项
|
||||
* 1只过滤当前节点数据 2过滤当前节点及以下数据
|
||||
*/
|
||||
private Integer filterPersonType;
|
||||
|
||||
/**
|
||||
* 是否过滤工人
|
||||
*/
|
||||
@Builder.Default
|
||||
private Boolean isFilterWorker = false;
|
||||
|
||||
|
||||
/**
|
||||
* 人员过滤是否包含已退场
|
||||
*/
|
||||
@Builder.Default
|
||||
private Boolean includeExitPerson = false;
|
||||
|
||||
/**
|
||||
* 是否查询祖先节点
|
||||
*/
|
||||
@Builder.Default
|
||||
private Boolean isSelectAncestors = false;
|
||||
|
||||
/**
|
||||
* 是否查询子孙节点
|
||||
*/
|
||||
@Builder.Default
|
||||
private Boolean isSelectDescendant = false;
|
||||
|
||||
/**
|
||||
* 条件:当需要查询上下级数据时启用
|
||||
* 是否只查一级
|
||||
*/
|
||||
@Builder.Default
|
||||
private Boolean isSelectLevelOne = false;
|
||||
|
||||
}
|
||||
|
||||
@ -90,28 +90,4 @@ public class OrgCooperateShipDTO implements Serializable {
|
||||
*/
|
||||
private JSONObject ext;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createAt;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
private Date updateAt;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private Long createBy;
|
||||
|
||||
/**
|
||||
* 修改人
|
||||
*/
|
||||
private Long updateBy;
|
||||
|
||||
/**
|
||||
* 是否删除
|
||||
*/
|
||||
private Long isDelete = 0L;
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ public interface OrgNodeApi {
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/org/node/process")
|
||||
@PostMapping("/api/node/process")
|
||||
ApiResult<JSONObject> process(@RequestBody @Validated ProcessNodeReq req);
|
||||
|
||||
/**
|
||||
@ -39,7 +39,7 @@ public interface OrgNodeApi {
|
||||
* @return
|
||||
* @see ListNodeReq#getPageSize()
|
||||
*/
|
||||
@PostMapping("/api/org/node/list")
|
||||
@PostMapping("/api/node/list")
|
||||
ApiResult<PageResp<OrgNodeDTO>> list(@RequestBody @Validated ListNodeReq req);
|
||||
|
||||
}
|
||||
|
||||
@ -16,36 +16,109 @@ import java.util.Set;
|
||||
@Data
|
||||
@Builder
|
||||
public class ListNodeReq implements IPageReq {
|
||||
@CriteriaField
|
||||
private Long id;
|
||||
@CriteriaField(field = "id", operator = Operator.IN)
|
||||
/**
|
||||
* 页数
|
||||
*/
|
||||
private Integer page;
|
||||
|
||||
/**
|
||||
* 条数
|
||||
*/
|
||||
private Integer pageSize;
|
||||
|
||||
/**
|
||||
* ids
|
||||
*/
|
||||
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的查询,接入方按需分页
|
||||
* 组织单位ids
|
||||
*/
|
||||
@Builder.Default
|
||||
@CriteriaField(ignore = true)
|
||||
Integer pageSize = 1000;
|
||||
@CriteriaField(ignore = true)
|
||||
List<String> sort;
|
||||
private Set<Long> ouIds;
|
||||
|
||||
/**
|
||||
* 节点名称集合
|
||||
*/
|
||||
private Set<String> nodeNames;
|
||||
|
||||
/**
|
||||
* 节点名称查询(模糊)
|
||||
*/
|
||||
private Set<String> nodeName;
|
||||
|
||||
/**
|
||||
* 指定部门类型
|
||||
*/
|
||||
private Set<Integer> includeOrgNodeTypes;
|
||||
/**
|
||||
* 排除部门类型
|
||||
*/
|
||||
private Set<Integer> excludeOrgNodeTypes;
|
||||
|
||||
/**
|
||||
* 顶级节点ID集合
|
||||
*/
|
||||
private Set<Long> topNodeIds;
|
||||
|
||||
/**
|
||||
* 是否查询祖先节点
|
||||
*/
|
||||
private Boolean isSelectAncestors;
|
||||
|
||||
/**
|
||||
* 是否查询子孙节点
|
||||
*/
|
||||
private Boolean isSelectDescendant;
|
||||
|
||||
/**
|
||||
* 是否查询节点用户
|
||||
*/
|
||||
private Boolean isSelectNodeUser;
|
||||
|
||||
/**
|
||||
* 是否查询删除的
|
||||
*/
|
||||
private Boolean isSelectDelete;
|
||||
|
||||
/**
|
||||
* 数据权限缓存数据key
|
||||
*/
|
||||
private String dataPermissionCacheKey;
|
||||
|
||||
/**
|
||||
* 只返回topNode
|
||||
*/
|
||||
private Boolean isSelectTopNodeOnly;
|
||||
|
||||
|
||||
/**
|
||||
* 根据workspace和ouId组合查询
|
||||
*/
|
||||
private Set<WorkspaceOuPair> workspaceOuPairs;
|
||||
|
||||
/**
|
||||
* 需要返回管理员信息
|
||||
*/
|
||||
private Boolean needAdmin;
|
||||
|
||||
/**
|
||||
* 岗位编码
|
||||
*/
|
||||
private Set<String> jobCodes;
|
||||
|
||||
/**
|
||||
* 当前用户personId
|
||||
*/
|
||||
private Long personId;
|
||||
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Builder
|
||||
public static class WorkspaceOuPair {
|
||||
private Long workspaceId;
|
||||
private Long ouId;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ public interface OrgNodeUserApi {
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/org/node-user/process")
|
||||
@PostMapping("/api/node-user/process")
|
||||
ApiResult<JSONObject> process(@RequestBody @Validated ProcessNodeUserReq req);
|
||||
|
||||
/**
|
||||
@ -39,7 +39,7 @@ public interface OrgNodeUserApi {
|
||||
* @return
|
||||
* @see ListNodeUserReq#getPageSize()
|
||||
*/
|
||||
@PostMapping("/api/org/node-user/list")
|
||||
@PostMapping("/api/node-user/list")
|
||||
ApiResult<PageResp<OrgNodeUserDTO>> list(@RequestBody @Validated ListNodeUserReq req);
|
||||
|
||||
}
|
||||
|
||||
@ -19,15 +19,15 @@ import java.util.List;
|
||||
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
|
||||
public interface OrgJobApi {
|
||||
|
||||
@PostMapping("/api/org/job/create")
|
||||
@PostMapping("/api/job/create")
|
||||
ApiResult<OrgJobDTO> create(@RequestBody @Validated CreateOrgJobReq req);
|
||||
|
||||
@PostMapping("/api/org/job/update")
|
||||
@PostMapping("/api/job/update")
|
||||
ApiResult<OrgJobDTO> update(@RequestBody @Validated UpdateOrgJobReq req);
|
||||
|
||||
@PostMapping("/api/org/job/delete")
|
||||
@PostMapping("/api/job/delete")
|
||||
ApiResult<Void> delete(@RequestBody @Validated DeleteOrgJobReq req);
|
||||
|
||||
@PostMapping("/api/org/job/list")
|
||||
@PostMapping("/api/job/list")
|
||||
ApiResult<PageResp<OrgJobDTO>> list(@RequestBody @Validated ListOrgJobReq req);
|
||||
}
|
||||
|
||||
@ -33,7 +33,7 @@ public interface OrgUserApi {
|
||||
* @return
|
||||
* @see ListOrgUserReq#getPageSize()
|
||||
*/
|
||||
@PostMapping("/api/org/org-user/list")
|
||||
@PostMapping("/api/org-user/list")
|
||||
ApiResult<PageResp<OrgUserDTO>> list(@RequestBody @Validated ListOrgUserReq req);
|
||||
|
||||
}
|
||||
|
||||
@ -29,7 +29,7 @@ public interface OrgUnitApi {
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/org/unit/create")
|
||||
@PostMapping("/api/unit/create")
|
||||
ApiResult<CreateUnitResp> create(@RequestBody @Validated CreateUnitReq req);
|
||||
|
||||
/**
|
||||
@ -37,7 +37,7 @@ public interface OrgUnitApi {
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/org/unit/update")
|
||||
@PostMapping("/api/unit/update")
|
||||
ApiResult<UpdateUnitResp> update(@RequestBody @Validated UpdateUnitReq req);
|
||||
|
||||
/**
|
||||
@ -48,7 +48,7 @@ public interface OrgUnitApi {
|
||||
* @return
|
||||
* @see ListUnitReq#getPageSize()
|
||||
*/
|
||||
@PostMapping("/api/org/unit/list")
|
||||
@PostMapping("/api/unit/list")
|
||||
ApiResult<PageResp<OrgUnitDTO>> list(@RequestBody @Validated ListUnitReq req);
|
||||
|
||||
}
|
||||
|
||||
@ -20,7 +20,7 @@ public interface OrgUnitContactApi {
|
||||
/**
|
||||
* 通过单位id获取单位联系人列表
|
||||
*/
|
||||
@PostMapping("/api/org/unit/contact/list")
|
||||
@PostMapping("/api/unit/contact/list")
|
||||
ApiResult<List<OrgUnitContactResp>> list(List<Long> ouIds);
|
||||
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# 查询协同关系
|
||||
POST {{host}}/api/org/cooperate-ship/list
|
||||
POST {{host}}/api/cooperate-ship/list
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# 处理部门相关的逻辑
|
||||
POST {{host}}/api/org/node/process
|
||||
POST {{host}}/api/node/process
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
@ -18,7 +18,7 @@ Accept: application/json
|
||||
###
|
||||
|
||||
# 处理部门相关的逻辑
|
||||
POST {{host}}/api/org/node/list
|
||||
POST {{host}}/api/node/list
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# 分页列表接口
|
||||
POST {{host}}/api/org/node-user/list
|
||||
POST {{host}}/api/node-user/list
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#创建
|
||||
POST {{host}}/api/org/job/create
|
||||
POST {{host}}/api/job/create
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
@ -12,7 +12,7 @@ Accept: application/json
|
||||
###
|
||||
|
||||
#修改
|
||||
POST {{host}}/api/org/job/update
|
||||
POST {{host}}/api/job/update
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
@ -24,7 +24,7 @@ Accept: application/json
|
||||
###
|
||||
|
||||
#删除
|
||||
POST {{host}}/api/org/job/delete
|
||||
POST {{host}}/api/job/delete
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
@ -35,7 +35,7 @@ Accept: application/json
|
||||
###
|
||||
|
||||
# 查询
|
||||
POST {{host}}/api/org/job/list
|
||||
POST {{host}}/api/job/list
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# 查询
|
||||
POST {{host}}/api/org/org-user/list
|
||||
POST {{host}}/api/org-user/list
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# 创建单位
|
||||
POST {{host}}/api/org/unit/create
|
||||
POST {{host}}/api/unit/create
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
@ -11,7 +11,7 @@ Accept: application/json
|
||||
###
|
||||
|
||||
#分页列表接口
|
||||
POST {{host}}/api/org/unit/list
|
||||
POST {{host}}/api/unit/list
|
||||
Content-Type: application/json
|
||||
Accept: application/json
|
||||
|
||||
|
||||
@ -0,0 +1 @@
|
||||
-- 待补充
|
||||
@ -0,0 +1 @@
|
||||
-- 待补充
|
||||
@ -18,8 +18,8 @@ import lombok.experimental.Accessors;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* (SaasCooperateShip)表实体类
|
||||
@ -37,6 +37,9 @@ import java.util.Objects;
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
public class SaasCooperateShip implements Serializable {
|
||||
|
||||
|
||||
public static final String PATH_SPLITER = ",";
|
||||
|
||||
/**
|
||||
* 主健
|
||||
*/
|
||||
@ -164,5 +167,37 @@ public class SaasCooperateShip implements Serializable {
|
||||
private final String desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否为根节点
|
||||
* @param path
|
||||
* @return
|
||||
*/
|
||||
public boolean isRootNode(String path) {
|
||||
return !path.contains(PATH_SPLITER);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从path中提取祖先的节点id
|
||||
* @return
|
||||
*/
|
||||
public List<Long> parseAncestorIdsFromPath() {
|
||||
if (isRootNode(path)) {
|
||||
// 根节点没有父节点
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<Long> parentIds = parsePath(path);
|
||||
// 移除路径的最后一个结点
|
||||
return parentIds.subList(0, parentIds.size() - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析path
|
||||
* @param path
|
||||
* @return
|
||||
*/
|
||||
public List<Long> parsePath(String path) {
|
||||
return Arrays.stream(path.split(PATH_SPLITER)).map(e -> Long.valueOf(e.trim())).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -15,13 +15,13 @@ import java.util.Optional;
|
||||
|
||||
public interface CooperateShipQueryRepository {
|
||||
|
||||
List<CooperateShipResp> list(ListOrgCooperateShipReq req);
|
||||
List<SaasCooperateShip> list(ListOrgCooperateShipReq req);
|
||||
|
||||
default CooperateShipResp one(OneReq req) {
|
||||
default SaasCooperateShip one(OneReq req) {
|
||||
return oneOpt(req).orElse(null);
|
||||
}
|
||||
|
||||
default Optional<CooperateShipResp> oneOpt(OneReq req) {
|
||||
default Optional<SaasCooperateShip> oneOpt(OneReq req) {
|
||||
req.check();
|
||||
ListOrgCooperateShipReq listReq = BeanUtil.toBean(req, ListOrgCooperateShipReq.class);
|
||||
return list(listReq).stream().findFirst();
|
||||
@ -45,7 +45,7 @@ public interface CooperateShipQueryRepository {
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@SuperBuilder
|
||||
class CooperateShipResp extends SaasCooperateShip {
|
||||
class CooperateShip extends SaasCooperateShip {
|
||||
// 按需扩展字段,占个位。避免报错
|
||||
private String todo;
|
||||
}
|
||||
|
||||
@ -27,29 +27,29 @@ public class CooperateShipQueryRepositoryImpl implements CooperateShipQueryRepos
|
||||
private final NodeUserQueryRepository nodeUserQueryRepository;
|
||||
|
||||
@Override
|
||||
public List<CooperateShipResp> list(ListOrgCooperateShipReq req) {
|
||||
public List<SaasCooperateShip> list(ListOrgCooperateShipReq req) {
|
||||
QueryWrapper<SaasCooperateShip> wrapper = QueryWrapperHelper.fromBean(req, SaasCooperateShip.class);
|
||||
if (wrapper.isEmptyOfWhere()) {
|
||||
//
|
||||
log.warn("CooperateShipResp empty of where query. return empty list. req = {}", req);
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<CooperateShipResp> results = cooperateShipDao.list(wrapper)
|
||||
.stream().map(e -> BeanUtil.toBean(e, CooperateShipResp.class)).collect(Collectors.toList());
|
||||
List<SaasCooperateShip> results = cooperateShipDao.list(wrapper)
|
||||
.stream().map(e -> BeanUtil.toBean(e, SaasCooperateShip.class)).collect(Collectors.toList());
|
||||
|
||||
results = filterByPersonIds(results, req);
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
private List<CooperateShipResp> filterByPersonIds(List<CooperateShipResp> results, ListOrgCooperateShipReq req) {
|
||||
if (req.getPersonId() == null) {
|
||||
private List<SaasCooperateShip> filterByPersonIds(List<SaasCooperateShip> results, ListOrgCooperateShipReq req) {
|
||||
if (req.getFilterPersonId() == null) {
|
||||
// filter by personIds
|
||||
return results;
|
||||
}
|
||||
Set<Long> organizationalNodeIds = results.stream().map(SaasCooperateShip::getOrganizationalNodeId).collect(Collectors.toSet());
|
||||
Set<Long> personInNodeIds = nodeUserQueryRepository.list(ListNodeUserReq.builder()
|
||||
.personId(req.getPersonId())
|
||||
.personId(req.getFilterPersonId())
|
||||
.organizationalNodeIds(organizationalNodeIds)
|
||||
.build())
|
||||
.stream().map(NodeUserQueryRepository.NodeUserResp::getTopNodeId).collect(Collectors.toSet());
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
package cn.axzo.orgmanax.server.cooperateship.foundation;
|
||||
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public interface CooperateShipFoundationService {
|
||||
|
||||
/**
|
||||
* 通过person进行过滤
|
||||
* @param filterPersonId
|
||||
* @param list
|
||||
*/
|
||||
void filterByPerson(Long filterPersonId, List<SaasCooperateShip> list);
|
||||
|
||||
/**
|
||||
* 提取祖级的数据
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
Set<Long> extractAncestorIds(List<SaasCooperateShip> list);
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package cn.axzo.orgmanax.server.cooperateship.foundation.impl;
|
||||
|
||||
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
|
||||
import cn.axzo.orgmanax.server.cooperateship.foundation.CooperateShipFoundationService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class CooperateShipFoundationServiceImpl implements CooperateShipFoundationService {
|
||||
|
||||
|
||||
private final NodeUserQueryRepository nodeUserQueryRepository;
|
||||
|
||||
@Override
|
||||
public void filterByPerson(Long filterPersonId, List<SaasCooperateShip> list) {
|
||||
|
||||
if (filterPersonId == null) {
|
||||
return;
|
||||
}
|
||||
Set<Long> organizationalNodeIds = list.stream().map(SaasCooperateShip::getOrganizationalNodeId).collect(Collectors.toSet());
|
||||
Set<Long> personInNodeIds = nodeUserQueryRepository.list(ListNodeUserReq.builder()
|
||||
.personId(filterPersonId)
|
||||
.organizationalNodeIds(organizationalNodeIds)
|
||||
.build())
|
||||
.stream().map(NodeUserQueryRepository.NodeUserResp::getTopNodeId).collect(Collectors.toSet());
|
||||
list.removeIf(t -> !personInNodeIds.contains(t.getOrganizationalNodeId()));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> extractAncestorIds(List<SaasCooperateShip> list) {
|
||||
return list.stream()
|
||||
.flatMap(e -> e.parseAncestorIdsFromPath().stream())
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
}
|
||||
@ -3,6 +3,7 @@ package cn.axzo.orgmanax.server.cooperateship.service;
|
||||
import cn.axzo.foundation.exception.Axssert;
|
||||
import cn.axzo.orgmanax.api.cooperateship.req.ListOrgCooperateShipReq;
|
||||
import cn.axzo.orgmanax.api.cooperateship.resp.OrgCooperateShipDTO;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRepository;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@ -13,7 +14,7 @@ import java.util.List;
|
||||
|
||||
public interface CooperateShipService {
|
||||
|
||||
CooperateShipQueryRepository.CooperateShipResp create(CreateReq req);
|
||||
SaasCooperateShip create(CreateReq req);
|
||||
|
||||
List<OrgCooperateShipDTO> list(ListOrgCooperateShipReq req);
|
||||
|
||||
|
||||
@ -9,26 +9,29 @@ import cn.axzo.orgmanax.api.cooperateship.req.ListOrgCooperateShipReq;
|
||||
import cn.axzo.orgmanax.api.cooperateship.resp.CooperateShipStatusEnum;
|
||||
import cn.axzo.orgmanax.api.cooperateship.resp.CooperateShipTypeEnum;
|
||||
import cn.axzo.orgmanax.api.cooperateship.resp.OrgCooperateShipDTO;
|
||||
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
|
||||
import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||
import cn.axzo.orgmanax.infra.client.workspace.WorkspaceGateway;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipUpsertRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.unit.repository.UnitQueryRepository;
|
||||
import cn.axzo.orgmanax.server.cooperateship.event.inner.CooperateShipEventType;
|
||||
import cn.axzo.orgmanax.server.cooperateship.event.inner.payload.CoopeateShipUpsertedPayload;
|
||||
import cn.axzo.orgmanax.server.cooperateship.foundation.CooperateShipFoundationService;
|
||||
import cn.axzo.orgmanax.server.cooperateship.service.CooperateShipService;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@ -53,9 +56,11 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
private final UnitQueryRepository unitQueryRepository;
|
||||
private final WorkspaceGateway workspaceGateway;
|
||||
private final EventProducer eventProducer;
|
||||
private final CooperateShipFoundationService cooperateShipFoundationService;
|
||||
private final NodeUserQueryRepository nodeUserQueryRepository;
|
||||
|
||||
@Override
|
||||
public CooperateShipQueryRepository.CooperateShipResp create(CreateReq req) {
|
||||
public SaasCooperateShip create(CreateReq req) {
|
||||
// node check
|
||||
NodeQueryRepository.NodeResp node = nodeQueryRepository.oneOpt(NodeQueryRepository.OneReq.builder().id(req.getOrganizationalNodeId()).build())
|
||||
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("部门不存在{}", req.getOrganizationalNodeId()));
|
||||
@ -63,7 +68,7 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
// workspace check
|
||||
WorkspaceDetailResp workspace = workspaceGateway.getDetail(WorkspaceDetailReq.builder().id(req.getWorkspaceId()).build());
|
||||
Axssert.checkNonNull(workspace, "工作台不存在{}", req.getWorkspaceId());
|
||||
CooperateShipQueryRepository.CooperateShipResp parentShip = null;
|
||||
SaasCooperateShip parentShip = null;
|
||||
if (!ALLOWED_TOP_COOPERATE_TYPES.contains(req.getCooperateType())) {
|
||||
Axssert.check(req.getParentId() > 0L, BizResultCode.INVALID_PARAM, "父级协同类型不能为空");
|
||||
parentShip = cooperateShipQueryRepository
|
||||
@ -119,9 +124,26 @@ public class CooperateShipServiceImpl implements CooperateShipService {
|
||||
|
||||
@Override
|
||||
public List<OrgCooperateShipDTO> list(ListOrgCooperateShipReq req) {
|
||||
List<OrgCooperateShipDTO> results = cooperateShipQueryRepository.list(req).stream()
|
||||
.map(e -> BeanUtil.toBean(e, OrgCooperateShipDTO.class)).collect(Collectors.toList());
|
||||
// assemble other data
|
||||
return results;
|
||||
|
||||
boolean isFilterCurrentNodeByPerson = ObjectUtil.isNotNull(req.getFilterPersonId()) && Objects.equals(req.getFilterPersonType(), 1);
|
||||
|
||||
// 根据入参查询数据
|
||||
List<SaasCooperateShip> list = cooperateShipQueryRepository.list(req);
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
// 是否根据person过滤当前节点
|
||||
if (isFilterCurrentNodeByPerson) {
|
||||
cooperateShipFoundationService.filterByPerson(req.getFilterPersonId(), list);
|
||||
}
|
||||
|
||||
// 是否查询祖先
|
||||
if (BooleanUtil.isTrue(req.getIsSelectAncestors())) {
|
||||
Set<Long> ancestorIds = cooperateShipFoundationService.extractAncestorIds(list);
|
||||
List<SaasCooperateShip> ancestorShipNodes = cooperateShipQueryRepository.list(ListOrgCooperateShipReq.builder().ids(ancestorIds).build());
|
||||
list.addAll(ancestorShipNodes);
|
||||
}
|
||||
return BeanUtil.copyToList(list, OrgCooperateShipDTO.class);
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||
import cn.axzo.orgmanax.infra.client.profile.PersonProfileGateway;
|
||||
import cn.axzo.orgmanax.infra.client.profile.dto.ProfileIdentityResp;
|
||||
import cn.axzo.orgmanax.infra.client.profile.dto.ProfilePersonResp;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipQueryRepository;
|
||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||
@ -134,7 +135,7 @@ public class NodeUserFoundationServiceImpl implements NodeUserFoundationService
|
||||
}
|
||||
return cooperateShipQueryRepository.oneOpt(CooperateShipQueryRepository.OneReq.builder()
|
||||
.organizationalNodeId(node.getOrganizationalUnitId())
|
||||
.build()).map(CooperateShipQueryRepository.CooperateShipResp::getWorkspaceId)
|
||||
.build()).map(SaasCooperateShip::getWorkspaceId)
|
||||
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("部门人员所属项目未找到,请稍后重试"));
|
||||
}
|
||||
|
||||
|
||||
@ -29,4 +29,28 @@
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>orgmanax</finalName>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/java</directory>
|
||||
<includes>
|
||||
<include>**/*.xml</include>
|
||||
</includes>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<includeSystemScope>true</includeSystemScope>
|
||||
<mainClass>cn.axzo.orgmanax.Application</mainClass>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
Loading…
Reference in New Issue
Block a user