feature(REQ-3282): NodeUser,SaasCooperateShip的基础接口实现。
This commit is contained in:
parent
9f86ad450b
commit
43d7b0a12e
@ -0,0 +1,33 @@
|
|||||||
|
package cn.axzo.orgmanax.api.cooperateship.feign;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.result.ApiResult;
|
||||||
|
import cn.axzo.orgmanax.api.cooperateship.req.ListOrgCooperateShipReq;
|
||||||
|
import cn.axzo.orgmanax.api.cooperateship.resp.OrgCooperateShipDTO;
|
||||||
|
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;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门相关基础API
|
||||||
|
*
|
||||||
|
* @author tanjie@axzo.cn
|
||||||
|
* @date 2024/12/2 15:40
|
||||||
|
*/
|
||||||
|
@FeignClient(
|
||||||
|
value = "orgmanax",
|
||||||
|
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
|
||||||
|
public interface OrgCooperateShipApi {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列表接口。
|
||||||
|
*
|
||||||
|
* @param req
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/api/org/cooperate-ship/list")
|
||||||
|
ApiResult<List<OrgCooperateShipDTO>> list(@RequestBody @Validated ListOrgCooperateShipReq req);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,81 @@
|
|||||||
|
package cn.axzo.orgmanax.api.cooperateship.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.Set;
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class ListOrgCooperateShipReq 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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作台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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组织节点id
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Long organizationalNodeId;
|
||||||
|
@CriteriaField(field = "organizationalNodeId", operator = Operator.IN)
|
||||||
|
private Set<Long> organizationalNodeIds;
|
||||||
|
|
||||||
|
@CriteriaField
|
||||||
|
private Long organizationalUnitId;
|
||||||
|
@CriteriaField(field = "organizationalUnitId", operator = Operator.IN)
|
||||||
|
private Long organizationalUnitIds;
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Long personId;
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Boolean needParent;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
package cn.axzo.orgmanax.api.cooperateship.resp;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
public enum CooperateShipStatusEnum {
|
||||||
|
|
||||||
|
PRESENT(1, "在场"),
|
||||||
|
LEFT(2, "离场");
|
||||||
|
|
||||||
|
private final Integer code;
|
||||||
|
private final String desc;
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
package cn.axzo.orgmanax.api.cooperateship.resp;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
public enum CooperateShipTypeEnum {
|
||||||
|
|
||||||
|
PROJ_PRIMARY_CONTRACTING_UNIT(1, "施工总承包"),
|
||||||
|
PROJ_CONSTRUCTION_UNIT(2, "建设单位"),
|
||||||
|
PROJ_SUPERVISION_UNIT(3, "监理单位"),
|
||||||
|
PROJ_LABOR_SUBCONTRACTING(4, "劳务分包"),
|
||||||
|
PROJ_PROFESSIONAL_SUBCONTRACTING(5, "专业承包"),
|
||||||
|
OMS(6, "OMS"),
|
||||||
|
ENT_COMMON(7, "企业通用"),
|
||||||
|
ENT_TEAM(8, "企业内班组"),
|
||||||
|
PROJ_TEAM(9, "项目内班组"),
|
||||||
|
ENT_GROUP(10, "企业内小组"),
|
||||||
|
PROJ_GROUP(11, "项目内小组"),
|
||||||
|
SURVEY_UNIT(12, "地勘单位"),
|
||||||
|
DESIGN_UNIT(13, "设计单位"),
|
||||||
|
OTHER(30, "其他");
|
||||||
|
|
||||||
|
private final Integer code;
|
||||||
|
private final String desc;
|
||||||
|
}
|
||||||
@ -0,0 +1,117 @@
|
|||||||
|
package cn.axzo.orgmanax.api.cooperateship.resp;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class OrgCooperateShipDTO implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主健
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上级协同关系id
|
||||||
|
*/
|
||||||
|
private Long parentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作台id
|
||||||
|
*/
|
||||||
|
private Long workspaceId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作台类型
|
||||||
|
*/
|
||||||
|
private Integer workspaceType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作台名称
|
||||||
|
*/
|
||||||
|
private String workspaceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1-在场,0-退场
|
||||||
|
*/
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入场时间
|
||||||
|
*/
|
||||||
|
private Date joinAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 退场时间
|
||||||
|
*/
|
||||||
|
private Date resignAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单位id(如果是班组则插入队伍id)
|
||||||
|
*/
|
||||||
|
private Long organizationalUnitId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单位名称
|
||||||
|
*/
|
||||||
|
private String organizationalUnitName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 协同关系类型 1.总包 2.建设单位 3监理单位 4劳务分包5专业分包6 OMS 7企业通用8企业内班组9项目内班组10企业内小组11项目内小组 30其它
|
||||||
|
*/
|
||||||
|
private Integer cooperateType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组织架构的节点id
|
||||||
|
*/
|
||||||
|
private Long organizationalNodeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 节点路径
|
||||||
|
*/
|
||||||
|
private String path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 合作关系 1.合作 2.直属
|
||||||
|
*/
|
||||||
|
private Integer partnerShip;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩展字段
|
||||||
|
*/
|
||||||
|
private JSONObject ext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private Date createAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改时间
|
||||||
|
*/
|
||||||
|
private Date updateAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建人
|
||||||
|
*/
|
||||||
|
private Long createBy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改人
|
||||||
|
*/
|
||||||
|
private Long updateBy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否删除
|
||||||
|
*/
|
||||||
|
private Long isDelete = 0L;
|
||||||
|
}
|
||||||
@ -3,7 +3,7 @@ package cn.axzo.orgmanax.api.node.feign;
|
|||||||
import cn.axzo.foundation.page.PageResp;
|
import cn.axzo.foundation.page.PageResp;
|
||||||
import cn.axzo.foundation.result.ApiResult;
|
import cn.axzo.foundation.result.ApiResult;
|
||||||
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
||||||
import cn.axzo.orgmanax.api.node.req.NodeProcessReq;
|
import cn.axzo.orgmanax.api.node.req.ProcessNodeReq;
|
||||||
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import org.springframework.cloud.openfeign.FeignClient;
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
@ -29,7 +29,7 @@ public interface OrgNodeApi {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@PostMapping("/api/org/node/process")
|
@PostMapping("/api/org/node/process")
|
||||||
ApiResult<JSONObject> process(@RequestBody @Validated NodeProcessReq req);
|
ApiResult<JSONObject> process(@RequestBody @Validated ProcessNodeReq req);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页列表接口。
|
* 分页列表接口。
|
||||||
|
|||||||
@ -12,7 +12,7 @@ import lombok.NoArgsConstructor;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
public class NodeProcessReq {
|
public class ProcessNodeReq {
|
||||||
private Long id;
|
private Long id;
|
||||||
private Long operatorId;
|
private Long operatorId;
|
||||||
private String description;
|
private String description;
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
package cn.axzo.orgmanax.api.nodeuser.feign;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.page.PageResp;
|
||||||
|
import cn.axzo.foundation.result.ApiResult;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门相关基础API
|
||||||
|
*
|
||||||
|
* @author tanjie@axzo.cn
|
||||||
|
* @date 2024/12/2 15:40
|
||||||
|
*/
|
||||||
|
@FeignClient(
|
||||||
|
value = "orgmanax",
|
||||||
|
url = "${axzo.service.orgmanax:http://orgmanax:8080}")
|
||||||
|
public interface OrgNodeUserApi {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理部门人员相关的逻辑
|
||||||
|
*
|
||||||
|
* @param req
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/api/org/node-user/process")
|
||||||
|
ApiResult<JSONObject> process(@RequestBody @Validated ProcessNodeUserReq req);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页列表接口。
|
||||||
|
* XXX:本接口默认分页,单页最多返回1000条数据。调用方使用时需注意。
|
||||||
|
*
|
||||||
|
* @param req
|
||||||
|
* @return
|
||||||
|
* @see ListNodeUserReq#getPageSize()
|
||||||
|
*/
|
||||||
|
@PostMapping("/api/org/node-user/list")
|
||||||
|
ApiResult<PageResp<OrgNodeUserDTO>> list(@RequestBody @Validated ListNodeUserReq req);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,164 @@
|
|||||||
|
package cn.axzo.orgmanax.api.nodeuser.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 ListNodeUserReq implements IPageReq {
|
||||||
|
|
||||||
|
@CriteriaField
|
||||||
|
private Long id;
|
||||||
|
@CriteriaField(field = "id", operator = Operator.IN)
|
||||||
|
private Set<Long> ids;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* identity_id
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Long identityId;
|
||||||
|
@CriteriaField(field = "identityId", operator = Operator.IN)
|
||||||
|
private Set<Long> identityIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 身份类型 0-无效类型, 1-工人, 2-班组长, 3-从业人员, 4-政务人员,5-运营人员
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Integer identityType;
|
||||||
|
@CriteriaField(field = "identityType", operator = Operator.IN)
|
||||||
|
private Set<Integer> identityTypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自然人id
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Long personId;
|
||||||
|
@CriteriaField(field = "personId", operator = Operator.IN)
|
||||||
|
private Set<Long> personIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主电话
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 名字
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private String realName;
|
||||||
|
@CriteriaField(field = "realName", operator = Operator.LIKE)
|
||||||
|
private String realNameLike;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 身份证号
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private String idNumber;
|
||||||
|
@CriteriaField(field = "idNumber", operator = Operator.IN)
|
||||||
|
private Set<String> idNumbers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单位id
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Long organizationalUnitId;
|
||||||
|
@CriteriaField(field = "organizationalUnitId", operator = Operator.IN)
|
||||||
|
private Set<Long> organizationalUnitIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组织节点id
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Long organizationalNodeId;
|
||||||
|
@CriteriaField(field = "organizationalNodeId", operator = Operator.IN)
|
||||||
|
private Set<Long> organizationalNodeIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 顶级节点id
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Long topNodeId;
|
||||||
|
@CriteriaField(field = "topNodeId", operator = Operator.IN)
|
||||||
|
private Set<Long> topNodeIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门管理员 1是 0否
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Boolean manager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 岗位id
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Long organizationalJobId;
|
||||||
|
@CriteriaField(field = "organizationalJobId", operator = Operator.IN)
|
||||||
|
private Set<Long> organizationalJobIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作台ID
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Long workspaceId;
|
||||||
|
@CriteriaField(field = "workspaceId", operator = Operator.IN)
|
||||||
|
private Long workspaceIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 0:普通岗位、1:主岗位
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Integer primaryJob;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否允许进入工地 1.允许 2.不允许
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Integer isAllowed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 迁移数据临时源id
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Long tempSourceId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据同步ID
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private Long syncDataId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工号
|
||||||
|
*/
|
||||||
|
@CriteriaField
|
||||||
|
private String jobNumber;
|
||||||
|
|
||||||
|
@CriteriaField
|
||||||
|
private Integer activeFlag;
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
private Boolean needNode;
|
||||||
|
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
@Builder.Default
|
||||||
|
Integer page = 1;
|
||||||
|
/**
|
||||||
|
* 最大支持1000条数据,不支持单页超过1000的查询,接入方按需分页
|
||||||
|
*/
|
||||||
|
@Builder.Default
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
Integer pageSize = 1000;
|
||||||
|
@CriteriaField(ignore = true)
|
||||||
|
List<String> sort;
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
package cn.axzo.orgmanax.api.nodeuser.req;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class ProcessNodeUserReq {
|
||||||
|
private Long id;
|
||||||
|
private Long operatorId;
|
||||||
|
private String description;
|
||||||
|
private Action action;
|
||||||
|
private JSONObject param;
|
||||||
|
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
@Getter
|
||||||
|
public enum Action {
|
||||||
|
CREATE("创建", "createNodeUserProcessor"),
|
||||||
|
UPDATE("普通更新", "updateNodeUserProcessor");
|
||||||
|
|
||||||
|
private final String desc;
|
||||||
|
private final String processor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,143 @@
|
|||||||
|
package cn.axzo.orgmanax.api.nodeuser.resp;
|
||||||
|
|
||||||
|
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class OrgNodeUserDTO implements Serializable {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* identity_id
|
||||||
|
*/
|
||||||
|
private Long identityId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 身份类型 0-无效类型, 1-工人, 2-班组长, 3-从业人员, 4-政务人员,5-运营人员
|
||||||
|
*/
|
||||||
|
private Integer identityType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自然人id
|
||||||
|
*/
|
||||||
|
private Long personId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主电话
|
||||||
|
*/
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 名字
|
||||||
|
*/
|
||||||
|
private String realName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 身份证号
|
||||||
|
*/
|
||||||
|
private String idNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单位id
|
||||||
|
*/
|
||||||
|
private Long organizationalUnitId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组织节点id
|
||||||
|
*/
|
||||||
|
private Long organizationalNodeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 顶级节点id
|
||||||
|
*/
|
||||||
|
private Long topNodeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门管理员 1是 0否
|
||||||
|
*/
|
||||||
|
private Object manager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 岗位id
|
||||||
|
*/
|
||||||
|
private Long organizationalJobId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作台ID
|
||||||
|
*/
|
||||||
|
private Long workspaceId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 0:普通岗位、1:主岗位
|
||||||
|
*/
|
||||||
|
private Integer primaryJob;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否允许进入工地 1.允许 2.不允许
|
||||||
|
*/
|
||||||
|
private Integer isAllowed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加入时间
|
||||||
|
*/
|
||||||
|
private Date joinAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 离开时间
|
||||||
|
*/
|
||||||
|
private Date leaveAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 迁移数据临时源id
|
||||||
|
*/
|
||||||
|
private Long tempSourceId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据同步ID
|
||||||
|
*/
|
||||||
|
private Long syncDataId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工号
|
||||||
|
*/
|
||||||
|
private String jobNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态 0正常 其它删除
|
||||||
|
*/
|
||||||
|
private Long isDelete = 0L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩展字段
|
||||||
|
*/
|
||||||
|
private JSONObject extra;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private Date createAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
private Date updateAt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1-活跃用户,0-非活跃用户
|
||||||
|
*/
|
||||||
|
private Integer activeFlag;
|
||||||
|
|
||||||
|
// ~ 聚合信息
|
||||||
|
private OrgNodeDTO node;
|
||||||
|
}
|
||||||
@ -10,6 +10,8 @@ public enum BizResultCode implements IResultCode {
|
|||||||
SUCCESS("200", "成功"),
|
SUCCESS("200", "成功"),
|
||||||
// ~ 100 -> 199 Node相关的错误码
|
// ~ 100 -> 199 Node相关的错误码
|
||||||
NODE_PROCESS_FAILED("100", "部门操作失败"),
|
NODE_PROCESS_FAILED("100", "部门操作失败"),
|
||||||
|
//
|
||||||
|
NODE_USER_PROCESS_FAILED("200", "部门人员操作失败"),
|
||||||
|
|
||||||
INVALID_PARAM("400", "参数异常"),
|
INVALID_PARAM("400", "参数异常"),
|
||||||
ENTITY_NOT_FOUND("404", "实体不存在"),
|
ENTITY_NOT_FOUND("404", "实体不存在"),
|
||||||
|
|||||||
@ -0,0 +1,67 @@
|
|||||||
|
package cn.axzo.orgmanax.infra.client.pudge;
|
||||||
|
|
||||||
|
import cn.axzo.orgmanax.infra.client.pudge.dto.IdentityPair;
|
||||||
|
import cn.axzo.orgmanax.infra.client.pudge.dto.IdentityProfile;
|
||||||
|
import cn.axzo.orgmanax.infra.client.pudge.dto.PersonProfile;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* //TODO liuyang
|
||||||
|
* 封装对person的请求
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class PersonProfileGateway {
|
||||||
|
|
||||||
|
public PersonProfile getPersonProfile(Long personId) {
|
||||||
|
return listPersonProfiles(ListPersonProfileReq.builder().id(personId).build())
|
||||||
|
.stream().findFirst().orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PersonProfile> listPersonProfiles(ListPersonProfileReq req) {
|
||||||
|
// TODO
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IdentityProfile getIdentityProfile(Long personId, Integer identityType) {
|
||||||
|
return listIdentityProfiles(ListIdentityProfileReq.builder()
|
||||||
|
.personId(personId)
|
||||||
|
.identityType(identityType)
|
||||||
|
.build()).stream().findFirst().orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<IdentityProfile> listIdentityProfiles(ListIdentityProfileReq req) {
|
||||||
|
// TODO
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
public static class ListPersonProfileReq {
|
||||||
|
private Long id;
|
||||||
|
private Set<Long> ids;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
public static class ListIdentityProfileReq {
|
||||||
|
private Long personId;
|
||||||
|
private Long identityId;
|
||||||
|
private Integer identityType;
|
||||||
|
private Set<IdentityPair> identityPairs;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
package cn.axzo.orgmanax.infra.client.pudge.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
public class IdentityPair {
|
||||||
|
private Long identityId;
|
||||||
|
private Integer identityType;
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
package cn.axzo.orgmanax.infra.client.pudge.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XXX:尽量复用 client 对这个类的定义。
|
||||||
|
*/
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
public class IdentityProfile {
|
||||||
|
private Long personId;
|
||||||
|
private Long identityId;
|
||||||
|
private Long identityType;
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
package cn.axzo.orgmanax.infra.client.pudge.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XXX:尽量复用 client 对这个类的定义。
|
||||||
|
*/
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
public class PersonProfile {
|
||||||
|
private Long id;
|
||||||
|
private String phone;
|
||||||
|
private String realName;
|
||||||
|
private String idNumber;
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
package cn.axzo.orgmanax.infra.client.pudge.enums;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
@Getter
|
||||||
|
public enum IdentityType {
|
||||||
|
NOT_SUPPORT(0, "NOT_SUPPORT", "无效类型"),
|
||||||
|
WORKER(1, "WORKER", "工人"),
|
||||||
|
WORKER_LEADER(2, "WORKER_LEADER", "班组长"),
|
||||||
|
PRACTITIONER(3, "PRACTITIONER", "从业人员"),
|
||||||
|
REGULATOR(4, "REGULATOR", "监管人员"),
|
||||||
|
OPERATOR(5, "OPERATOR", "运营人员");
|
||||||
|
|
||||||
|
private final Integer code;
|
||||||
|
private final String message;
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
public static IdentityType getIdentityType(Integer code) {
|
||||||
|
IdentityType[] values = values();
|
||||||
|
for (IdentityType item : values) {
|
||||||
|
if (item.getCode().equals(code)) {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
package cn.axzo.orgmanax.infra.client.workspace;
|
||||||
|
|
||||||
|
import cn.axzo.orgmanax.infra.client.workspace.dto.Workspace;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO liuyang
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class WorkspaceGateway {
|
||||||
|
|
||||||
|
public Workspace getWorkspace(Long id) {
|
||||||
|
return listWorkspaces(ListWorkspaceReq.builder().id(id).build()).stream().findFirst().orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Workspace> listWorkspaces(ListWorkspaceReq req) {
|
||||||
|
return ImmutableList.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public static class ListWorkspaceReq {
|
||||||
|
private Long id;
|
||||||
|
private Long organizationalUnitId;
|
||||||
|
private Integer type;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
package cn.axzo.orgmanax.infra.client.workspace.dto;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
public class Workspace {
|
||||||
|
private Long id;
|
||||||
|
private Integer type;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
public enum WorkspaceTypeEnum {
|
||||||
|
// 目前只有1和2
|
||||||
|
GENERAL_ENT(1, "总包企业级", "企业"),
|
||||||
|
GENERAL_PROJECT(2, "总包项目级", "项目"),
|
||||||
|
GOVERNMENT(3, "政务监管平台", "政务"),
|
||||||
|
AGENCY_ENT(4, "分包企业级", "班组工作台"),
|
||||||
|
OMS(6, "OMS工作台", "OMS工作台");
|
||||||
|
|
||||||
|
public int value;
|
||||||
|
|
||||||
|
public String desc;
|
||||||
|
public String tenantDesc;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -12,5 +12,4 @@ import org.springframework.stereotype.Repository;
|
|||||||
@Repository
|
@Repository
|
||||||
public class SaasCooperateShipDao extends ServiceImpl<SaasCooperateShipMapper, SaasCooperateShip> {
|
public class SaasCooperateShipDao extends ServiceImpl<SaasCooperateShipMapper, SaasCooperateShip> {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,14 +1,17 @@
|
|||||||
package cn.axzo.orgmanax.infra.dao.cooperateship.entity;
|
package cn.axzo.orgmanax.infra.dao.cooperateship.entity;
|
||||||
|
|
||||||
|
import cn.hutool.core.lang.Assert;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||||
|
import lombok.AccessLevel;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
@ -16,6 +19,7 @@ import lombok.experimental.SuperBuilder;
|
|||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (SaasCooperateShip)表实体类
|
* (SaasCooperateShip)表实体类
|
||||||
@ -103,6 +107,7 @@ public class SaasCooperateShip implements Serializable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 合作关系 1.合作 2.直属
|
* 合作关系 1.合作 2.直属
|
||||||
|
* @see ParterShipEnum
|
||||||
*/
|
*/
|
||||||
private Integer partnerShip;
|
private Integer partnerShip;
|
||||||
|
|
||||||
@ -138,5 +143,26 @@ public class SaasCooperateShip implements Serializable {
|
|||||||
private Long isDelete = 0L;
|
private Long isDelete = 0L;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算节点路径
|
||||||
|
*
|
||||||
|
* @param parent
|
||||||
|
*/
|
||||||
|
public void calcPath(SaasCooperateShip parent) {
|
||||||
|
if (Objects.equals(this.getParentId(), 0L)) {
|
||||||
|
this.path = id + ",";
|
||||||
|
}
|
||||||
|
Assert.notNull(parent, "重置路径时,父节点不能为空");
|
||||||
|
this.path = parent.path + id + ",";
|
||||||
|
}
|
||||||
|
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
@Getter
|
||||||
|
public enum ParterShipEnum {
|
||||||
|
COOPERATE(1, "合作"), OWNED(2, "直属");
|
||||||
|
private final Integer code;
|
||||||
|
private final String desc;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,53 @@
|
|||||||
package cn.axzo.orgmanax.infra.dao.cooperateship.repository;
|
package cn.axzo.orgmanax.infra.dao.cooperateship.repository;
|
||||||
|
|
||||||
|
import cn.axzo.orgmanax.api.cooperateship.req.ListOrgCooperateShipReq;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
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;
|
||||||
|
|
||||||
public interface CooperateShipQueryRepository {
|
public interface CooperateShipQueryRepository {
|
||||||
|
|
||||||
|
List<CooperateShipResp> list(ListOrgCooperateShipReq req);
|
||||||
|
|
||||||
|
default CooperateShipResp one(OneReq req) {
|
||||||
|
return oneOpt(req).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
default Optional<CooperateShipResp> oneOpt(OneReq req) {
|
||||||
|
req.check();
|
||||||
|
ListOrgCooperateShipReq listReq = BeanUtil.toBean(req, ListOrgCooperateShipReq.class);
|
||||||
|
return list(listReq).stream().findFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
class OneReq {
|
||||||
|
private Long id;
|
||||||
|
private Long organizationalNodeId;
|
||||||
|
|
||||||
|
public void check() {
|
||||||
|
Preconditions.checkArgument(id != null || organizationalNodeId != null, "参数异常");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
class CooperateShipResp extends SaasCooperateShip {
|
||||||
|
// 按需扩展字段,占个位。避免报错
|
||||||
|
private String todo;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,38 @@
|
|||||||
package cn.axzo.orgmanax.infra.dao.cooperateship.repository;
|
package cn.axzo.orgmanax.infra.dao.cooperateship.repository;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.node.repository.NodeUpsertRepository;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public interface CooperateShipUpsertRepository {
|
public interface CooperateShipUpsertRepository {
|
||||||
|
SaasCooperateShip create(SaasCooperateShip cooperateShip);
|
||||||
|
|
||||||
|
SaasCooperateShip update(UpdateReq node);
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
class UpdateReq extends SaasCooperateShip {
|
||||||
|
/**
|
||||||
|
* 由于updateById不支持将值设置为null,这里提供这个
|
||||||
|
*/
|
||||||
|
Set<SFunction<SaasCooperateShip, ?>> setNullFields = new HashSet<>();
|
||||||
|
|
||||||
|
public void check() {
|
||||||
|
Axssert.checkNonNull(getId(), "要更新的协同关系id不能为空");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,60 @@
|
|||||||
package cn.axzo.orgmanax.infra.dao.cooperateship.repository.impl;
|
package cn.axzo.orgmanax.infra.dao.cooperateship.repository.impl;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
|
||||||
|
import cn.axzo.orgmanax.api.cooperateship.req.ListOrgCooperateShipReq;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.cooperateship.dao.SaasCooperateShipDao;
|
||||||
|
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.CooperateShipQueryRepository;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
|
@Slf4j
|
||||||
public class CooperateShipQueryRepositoryImpl implements CooperateShipQueryRepository {
|
public class CooperateShipQueryRepositoryImpl implements CooperateShipQueryRepository {
|
||||||
|
|
||||||
|
private final SaasCooperateShipDao cooperateShipDao;
|
||||||
|
private final NodeUserQueryRepository nodeUserQueryRepository;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CooperateShipResp> 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());
|
||||||
|
|
||||||
|
results = filterByPersonIds(results, req);
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<CooperateShipResp> filterByPersonIds(List<CooperateShipResp> results, ListOrgCooperateShipReq req) {
|
||||||
|
if (req.getPersonId() == 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())
|
||||||
|
.organizationalNodeIds(organizationalNodeIds)
|
||||||
|
.build())
|
||||||
|
.stream().map(NodeUserQueryRepository.NodeUserResp::getTopNodeId).collect(Collectors.toSet());
|
||||||
|
return results.stream()
|
||||||
|
.filter(e -> personInNodeIds.contains(e.getOrganizationalNodeId()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,36 @@
|
|||||||
package cn.axzo.orgmanax.infra.dao.cooperateship.repository.impl;
|
package cn.axzo.orgmanax.infra.dao.cooperateship.repository.impl;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.cooperateship.dao.SaasCooperateShipDao;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||||
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipUpsertRepository;
|
import cn.axzo.orgmanax.infra.dao.cooperateship.repository.CooperateShipUpsertRepository;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
|
@Slf4j
|
||||||
public class CooperateShipUpsertRepositoryImpl implements CooperateShipUpsertRepository {
|
public class CooperateShipUpsertRepositoryImpl implements CooperateShipUpsertRepository {
|
||||||
|
|
||||||
|
private final SaasCooperateShipDao cooperateShipDao;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SaasCooperateShip create(SaasCooperateShip cooperateShip) {
|
||||||
|
cooperateShipDao.save(cooperateShip);
|
||||||
|
return cooperateShipDao.getById(cooperateShip.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SaasCooperateShip update(UpdateReq req) {
|
||||||
|
Axssert.checkNonNull(req.getId(), "更新协同部门,协同id不能为空");
|
||||||
|
LambdaUpdateChainWrapper<SaasCooperateShip> wrapper = cooperateShipDao.lambdaUpdate().eq(SaasCooperateShip::getId, req.getId());
|
||||||
|
if (CollUtil.isNotEmpty(req.getSetNullFields())) {
|
||||||
|
req.getSetNullFields().forEach(e -> wrapper.set(e, null));
|
||||||
|
}
|
||||||
|
wrapper.update(req);
|
||||||
|
return cooperateShipDao.getById(req.getId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@ import lombok.NoArgsConstructor;
|
|||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
import org.springframework.data.annotation.Transient;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -139,7 +140,6 @@ public class OrganizationalNode implements Serializable {
|
|||||||
@TableField(value = "profile", typeHandler = FastjsonTypeHandler.class)
|
@TableField(value = "profile", typeHandler = FastjsonTypeHandler.class)
|
||||||
private JSONObject profile;
|
private JSONObject profile;
|
||||||
|
|
||||||
|
|
||||||
protected Date createAt;
|
protected Date createAt;
|
||||||
protected Long createBy;
|
protected Long createBy;
|
||||||
protected Date updateAt;
|
protected Date updateAt;
|
||||||
@ -152,16 +152,19 @@ public class OrganizationalNode implements Serializable {
|
|||||||
*
|
*
|
||||||
* @param parentNode
|
* @param parentNode
|
||||||
*/
|
*/
|
||||||
public String calcPath(OrganizationalNode parentNode) {
|
public void calcPath(OrganizationalNode parentNode) {
|
||||||
if (Objects.equals(this.getParentId(), 0L)) {
|
if (Objects.equals(this.getParentId(), 0L)) {
|
||||||
this.topNodeId = id;
|
this.topNodeId = id;
|
||||||
this.path = id + ",";
|
this.path = id + ",";
|
||||||
return this.path;
|
|
||||||
}
|
}
|
||||||
Assert.notNull(parentNode, "重置路径时,父节点不能为空");
|
Assert.notNull(parentNode, "重置路径时,父节点不能为空");
|
||||||
this.topNodeId = parentNode.getTopNodeId();
|
this.topNodeId = parentNode.getTopNodeId();
|
||||||
this.path = parentNode.path + id + ",";
|
this.path = parentNode.path + id + ",";
|
||||||
return this.path;
|
}
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
public boolean isTopNode() {
|
||||||
|
return Objects.equals(topNodeId, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import cn.axzo.foundation.exception.Axssert;
|
|||||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
@ -23,26 +22,12 @@ public interface NodeUpsertRepository {
|
|||||||
|
|
||||||
OrganizationalNode update(UpdateReq node);
|
OrganizationalNode update(UpdateReq node);
|
||||||
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Data
|
|
||||||
@Builder
|
|
||||||
class CreateReq {
|
|
||||||
private OrganizationalNode node;
|
|
||||||
/**
|
|
||||||
* 场景描述,如 添加普通部门,添加班组 等
|
|
||||||
*/
|
|
||||||
private String scene;
|
|
||||||
private Long operatorId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Data
|
@Data
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
class UpdateReq extends OrganizationalNode {
|
class UpdateReq extends OrganizationalNode {
|
||||||
private String scene;
|
|
||||||
/**
|
/**
|
||||||
* 由于updateById不支持将值设置为null,这里提供这个
|
* 由于updateById不支持将值设置为null,这里提供这个
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -29,7 +29,6 @@ public class NodeUpsertRepositoryImpl implements NodeUpsertRepository {
|
|||||||
@Override
|
@Override
|
||||||
public OrganizationalNode update(UpdateReq req) {
|
public OrganizationalNode update(UpdateReq req) {
|
||||||
Axssert.checkNonNull(req.getId(), "更新部门,部门id不能为空");
|
Axssert.checkNonNull(req.getId(), "更新部门,部门id不能为空");
|
||||||
|
|
||||||
LambdaUpdateChainWrapper<OrganizationalNode> wrapper = nodeDao.lambdaUpdate().eq(OrganizationalNode::getId, req.getId());
|
LambdaUpdateChainWrapper<OrganizationalNode> wrapper = nodeDao.lambdaUpdate().eq(OrganizationalNode::getId, req.getId());
|
||||||
if (CollUtil.isNotEmpty(req.getSetNullFields())) {
|
if (CollUtil.isNotEmpty(req.getSetNullFields())) {
|
||||||
req.getSetNullFields().forEach(e -> wrapper.set(e, null));
|
req.getSetNullFields().forEach(e -> wrapper.set(e, null));
|
||||||
|
|||||||
@ -10,6 +10,6 @@ import org.springframework.stereotype.Repository;
|
|||||||
* @date 2024/12/2 18:10
|
* @date 2024/12/2 18:10
|
||||||
*/
|
*/
|
||||||
@Repository
|
@Repository
|
||||||
public class OrgNodeUserDao extends ServiceImpl<OrganizationalNodeUserMapper, OrganizationalNodeUser> {
|
public class NodeUserDao extends ServiceImpl<OrganizationalNodeUserMapper, OrganizationalNodeUser> {
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -89,7 +89,7 @@ public class OrganizationalNodeUser implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 部门管理员 1是 0否
|
* 部门管理员 1是 0否
|
||||||
*/
|
*/
|
||||||
private Object manager;
|
private Boolean manager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 岗位id
|
* 岗位id
|
||||||
@ -162,6 +162,10 @@ public class OrganizationalNodeUser implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private Integer activeFlag;
|
private Integer activeFlag;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 部门人员信息,json,不同部门类型的部门用户,格式不一。
|
||||||
|
*/
|
||||||
|
@TableField(value = "profile", typeHandler = FastjsonTypeHandler.class)
|
||||||
|
private JSONObject profile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,67 @@
|
|||||||
|
package cn.axzo.orgmanax.infra.dao.nodeuser.repository;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.page.PageResp;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
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 NodeUserQueryRepository {
|
||||||
|
|
||||||
|
PageResp<NodeUserResp> page(ListNodeUserReq req);
|
||||||
|
|
||||||
|
default List<NodeUserResp> list(ListNodeUserReq req) {
|
||||||
|
return page(req).getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
default NodeUserResp one(OneReq req) {
|
||||||
|
return oneOpt(req).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
default Optional<NodeUserResp> oneOpt(OneReq req) {
|
||||||
|
req.check();
|
||||||
|
ListNodeUserReq page = BeanUtil.toBean(req, ListNodeUserReq.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), "参数异常");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
class NodeUserResp extends OrganizationalNodeUser {
|
||||||
|
/**
|
||||||
|
* 查询参数指定 needNode = true,才会返回
|
||||||
|
*
|
||||||
|
* @see ListNodeUserReq#getNeedNode()
|
||||||
|
*/
|
||||||
|
private NodeQueryRepository.NodeResp nodeResp;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
package cn.axzo.orgmanax.infra.dao.nodeuser.repository;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public interface NodeUserUpsertRepository {
|
||||||
|
|
||||||
|
OrganizationalNodeUser create(OrganizationalNodeUser nodeUser);
|
||||||
|
|
||||||
|
OrganizationalNodeUser update(UpdateReq node);
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
class UpdateReq extends OrganizationalNodeUser {
|
||||||
|
/**
|
||||||
|
* 由于updateById不支持将值设置为null,这里提供这个
|
||||||
|
*/
|
||||||
|
Set<SFunction<OrganizationalNodeUser, ?>> setNullFields = new HashSet<>();
|
||||||
|
|
||||||
|
public void check() {
|
||||||
|
Axssert.checkNonNull(getId(), "要更新的部门id不能为空");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,4 +0,0 @@
|
|||||||
package cn.axzo.orgmanax.infra.dao.nodeuser.repository;
|
|
||||||
|
|
||||||
public interface OrgNodeUserQueryRepository {
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
package cn.axzo.orgmanax.infra.dao.nodeuser.repository;
|
|
||||||
|
|
||||||
public interface OrgNodeUserUpsertRepository {
|
|
||||||
}
|
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
package cn.axzo.orgmanax.infra.dao.nodeuser.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.api.node.req.ListNodeReq;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.dao.NodeUserDao;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
|
||||||
|
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 lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Slf4j
|
||||||
|
public class NodeUserQueryRepositoryImpl implements NodeUserQueryRepository {
|
||||||
|
|
||||||
|
private final NodeUserDao nodeUserDao;
|
||||||
|
private final NodeQueryRepository nodeQueryRepository;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResp<NodeUserResp> page(ListNodeUserReq req) {
|
||||||
|
IPage<OrganizationalNodeUser> page = PageConverter.toMybatis(req, OrganizationalNodeUser.class);
|
||||||
|
QueryWrapper<OrganizationalNodeUser> wrapper = QueryWrapperHelper.fromBean(req, OrganizationalNodeUser.class);
|
||||||
|
IPage<NodeUserResp> results = nodeUserDao.page(page, wrapper)
|
||||||
|
.convert(e -> BeanUtil.toBean(e, NodeUserResp.class));
|
||||||
|
PageResp<NodeUserResp> resp = PageConverter.toResp(results);
|
||||||
|
List<NodeUserResp> records = resp.getData();
|
||||||
|
if (CollUtil.isEmpty(records)) {
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
// assemble node
|
||||||
|
assembleNode(req, records);
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assembleNode(ListNodeUserReq req, List<NodeUserResp> records) {
|
||||||
|
if (CollUtil.isEmpty(records)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!BooleanUtil.isTrue(req.getNeedNode())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Set<Long> nodeIds = records.stream().map(NodeUserResp::getOrganizationalNodeId).collect(Collectors.toSet());
|
||||||
|
// assemble parentNode
|
||||||
|
Map<Long, NodeQueryRepository.NodeResp> nodesById = nodeQueryRepository.list(ListNodeReq.builder()
|
||||||
|
.ids(nodeIds)
|
||||||
|
.build()).stream().collect(Collectors.toMap(NodeQueryRepository.NodeResp::getId, Function.identity()));
|
||||||
|
|
||||||
|
records.forEach(r -> r.setNodeResp(nodesById.get(r.getOrganizationalNodeId())));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
package cn.axzo.orgmanax.infra.dao.nodeuser.repository.impl;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.dao.NodeUserDao;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserUpsertRepository;
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Slf4j
|
||||||
|
public class NodeUserUpsertRepositoryImpl implements NodeUserUpsertRepository {
|
||||||
|
private final NodeUserDao nodeUserDao;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OrganizationalNodeUser create(OrganizationalNodeUser nodeUser) {
|
||||||
|
nodeUserDao.save(nodeUser);
|
||||||
|
return nodeUserDao.getById(nodeUser.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OrganizationalNodeUser update(UpdateReq req) {
|
||||||
|
Axssert.checkNonNull(req.getId(), "更新部门人员,部门人员不能为空");
|
||||||
|
LambdaUpdateChainWrapper<OrganizationalNodeUser> wrapper = nodeUserDao.lambdaUpdate().eq(OrganizationalNodeUser::getId, req.getId());
|
||||||
|
if (CollUtil.isNotEmpty(req.getSetNullFields())) {
|
||||||
|
req.getSetNullFields().forEach(e -> wrapper.set(e, null));
|
||||||
|
}
|
||||||
|
wrapper.update(req);
|
||||||
|
return nodeUserDao.getById(req.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,10 +0,0 @@
|
|||||||
package cn.axzo.orgmanax.infra.dao.nodeuser.repository.impl;
|
|
||||||
|
|
||||||
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.OrgNodeUserQueryRepository;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class OrgNodeUserQueryRepositoryImpl implements OrgNodeUserQueryRepository {
|
|
||||||
}
|
|
||||||
@ -1,10 +0,0 @@
|
|||||||
package cn.axzo.orgmanax.infra.dao.nodeuser.repository.impl;
|
|
||||||
|
|
||||||
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.OrgNodeUserUpsertRepository;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class OrgNodeUserUpsertRepositoryImpl implements OrgNodeUserUpsertRepository {
|
|
||||||
}
|
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
package cn.axzo.orgmanax.server.cooperateship.controller;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.result.ApiResult;
|
||||||
|
import cn.axzo.orgmanax.api.cooperateship.feign.OrgCooperateShipApi;
|
||||||
|
import cn.axzo.orgmanax.api.cooperateship.req.ListOrgCooperateShipReq;
|
||||||
|
import cn.axzo.orgmanax.api.cooperateship.resp.OrgCooperateShipDTO;
|
||||||
|
import cn.axzo.orgmanax.server.cooperateship.service.CooperateShipService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author tanjie@axzo.cn
|
||||||
|
* @date 2024/12/2 16:47
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class CooperateShipController implements OrgCooperateShipApi {
|
||||||
|
|
||||||
|
private final CooperateShipService cooperateShipService;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<List<OrgCooperateShipDTO>> list(ListOrgCooperateShipReq req) {
|
||||||
|
return ApiResult.success(cooperateShipService.list(req));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
package cn.axzo.orgmanax.server.cooperateship.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 CooperateShipEventType {
|
||||||
|
COOPERATE_SHIP_UPSERTED("cooperate-ship-upserted", "协同部门新增/更新事件"),
|
||||||
|
;
|
||||||
|
|
||||||
|
CooperateShipEventType(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.cooperateship.event.inner.payload;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.event.support.AbstractDiffablePayload;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class CoopeateShipUpsertedPayload extends AbstractDiffablePayload<SaasCooperateShip> {
|
||||||
|
private SaasCooperateShip oldValue;
|
||||||
|
private SaasCooperateShip newValue;
|
||||||
|
private JSONObject ext;
|
||||||
|
}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
package cn.axzo.orgmanax.server.cooperateship.event;
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
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.repository.CooperateShipQueryRepository;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface CooperateShipService {
|
||||||
|
|
||||||
|
CooperateShipQueryRepository.CooperateShipResp create(CreateReq req);
|
||||||
|
|
||||||
|
List<OrgCooperateShipDTO> list(ListOrgCooperateShipReq req);
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
class CreateReq {
|
||||||
|
private Long workspaceId;
|
||||||
|
private Long organizationalNodeId;
|
||||||
|
private Long parentId;
|
||||||
|
private Integer cooperateType;
|
||||||
|
private Integer partnerShip;
|
||||||
|
private Long operatorId;
|
||||||
|
|
||||||
|
public void check() {
|
||||||
|
Axssert.checkNonNull(workspaceId, "工作台id不能为空");
|
||||||
|
Axssert.checkNonNull(organizationalNodeId, "部门id不能为空");
|
||||||
|
Axssert.checkNonNull(parentId, "上级协同部门不能为空");
|
||||||
|
Axssert.checkNonNull(cooperateType, "参建类型不能为空");
|
||||||
|
Axssert.checkNonNull(operatorId, "操作人不能为空 ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
package cn.axzo.orgmanax.server.cooperateship.service.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.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.common.config.BizResultCode;
|
||||||
|
import cn.axzo.orgmanax.infra.client.workspace.WorkspaceGateway;
|
||||||
|
import cn.axzo.orgmanax.infra.client.workspace.dto.Workspace;
|
||||||
|
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.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.service.CooperateShipService;
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
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.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class CooperateShipServiceImpl implements CooperateShipService {
|
||||||
|
|
||||||
|
private static final Set<Integer> ALLOWED_TOP_COOPERATE_TYPES = ImmutableSet.of(
|
||||||
|
CooperateShipTypeEnum.PROJ_PRIMARY_CONTRACTING_UNIT.getCode(),
|
||||||
|
CooperateShipTypeEnum.PROJ_CONSTRUCTION_UNIT.getCode(),
|
||||||
|
CooperateShipTypeEnum.PROJ_SUPERVISION_UNIT.getCode(),
|
||||||
|
CooperateShipTypeEnum.OMS.getCode(),
|
||||||
|
CooperateShipTypeEnum.ENT_COMMON.getCode(),
|
||||||
|
CooperateShipTypeEnum.SURVEY_UNIT.getCode(),
|
||||||
|
CooperateShipTypeEnum.DESIGN_UNIT.getCode(),
|
||||||
|
CooperateShipTypeEnum.OTHER.getCode()
|
||||||
|
);
|
||||||
|
|
||||||
|
private final CooperateShipQueryRepository cooperateShipQueryRepository;
|
||||||
|
private final CooperateShipUpsertRepository cooperateShipUpsertRepository;
|
||||||
|
private final NodeQueryRepository nodeQueryRepository;
|
||||||
|
private final UnitQueryRepository unitQueryRepository;
|
||||||
|
private final WorkspaceGateway workspaceGateway;
|
||||||
|
private final EventProducer eventProducer;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CooperateShipQueryRepository.CooperateShipResp 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()));
|
||||||
|
Axssert.check(node.isTopNode(), BizResultCode.INVALID_PARAM, "只有顶级节点才能添加协同关系");
|
||||||
|
// workspace check
|
||||||
|
Workspace workspace = workspaceGateway.getWorkspace(req.getWorkspaceId());
|
||||||
|
Axssert.checkNonNull(workspace, "工作台不存在{}", req.getWorkspaceId());
|
||||||
|
CooperateShipQueryRepository.CooperateShipResp parentShip = null;
|
||||||
|
if (!ALLOWED_TOP_COOPERATE_TYPES.contains(req.getCooperateType())) {
|
||||||
|
Axssert.check(req.getParentId() > 0L, BizResultCode.INVALID_PARAM, "父级协同类型不能为空");
|
||||||
|
parentShip = cooperateShipQueryRepository
|
||||||
|
.oneOpt(CooperateShipQueryRepository.OneReq.builder().id(req.getParentId()).build())
|
||||||
|
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("父级协同部门不存在{}", req.getOrganizationalNodeId()));
|
||||||
|
Axssert.check(Objects.equals(parentShip.getWorkspaceId(), req.getWorkspaceId()), BizResultCode.INVALID_PARAM, "父级协同部门和要加入部门不是同一个工作台");
|
||||||
|
}
|
||||||
|
|
||||||
|
UnitQueryRepository.UnitResp unit = unitQueryRepository.oneOpt(UnitQueryRepository.OneReq.builder()
|
||||||
|
.id(node.getId())
|
||||||
|
.build()).orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("单位不存在{}", node.getOrganizationalUnitId()));
|
||||||
|
|
||||||
|
SaasCooperateShip cooperateShip = SaasCooperateShip.builder()
|
||||||
|
.parentId(req.getParentId())
|
||||||
|
.workspaceId(workspace.getId())
|
||||||
|
.workspaceType(workspace.getType())
|
||||||
|
.workspaceName(workspace.getName())
|
||||||
|
.status(CooperateShipStatusEnum.PRESENT.getCode())
|
||||||
|
.joinAt(new Date())
|
||||||
|
.organizationalUnitId(node.getOrganizationalUnitId())
|
||||||
|
.organizationalUnitName(unit.getName())
|
||||||
|
.cooperateType(req.getCooperateType())
|
||||||
|
.organizationalNodeId(node.getId())
|
||||||
|
.partnerShip(req.getPartnerShip())
|
||||||
|
.createBy(req.getOperatorId())
|
||||||
|
.build();
|
||||||
|
SaasCooperateShip savedCooperateShip = cooperateShipUpsertRepository.create(cooperateShip);
|
||||||
|
|
||||||
|
// update path
|
||||||
|
savedCooperateShip.calcPath(parentShip);
|
||||||
|
SaasCooperateShip saved = cooperateShipUpsertRepository.update(CooperateShipUpsertRepository.UpdateReq.builder()
|
||||||
|
.id(savedCooperateShip.getId())
|
||||||
|
.path(savedCooperateShip.getPath())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
// 发送数据变更基础MQ
|
||||||
|
eventProducer.send(Event.builder()
|
||||||
|
.eventCode(CooperateShipEventType.COOPERATE_SHIP_UPSERTED.getEventCode())
|
||||||
|
.operatorId(req.getOperatorId() + "")
|
||||||
|
.operatorType(getClass().getSimpleName())
|
||||||
|
.targetType("cooperate_ship_id")
|
||||||
|
.targetId(savedCooperateShip.getId() + "")
|
||||||
|
.shardingKey(saved.getOrganizationalNodeId() + "")
|
||||||
|
.data(CoopeateShipUpsertedPayload.builder()
|
||||||
|
.newValue(saved)
|
||||||
|
.oldValue(null)
|
||||||
|
.build())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
// 返回结果
|
||||||
|
return cooperateShipQueryRepository.one(CooperateShipQueryRepository.OneReq.builder().id(saved.getId()).build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,7 +5,7 @@ import cn.axzo.foundation.page.PageResp;
|
|||||||
import cn.axzo.foundation.result.ApiResult;
|
import cn.axzo.foundation.result.ApiResult;
|
||||||
import cn.axzo.orgmanax.api.node.feign.OrgNodeApi;
|
import cn.axzo.orgmanax.api.node.feign.OrgNodeApi;
|
||||||
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
||||||
import cn.axzo.orgmanax.api.node.req.NodeProcessReq;
|
import cn.axzo.orgmanax.api.node.req.ProcessNodeReq;
|
||||||
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
||||||
import cn.axzo.orgmanax.server.node.service.NodeService;
|
import cn.axzo.orgmanax.server.node.service.NodeService;
|
||||||
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
|
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
|
||||||
@ -36,7 +36,7 @@ public class NodeController implements OrgNodeApi {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ApiResult<JSONObject> process(NodeProcessReq req) {
|
public ApiResult<JSONObject> process(ProcessNodeReq req) {
|
||||||
NodeProcessor.ProcessResult processResult = nodeService.process(req);
|
NodeProcessor.ProcessResult processResult = nodeService.process(req);
|
||||||
Axssert.isTrue(processResult.getSuccess(), NODE_PROCESS_FAILED, processResult.getMsg());
|
Axssert.isTrue(processResult.getSuccess(), NODE_PROCESS_FAILED, processResult.getMsg());
|
||||||
return ApiResult.success(processResult.getContext());
|
return ApiResult.success(processResult.getContext());
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import lombok.Getter;
|
|||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public enum NodeEventType {
|
public enum NodeEventType {
|
||||||
NODE_UPSERTED("node-upserted", "验收单新增/更新事件"),
|
NODE_UPSERTED("node-upserted", "部门新增/更新事件"),
|
||||||
;
|
;
|
||||||
|
|
||||||
NodeEventType(String name, String desc) {
|
NodeEventType(String name, String desc) {
|
||||||
|
|||||||
@ -53,15 +53,16 @@ public class NodeFoundationServiceImpl implements NodeFoundationService {
|
|||||||
// 转换为领域对象
|
// 转换为领域对象
|
||||||
// 持久化 -> mapstruct?
|
// 持久化 -> mapstruct?
|
||||||
OrganizationalNode organizationalNode = nodeCreate.toEntity();
|
OrganizationalNode organizationalNode = nodeCreate.toEntity();
|
||||||
nodeUpsertRepository.create(organizationalNode);
|
OrganizationalNode savedNode = nodeUpsertRepository.create(organizationalNode);
|
||||||
|
|
||||||
// 重新计算path、topNodeId等数据。 未来也可以添加workspaceId等信息
|
// 重新计算path、topNodeId等数据。 未来也可以添加workspaceId等信息
|
||||||
String path = organizationalNode.calcPath(parentNode);
|
savedNode.calcPath(parentNode);
|
||||||
|
|
||||||
// 更新path数据
|
// 更新path数据
|
||||||
nodeUpsertRepository.update(NodeUpsertRepository.UpdateReq.builder()
|
nodeUpsertRepository.update(NodeUpsertRepository.UpdateReq.builder()
|
||||||
.id(organizationalNode.getId())
|
.id(savedNode.getId())
|
||||||
.path(path)
|
.topNodeId(savedNode.getTopNodeId())
|
||||||
|
.path(savedNode.getPath())
|
||||||
.build());
|
.build());
|
||||||
NodeQueryRepository.NodeResp saved = nodeQueryRepository.one(NodeQueryRepository.OneReq.builder().id(organizationalNode.getId()).build());
|
NodeQueryRepository.NodeResp saved = nodeQueryRepository.one(NodeQueryRepository.OneReq.builder().id(organizationalNode.getId()).build());
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@ package cn.axzo.orgmanax.server.node.service;
|
|||||||
import cn.axzo.foundation.exception.Axssert;
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
import cn.axzo.foundation.page.PageResp;
|
import cn.axzo.foundation.page.PageResp;
|
||||||
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
||||||
import cn.axzo.orgmanax.api.node.req.NodeProcessReq;
|
import cn.axzo.orgmanax.api.node.req.ProcessNodeReq;
|
||||||
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
||||||
import cn.axzo.orgmanax.common.config.BizResultCode;
|
import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||||
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
|
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
|
||||||
@ -17,7 +17,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface NodeService {
|
public interface NodeService {
|
||||||
|
|
||||||
NodeProcessor.ProcessResult process(NodeProcessReq req);
|
NodeProcessor.ProcessResult process(ProcessNodeReq req);
|
||||||
|
|
||||||
PageResp<OrgNodeDTO> page(ListNodeReq req);
|
PageResp<OrgNodeDTO> page(ListNodeReq req);
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ public interface NodeService {
|
|||||||
class ProcessReq {
|
class ProcessReq {
|
||||||
private Long id;
|
private Long id;
|
||||||
private Long operatorId;
|
private Long operatorId;
|
||||||
private NodeProcessReq.Action action;
|
private ProcessNodeReq.Action action;
|
||||||
private JSONObject param;
|
private JSONObject param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -3,7 +3,7 @@ package cn.axzo.orgmanax.server.node.service.impl;
|
|||||||
import cn.axzo.foundation.exception.Axssert;
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
import cn.axzo.foundation.page.PageResp;
|
import cn.axzo.foundation.page.PageResp;
|
||||||
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
||||||
import cn.axzo.orgmanax.api.node.req.NodeProcessReq;
|
import cn.axzo.orgmanax.api.node.req.ProcessNodeReq;
|
||||||
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
||||||
import cn.axzo.orgmanax.common.config.BizResultCode;
|
import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||||
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||||
@ -27,7 +27,7 @@ public class NodeServiceImpl implements NodeService {
|
|||||||
private final ApplicationContext applicationContext;
|
private final ApplicationContext applicationContext;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NodeProcessor.ProcessResult process(NodeProcessReq req) {
|
public NodeProcessor.ProcessResult process(ProcessNodeReq req) {
|
||||||
// 通用check
|
// 通用check
|
||||||
Axssert.notNull(req.getAction(), BizResultCode.INVALID_PARAM, "执行行为不能为空");
|
Axssert.notNull(req.getAction(), BizResultCode.INVALID_PARAM, "执行行为不能为空");
|
||||||
Axssert.notNull(req.getOperatorId(), BizResultCode.INVALID_PARAM, "操作人不能为空");
|
Axssert.notNull(req.getOperatorId(), BizResultCode.INVALID_PARAM, "操作人不能为空");
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package cn.axzo.orgmanax.server.node.service.processor;
|
package cn.axzo.orgmanax.server.node.service.processor;
|
||||||
|
|
||||||
import cn.axzo.orgmanax.api.node.req.NodeProcessReq;
|
import cn.axzo.orgmanax.api.node.req.ProcessNodeReq;
|
||||||
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
@ -24,7 +24,7 @@ public interface NodeProcessor {
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
class ProcessContext {
|
class ProcessContext {
|
||||||
NodeQueryRepository.NodeResp node;
|
NodeQueryRepository.NodeResp node;
|
||||||
NodeProcessReq.Action action;
|
ProcessNodeReq.Action action;
|
||||||
|
|
||||||
JSONObject params;
|
JSONObject params;
|
||||||
|
|
||||||
|
|||||||
@ -1,18 +1,22 @@
|
|||||||
package cn.axzo.orgmanax.server.node.service.processor.impl;
|
package cn.axzo.orgmanax.server.node.service.processor.impl;
|
||||||
|
|
||||||
|
import cn.axzo.orgmanax.api.cooperateship.resp.CooperateShipTypeEnum;
|
||||||
|
import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||||
|
import cn.axzo.orgmanax.infra.client.workspace.WorkspaceGateway;
|
||||||
|
import cn.axzo.orgmanax.infra.client.workspace.dto.Workspace;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.cooperateship.entity.SaasCooperateShip;
|
||||||
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
import cn.axzo.orgmanax.infra.dao.node.entity.OrganizationalNode;
|
||||||
|
import cn.axzo.orgmanax.server.cooperateship.service.CooperateShipService;
|
||||||
import cn.axzo.orgmanax.server.node.foundation.NodeFoundationService;
|
import cn.axzo.orgmanax.server.node.foundation.NodeFoundationService;
|
||||||
import cn.axzo.orgmanax.server.node.foundation.req.NodeCreate;
|
import cn.axzo.orgmanax.server.node.foundation.req.NodeCreate;
|
||||||
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
|
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建普通部门
|
* 创建普通部门
|
||||||
*/
|
*/
|
||||||
@ -20,7 +24,10 @@ import org.springframework.stereotype.Component;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class CreateNodeProcessor implements NodeProcessor {
|
public class CreateNodeProcessor implements NodeProcessor {
|
||||||
|
|
||||||
private final NodeFoundationService nodeFoundationService;
|
private final NodeFoundationService nodeFoundationService;
|
||||||
|
private final CooperateShipService cooperateShipService;
|
||||||
|
private final WorkspaceGateway workspaceGateway;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProcessResult process(ProcessContext context) {
|
public ProcessResult process(ProcessContext context) {
|
||||||
@ -29,50 +36,42 @@ public class CreateNodeProcessor implements NodeProcessor {
|
|||||||
OrganizationalNode savedNode = nodeFoundationService.create(nodeCreate);
|
OrganizationalNode savedNode = nodeFoundationService.create(nodeCreate);
|
||||||
// 创建部门的通用MQ,在create方法里面已经处理。此处不用再发MQ
|
// 创建部门的通用MQ,在create方法里面已经处理。此处不用再发MQ
|
||||||
|
|
||||||
|
// 初始化协同关系
|
||||||
|
initCooperateShipIfNeeded(savedNode, nodeCreate);
|
||||||
|
|
||||||
// 返回数据
|
// 返回数据
|
||||||
return ProcessResult.success((JSONObject) JSONObject.toJSON(savedNode));
|
return ProcessResult.success((JSONObject) JSONObject.toJSON(savedNode));
|
||||||
}
|
}
|
||||||
|
|
||||||
@NoArgsConstructor
|
protected void initCooperateShipIfNeeded(OrganizationalNode node, NodeCreate nodeCreate) {
|
||||||
@AllArgsConstructor
|
if (node == null) {
|
||||||
@Data
|
return;
|
||||||
@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
|
|
||||||
}
|
}
|
||||||
|
// 平台班组,不需要创建协同关系
|
||||||
|
if (Objects.equals(node.getNodeType(), OrganizationalNode.TypeEnum.TEAM.getValue())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 非顶级节点,不创建协同关系
|
||||||
|
if (node.getParentId() != null && node.getParentId() > 0L) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询单位工作台类型
|
||||||
|
Workspace workspace = workspaceGateway.listWorkspaces(WorkspaceGateway.ListWorkspaceReq.builder()
|
||||||
|
.type(Workspace.WorkspaceTypeEnum.GENERAL_ENT.value)
|
||||||
|
.organizationalUnitId(node.getOrganizationalUnitId())
|
||||||
|
.build()).stream().findFirst().orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("没有企业工作台"));
|
||||||
|
|
||||||
|
// 创建协同关系
|
||||||
|
cooperateShipService.create(CooperateShipService.CreateReq.builder()
|
||||||
|
.workspaceId(workspace.getId())
|
||||||
|
// TODO TOCHECK
|
||||||
|
.cooperateType(CooperateShipTypeEnum.ENT_COMMON.getCode())
|
||||||
|
.partnerShip(SaasCooperateShip.ParterShipEnum.OWNED.getCode())
|
||||||
|
.organizationalNodeId(node.getTopNodeId())
|
||||||
|
.parentId(0L)
|
||||||
|
.operatorId(nodeCreate.getOperatorId())
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,49 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.controller;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
|
import cn.axzo.foundation.page.PageResp;
|
||||||
|
import cn.axzo.foundation.result.ApiResult;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.feign.OrgNodeUserApi;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import static cn.axzo.orgmanax.common.config.BizResultCode.NODE_USER_PROCESS_FAILED;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author tanjie@axzo.cn
|
||||||
|
* @date 2024/12/2 16:47
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class NodeUserController implements OrgNodeUserApi {
|
||||||
|
|
||||||
|
private final NodeUserService nodeUserService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建部门
|
||||||
|
* <p>
|
||||||
|
* XXX: why json: 由于不同行为,需要的参数和返回信息均不一致。jsonObject用来统一接收参数和返回数据。具体消费参数的地方「service、processor」来定义具体的类型。
|
||||||
|
*
|
||||||
|
* @param req 创建部门参数
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public ApiResult<JSONObject> process(ProcessNodeUserReq req) {
|
||||||
|
NodeUserProcessor.ProcessResult processResult = nodeUserService.process(req);
|
||||||
|
Axssert.isTrue(processResult.getSuccess(), NODE_USER_PROCESS_FAILED, processResult.getMsg());
|
||||||
|
return ApiResult.success(processResult.getContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ApiResult<PageResp<OrgNodeUserDTO>> list(ListNodeUserReq req) {
|
||||||
|
return ApiResult.success(nodeUserService.page(req));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.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 NodeUserEventType {
|
||||||
|
NODE_USER_UPSERTED("node-user-upserted", "部门人员新增/更新事件"),
|
||||||
|
;
|
||||||
|
|
||||||
|
NodeUserEventType(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,34 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.event.inner.payload;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.event.support.AbstractDiffablePayload;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||||
|
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 NodeUserUpsertedPayload extends AbstractDiffablePayload<OrganizationalNodeUser> {
|
||||||
|
private OrganizationalNodeUser oldValue;
|
||||||
|
private OrganizationalNodeUser newValue;
|
||||||
|
private JSONObject ext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 勿删除,json序列化会使用
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Long getPersonId() {
|
||||||
|
return ObjectUtils.firstNonNull(oldValue, newValue).getPersonId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getIdentityId() {
|
||||||
|
return ObjectUtils.firstNonNull(oldValue, newValue).getIdentityId();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.event;
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.foundation;
|
||||||
|
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserCreate;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserUpdate;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
public interface NodeUserFoundationService {
|
||||||
|
/**
|
||||||
|
* 创建部门
|
||||||
|
*
|
||||||
|
* @param param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Transactional(rollbackFor = Throwable.class)
|
||||||
|
OrganizationalNodeUser create(NodeUserCreate param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 该接口为更新的收口接口,业务使用的时候,需要自行做业务判断
|
||||||
|
*
|
||||||
|
* @param req
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Transactional(rollbackFor = Throwable.class)
|
||||||
|
OrganizationalNodeUser update(NodeUserUpdate req);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,141 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.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.client.pudge.PersonProfileGateway;
|
||||||
|
import cn.axzo.orgmanax.infra.client.pudge.dto.IdentityProfile;
|
||||||
|
import cn.axzo.orgmanax.infra.client.pudge.dto.PersonProfile;
|
||||||
|
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;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserUpsertRepository;
|
||||||
|
import cn.axzo.orgmanax.server.node.event.inner.NodeEventType;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.event.inner.payload.NodeUserUpsertedPayload;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.foundation.NodeUserFoundationService;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserCreate;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserUpdate;
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.util.BooleanUtil;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author tanjie@axzo.cn
|
||||||
|
* @date 2024/12/2 16:55
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class NodeUserFoundationServiceImpl implements NodeUserFoundationService {
|
||||||
|
|
||||||
|
private final NodeUserQueryRepository nodeUserQueryRepository;
|
||||||
|
private final NodeUserUpsertRepository nodeUserUpsertRepository;
|
||||||
|
private final NodeQueryRepository nodeQueryRepository;
|
||||||
|
private final CooperateShipQueryRepository cooperateShipQueryRepository;
|
||||||
|
private final EventProducer eventProducer;
|
||||||
|
private final PersonProfileGateway profileGateway;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建部门标准接口
|
||||||
|
*
|
||||||
|
* @param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public OrganizationalNodeUser create(NodeUserCreate param) {
|
||||||
|
param.check();
|
||||||
|
|
||||||
|
// 部门是否存在
|
||||||
|
NodeQueryRepository.NodeResp node = nodeQueryRepository.oneOpt(NodeQueryRepository.OneReq.builder().id(param.getNodeId()).build())
|
||||||
|
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("部门不存在{}", param.getNodeId()));
|
||||||
|
|
||||||
|
// 人是否存在
|
||||||
|
PersonProfile personProfile = profileGateway.getPersonProfile(param.getPersonId());
|
||||||
|
Axssert.checkNonNull(personProfile, "用户不存在");
|
||||||
|
// 人员身份是否存在
|
||||||
|
IdentityProfile identityProfile = profileGateway.getIdentityProfile(param.getPersonId(), param.getIdentityType());
|
||||||
|
Axssert.checkNonNull(personProfile, "用户身份不存在");
|
||||||
|
|
||||||
|
// 转换为领域对象
|
||||||
|
// 持久化 -> mapstruct?
|
||||||
|
OrganizationalNodeUser nodeUser = param.toEntity();
|
||||||
|
// assemble person info
|
||||||
|
nodeUser.setIdentityId(identityProfile.getIdentityId());
|
||||||
|
nodeUser.setPhone(personProfile.getPhone());
|
||||||
|
nodeUser.setRealName(personProfile.getRealName());
|
||||||
|
nodeUser.setIdNumber(personProfile.getIdNumber());
|
||||||
|
// assemble unit info
|
||||||
|
nodeUser.setOrganizationalUnitId(node.getOrganizationalUnitId());
|
||||||
|
// assemble node info
|
||||||
|
nodeUser.setTopNodeId(node.getTopNodeId());
|
||||||
|
// assemble workspace
|
||||||
|
nodeUser.setWorkspaceId(resolveWorkspaceId(node));
|
||||||
|
|
||||||
|
nodeUserUpsertRepository.create(nodeUser);
|
||||||
|
|
||||||
|
NodeUserQueryRepository.NodeUserResp saved = nodeUserQueryRepository.one(
|
||||||
|
NodeUserQueryRepository.OneReq.builder().id(nodeUser.getId()).build());
|
||||||
|
|
||||||
|
// 发送数据变更基础MQ
|
||||||
|
eventProducer.send(Event.builder()
|
||||||
|
.eventCode(NodeEventType.NODE_UPSERTED.getEventCode())
|
||||||
|
.operatorId(param.getOperatorId() + "")
|
||||||
|
.operatorType(getClass().getSimpleName())
|
||||||
|
.targetType("personId")
|
||||||
|
.targetId(saved.getId() + "")
|
||||||
|
.shardingKey(saved.getPersonId() + "")
|
||||||
|
.data(NodeUserUpsertedPayload.builder()
|
||||||
|
.newValue(saved)
|
||||||
|
.oldValue(null)
|
||||||
|
.ext(param.getExtra())
|
||||||
|
.build())
|
||||||
|
.build());
|
||||||
|
|
||||||
|
// 返回结果
|
||||||
|
return saved;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OrganizationalNodeUser update(NodeUserUpdate req) {
|
||||||
|
NodeUserQueryRepository.NodeUserResp dbNodeUser = nodeUserQueryRepository.oneOpt(NodeUserQueryRepository.OneReq.builder().id(req.getId()).build())
|
||||||
|
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("部门人员不存在{}", req.getId()));
|
||||||
|
|
||||||
|
NodeUserUpsertRepository.UpdateReq updateReq = BeanUtil.toBean(req, NodeUserUpsertRepository.UpdateReq.class);
|
||||||
|
// 刷新用户基本资料
|
||||||
|
if (BooleanUtil.isTrue(req.getRefreshPersonProfile())) {
|
||||||
|
PersonProfile personProfile = profileGateway.getPersonProfile(dbNodeUser.getPersonId());
|
||||||
|
Axssert.checkNonNull(personProfile, "用户不存在");
|
||||||
|
// 人员身份是否存在
|
||||||
|
IdentityProfile identityProfile = profileGateway.getIdentityProfile(dbNodeUser.getPersonId(), dbNodeUser.getIdentityType());
|
||||||
|
Axssert.checkNonNull(personProfile, "用户身份不存在");
|
||||||
|
|
||||||
|
// 转换为领域对象
|
||||||
|
// 持久化 -> mapstruct?
|
||||||
|
// assemble person info
|
||||||
|
updateReq.setIdentityId(identityProfile.getIdentityId());
|
||||||
|
updateReq.setPhone(personProfile.getPhone());
|
||||||
|
updateReq.setRealName(personProfile.getRealName());
|
||||||
|
updateReq.setIdNumber(personProfile.getIdNumber());
|
||||||
|
}
|
||||||
|
|
||||||
|
return nodeUserUpsertRepository.update(updateReq);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Long resolveWorkspaceId(NodeQueryRepository.NodeResp node) {
|
||||||
|
if (Objects.equals(node.getNodeType(), OrganizationalNode.TypeEnum.TEAM.getValue())) {
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
return cooperateShipQueryRepository.oneOpt(CooperateShipQueryRepository.OneReq.builder()
|
||||||
|
.organizationalNodeId(node.getOrganizationalUnitId())
|
||||||
|
.build()).map(CooperateShipQueryRepository.CooperateShipResp::getWorkspaceId)
|
||||||
|
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("部门人员所属项目未找到,请稍后重试"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,76 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.foundation.req;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
public class NodeUserCreate {
|
||||||
|
private Long personId;
|
||||||
|
private Long nodeId;
|
||||||
|
private Integer identityType;
|
||||||
|
private Long workspaceId;
|
||||||
|
private Boolean manager;
|
||||||
|
private Long organizationalJobId;
|
||||||
|
/**
|
||||||
|
* 0:普通岗位、1:主岗位
|
||||||
|
*/
|
||||||
|
private Integer primaryJob;
|
||||||
|
/**
|
||||||
|
* 是否允许进入工地 1.允许 2.不允许
|
||||||
|
*/
|
||||||
|
private Integer isAllowed;
|
||||||
|
/**
|
||||||
|
* 数据同步ID
|
||||||
|
*/
|
||||||
|
private Long syncDataId;
|
||||||
|
/**
|
||||||
|
* 工号
|
||||||
|
*/
|
||||||
|
private String jobNumber;
|
||||||
|
private String joinScene;
|
||||||
|
private JSONObject extra;
|
||||||
|
/**
|
||||||
|
* 1-活跃用户,0-非活跃用户
|
||||||
|
*/
|
||||||
|
private Integer activeFlag;
|
||||||
|
private Long operatorId;
|
||||||
|
/**
|
||||||
|
* 创建部门的端
|
||||||
|
*/
|
||||||
|
private String terminal;
|
||||||
|
/**
|
||||||
|
* 创建部门的页面,需前端或调用方传入
|
||||||
|
*/
|
||||||
|
private String page;
|
||||||
|
private JSONObject profile;
|
||||||
|
|
||||||
|
public void check() {
|
||||||
|
Axssert.checkNonNull(operatorId, "操作人不能为空");
|
||||||
|
Axssert.checkNonNull(nodeId, "部门不能为空");
|
||||||
|
Axssert.checkNonNull(identityType, "人员身份不能为空");
|
||||||
|
Axssert.checkNonNull(personId, "用户id不能都为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrganizationalNodeUser toEntity() {
|
||||||
|
OrganizationalNodeUser nodeUser = BeanUtil.toBean(this, OrganizationalNodeUser.class);
|
||||||
|
nodeUser.setExtra(Optional.ofNullable(extra).orElseGet(JSONObject::new)
|
||||||
|
.fluentPut("createScene", ImmutableMap.of("terminal", StrUtil.firstNonBlank(terminal, "UNKNOWN"),
|
||||||
|
"page", StrUtil.firstNonBlank(page, "UNKNOWN"))));
|
||||||
|
nodeUser.setJoinAt(new Date());
|
||||||
|
return nodeUser;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.foundation.req;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@SuperBuilder
|
||||||
|
public class NodeUserUpdate {
|
||||||
|
private Long id;
|
||||||
|
private Boolean manager;
|
||||||
|
private Long organizationalJobId;
|
||||||
|
/**
|
||||||
|
* 0:普通岗位、1:主岗位
|
||||||
|
*/
|
||||||
|
private Integer primaryJob;
|
||||||
|
/**
|
||||||
|
* 是否允许进入工地 1.允许 2.不允许
|
||||||
|
*/
|
||||||
|
private Integer isAllowed;
|
||||||
|
/**
|
||||||
|
* 数据同步ID
|
||||||
|
*/
|
||||||
|
private Long syncDataId;
|
||||||
|
/**
|
||||||
|
* 工号
|
||||||
|
*/
|
||||||
|
private String jobNumber;
|
||||||
|
private String joinScene;
|
||||||
|
private JSONObject extra;
|
||||||
|
/**
|
||||||
|
* 1-活跃用户,0-非活跃用户
|
||||||
|
*/
|
||||||
|
private Integer activeFlag;
|
||||||
|
/**
|
||||||
|
* 指定为true的情况,要刷新用户信息
|
||||||
|
*/
|
||||||
|
private Boolean refreshPersonProfile;
|
||||||
|
|
||||||
|
public void check() {
|
||||||
|
Axssert.checkNonNull(id, "部门人员不能为空");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.service;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
|
import cn.axzo.foundation.page.PageResp;
|
||||||
|
import cn.axzo.orgmanax.api.node.req.ListNodeReq;
|
||||||
|
import cn.axzo.orgmanax.api.node.req.ProcessNodeReq;
|
||||||
|
import cn.axzo.orgmanax.api.node.resp.OrgNodeDTO;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO;
|
||||||
|
import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||||
|
import cn.axzo.orgmanax.server.node.service.processor.NodeProcessor;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface NodeUserService {
|
||||||
|
|
||||||
|
NodeUserProcessor.ProcessResult process(ProcessNodeUserReq req);
|
||||||
|
|
||||||
|
PageResp<OrgNodeUserDTO> page(ListNodeUserReq req);
|
||||||
|
|
||||||
|
default List<OrgNodeUserDTO> list(ListNodeUserReq req) {
|
||||||
|
return page(req).getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
class ProcessReq {
|
||||||
|
private Long id;
|
||||||
|
private Long operatorId;
|
||||||
|
private ProcessNodeReq.Action action;
|
||||||
|
private JSONObject param;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 基于参数的通用逻辑判断
|
||||||
|
*/
|
||||||
|
public void check() {
|
||||||
|
Axssert.notNull(action, BizResultCode.INVALID_PARAM, "执行行为不能为空");
|
||||||
|
Axssert.notNull(operatorId, BizResultCode.INVALID_PARAM, "操作人不能为空");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.service.impl;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
|
import cn.axzo.foundation.page.PageResp;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ListNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.resp.OrgNodeUserDTO;
|
||||||
|
import cn.axzo.orgmanax.common.config.BizResultCode;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.service.NodeUserService;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor;
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class NodeUserServiceImpl implements NodeUserService {
|
||||||
|
|
||||||
|
private final NodeUserQueryRepository nodeUserQueryRepository;
|
||||||
|
private final ApplicationContext applicationContext;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NodeUserProcessor.ProcessResult process(ProcessNodeUserReq req) {
|
||||||
|
// 通用check
|
||||||
|
Axssert.notNull(req.getAction(), BizResultCode.INVALID_PARAM, "执行行为不能为空");
|
||||||
|
Axssert.notNull(req.getOperatorId(), BizResultCode.INVALID_PARAM, "操作人不能为空");
|
||||||
|
// 如果指定了id,校验部门人员是否存在,并加载出node,以便后续使用
|
||||||
|
NodeUserQueryRepository.NodeUserResp current = req.getId() == null ? null
|
||||||
|
: nodeUserQueryRepository.oneOpt(NodeUserQueryRepository.OneReq.builder().id(req.getId()).build())
|
||||||
|
.orElseThrow(() -> BizResultCode.ENTITY_NOT_FOUND.toException("要操作的部门人员不存在,{}", req.getId()));
|
||||||
|
|
||||||
|
// 构建processor所需上下文
|
||||||
|
NodeUserProcessor.ProcessContext processContext = NodeUserProcessor.ProcessContext.builder()
|
||||||
|
.nodeUser(current)
|
||||||
|
.action(req.getAction())
|
||||||
|
.operatorId(req.getOperatorId())
|
||||||
|
.params(req.getParam())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
NodeUserProcessor processor = applicationContext.getBean(req.getAction().getProcessor(), NodeUserProcessor.class);
|
||||||
|
return processor.process(processContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResp<OrgNodeUserDTO> page(ListNodeUserReq req) {
|
||||||
|
PageResp<NodeUserQueryRepository.NodeUserResp> page = nodeUserQueryRepository.page(req);
|
||||||
|
List<OrgNodeUserDTO> records = page.getData().stream().map(e -> BeanUtil.toBean(e, OrgNodeUserDTO.class)).collect(Collectors.toList());
|
||||||
|
// assemble data if needed
|
||||||
|
return new PageResp<>(page.getTotal(), page.getSize(), page.getCurrent(), records);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.service.processor;
|
||||||
|
|
||||||
|
import cn.axzo.orgmanax.api.node.req.ProcessNodeReq;
|
||||||
|
import cn.axzo.orgmanax.api.nodeuser.req.ProcessNodeUserReq;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.node.repository.NodeQueryRepository;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.repository.NodeUserQueryRepository;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface NodeUserProcessor {
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Throwable.class)
|
||||||
|
ProcessResult process(ProcessContext context);
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
class ProcessContext {
|
||||||
|
NodeUserQueryRepository.NodeUserResp nodeUser;
|
||||||
|
ProcessNodeUserReq.Action action;
|
||||||
|
|
||||||
|
JSONObject params;
|
||||||
|
|
||||||
|
String description;
|
||||||
|
Long operatorId;
|
||||||
|
String operatorName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Builder(access = AccessLevel.PRIVATE)
|
||||||
|
@AllArgsConstructor
|
||||||
|
class ProcessResult {
|
||||||
|
@Builder.Default
|
||||||
|
Boolean success = Boolean.TRUE;
|
||||||
|
|
||||||
|
String msg;
|
||||||
|
|
||||||
|
JSONObject context;
|
||||||
|
|
||||||
|
public static ProcessResult success() {
|
||||||
|
return success(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ProcessResult success(JSONObject context) {
|
||||||
|
return ProcessResult.builder()
|
||||||
|
.success(true)
|
||||||
|
.context(Optional.ofNullable(context).orElse(new JSONObject(0)))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ProcessResult fail() {
|
||||||
|
return fail(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ProcessResult fail(String msg) {
|
||||||
|
return ProcessResult.builder()
|
||||||
|
.success(false)
|
||||||
|
.msg(msg)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.service.processor.impl;
|
||||||
|
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.foundation.NodeUserFoundationService;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserCreate;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加普通部门人员
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class CreateNodeUserProcessor implements NodeUserProcessor {
|
||||||
|
private final NodeUserFoundationService nodeUserFoundationService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProcessResult process(ProcessContext context) {
|
||||||
|
// 转成该处理器关注的参数对象
|
||||||
|
NodeUserCreate nodeCreate = context.getParams().toJavaObject(NodeUserCreate.class);
|
||||||
|
OrganizationalNodeUser nodeUser = nodeUserFoundationService.create(nodeCreate);
|
||||||
|
|
||||||
|
// 返回数据
|
||||||
|
return ProcessResult.success((JSONObject) JSONObject.toJSON(nodeUser));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
package cn.axzo.orgmanax.server.nodeuser.service.processor.impl;
|
||||||
|
|
||||||
|
import cn.axzo.foundation.exception.Axssert;
|
||||||
|
import cn.axzo.orgmanax.infra.dao.nodeuser.entity.OrganizationalNodeUser;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.foundation.NodeUserFoundationService;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.foundation.req.NodeUserUpdate;
|
||||||
|
import cn.axzo.orgmanax.server.nodeuser.service.processor.NodeUserProcessor;
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新部门人员普通信息
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class UpdateNodeUserProcessor implements NodeUserProcessor {
|
||||||
|
private final NodeUserFoundationService nodeUserFoundationService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProcessResult process(ProcessContext context) {
|
||||||
|
Axssert.checkNonNull(context.getParams(), "更新部门人员失败,参数不能为null");
|
||||||
|
Axssert.checkNonNull(context.getNodeUser(), "要更新的部门人员不存在");
|
||||||
|
Param param = context.getParams().toJavaObject(Param.class);
|
||||||
|
param.setId(context.getNodeUser().getId());
|
||||||
|
|
||||||
|
NodeUserUpdate update = param.toNodeUpdate();
|
||||||
|
OrganizationalNodeUser updated = nodeUserFoundationService.update(update);
|
||||||
|
return ProcessResult.success((JSONObject) JSON.toJSON(updated));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 仅接收允许直接被编辑的字段
|
||||||
|
*/
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public static class Param {
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 岗位id
|
||||||
|
*/
|
||||||
|
private Long organizationalJobId;
|
||||||
|
/**
|
||||||
|
* 是否管理员
|
||||||
|
*/
|
||||||
|
private String manager;
|
||||||
|
/**
|
||||||
|
* 离开时间
|
||||||
|
*/
|
||||||
|
private Date leaveAt;
|
||||||
|
/**
|
||||||
|
* 工号
|
||||||
|
*/
|
||||||
|
private String jobNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩展字段
|
||||||
|
* XXX:不能简单更新,后续要提供增量 更新 和 删除字段的功能
|
||||||
|
*/
|
||||||
|
private JSONObject extra;
|
||||||
|
/**
|
||||||
|
* 1-活跃用户,0-非活跃用户
|
||||||
|
*/
|
||||||
|
private Integer activeFlag;
|
||||||
|
/**
|
||||||
|
* 部门人员信息,json,不同部门类型的部门用户,格式不一。
|
||||||
|
* XXX:不能简单更新,后续要提供增量 更新 和 删除字段的功能
|
||||||
|
*/
|
||||||
|
private JSONObject profile;
|
||||||
|
|
||||||
|
private Boolean refreshPersonProfile;
|
||||||
|
|
||||||
|
public NodeUserUpdate toNodeUpdate() {
|
||||||
|
NodeUserUpdate update = BeanUtil.toBean(this, NodeUserUpdate.class);
|
||||||
|
return update;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -9,7 +9,7 @@ import lombok.Getter;
|
|||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public enum UnitEventType {
|
public enum UnitEventType {
|
||||||
NODE_UPSERTED("unit-upserted", "验收单新增/更新事件"),
|
NODE_UPSERTED("unit-upserted", "单位新增/更新事件"),
|
||||||
;
|
;
|
||||||
|
|
||||||
UnitEventType(String name, String desc) {
|
UnitEventType(String name, String desc) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user