feat(process): 添加业务流程管理相关API接口

This commit is contained in:
黄斌峰
2026-08-09 22:15:15 +08:00
parent 31f8e07ffe
commit 0d247afef3
34 changed files with 2941 additions and 0 deletions
@@ -0,0 +1,105 @@
package org.springblade.process.feign;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.tool.api.FR;
import org.springblade.process.pojo.dto.BusinessProcessCurrentHandlerRefreshDTO;
import org.springblade.process.pojo.dto.BusinessProcessDeleteDTO;
import org.springblade.process.pojo.dto.BusinessProcessSubmitDTO;
import org.springblade.process.pojo.dto.BusinessProcessUpdateDTO;
import org.springblade.process.pojo.vo.BusinessProcessVO;
import org.springblade.process.pojo.vo.ProcessApprovedRecordVO;
import org.springblade.process.pojo.vo.ProcessTodoVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* 业务流程关联表 Feign接口类
*
* @author BladeX
* @since 2024-09-19
*/
@FeignClient(
value = AppConstant.APPLICATION_SYSTEM_NAME
)
public interface IBusinessProcessClient {
String API_PREFIX = "/feign/client/businessProcess";
String SUBMIT_BUSINESS_PROCESS = API_PREFIX + "/submitBusinessProcess";
String UPDATE_BUSINESS_PROCESS_APPROVER = API_PREFIX + "/updateBusinessProcessApprover";
String REFRESH_BUSINESS_PROCESS_CURRENT_HANDLERS = API_PREFIX + "/refreshBusinessProcessCurrentHandlers";
String UPDATE_BUSINESS_PROCESS_STATUS = API_PREFIX + "/updateBusinessProcessStatus";
String DELETE_BUSINESS_PROCESS = API_PREFIX + "/deleteBusinessProcess";
String QUERY_TODO_LIST = API_PREFIX + "/queryTodoList";
String QUERY_BUSINESS_PROCESS_SNAPSHOT = API_PREFIX + "/queryBusinessProcessSnapshot";
String QUERY_APPROVED_RECORD_LIST = API_PREFIX + "/queryApprovedRecordsNoAttachments";
/**
* 提交业务流程
* @param param
*/
@PostMapping(SUBMIT_BUSINESS_PROCESS)
FR<BusinessProcessVO> submitBusinessProcess(@Validated @RequestBody BusinessProcessSubmitDTO<?> param);
/**
* 修改业务流程状态
* @param param
* @return
*/
@PostMapping(UPDATE_BUSINESS_PROCESS_STATUS)
FR<Boolean> updateBusinessProcessStatus(@Validated @RequestBody BusinessProcessUpdateDTO param);
/**
* 修改业务流程审批人
* @param param
* @return
*/
@PostMapping(UPDATE_BUSINESS_PROCESS_APPROVER)
FR<BusinessProcessVO> updateBusinessProcessApprover(@Validated @RequestBody BusinessProcessUpdateDTO param);
/**
* 只刷新当前节点和当前处理人
* @param param
* @return
*/
@PostMapping(REFRESH_BUSINESS_PROCESS_CURRENT_HANDLERS)
FR<BusinessProcessVO> refreshBusinessProcessCurrentHandlers(@Validated @RequestBody BusinessProcessCurrentHandlerRefreshDTO param);
/**
* 查询流程当前待办列表
* @param processInstanceId
* @return
*/
@GetMapping(QUERY_TODO_LIST)
FR<List<ProcessTodoVO>> queryTodoList(@RequestParam("processInstanceId") String processInstanceId);
/**
* 查询业务流程当前快照
* @param processInstanceId
* @return
*/
@GetMapping(QUERY_BUSINESS_PROCESS_SNAPSHOT)
FR<BusinessProcessVO> queryBusinessProcessSnapshot(@RequestParam("processInstanceId") String processInstanceId);
/**
* 删除业务流程
* @param param
* @return
*/
@PostMapping(DELETE_BUSINESS_PROCESS)
FR<Boolean> deleteBusinessProcess(@Validated @RequestBody BusinessProcessDeleteDTO param);
/**
* 查询流程审批记录不处理附件
* @param bizId
* @param processInstanceId
* @return
*/
@GetMapping(QUERY_APPROVED_RECORD_LIST)
FR<List<ProcessApprovedRecordVO>> queryApprovedRecordsNoAttachments(@RequestParam(name = "bizId", required = false) String bizId, @RequestParam(name = "processInstanceId", required = false) String processInstanceId);
}
@@ -0,0 +1,34 @@
package org.springblade.process.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 附加操作信息
*
* @author linbb
*/
@Schema(description = "附加操作信息")
@Data
public class AdditionOperationParameterDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 操作类型
*/
private String operationType;
/**
* 操作身份
*/
private String operationIdentity;
/**
* 操作参数
*/
private String parameter;
}
@@ -0,0 +1,119 @@
package org.springblade.process.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* mk审批中心查询参数
* @author bfhuange
* @since 2025/4/2
*/
@Data
@Schema(description = "mk审批中心查询参数")
public class ApprovalDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 单据类型 myApproving 我的待审,myApproved 我的已审,myReading 我的待阅,myReaded 我的已阅,myRelated 我参与的,myCreated 我发起的
*/
@NotBlank(message = "单据类型不能为空")
@Schema(description = "单据类型 myApproving 我的待审,myApproved 我的已审,myReading 我的待阅,myReaded 我的已阅,myRelated 我参与的,myCreated 我发起的")
private String docType;
/**
* 关键字
*/
@Schema(description = "关键字")
private String keyword;
/**
* 模板名称
*/
@Schema(description = "模板名称")
private String templateName;
/**
* 申请时间开始
*/
@Schema(description = "申请时间开始")
private Date applicantTimeStart;
/**
* 申请时间结束
*/
@Schema(description = "申请时间结束")
private Date applicantTimeEnd;
//==================================待办参数=======================
/**
* 接收时间开始
*/
@Schema(description = "接收时间开始")
private Date receiveTimeStart;
/**
* 接收时间结束
*/
@Schema(description = "接收时间结束")
private Date receiveTimeEnd;
//==================================已处理参数=======================
/**
* 流程状态 00 – 废弃、10 – 草稿、11 – 驳回 20 – 待审、21 – 异常、40 – 挂起 30 – 结束
*/
@Schema(description = "流程状态 00 – 废弃、10 – 草稿、11 – 驳回 20 – 待审、21 – 异常、40 – 挂起 30 – 结束")
private String status;
/**
* 结束时间开始
*/
@Schema(description = "结束时间开始")
private Date finishTimeStart;
/**
* 结束时间结束
*/
@Schema(description = "结束时间结束")
private Date finishTimeEnd;
/**
* 最后处理时间开始
*/
@Schema(description = "最后处理时间开始")
private Date lastHandleStart;
/**
* 最后处理时间结束
*/
@Schema(description = "最后处理时间结束")
private Date lastHandleEnd;
//==================================已阅参数=======================
/**
* 阅读时间开始
*/
@Schema(description = "阅读时间开始")
private Date readTimeStart;
/**
* 阅读时间结束
*/
@Schema(description = "阅读时间结束")
private Date readTimeEnd;
//==================================我参与的参数=======================
/**
* 创建时间开始
*/
@Schema(description = "创建时间开始")
private Date createTimeStart;
/**
* 创建时间结束
*/
@Schema(description = "创建时间结束")
private Date createTimeEnd;
/**
* 登录名
*/
@Schema(description = "登录名", hidden = true)
private String loginName;
}
@@ -0,0 +1,41 @@
package org.springblade.process.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 业务流程当前处理人刷新参数
*
* @author bfhuange
* @date 2026/4/9
*/
@Schema(description = "业务流程当前处理人刷新参数")
@Data
public class BusinessProcessCurrentHandlerRefreshDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程实例id
*/
@NotBlank(message = "流程实例id不能为空")
@Schema(description = "流程实例id")
private String processInstanceId;
/**
* 发起人登录名,可为空。
* 为空时优先从业务流程表回填;仅当业务流程不存在时,才回退使用调用方传入值。
*/
@Schema(description = "发起人登录名,可为空;为空时优先从业务流程表回填")
private String promoterLoginName;
/**
* 是否流程已完成
*/
@Schema(description = "是否流程已完成")
private boolean complete;
}
@@ -0,0 +1,39 @@
package org.springblade.process.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* 业务流程删除参数
*
* @author BladeX
* @since 2024-11-26
*/
@NoArgsConstructor
@Schema(description = "业务流程删除参数")
@Data
public class BusinessProcessDeleteDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 业务id
*/
@NotNull(message = "业务id不能为空")
@Schema(description = "业务id")
private Long bizId;
/**
* 发起人登录名,即erp手机号或账号
*/
// @NotBlank(message = "发起人登录名不能为空")
@Schema(description = "发起人登录名,即erp手机号或账号")
private String promoterLoginName;
public BusinessProcessDeleteDTO(Long bizId) {
this.bizId = bizId;
}
}
@@ -0,0 +1,42 @@
package org.springblade.process.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 业务流程查询参数
*
* @author BladeX
* @since 2024-09-23
*/
@Schema(description = "业务流程查询参数")
@Data
public class BusinessProcessQueryDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程类型
*/
@Schema(description = "审批类型")
private String processType;
/**
* 文档编号
*/
@Schema(description = "审批编号")
private String docCode;
/**
* 类型 todo:待审批,create:我创建的,done:我参与的
*/
@NotBlank(message = "类型不能为空")
@Schema(defaultValue = "类型 todo:待审批,create:我创建的,done:我参与的")
private String type;
/**
* 当前登录人账号
*/
@Schema(hidden = true)
private String loginName;
}
@@ -0,0 +1,81 @@
package org.springblade.process.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 业务流程提交参数
*
* @author BladeX
* @since 2024-09-19
*/
@Schema(description = "业务流程提交参数")
@Data
public class BusinessProcessSubmitDTO<T> implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 业务id
*/
@NotNull(message = "业务id不能为空")
@Schema(description = "业务id")
private Long bizId;
/**
* 流程类型
*/
@NotBlank(message = "流程类型不能为空")
@Schema(description = "流程类型")
private String processType;
/**
* 文档编号
*/
@Schema(description = "文档编号")
private String docCode;
/**
* 标题
*/
@Schema(description = "标题")
private String subject;
/**
* 发起人id,空自动取登录人id
*/
@Schema(description = "发起人id")
private Long promoterId;
/**
* 发起人名称,空自动取登录人名称
*/
@Schema(description = "发起人名称")
private String promoterName;
/**
* 发起人登录名
*/
@Schema(description = "发起人登录名")
private String promoterLoginName;
/**
* 提交时间,空自动取当前时间
*/
@Schema(description = "提交时间")
private Date submitTime;
/**
* 流程参数,如果流程没有用到参数做条件判断或动态部门,可以不传
*/
@Schema(description = "流程参数")
private T processParam;
/**
* 流程执行参数,透传mk参数
*/
@Schema(description = "流程执行参数")
private ProcessExecuteDTO executeParam;
/**
* 添加群组编码
*/
@Schema(description = "添加群组编码")
private boolean addGroupCode;
}
@@ -0,0 +1,39 @@
package org.springblade.process.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
/**
* 业务流程修改参数
*
* @author BladeX
* @since 2024-09-19
*/
@Schema(description = "业务流程修改参数")
@Data
public class BusinessProcessUpdateDTO extends BusinessProcessCurrentHandlerRefreshDTO {
@Serial
private static final long serialVersionUID = 1L;
/**
* 操作节点id,流程审批结束为空
*/
@Schema(description = "操作节点id")
private String operationNodeId;
/**
* 操作节点编号,流程审批结束为空
*/
@Schema(description = "操作节点编号")
private String operationNodeNumber;
/**
* 驳回节点id N2 是起草节点
*/
@Schema(description = "驳回节点id")
private String rejectNodeId;
/**
* 审批状态
*/
@Schema(description = "审批状态")
private String approveStatus;
}
@@ -0,0 +1,74 @@
package org.springblade.process.pojo.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.system.pojo.dto.AdditionOperationParameterDTO;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* mk 流程执行参数
* @author bfhuange
* @date 2024/9/26
*/
@Schema(description = "mk 流程执行参数")
@Data
public class ProcessExecuteDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 表单实例id,业务id
*/
private String formInstanceId;
/**
* 登录账号 登录用户账号/手机号
*/
private String loginName;
/**
* 流程标题
*/
private String subject;
/**
* 任务ID
*/
private String taskId;
/**
* 任务类型
*/
private String activityType;
/**
* 操作详细参数(json)
*/
private String parameter;
/**
* 流程实例ID
*/
private String processId;
/**
* 操作标识(相同操作类型和相同操作身份可能存在多个操作配置)
*/
private String operationId;
/**
* 操作类型
*/
private String operationType;
/**
* 操作身份
*/
private String operationIdentity;
/**
* 附加操作参数信息
*/
private List<AdditionOperationParameterDTO> additionParameters;
/**
* 表单实例Model Name
*/
private String formInstanceModel;
/**
* 业务表单字段值集合
*/
// private Map<String, Object> formValues;
private Object formValues;
}
@@ -0,0 +1,22 @@
package org.springblade.process.pojo.dto.process;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 公共部门编码流程参数
* @author bfhuange
* @date 2024/10/9
*/
@Data
public class CommonDeptCodeProcessParam implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 部门编码
*/
private String deptCode;
}
@@ -0,0 +1,164 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.process.pojo.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.core.tool.utils.DateUtil;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 业务流程关联表 实体类
*
* @author BladeX
* @since 2024-09-19
*/
@Data
@TableName("blade_business_process")
@Schema(description = "BusinessProcess对象")
public class BusinessProcess implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@JsonSerialize(using = ToStringSerializer.class)
@Schema(description = "主键")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 业务id
*/
@Schema(description = "业务id")
private Long bizId;
/**
* 流程实例id
*/
@Schema(description = "流程实例id")
private String processInstanceId;
/**
* 流程类型
*/
@Schema(description = "流程类型")
private String processType;
/**
* 文档编号
*/
@Schema(description = "文档编号")
private String docCode;
/**
* 标题
*/
@Schema(description = "标题")
private String subject;
/**
* 发起人id
*/
@Schema(description = "发起人id")
private Long promoterId;
/**
* 发起人名称
*/
@Schema(description = "发起人名称")
private String promoterName;
/**
* 发起人登录名
*/
@Schema(description = "发起人登录名")
private String promoterLoginName;
/**
* 提交时间
*/
@Schema(description = "提交时间")
private Date submitTime;
/**
* 完成时间
*/
@Schema(description = "完成时间")
private Date completeTime;
/**
* 当前节点id,多个用逗号拼接
*/
@Schema(description = "当前节点id,多个用逗号拼接")
private String currentNodeIds;
/**
* 当前节点名称,多个用逗号拼接
*/
@Schema(description = "当前节点名称,多个用逗号拼接")
private String currentNodeNames;
/**
* 当前处理人,多个用逗号拼接
*/
@Schema(description = "当前处理人,多个用逗号拼接")
private String currentHandlers;
/**
* 接收时间
*/
@Schema(description = "接收时间")
private Date receiveTime;
/**
* 是否已完成(0:未完成, 1:已完成)
*/
@Schema(description = "是否已完成")
private Integer isCompleted;
/**
* 审批状态
*/
@Schema(description = "审批状态")
private String approveStatus;
/**
* 租户ID
*/
@Schema(description = "租户ID")
private String tenantId;
/**
* 创建时间
*/
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATE)
@Schema(description = "创建时间", hidden = true)
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 更新时间
*/
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATE)
@Schema(description = "更新时间", hidden = true)
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
@@ -0,0 +1,165 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.process.pojo.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.List;
import java.util.Objects;
/**
* 审批状态
*
* @author LiuXinjie
* @apiNote 合同审批状态
*/
@Getter
@AllArgsConstructor
public enum ApproveStatusEnum {
/**
* 默认编号
*/
DRAFT("draft", "草稿"), //可提交
APPROVING("approval", "审批中"),
APPROVED("pass", "审批通过"),
REJECTED("reject", "审批驳回"), //通用的流程 驳回可编辑
REVOCATION("revocation", "已撤回"), //可重新提交
ABANDON("abandon", "废弃"),
;
final String value;
final String text;
public boolean match(String value){
return this.value.equals(value);
}
public static String getValueByText(String text) {
if (text == null) {
return null;
}
for (ApproveStatusEnum item : values()) {
if (Objects.equals(item.getText(), text)) {
return item.getValue();
}
}
return null;
}
public static String getTextByValue(String value) {
if (value == null) {
return null;
}
for (ApproveStatusEnum item : values()) {
if (Objects.equals(item.getValue(), value)) {
return item.getText();
}
}
return null;
}
/**
* 是否可以撤回
*
* @param value
* @return
*/
public static boolean canRevoke(String value) {
return APPROVING.getValue().equals(value);
}
/**
* 能不能删除审批流
* @param value
* @return
*/
public static boolean canDelAuditFlow(String value){
return REJECTED.getValue().equals(value) || REVOCATION.getValue().equals(value);
}
/**
* 驳回或撤回
* @return
*/
public static boolean rejectedOrRevocation(String approveStatus) {
return canDelAuditFlow(approveStatus);
}
/**
* 能不能删除数据
* @param value
* @return
*/
public static boolean canDeleteData(String value){
return ABANDON.getValue().equals(value) || DRAFT.getValue().equals(value) || canDelAuditFlow(value);
}
public static String getNameStr(String value) {
for (ApproveStatusEnum state : values()) {
if (state.value.equals(value)) {
return state.text;
}
}
return null;
}
/**
* 是否可以编辑表单
*
* @param value
* @return
*/
public static boolean canEdit(String value) {
return DRAFT.getValue().equals(value) || REJECTED.getValue().equals(value) || REVOCATION.getValue().equals(value);
}
/**
* 获取可驳回状态
*
* @return
*/
public static List<String> buildPreviousApproveStatusList(String currentStatus) {
if (ApproveStatusEnum.APPROVING.getValue().equals(currentStatus)) {
// 变更成审批中,前置条件为 草稿或者审批中
return List.of(ApproveStatusEnum.APPROVING.getValue());
} else if (ApproveStatusEnum.APPROVED.getValue().equals(currentStatus)) {
// 变更成审批通过,前置条件为 审批中
return List.of(ApproveStatusEnum.APPROVING.getValue());
} else if (ApproveStatusEnum.REJECTED.getValue().equals(currentStatus)) {
// 变更成审批驳回,前置条件为 审批中
return List.of(ApproveStatusEnum.APPROVING.getValue());
} else if (ApproveStatusEnum.REVOCATION.getValue().equals(currentStatus)) {
// 变更成撤回,前置条件为 审批中
return List.of(ApproveStatusEnum.APPROVING.getValue());
} else {
// 其他情况,前置条件为 草稿
return List.of(ApproveStatusEnum.DRAFT.getValue());
}
}
}
@@ -0,0 +1,36 @@
package org.springblade.process.pojo.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 待办状态枚举
* @author bfhuange
* @date 2024/9/20
*/
@AllArgsConstructor
@Getter
public enum TodoStatus {
/**
* 待办
*/
TODO("todo", "待办"),
/**
* 已办
*/
DONE("done", "已办"),
/**
* 身份重复跳过
*/
SKIP("skip", "身份重复跳过"),
;
/**
* 待办状态编码
*/
private final String code;
/**
* 待办状态名称
*/
private final String name;
}
@@ -0,0 +1,177 @@
package org.springblade.process.pojo.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.core.tool.utils.DateUtil;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* @author bfhuange
* @since 2025/4/2
*/
@Data
@Schema(description = "mk审批中心记录")
public class ApprovalVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@Schema(description = "id")
private String id;
/**
* 流程所属应用
*/
@Schema(description = "流程所属应用")
private String appName;
/**
* 申请人名称
*/
@Schema(description = "申请人名称")
private String applicantName;
/**
* 申请人登录名
*/
@Schema(description = "申请人登录名")
private String applicantLoginName;
/**
* 发起人名称
*/
@Schema(description = "发起人名称")
private String creator;
/**
* 处理人名称
*/
@Schema(description = "处理人名称")
private String handlerName;
/**
* 处理人登录名
*/
@Schema(description = "处理人登录名")
private String handlerLoginName;
/**
* 当前处理人名称
*/
@Schema(description = "当前处理人名称")
private String currentHandler;
/**
* 节点名称
*/
@Schema(description = "节点名称")
private String nodeName;
/**
* 流程id
*/
@Schema(description = "流程id")
private String processId;
/**
* 流程发起时间
*/
@Schema(description = "流程发起时间")
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATETIME, timezone = "GMT+8")
private Date startTime;
/**
* 创建时间
*/
@Schema(description = "创建时间")
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATETIME, timezone = "GMT+8")
private Date createTime;
/**
* 如果是待办:待办接收时间 如果是待阅:传阅接收时间
*/
@Schema(description = "如果是待办:待办接收时间 如果是待阅:传阅接收时间")
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATETIME, timezone = "GMT+8")
private Date receiveTime;
/**
* 任务结束时间
*/
@Schema(description = "任务结束时间")
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATETIME, timezone = "GMT+8")
private Date finishTime;
/**
* 阅读时间(待阅任务)
*/
@Schema(description = "阅读时间(待阅任务)")
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATETIME, timezone = "GMT+8")
private Date readTime;
/**
* 最后处理时间(待审任务)
*/
@Schema(description = "最后处理时间(待审任务)")
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATETIME, timezone = "GMT+8")
private Date lastHandleTime;
/**
* 流程结束时间
*/
@Schema(description = "流程结束时间")
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATETIME, timezone = "GMT+8")
private Date processFinishTime;
/**
* 流程状态 00 – 废弃、10 – 草稿、11 – 驳回 20 – 待审、21 – 异常、40 – 挂起 30 – 结束
*/
@Schema(description = "流程状态 00 – 废弃、10 – 草稿、11 – 驳回 20 – 待审、21 – 异常、40 – 挂起 30 – 结束")
private String status;
/**
* 流程状态名称
*/
@Schema(description = "流程状态名称")
private String statusStr;
/**
* 流程主题
*/
@Schema(description = "流程主题")
private String subject;
/**
* 模板编码
*/
@Schema(description = "模板编码")
private String templateCode;
/**
* 任务id
*/
@Schema(description = "任务id")
private String taskId;
/**
* 任务状态 20 - 激活、30 - 结束、40 - 挂起、50 - 自动跳过
*/
@Schema(description = "任务状态 20 - 激活、30 - 结束、40 - 挂起、50 - 自动跳过")
private String taskStatus;
/**
* 任务标题
*/
@Schema(description = "任务标题")
private String taskSubject;
/**
* 催办标记
*/
@Schema(description = "催办标记")
private String urgeTab;
/**
* 任务类型 1待办,2待阅
*/
@Schema(description = "任务类型 1待办,2待阅")
private Integer taskType;
/**
* 待办优先级
*/
@Schema(description = "待办优先级")
private Integer level;
/**
* 模板名称中文
*/
@Schema(description = "模板名称中文")
private String templateNameCn;
}
@@ -0,0 +1,110 @@
package org.springblade.process.pojo.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* @author bfhuange
* @date 2024/9/23
*/
@Data
@Schema(description = "BusinessProcessListVO")
public class BusinessProcessListVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@JsonSerialize(using = ToStringSerializer.class)
@Schema(description = "主键")
private Long id;
/**
* 业务id
*/
@JsonSerialize(using = ToStringSerializer.class)
@Schema(description = "业务id")
private Long bizId;
/**
* 流程实例id
*/
@Schema(description = "流程实例id")
private String processInstanceId;
/**
* 流程类型
*/
@Schema(description = "审批类型")
private String processType;
/**
* 流程类型名称
*/
@Schema(description = "审批类型名称")
private String processTypeStr;
/**
* 文档编号
*/
@Schema(description = "审批单号")
private String docCode;
/**
* 发起人id
*/
@Schema(description = "发起人id")
private Long promoterId;
/**
* 发起人名称
*/
@Schema(description = "发起人名称")
private String promoterName;
/**
* 提交时间
*/
@Schema(description = "提交时间")
private Date submitTime;
/**
* 接收时间
*/
@Schema(description = "接收时间")
private Date receiveTime;
/**
* 完成时间
*/
@Schema(description = "完成时间")
private Date completeTime;
/**
* 当前节点id,多个用逗号拼接
*/
@Schema(description = "当前节点id,多个用逗号拼接")
private String currentNodeIds;
/**
* 当前节点名称,多个用逗号拼接
*/
@Schema(description = "当前节点名称,多个用逗号拼接")
private String currentNodeNames;
/**
* 当前处理人,多个用逗号拼接
*/
@Schema(description = "当前处理人,多个用逗号拼接")
private String currentHandlers;
/**
* 是否已完成(0:未完成, 1:已完成)
*/
@Schema(description = "是否已完成(0:未完成, 1:已完成)")
private Integer isCompleted;
/**
* 审批状态
*/
@Schema(description = "审批状态")
private String approveStatus;
/**
* 审批状态名称
*/
@Schema(description = "审批状态名称")
private String approveStatusStr;
}
@@ -0,0 +1,43 @@
package org.springblade.process.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* @author bfhuange
* @date 2024/9/20
*/
@Data
@Schema(description = "BusinessProcessVO")
public class BusinessProcessVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程实例id
*/
private String processInstanceId;
/**
* 当前节点id,多个用逗号拼接
*/
@Schema(description = "当前节点id,多个用逗号拼接")
private String currentNodeIds;
/**
* 当前节点名称,多个用逗号拼接
*/
@Schema(description = "当前节点名称,多个用逗号拼接")
private String currentNodeNames;
/**
* 当前处理人,多个用逗号拼接
*/
@Schema(description = "当前处理人,多个用逗号拼接")
private String currentHandlers;
/**
* 接收时间
*/
@Schema(description = "接收时间")
private Date receiveTime;
}
@@ -0,0 +1,110 @@
package org.springblade.process.pojo.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.core.tool.utils.DateUtil;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author bfhuange
* @since 2025/2/24
*/
@Data
@Schema(description = "流程审批记录")
public class ProcessApprovedRecordVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 记录主键
*/
@Schema(description = "id")
private String id;
/**
* 处理人
*/
@Schema(description = "处理人")
private String handler;
/**
* 操作
*/
@Schema(description = "操作")
private String action;
/**
* 操作编码
*/
@Schema(description = "操作编码")
private String actionCode;
/**
* 操作描述(系统操作)
*/
@Schema(description = "操作描述(系统操作)")
private String actionDesc;
/**
* 操作名称
*/
@Schema(description = "操作名称")
private String actionName;
/**
* 处理意见
*/
@Schema(description = "处理意见")
private String message;
/**
* 创建时间
*/
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATETIME)
@Schema(description = "创建时间")
private Date createTime;
/**
* 流程实例id
*/
@Schema(description = "流程实例id")
private String processInstanceId;
/**
* 节点实例id
*/
@Schema(description = "节点实例id")
private String nodeInstanceId;
/**
* 节点类型
*/
@Schema(description = "节点类型")
private String nodeType;
/**
* 节点id
*/
@Schema(description = "节点id")
private String nodeId;
/**
* 节点名称
*/
@Schema(description = "节点名称")
private String nodeName;
/**
* 节点编号
*/
@Schema(description = "节点编号")
private String nodeNumber;
/**
* 抄送人列表
*/
@Schema(description = "抄送人列表")
private List<String> senders;
/**
* 附件参数
*/
@Schema(description = "附件参数")
private List<ProcessAttachmentVO> attachmentParameter;
/**
* 流程附言
*/
@Schema(description = "流程附言")
private List<ProcessCommentVO> processComments;
}
@@ -0,0 +1,43 @@
package org.springblade.process.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author bfhuange
* @since 2025/2/24
*/
@Data
@Schema(description = "流程附件")
public class ProcessAttachmentVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@Schema(description = "id")
private String id;
/**
* 附件名称
*/
@Schema(description = "附件名称")
private String name;
/**
* 附件类型 electronicSign 电子签名,attachment 附件
*/
@Schema(description = "附件类型 electronicSign 电子签名,attachment 附件")
private String type;
/**
* 附件ID
*/
@Schema(description = "附件ID")
private String fileId;
/**
* base64
*/
@Schema(description = "base64")
private String base64;
}
@@ -0,0 +1,63 @@
package org.springblade.process.pojo.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springblade.core.tool.utils.DateUtil;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 流程附言
* @author bfhuange
* @since 2025/2/24
*/
@Data
@Schema(description = "流程附言")
public class ProcessCommentVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@Schema(description = "id")
private String id;
/**
* 附言内容
*/
@Schema(description = "附言内容")
private String content;
/**
* 创建时间
*/
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATETIME)
@Schema(description = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
@JsonFormat(pattern = DateUtil.PATTERN_DATETIME)
@Schema(description = "更新时间")
private Date updateTime;
/**
* 用户id
*/
@Schema(description = "用户id")
private String userId;
/**
* 用户名称
*/
@Schema(description = "用户名称")
private String userName;
/**
* 附言附件
*/
@Schema(description = "附言附件")
private List<ProcessAttachmentVO> attachments;
}
@@ -0,0 +1,79 @@
package org.springblade.process.pojo.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* @author bfhuange
* @since 2025/3/10
*/
@Data
@Schema(description = "流程待办")
public class ProcessTodoVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@JsonSerialize(using = ToStringSerializer.class)
@Schema(description = "主键")
private Long id;
/**
* 流程实例id
*/
@Schema(description = "流程实例id")
private String processInstanceId;
/**
* 节点id
*/
@Schema(description = "节点id")
private String nodeId;
/**
* 节点编号
*/
@Schema(description = "节点编号")
private String nodeNumber;
/**
* 节点名称
*/
@Schema(description = "节点名称")
private String nodeName;
/**
* mk登录名
*/
@Schema(description = "mk登录名")
private String loginName;
/**
* 用户姓名
*/
@Schema(description = "用户姓名")
private String userName;
/**
* 状态(todo:待办,done:已办,skip:身份重复跳过)
*/
@Schema(description = "状态(todo:待办,done:已办,skip:身份重复跳过)")
private String status;
/**
* 接收时间
*/
@Schema(description = "接收时间")
private Date receiveTime;
/**
* 操作时间
*/
@Schema(description = "操作时间")
private Date operationTime;
/**
* 操作名称
*/
@Schema(description = "操作名称")
private String operationName;
}