feat(REQ-3488): 班组类别api、出参、入参调整

This commit is contained in:
songyuanlun 2025-01-03 11:42:33 +08:00
parent a7c4a3eaf6
commit e0ad5f757c
15 changed files with 854 additions and 0 deletions

View File

@ -0,0 +1,115 @@
package cn.axzo.orgmanax.api.project.team.feign;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryDTO;
import cn.axzo.orgmanax.dto.project.team.req.GroupTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.OperateOrgTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.OrgTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.PageOrgTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.PageTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.PreCheckRemoveTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.RemoveProjectTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.SaveProjectTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.req.SingletonOrgTeamCategoryReq;
import cn.axzo.orgmanax.dto.project.team.resp.OrgTeamCategoryResp;
import cn.axzo.orgmanax.dto.project.team.resp.RemoveTeamCategoryCheckResp;
import cn.axzo.orgmanax.dto.project.team.resp.SingletonOrgTeamCategoryResp;
import cn.axzo.orgmanax.dto.project.team.resp.TeamCategoryResp;
import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @Author: zhanglei
* @Name: ProjectTeamCategoryApi
* @Date: 2023/8/1 15:13
* @Desc: 班组分类内部接口
* @Version: 1.0
*/
@FeignClient(name = "org-gateway", url = "${axzo.service.org-gateway:http://org-gateway:8080}")
public interface OrgProjectTeamCategoryApi {
/**
* 班组分类信息列表查询-非通用接口
* 分组查询
*/
@PostMapping("/api/project/team-category/group-list")
ApiResult<List<TeamCategoryResp>> groupList(@RequestBody GroupTeamCategoryReq req);
/**
* todo 三期实现
* 平台经营范围/经营范围子级变化删除 校验不可变邀请中/申请中的经营范围 经营范围子级
* 返回空list表示没有校验冲突 list有值表示这些类别/经营范围子级 正在被使用
* 先提供list 接口看能否满足需求
*/
@PostMapping("/api/project/team-category/page")
ApiResult<PageResp<TeamCategoryDTO>> page(@RequestBody @Valid PageTeamCategoryReq req);
/**
* todo 三期实现
* 删除项目班组的分类进行check
*/
@PostMapping("/api/project/team-category/remove/check")
ApiResult<RemoveTeamCategoryCheckResp> preCheckRemoveTeamCategory(
@RequestBody @Valid PreCheckRemoveTeamCategoryReq req);
/**
* 添加项目班组分类
* 单个班组的班组类别初始化接口逻辑相差太大无法合并
* 这里用到宽表 org_project_worker_wide
*/
@PostMapping("/api/project/team-category/add")
ApiResult<Void> save(@RequestBody @Valid SaveProjectTeamCategoryReq req);
/**
* 删除项目班组分类
* 这里用到宽表 org_project_worker_wide
*/
@PostMapping("/api/project/team-category/remove")
ApiResult<Void> removeTeamCategory(@RequestBody @Valid RemoveProjectTeamCategoryReq req);
/**
* @// TODO: 接口重复
* 获取项目内 经营范围的 拼接字符串
* {@link OrgProjectTeamCategoryApi#groupList(cn.axzo.orggateway.api.project.team.req.GroupTeamCategoryReq)}
* 业务方自行通过这个接口返回的 projectTeamId 分组来拼接 经营范围
* 拼接经营范围方法参考cn.axzo.maokai.labour.server.util.BusinessScopeUtil#buildProjectBusinessScopeString
*/
// @PostMapping("/api/project/team-category/business-scope/list")
// ApiResult<List<ConvergeTeamCategoryResp>> listBusinessScope(
// @RequestBody @Valid PageTeamCategoryReq req);
/**
* 操作班组类别
*/
@PostMapping(value = "/api/project/team-category/operate")
ApiResult<Void> operate(@RequestBody @Valid OperateOrgTeamCategoryReq req);
/**
* replace实际上把老的删了更换为入参
* 入参是集合类型无法合并到通用接口
* todo 看业务方使用场景
*/
@PostMapping(value = "/api/project/team-category/upsert")
ApiResult<Void> replace(@RequestBody @NotEmpty List<OrgTeamCategoryReq> req);
/**
* 单个班组的班组列表查询
*
* @param req 单个班组信息
* @return 班组类别列表
* reqresp 和其他的完全不同且内部逻辑也不同无法合并
*/
@PostMapping(value = "/api/project/team-category/list-by-node")
ApiResult<SingletonOrgTeamCategoryResp> listByNode(@RequestBody @Valid SingletonOrgTeamCategoryReq req);
/**
* 列表分页查询
*/
@PostMapping(value = "/api/project/team-category/v2/page")
ApiResult<PageResp<OrgTeamCategoryResp>> pageV2(@RequestBody PageOrgTeamCategoryReq req);
}

View File

@ -0,0 +1,45 @@
package cn.axzo.orgmanax.dto.project.team.enums;
import java.util.Arrays;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @description
* 班组类别 - 类型枚举
* @author cold_blade
* @version 1.0
* @date 2024/5/29
*/
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum TeamCategoryOperateEnum {
/**
* 单个班组的班组类别初始化
*/
INIT(1, "单个班组的班组类别初始化"),
/**
* 班组的某个顶级班组类别及其子集的替换
*/
REPLACE(2, "班组的某个顶级班组类别及其子集的替换"),
/**
* 移除当前班组类别及其子集
*/
PRUNING(3, "移除当前班组类别及其子集"),
/**
* 根据nodeId 删除类别
*/
DELETE_BY_NODE(4, "移除当前班组类别及其子集"),
;
private final Integer code;
private final String desc;
public static TeamCategoryOperateEnum getByCode(Integer code) {
return Arrays.stream(values()).filter(it -> it.getCode().equals(code))
.findFirst()
.orElse(null);
}
}

View File

@ -0,0 +1,55 @@
package cn.axzo.orgmanax.dto.project.team.req;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class GroupTeamCategoryReq {
/**
* 班组ID
*/
private Long teamId;
/**
* 班组ID
*/
private List<Long> teamIdList;
/**
* 邀请ID
*/
private Long inviteId;
/**
* 邀请ID
*/
private List<Long> inviteIdList;
/**
* 工作台ID
*/
private Long workspaceId;
/**
* 经营范围类型1-经营范围2-专业经营范围经营范围子级 不传默认值为2
*/
private Integer type;
/**
* 经营范围类型
*/
private List<Integer> types;
/**
* 上级节点code
*/
private String parentCategoryCode;
/**
* 当前节点code
*/
private List<String> categoryCodeList;
}

View File

@ -0,0 +1,69 @@
package cn.axzo.orgmanax.dto.project.team.req;
import cn.axzo.orgmanax.dto.project.team.enums.TeamCategoryOperateEnum;
import com.alibaba.fastjson.JSON;
import java.io.Serializable;
import java.util.List;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author luofu
* @version 1.0
* @date 2024/5/30
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OperateOrgTeamCategoryReq implements Serializable {
private static final long serialVersionUID = 2393705048907729459L;
/**
* 操作类型
* @see TeamCategoryOperateEnum
*/
@NotNull(message = "operateType can not be null")
private String operateType;
/**
* 组织节点id
*/
@NotNull(message = "orgNodeId can not be null")
private Long orgNodeId;
/**
* 操作人的自然人id
*/
@NotNull(message = "operatorId can not be null")
private Long operatorId;
// 初始化的参数
/**
* 班组类别基础信息列表
*/
//@NotEmpty(message = "categories can not be empty")
private List<TeamCategoryTreeNode> categories;
// 班组的某个顶级班组类别及其子集的替换的参数
/**
* 班组类别基础信息列表
*/
//@NotNull(message = "root can not be null")
private TeamCategoryTreeNode root;
// 移除班组类别及其子集的参数
/**
* 待剪枝的班组类别的编码
*/
// @NotBlank(message = "teamCategoryCode can not be empty.")
private String teamCategoryCode;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -0,0 +1,74 @@
package cn.axzo.orgmanax.dto.project.team.req;
import cn.axzo.orgmanax.dto.project.team.enums.TeamCategoryTypeEnum;
import cn.axzo.orgmanax.dto.project.team.enums.TeamSceneEnum;
import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description
* 班组类别存储模型
* @author luofu
* @version 1.0
* @date 2024/5/29
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrgTeamCategoryReq {
private Long id;
private Date createAt;
private Date updateAt;
private Long isDelete = 0L;
/**
* 租户id
*/
private Long workspaceId;
/**
* 组织节点id
*/
private Long orgNodeId;
/**
* 班组类别code
*/
private String code;
/**
* 班组类别名称
*/
private String name;
/**
* 父级班组类别code
*/
private String parentCode;
/**
* 班组类别 - 分类
*/
private TeamCategoryTypeEnum type;
/**
* 班组类别使用场景
*/
private TeamSceneEnum scene;
/**
* 数据有效性标记
*/
private ValidationEnum valid;
/**
* 创建人的自然人id
*/
private Long createBy;
/**
* 更新人的自然人id
*/
private Long updateBy;
}

View File

@ -0,0 +1,26 @@
package cn.axzo.orgmanax.dto.project.team.req;
import cn.axzo.foundation.page.PageReqV2;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @author syl
* @date 2024/12/18
*/
@EqualsAndHashCode(callSuper = true)
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class PageOrgTeamCategoryReq extends PageReqV2 {
/**
* nodeId 列表
*/
private List<Long> orgNodeIds;
}

View File

@ -0,0 +1,36 @@
package cn.axzo.orgmanax.dto.project.team.req;
import cn.axzo.foundation.page.PageReqV2;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class PageTeamCategoryReq extends PageReqV2 {
/**
* 平台班组id
*/
private Long platTeamId;
/**
* 经营范围/经营范围子级codeList
*/
private List<String> categoryCodeList;
/**
* 状态列表
*/
private List<Integer> statusList;
/**
* 项目内班组idList
*/
private List<Long> projectTeamIds;
}

View File

@ -0,0 +1,29 @@
package cn.axzo.orgmanax.dto.project.team.req;
import java.util.List;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@NoArgsConstructor
@Data
@SuperBuilder
@AllArgsConstructor
public class PreCheckRemoveTeamCategoryReq {
/**
* 项目内班组id
* todo 需要替换成新的方式改造
*/
@NotNull(message = "项目内班组id不能为空")
private Long projectTeamId;
/**
* 经营范围code
*/
@NotEmpty(message = "经营范围code不能为空")
private List<String> categoryCodes;
}

View File

@ -0,0 +1,42 @@
package cn.axzo.orgmanax.dto.project.team.req;
import java.util.List;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@NoArgsConstructor
@Data
@SuperBuilder
@AllArgsConstructor
public class RemoveProjectTeamCategoryReq {
/**
* 项目内班组id
*/
@NotNull(message = "项目内班组id不能为空")
private Long projectTeamId;
@NotNull(message = "工作台id不能为空")
private Long workspaceId;
@NotEmpty(message = "经营范围不能为空")
private List<ProjectTeamCategoryReq> categoryCodes;
@NoArgsConstructor
@Data
@SuperBuilder
@AllArgsConstructor
public static class ProjectTeamCategoryReq {
/**
* 经营范围code
*/
private String categoryCode;
/**
* 经营范围name
*/
private String categoryName;
}
}

View File

@ -0,0 +1,30 @@
package cn.axzo.orgmanax.dto.project.team.req;
import cn.axzo.orgmanax.dto.project.team.dto.TeamCategoryDTO;
import java.util.List;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@NoArgsConstructor
@Data
@SuperBuilder
@AllArgsConstructor
public class SaveProjectTeamCategoryReq {
/**
* 项目内班组id
*/
@NotNull(message = "项目内班组id不能为空")
private Long projectTeamId;
@NotNull(message = "工作台id不能为空")
private Long workspaceId;
/**
* 经营范围
*/
@NotEmpty(message = "经营范围不能为空")
private List<TeamCategoryDTO> teamCategories;
}

View File

@ -0,0 +1,33 @@
package cn.axzo.orgmanax.dto.project.team.req;
import com.alibaba.fastjson.JSON;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @description
* 查询班组类别入参模型
* @author luofu
* @version 1.0
* @date 2024/6/4
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class SingletonOrgTeamCategoryReq implements Serializable {
private static final long serialVersionUID = -8514259693439832528L;
@NotNull(message = "orgNodeId can not be null")
private Long orgNodeId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -0,0 +1,80 @@
package cn.axzo.orgmanax.dto.project.team.req;
import com.alibaba.fastjson.JSON;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.apache.commons.lang3.StringUtils;
/**
* @author luofu
* @version 1.0
* @description 班组类别树节点模型
* @date 2024/6/4
*/
@Data
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
public class TeamCategoryTreeNode implements Serializable {
private static final long serialVersionUID = -5912767475140558043L;
/**
* 班组类别code
*/
private String code;
/**
* 班组类别名称
*/
private String name;
/**
* 父级班组类别code
*/
private String parentCode;
/**
* 班组类别 - 分类
*/
private Integer type;
/**
* 班组类别使用场景
*/
private String scene;
/**
* 子班组类别的列表
*/
private List<TeamCategoryTreeNode> children = new ArrayList<>();
@Override
public String toString() {
return JSON.toJSONString(this);
}
public String getNodeCode() {
return this.code;
}
public String getParentNodeCode() {
return this.parentCode;
}
public List<TeamCategoryTreeNode> getNodeChildren() {
return this.children;
}
public void setNodeChildren(List<TeamCategoryTreeNode> nodeChildren) {
this.children = nodeChildren;
}
public boolean isRoot() {
return StringUtils.isBlank(this.parentCode)
|| Objects.equals(this.parentCode, "0");
}
}

View File

@ -0,0 +1,77 @@
package cn.axzo.orgmanax.dto.project.team.resp;
import cn.axzo.orgmanax.dto.project.team.enums.TeamCategoryTypeEnum;
import cn.axzo.orgmanax.dto.project.team.enums.TeamSceneEnum;
import cn.axzo.orgmanax.dto.project.team.enums.ValidationEnum;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @description
* 班组类别存储模型
* @author luofu
* @version 1.0
* @date 2024/5/29
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrgTeamCategoryResp {
private Long id;
private Date createAt;
private Date updateAt;
private Long isDelete = 0L;
/**
* 租户id
*/
private Long workspaceId;
/**
* 组织节点id
*/
private Long orgNodeId;
/**
* 班组类别code
*/
private String code;
/**
* 班组类别名称
*/
private String name;
/**
* 父级班组类别code
*/
private String parentCode;
/**
* 班组类别 - 分类
* @see TeamCategoryTypeEnum
*/
private String type;
/**
* 班组类别使用场景
* @see TeamSceneEnum
*/
private TeamSceneEnum scene;
/**
* 数据有效性标记
* @see ValidationEnum
*/
private ValidationEnum valid;
/**
* 创建人的自然人id
*/
private Long createBy;
/**
* 更新人的自然人id
*/
private Long updateBy;
}

View File

@ -0,0 +1,99 @@
package cn.axzo.orgmanax.dto.project.team.resp;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class RemoveTeamCategoryCheckResp {
/**
* 是否可以删除
*/
private boolean canDelete;
/**
* 删除提示消息
*/
private WarningMsg warningMsg;
/**
* 不能删除时提示的消息
*/
private SuspendMsg suspendMsg;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class WarningMsg{
/**
* 多少名工人与该类别对应的工种将会被移除
*/
private Integer deleteWorkerProfessionNum;
/**
* 多少个依赖该班组的邀请二维码会自动失效
*/
private Integer deleteErcodeNum;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class SuspendMsg{
private List<WorkerInfo> workers;
private List<TaskOrder> taskOrders;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class WorkerInfo{
/**
* 工人id
*/
private Long workerId;
/**
* 工人姓名
*/
private String workerName;
/**
* 工种
*/
private List<String> workerProfessions;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class TaskOrder{
/**
* 任务单号
*/
private String taskNo;
/**
* 项目名称
*/
private String workspaceName;
/**
* 工人名称
*/
private String workerName;
/**
* 任务单名称
*/
private String taskOrderName;
}
}

View File

@ -0,0 +1,44 @@
package cn.axzo.orgmanax.dto.project.team.resp;
import cn.axzo.orgmanax.dto.project.team.req.TeamCategoryTreeNode;
import com.alibaba.fastjson.JSON;
import java.io.Serializable;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* @description
* 单个班组的班组类别数据模型
* @author luofu
* @version 1.0
* @date 2024/6/4
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class SingletonOrgTeamCategoryResp implements Serializable {
private static final long serialVersionUID = -4548376381178801676L;
/**
* 部门id
*/
private Long orgNodeId;
/**
* 租户id
*/
private Long workspaceId;
/**
* 班组类别列表
*/
private List<TeamCategoryTreeNode> categories;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}