feat: initial iShare project code

This commit is contained in:
purovps
2026-02-16 23:20:59 +08:00
parent 8c83a6fd46
commit 6f270a972e
1910 changed files with 218015 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.pig4cloud</groupId>
<artifactId>pigx-flow-task</artifactId>
<version>5.2.0</version>
</parent>
<artifactId>pigx-flow-task-api</artifactId>
<dependencies>
<!--core 工具类-->
<dependency>
<groupId>com.pig4cloud</groupId>
<artifactId>pigx-common-core</artifactId>
</dependency>
<!--mybatis plus extension,包含了mybatis plus core-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
</dependency>
<!--feign 工具类-->
<dependency>
<groupId>com.pig4cloud</groupId>
<artifactId>pigx-common-feign</artifactId>
</dependency>
<!-- excel 导入导出 -->
<dependency>
<groupId>com.pig4cloud</groupId>
<artifactId>pigx-common-excel</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,127 @@
package com.pig4cloud.pigx.flow.task.api.feign;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.flow.task.dto.*;
import org.springframework.cloud.openfeign.FeignClient;
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.Map;
/**
* @author lengleng
* @date 2023/7/14
*/
@FeignClient(contextId = "remoteFlowEngineService", value = ServiceNameConstants.FLOW_ENGINE_SERVER)
public interface RemoteFlowEngineService {
/**
* 查询任务变量
* @param variableQueryParamDto 变量查询参数
* @return 任务变量结果
*/
@PostMapping("/task/queryTaskVariables")
R<Map<String, Object>> queryTaskVariables(@RequestBody VariableQueryParamDto variableQueryParamDto);
/**
* 查询简单数据
* @param userId 用户ID
* @return 索引页统计数据
*/
@GetMapping("/process-instance/querySimpleData")
R<IndexPageStatistics> querySimpleData(@RequestParam("userId") Long userId);
/**
* 创建流程
* @param map 流程JSON对象
* @return 创建流程结果
*/
@PostMapping("/flow/create")
R<String> createFlow(@RequestBody Map<String, Object> map);
/**
* 启动流程实例
* @param processInstanceParamDto 流程实例参数
* @return 启动流程结果
*/
@PostMapping("/flow/start")
R<String> startProcess(@RequestBody ProcessInstanceParamDto processInstanceParamDto);
/**
* 查询待办任务
* @param paramDto 任务查询参数
* @return 待办任务列表
*/
@PostMapping("/flow/queryAssignTask")
R<Page<TaskDto>> queryAssignTask(@RequestBody TaskQueryParamDto paramDto);
/**
* 查询已完成任务
* @param paramDto 任务查询参数
* @return 已完成任务列表
*/
@PostMapping("/flow/queryCompletedTask")
R<Page<TaskDto>> queryCompletedTask(@RequestBody TaskQueryParamDto paramDto);
/**
* 完成任务
* @param taskParamDto 任务参数
* @return 完成任务结果
*/
@PostMapping("/task/complete")
R<String> completeTask(@RequestBody TaskParamDto taskParamDto);
/**
* 设置任务负责人
* @param taskParamDto 任务参数
* @return 设置负责人结果
*/
@PostMapping("/task/setAssignee")
R<String> setAssignee(@RequestBody TaskParamDto taskParamDto);
/**
* 停止流程实例
* @param taskParamDto 任务参数
* @return 停止流程实例结果
*/
@PostMapping("/flow/stopProcessInstance")
R<String> stopProcessInstance(@RequestBody TaskParamDto taskParamDto);
/**
* 解决任务
* @param taskParamDto 任务参数
* @return 解决任务结果
*/
@PostMapping("/task/resolveTask")
R<String> resolveTask(@RequestBody TaskParamDto taskParamDto);
/**
* 退回任务
* @param taskParamDto 任务参数
* @return 退回任务结果
*/
@PostMapping("/task/back")
R<String> back(@RequestBody TaskParamDto taskParamDto);
/**
* 委派任务
* @param taskParamDto 任务参数
* @return 委派任务结果
*/
@PostMapping("/task/delegateTask")
R<String> delegateTask(@RequestBody TaskParamDto taskParamDto);
/**
* 查询任务
* @param taskId 任务ID
* @param userId 用户ID
* @return 任务查询结果
*/
@GetMapping("/task/engine/queryTask")
R<TaskResultDto> queryTask(@RequestParam("taskId") String taskId, @RequestParam("userId") Long userId);
}

View File

@@ -0,0 +1,107 @@
package com.pig4cloud.pigx.flow.task.api.feign;
import com.pig4cloud.pigx.common.core.constant.ServiceNameConstants;
import com.pig4cloud.pigx.common.core.util.R;
import com.pig4cloud.pigx.flow.task.dto.*;
import org.springframework.cloud.openfeign.FeignClient;
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;
/**
* @author lengleng
* @date 2023/7/14
*/
@FeignClient(contextId = "remoteFlowTaskService", value = ServiceNameConstants.FLOW_TASK_SERVER)
public interface RemoteFlowTaskService {
/**
* 节点开始事件
* @param nodeRecordParamDto
*/
@PostMapping("/remote/startNodeEvent")
void startNodeEvent(@RequestBody ProcessNodeRecordParamDto nodeRecordParamDto);
/**
* 节点结束事件
* @param nodeRecordParamDto
*/
@PostMapping("/remote/endNodeEvent")
void endNodeEvent(@RequestBody ProcessNodeRecordParamDto nodeRecordParamDto);
/**
* 流程结束事件
* @param processInstanceParamDto
*/
@PostMapping("/remote/endProcess")
void endProcessEvent(@RequestBody ProcessInstanceParamDto processInstanceParamDto);
/**
* 创建流程事件
* @param processInstanceRecordParamDto
*/
@PostMapping("/remote/createProcessEvent")
void createProcessEvent(@RequestBody ProcessInstanceRecordParamDto processInstanceRecordParamDto);
/**
* 根据角色id集合查询用户id集合
* @param roleIdList
*/
@PostMapping("/remote/queryUserIdListByRoleIdList")
R<List<String>> queryUserIdListByRoleIdList(@RequestBody List<String> roleIdList);
/**
* 根据部门id集合查询所有的用户id集合
* @param deptIdList
*/
@PostMapping("/remote/queryUserIdListByDepIdList")
R<List<String>> queryUserIdListByDepIdList(@RequestBody List<String> deptIdList);
/**
* 查询流程管理员
* @param flowId 流程id
*/
@GetMapping("/remote/queryProcessAdmin")
R<Long> queryProcessAdmin(@RequestParam("flowId") String flowId);
/**
* 查询节点数据
* @param flowId 流程id
* @param nodeId 节点id
* @return
*/
@GetMapping("/processNodeData/getNodeData")
R<Node> queryNodeOriData(@RequestParam("flowId") String flowId, @RequestParam("nodeId") String nodeId);
/**
* 节点开始指派用户了
* @param processNodeRecordAssignUserParamDto
*/
@PostMapping("/remote/startAssignUser")
R startAssignUser(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto);
/**
* 任务结束事件
* @param processNodeRecordAssignUserParamDto
*/
@PostMapping("/remote/taskEndEvent")
R taskEndEvent(@RequestBody ProcessNodeRecordAssignUserParamDto processNodeRecordAssignUserParamDto);
/**
* 保存抄送数据
* @param processCopyDto
*/
@PostMapping("/remote/savecc")
R saveCC(@RequestBody ProcessCopyDto processCopyDto);
/**
* 保存节点原始数据
* @param processNodeDataDto
*/
@PostMapping("/processNodeData/saveNodeData")
R saveNodeOriData(@RequestBody ProcessNodeDataDto processNodeDataDto);
}

View File

@@ -0,0 +1,6 @@
/*
@author pigx archetype
* <p>
* feign client 存放目录,注意 @EnablePigxFeignClients 的扫描范围
*/
package com.pig4cloud.pigx.flow.task.api.feign;

View File

@@ -0,0 +1,28 @@
package com.pig4cloud.pigx.flow.task.constant;
/**
* EasyCaptcha 验证码类型枚举
*
* @author haoxr
* @since 2023/03/24
*/
public enum CaptchaTypeEnum {
/**
* 算数
*/
ARITHMETIC,
/**
* 中文
*/
CHINESE,
/**
* 中文闪图
*/
CHINESE_GIF,
/**
* 闪图
*/
GIF, SPEC
}

View File

@@ -0,0 +1,30 @@
package com.pig4cloud.pigx.flow.task.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.ArrayList;
/**
* 表单类型枚举
*/
@Getter
@AllArgsConstructor
public enum FormTypeEnum {
INPUT("Input", "单行文本", ""), TEXTAREA("Textarea", "多行文本", ""), NUMBER("Number", "数字", null),
DATE("Date", "日期", null), DATE_TIME("DateTime", "日期时间", null),
SEQUENCE("Sequence", "发号器", null), LAYOUT("Layout", "明细", null), TIME("Time", "时间", null),
MONEY("Money", "金额", null), SINGLE_SELECT("SingleSelect", "单选", new ArrayList<>()),
SELECT_DEPT("SelectDept", "部门", new ArrayList<>()), SELECT_USER("SelectUser", "用户", new ArrayList<>()),
;
private String type;
private String name;
private Object defaultValue;
}

View File

@@ -0,0 +1,74 @@
package com.pig4cloud.pigx.flow.task.constant;
import cn.hutool.core.util.ObjectUtil;
import java.util.EnumSet;
import java.util.Objects;
/**
* 枚举通用接口
*
* @author haoxr
* @since 2022/3/27 12:06
*/
public interface IBaseEnum<T> {
T getValue();
String getLabel();
/**
* 根据值获取枚举
* @param value
* @param clazz
* @param <E> 枚举
* @return
*/
static <E extends Enum<E> & IBaseEnum> E getEnumByValue(Object value, Class<E> clazz) {
Objects.requireNonNull(value);
EnumSet<E> allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举
E matchEnum = allEnums.stream().filter(e -> ObjectUtil.equal(e.getValue(), value)).findFirst().orElse(null);
return matchEnum;
}
/**
* 根据文本标签获取值
* @param value
* @param clazz
* @param <E>
* @return
*/
static <E extends Enum<E> & IBaseEnum> String getLabelByValue(Object value, Class<E> clazz) {
Objects.requireNonNull(value);
EnumSet<E> allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举
E matchEnum = allEnums.stream().filter(e -> ObjectUtil.equal(e.getValue(), value)).findFirst().orElse(null);
String label = null;
if (matchEnum != null) {
label = matchEnum.getLabel();
}
return label;
}
/**
* 根据文本标签获取值
* @param label
* @param clazz
* @param <E>
* @return
*/
static <E extends Enum<E> & IBaseEnum> Object getValueByLabel(String label, Class<E> clazz) {
Objects.requireNonNull(label);
EnumSet<E> allEnums = EnumSet.allOf(clazz); // 获取类型下的所有枚举
String finalLabel = label;
E matchEnum = allEnums.stream().filter(e -> ObjectUtil.equal(e.getLabel(), finalLabel)).findFirst()
.orElse(null);
Object value = null;
if (matchEnum != null) {
value = matchEnum.getValue();
}
return value;
}
}

View File

@@ -0,0 +1,30 @@
package com.pig4cloud.pigx.flow.task.constant;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;
/**
* 菜单类型枚举
*
* @author haoxr
* @since 2022/4/23 9:36
*/
public enum MenuTypeEnum implements IBaseEnum<Integer> {
NULL(0, null), MENU(1, "菜单"), CATALOG(2, "目录"), EXTLINK(3, "外链"), BUTTON(4, "按钮");
@Getter
@EnumValue // Mybatis-Plus 提供注解表示插入数据库时插入该值
private Integer value;
@Getter
// @JsonValue // 表示对枚举序列化时返回此字段
private String label;
MenuTypeEnum(Integer value, String label) {
this.value = value;
this.label = label;
}
}

View File

@@ -0,0 +1,16 @@
package com.pig4cloud.pigx.flow.task.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum NodeStatusEnum {
WKS(0, "未开始"), JXZ(1, "进行中"), YJS(2, "已结束"),;
private int code;
private String name;
}

View File

@@ -0,0 +1,37 @@
package com.pig4cloud.pigx.flow.task.constant;
import lombok.Getter;
import java.util.Arrays;
/**
* 节点枚举
*/
@Getter
public enum NodeTypeEnum {
ROOT("根节点", 0, false), END("结束节点", -1, false),
APPROVAL("审批节点", 1, false), CC("抄送节点", 2, false), EXCLUSIVE_GATEWAY("条件分支", 4, true),
PARALLEL_GATEWAY("并行分支", 5, true), EMPTY("", 3, false),
;
public static NodeTypeEnum getByValue(int value) {
return Arrays.stream(NodeTypeEnum.values()).filter(w -> w.getValue() == value).findAny().orElse(null);
}
NodeTypeEnum(String name, Integer value, Boolean branch) {
this.name = name;
this.value = value;
this.branch = branch;
}
private String name;
private Integer value;
private Boolean branch;
}

View File

@@ -0,0 +1,19 @@
package com.pig4cloud.pigx.flow.task.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 用户节点类型枚举
*/
@Getter
@AllArgsConstructor
public enum NodeUserTypeEnum {
USER("user", "用户"), DEPT("dept", "部门"), ROLE("role", "角色"),;
private String key;
private String name;
}

View File

@@ -0,0 +1,95 @@
package com.pig4cloud.pigx.flow.task.constant;
public class ProcessInstanceConstant {
/**
* 空执行人
*/
public static final Long DEFAULT_EMPTY_ASSIGN = -99999999L;
/**
* 用户任务没有执行人的情况下如何处理 自动通过
*/
public static final String USER_TASK_NOBODY_HANDLER_TO_PASS = "TO_PASS";
/**
* 转交给管理员
*/
public static final String USER_TASK_NOBODY_HANDLER_TO_ADMIN = "TO_ADMIN";
/**
* 指定人员
*/
public static final String USER_TASK_NOBODY_HANDLER_TO_USER = "TO_USER";
/**
* 结束流程
*/
public static final String USER_TASK_NOBODY_HANDLER_TO_END = "TO_END";
public static final String USER_TASK_NOBODY_HANDLER_TO_REFUSE = "TO_REFUSE";
/**
* 拒绝之后 结束流程
*/
public static final String USER_TASK_REFUSE_TYPE_TO_END = "TO_END";
/**
* 拒绝之后 到某个节点
*/
public static final String USER_TASK_REFUSE_TYPE_TO_NODE = "TO_NODE";
/**
* 会签
*/
public static final int MULTIPLE_MODE_AL_SAME = 1;
/**
* 或签
*/
public static final int MULTIPLE_MODE_ONE = 2;
/**
* 顺签
*/
public static final int MULTIPLE_MODE_ALL_SORT = 3;
public static class AssignedTypeClass {
// 指定用户
public static final int USER = 1;
// 指定主管
public static final int LEADER = 2;
// 发起人自己
public static final int SELF = 5;
// 表单人员
public static final int FORM_USER = 8;
// 发起人自选
public static final int SELF_SELECT = 4;
// 角色
public static final int ROLE = 3;
}
/**
* 表单权限
*/
public static class FormPermClass {
// 隐藏
public static final String HIDE = "H";
// 只读
public static final String READ = "R";
// 编辑
public static final String EDIT = "E";
}
}

View File

@@ -0,0 +1,26 @@
package com.pig4cloud.pigx.flow.task.constant;
import lombok.Getter;
/**
* 状态枚举
*
* @author haoxr
* @since 2022/10/14
*/
public enum StatusEnum implements IBaseEnum<Integer> {
ENABLE(1, "启用"), DISABLE(0, "禁用");
@Getter
private Integer value;
@Getter
private String label;
StatusEnum(Integer value, String label) {
this.value = value;
this.label = label;
}
}

View File

@@ -0,0 +1,26 @@
package com.pig4cloud.pigx.flow.task.constant;
/**
* 系统常量
*
* @author haoxr
* @since 2022/10/22
*/
public interface SystemConstants {
/**
* 根节点ID
*/
Long ROOT_NODE_ID = 0L;
/**
* 系统默认密码
*/
String DEFAULT_PASSWORD = "123456";
/**
* 超级管理员角色编码
*/
String ROOT_ROLE_CODE = "ROOT";
}

View File

@@ -0,0 +1,6 @@
/*
* @author pigx archetype
* <p>
* 常量和枚举定义
*/
package com.pig4cloud.pigx.flow.task.constant;

View File

@@ -0,0 +1,23 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.util.List;
/**
* 检查子部门DTO
*/
@Data
public class CheckChildDto {
/**
* 子部门ID
*/
private Long childId;
/**
* 父部门ID列表
*/
private List<Long> deptIdList;
}

View File

@@ -0,0 +1,18 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.util.List;
/**
* 检查是否是给定的父级
*
*/
@Data
public class CheckParentDto {
private Long parentId;
private List<Long> deptIdList;
}

View File

@@ -0,0 +1,31 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
/**
* 条件类
*/
@Data
public class Condition {
/**
* 条件键
*/
private String key;
/**
* 表达式
*/
private String expression;
/**
* 值
*/
private Object value;
/**
* 键类型
*/
private String keyType;
}

View File

@@ -0,0 +1,23 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.util.List;
/**
* 分组条件类
*/
@Data
public class GroupCondition {
/**
* 是否并行
*/
private Boolean mode;
/**
* 条件列表
*/
private List<Condition> conditionList;
}

View File

@@ -0,0 +1,37 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 首页统计数据
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class IndexPageStatistics {
/**
* 待办数量
*/
private Long pendingNum;
/**
* 发起数量
*/
private Long startedNum;
/**
* 抄送任务
*/
private Long copyNum;
/**
* 完成数量
*/
private Long completedNum;
}

View File

@@ -0,0 +1,14 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.util.List;
@Data
public class Nobody {
private String handler;
private List<NodeUser> assignedUser;
}

View File

@@ -0,0 +1,58 @@
package com.pig4cloud.pigx.flow.task.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class Node {
private String id;
private String parentId;
private String headId;
private String tailId;
private String placeHolder;
private Integer type;
@JsonProperty(value = "nodeName")
private String name;
private Boolean error;
@JsonProperty("childNode")
private Node children;
private Integer assignedType;
private Boolean multiple;
private Integer multipleMode;
private Integer deptLeaderLevel;
private String formUserId;
private String formUserName;
private List<NodeUser> nodeUserList;
private List<Node> conditionNodes;
private Map<String, String> formPerms;
private Nobody nobody;
private Boolean groupMode;
private List<GroupCondition> conditionList;
private Refuse refuse;
}

View File

@@ -0,0 +1,17 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.util.Map;
/**
* 节点处理http请求结果对象
*/
@Data
public class NodeHttpResultVO {
private Boolean ok;
private Map<String, Object> data;
}

View File

@@ -0,0 +1,39 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 节点用户对象
*/
@NoArgsConstructor
@Data
@Builder
@AllArgsConstructor
public class NodeUser {
/**
* 用户od
*/
private Long id;
/**
* 用户名称
*/
private String name;
/**
* 类型
*/
private String type;
/**
* 选择
*/
private Boolean selected;
private String avatar;
}

View File

@@ -0,0 +1,50 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class ProcessCopyDto {
/**
* 当前节点时间
*/
private LocalDateTime nodeTime;
/**
* 发起人
*/
private Long startUserId;
/**
* 流程id
*/
private String flowId;
/**
* 实例id
*/
private String processInstanceId;
/**
* 节点id
*/
private String nodeId;
/**
* 节点 名称
*/
private String nodeName;
/**
* 表单数据
*/
private String formData;
/**
* 抄送人id
*/
private Long userId;
}

View File

@@ -0,0 +1,34 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* 流程实例参数对象
*/
@Data
public class ProcessInstanceParamDto {
/**
* 流程id
*/
private String flowId;
/**
* 参数集合
*/
private Map<String, Object> paramMap = new HashMap<>();
/**
* 发起人
*/
private String startUserId;
/**
* 实例id
*/
private String processInstanceId;
}

View File

@@ -0,0 +1,40 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 流程记录
* </p>
*
* @author Vincent
* @since 2023-05-07
*/
@Getter
@Setter
public class ProcessInstanceRecordParamDto {
/**
* 用户id
*/
private Long userId;
/**
* 流程id
*/
private String flowId;
/**
* 流程实例id
*/
private String processInstanceId;
private String parentProcessInstanceId;
/**
* 表单数据
*/
private String formData;
}

View File

@@ -0,0 +1,14 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
@Data
public class ProcessNodeDataDto {
private String flowId;
private String nodeId;
private String data;
}

View File

@@ -0,0 +1,66 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
/**
* 流程节点记录-执行人
*/
@Data
public class ProcessNodeRecordAssignUserParamDto {
/**
* 流程id (process id)
*/
private String flowId;
/**
* 流程实例id (process instance id)
*/
private String processInstanceId;
/**
* 表单数据 (form data)
*/
private String data;
/**
* 本地数据 (local data)
*/
private String localData;
/**
* 节点id (node id)
*/
private String nodeId;
/**
* 用户id (user id)
*/
private Long userId;
/**
* 执行id (execution id)
*/
private String executionId;
/**
* 任务id (task id)
*/
private String taskId;
/**
* 审批描述 (approval description)
*/
private String approveDesc;
/**
* 节点名称 (node name)
*/
private String nodeName;
/**
* 任务类型 (task type)
*/
private String taskType;
}

View File

@@ -0,0 +1,61 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
/**
* 流程节点记录
*/
@Data
public class ProcessNodeRecordParamDto {
/**
* 流程id (process id)
*/
private String flowId;
/**
* 流程实例id (process instance id)
*/
private String processInstanceId;
/**
* 表单数据 (form data)
*/
private String data;
/**
* 节点id (node id)
*/
private String nodeId;
/**
* 节点类型 (node type)
*/
private String nodeType;
/**
* 节点名字 (node name)
*/
private String nodeName;
/**
* 执行id (execution id)
*/
private String executionId;
/**
* 任务id (task id)
*/
private String taskId;
/**
* 审批描述 (approval description)
*/
private String approveDesc;
/**
* 任务类型 (task type)
*/
private String taskType;
}

View File

@@ -0,0 +1,12 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
@Data
public class Refuse {
private String handler;
private String nodeId;
}

View File

@@ -0,0 +1,17 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
/**
* @author Huijun Zhao
* @description
* @date 2023-07-28 10:36
*/
@Data
public class SelectValue {
private String key;
private String value;
}

View File

@@ -0,0 +1,97 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Map;
/**
* 任务对象
*/
@Data
public class TaskDto {
/**
* 流程id
*/
private String flowId;
/**
* 参数集合
*/
private Map<String, Object> paramMap;
/**
* 实例id
*/
private String processInstanceId;
/**
* 执行id
*/
private String executionId;
/**
* 耗时
*/
private Long durationInMillis;
/**
* 任务id
*/
private String taskId;
/**
* 执行人
*/
private String assign;
/**
* 任务名称
*/
private String taskName;
/**
* 节点id
*/
private String nodeId;
/**
* 任务创建时间
*/
private Date taskCreateTime;
private Date taskEndTime;
/**
* 流程组名字
*/
private String groupName;
/**
* 发起人id
*/
private Long rootUserId;
/**
* 发起人名字
*/
private String rootUserName;
/**
* 发起人头像
*/
private String rootUserAvatarUrl;
/**
* 发起时间
*/
private LocalDateTime startTime;
/**
* 流程名称
*/
private String processName;
}

View File

@@ -0,0 +1,59 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 任务完成参数对象
*
*/
@Data
public class TaskParamDto {
private String processInstanceId;
private List<String> processInstanceIdList;
/**
* 节点id
*/
private String nodeId;
/**
* 添加子流程发起人
*/
private Boolean appendChildProcessRootId;
/**
* 任务id
*/
private String taskId;
/**
* 用户id
*/
private String userId;
/**
* 模板用户id
*/
private String targetUserId;
/**
* 参数
*/
private Map<String, Object> paramMap;
/**
* 任务本地变量
*/
private Map<String, Object> taskLocalParamMap;
/**
* 模板节点
*/
private String targetNodeId;
}

View File

@@ -0,0 +1,43 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 用户任务查询参数
*/
@Data
public class TaskQueryParamDto {
/**
* 任务执行人
*/
private String assign;
/**
* 页码
*/
private Integer pageNum;
/**
* 每页的数量
*/
private Integer pageSize;
/**
* 流程名称
*/
private String processName;
/**
* 任务时间
*/
private LocalDateTime[] taskTime;
/**
* 状态
*/
private Integer status;
}

View File

@@ -0,0 +1,45 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.util.Map;
/**
* 任务结果对象
*
*/
@Data
public class TaskResultDto {
private Boolean currentTask;
/**
* 流程id
*/
private String flowId;
private Node taskNode;
private String nodeId;
/**
* 实例id
*/
private String processInstanceId;
/**
* 委派状态
*/
private String delegationState;
/**
* 是否允许继续委派
*/
private Boolean delegate;
/**
* 所有变量
*/
private Map<String, Object> variableAll;
}

View File

@@ -0,0 +1,16 @@
package com.pig4cloud.pigx.flow.task.dto;
import lombok.Data;
import java.util.List;
@Data
public class VariableQueryParamDto {
private String taskId;
private List<String> keyList;
private String executionId;
}

View File

@@ -0,0 +1,6 @@
/*
* @author pigx archetype
* <p>
* DTO 存放目录
*/
package com.pig4cloud.pigx.flow.task.dto;

View File

@@ -0,0 +1,136 @@
package com.pig4cloud.pigx.flow.task.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author Vincent
* @since 2023-07-06
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("process")
public class Process {
/**
* 表单ID
*/
@TableField("flow_id")
private String flowId;
/**
* 表单名称
*/
@TableField("name")
private String name;
/**
* 图标配置
*/
@TableField("logo")
private String logo;
/**
* 设置项
*/
@TableField("settings")
private String settings;
/**
* 分组ID
*/
@TableField("group_id")
private Long groupId;
/**
* 表单设置内容
*/
@TableField("form_items")
private String formItems;
/**
* 流程设置内容
*/
@TableField("process")
private String process;
/**
* 备注
*/
@TableField("remark")
private String remark;
@TableField("sort")
private Integer sort;
/**
* 0 正常 1=隐藏
*/
@TableField("is_hidden")
private Boolean hidden;
/**
* 0 正常 1=停用
*/
@TableField("is_stop")
private Boolean stop;
/**
* 流程管理员
*/
@TableField("admin_id")
private Long adminId;
/**
* 唯一性id
*/
@TableField("unique_id")
private String uniqueId;
/**
* 管理员
*/
@TableField("admin_list")
private String adminList;
/**
* 范围描述显示
*/
@TableField("range_show")
private String rangeShow;
/**
* 用户id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 逻辑删除字段
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
private String delFlag;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,121 @@
package com.pig4cloud.pigx.flow.task.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* <p>
* 流程抄送数据
* </p>
*
* @author Vincent
* @since 2023-07-06
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("process_copy")
public class ProcessCopy {
/**
* 用户id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 流程发起时间
*/
@TableField("start_time")
private LocalDateTime startTime;
/**
* 当前节点时间
*/
@TableField("node_time")
private LocalDateTime nodeTime;
/**
* 发起人
*/
@TableField("start_user_id")
private Long startUserId;
/**
* 流程id
*/
@TableField("flow_id")
private String flowId;
/**
* 实例id
*/
@TableField("process_instance_id")
private String processInstanceId;
/**
* 节点id
*/
@TableField("node_id")
private String nodeId;
/**
* 分组id
*/
@TableField("group_id")
private Long groupId;
/**
* 分组名称
*/
@TableField("group_name")
private String groupName;
/**
* 流程名称
*/
@TableField("process_name")
private String processName;
/**
* 节点 名称
*/
@TableField("node_name")
private String nodeName;
/**
* 表单数据
*/
@TableField("form_data")
private String formData;
/**
* 抄送人id
*/
@TableField("user_id")
private Long userId;
/**
* 逻辑删除字段
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
private String delFlag;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,61 @@
package com.pig4cloud.pigx.flow.task.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author Vincent
* @since 2023-07-06
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("process_group")
public class ProcessGroup {
/**
* 分组名
*/
@TableField("group_name")
private String groupName;
/**
* 排序
*/
@TableField("sort")
private Integer sort;
/**
* 用户id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 逻辑删除字段
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
private String delFlag;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,116 @@
package com.pig4cloud.pigx.flow.task.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import java.util.Date;
/**
* <p>
* 流程记录
* </p>
*
* @author Vincent
* @since 2023-07-06
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("process_instance_record")
public class ProcessInstanceRecord {
/**
* 流程名字
*/
@TableField("name")
private String name;
/**
* 头像
*/
@TableField("logo")
private String logo;
/**
* 用户id
*/
@TableField("user_id")
private Long userId;
/**
* 流程id
*/
@TableField("flow_id")
private String flowId;
/**
* 流程实例id
*/
@TableField("process_instance_id")
private String processInstanceId;
/**
* 表单数据
*/
@TableField("form_data")
private String formData;
/**
* 组id
*/
@TableField("group_id")
private Long groupId;
/**
* 组名称
*/
@TableField("group_name")
private String groupName;
/**
* 状态
*/
@TableField("status")
private Integer status;
/**
* 结束时间
*/
@TableField("end_time")
private Date endTime;
/**
* 上级流程实例id
*/
@TableField("parent_process_instance_id")
private String parentProcessInstanceId;
/**
* 用户id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 逻辑删除字段
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
private String delFlag;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,64 @@
package com.pig4cloud.pigx.flow.task.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* <p>
* 流程节点数据
* </p>
*
* @author Vincent
* @since 2023-07-06
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("process_node_data")
public class ProcessNodeData {
/**
* 流程id
*/
@TableField("flow_id")
private String flowId;
/**
* 表单数据
*/
@TableField("data")
private String data;
@TableField("node_id")
private String nodeId;
/**
* 用户id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 逻辑删除字段
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
private String delFlag;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,107 @@
package com.pig4cloud.pigx.flow.task.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import java.util.Date;
/**
* <p>
* 流程节点记录
* </p>
*
* @author Vincent
* @since 2023-07-06
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("process_node_record")
public class ProcessNodeRecord {
/**
* 流程id
*/
@TableField("flow_id")
private String flowId;
/**
* 流程实例id
*/
@TableField("process_instance_id")
private String processInstanceId;
/**
* 表单数据
*/
@TableField("data")
private String data;
@TableField("node_id")
private String nodeId;
/**
* 节点类型
*/
@TableField("node_type")
private String nodeType;
/**
* 节点名字
*/
@TableField("node_name")
private String nodeName;
/**
* 节点状态
*/
@TableField("status")
private Integer status;
/**
* 开始时间
*/
@TableField("start_time")
private Date startTime;
/**
* 结束时间
*/
@TableField("end_time")
private Date endTime;
/**
* 执行id
*/
@TableField("execution_id")
private String executionId;
/**
* 用户id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 逻辑删除字段
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
private String delFlag;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,130 @@
package com.pig4cloud.pigx.flow.task.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* <p>
* 流程节点记录-执行人
* </p>
*
* @author Vincent
* @since 2023-07-06
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("process_node_record_assign_user")
public class ProcessNodeRecordAssignUser {
/**
* 流程id
*/
@TableField("flow_id")
private String flowId;
/**
* 流程实例id
*/
@TableField("process_instance_id")
private String processInstanceId;
/**
* 表单数据
*/
@TableField("data")
private String data;
@TableField("node_id")
private String nodeId;
/**
* 用户id
*/
@TableField("user_id")
private String userId;
/**
* 节点状态
*/
@TableField("status")
private Integer status;
/**
* 开始时间
*/
@TableField("start_time")
private LocalDateTime startTime;
/**
* 结束时间
*/
@TableField("end_time")
private LocalDateTime endTime;
/**
* 执行id
*/
@TableField("execution_id")
private String executionId;
/**
* 任务id
*/
@TableField("task_id")
private String taskId;
/**
* 审批意见
*/
@TableField("approve_desc")
private String approveDesc;
/**
* 节点名称
*/
@TableField("node_name")
private String nodeName;
/**
* 任务类型
*/
@TableField("task_type")
private String taskType;
/**
* 表单本地数据
*/
@TableField("local_data")
private String localData;
/**
* 用户id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 逻辑删除字段
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
private String delFlag;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,67 @@
package com.pig4cloud.pigx.flow.task.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* <p>
* 流程发起人
* </p>
*
* @author Vincent
* @since 2023-07-06
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("process_starter")
public class ProcessStarter {
/**
* 用户id或者部门id
*/
@TableField("type_id")
private Long typeId;
/**
* 类型 user dept
*/
@TableField("type")
private String type;
/**
* 流程id
*/
@TableField("process_id")
private Long processId;
/**
* 用户id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 逻辑删除字段
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
private String delFlag;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,6 @@
/*
* @author pigx archetype
* <p>
* 实体 存放目录
*/
package com.pig4cloud.pigx.flow.task.entity;

View File

@@ -0,0 +1,82 @@
package com.pig4cloud.pigx.flow.task.utils;
import cn.hutool.core.util.StrUtil;
import com.pig4cloud.pigx.flow.task.constant.NodeTypeEnum;
import com.pig4cloud.pigx.flow.task.constant.ProcessInstanceConstant;
import com.pig4cloud.pigx.flow.task.dto.Node;
import java.util.ArrayList;
import java.util.List;
public class NodeUtil {
public static String getFlowId(String processDefinitionId) {
return StrUtil.subBefore(processDefinitionId, ":", false);
}
public static boolean isNode(Node childNode) {
return childNode != null && StrUtil.isNotBlank(childNode.getId());
}
/**
* 添加结束节点
* @param node
*/
public static void addEndNode(Node node) {
Node children = node.getChildren();
if (isNode(children)) {
addEndNode(children);
}
else {
Node end = new Node();
end.setId("end");
end.setType(NodeTypeEnum.END.getValue());
end.setName("结束节点");
end.setParentId(node.getId());
node.setChildren(end);
}
}
/**
* 需要发起人选择用户的节点
* @param node
*/
public static List<String> selectUserNodeId(Node node) {
List<String> list = new ArrayList<>();
if (!isNode(node)) {
return list;
}
Integer type = node.getType();
if (type == NodeTypeEnum.APPROVAL.getValue().intValue()) {
Integer assignedType = node.getAssignedType();
boolean selfSelect = assignedType == ProcessInstanceConstant.AssignedTypeClass.SELF_SELECT;
if (selfSelect) {
list.add(node.getId());
}
}
if (type == NodeTypeEnum.EXCLUSIVE_GATEWAY.getValue().intValue()
|| type == NodeTypeEnum.PARALLEL_GATEWAY.getValue().intValue()) {
// 条件分支
List<Node> branchs = node.getConditionNodes();
for (Node branch : branchs) {
Node children = branch.getChildren();
List<String> strings = selectUserNodeId(children);
list.addAll(strings);
}
}
List<String> next = selectUserNodeId(node.getChildren());
list.addAll(next);
return list;
}
}

View File

@@ -0,0 +1,20 @@
package com.pig4cloud.pigx.flow.task.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @author : willian fu
* @date : 2022/7/4
*/
@Data
@AllArgsConstructor
public class ErrorRspVo {
private Integer code;
private String msg;
private String desp;
}

View File

@@ -0,0 +1,57 @@
package com.pig4cloud.pigx.flow.task.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author : willian fu
* @date : 2020/9/21
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FormGroupVo {
private Long id;
/**
* 流程名字
*/
private String name;
/**
* 流程
*/
private List<FlowVo> items;
@Data
@Builder
@AllArgsConstructor
public static class FlowVo {
private String flowId;
/**
* 发起范围
*/
private String rangeShow;
private String name;
private String logo;
private Boolean stop;
private String remark;
private LocalDateTime updated;
}
}

View File

@@ -0,0 +1,59 @@
package com.pig4cloud.pigx.flow.task.vo;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 表单
*/
@Data
@NoArgsConstructor
public class FormItemVO {
private String id;
private String perm;
private String icon;
private String name;
private String type;
private Boolean required;
private String typeName;
private String placeholder;
private Props props;
@Data
@NoArgsConstructor
public static class Props {
private Object value;
private Object dictValue;
private Object options;
private Boolean self;
private Boolean multi;
private Object oriForm;
private Object maxLength;
private Object minLength;
private Object regex;
private Object regexDesc;
private String prefix;
}
}

View File

@@ -0,0 +1,18 @@
package com.pig4cloud.pigx.flow.task.vo;
import lombok.Data;
import java.util.Map;
@Data
public class NodeFormatParamVo {
private String flowId;
private String processInstanceId;
private String taskId;
private Map<String, Object> paramMap;
}

View File

@@ -0,0 +1,63 @@
package com.pig4cloud.pigx.flow.task.vo;
import lombok.Data;
import java.util.List;
/**
* 流程节点显示对象
*/
@Data
public class NodeVo {
/**
* nodeId
*/
private String id;
/**
* 用户列表
*/
private List<UserVo> userVoList;
/**
* 显示
*/
private String placeholder;
/**
* 状态 1进行中2已完成
*/
private Integer status;
/**
* 节点名称
*/
private String name;
/**
* 节点类型
*/
private Object type;
/**
* 发起人选择用户
*/
private Boolean selectUser;
/**
* 是否多选
*/
private Boolean multiple;
/**
* 子级列表
*/
private List<NodeVo> children;
/**
* 分支列表
*/
private List<NodeVo> branch;
}

View File

@@ -0,0 +1,42 @@
package com.pig4cloud.pigx.flow.task.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author : willian fu
* @version : 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrgTreeVo {
/**
* 用户od
*/
private Long id;
/**
* 用户名称
*/
private String name;
/**
* 类型
*/
private String type;
/**
* 选择
*/
private Boolean selected;
private String avatar;
private Integer status = 1;
}

View File

@@ -0,0 +1,11 @@
package com.pig4cloud.pigx.flow.task.vo;
import com.pig4cloud.pigx.flow.task.entity.ProcessCopy;
import lombok.Data;
@Data
public class ProcessCopyVo extends ProcessCopy {
private String startUserName;
}

View File

@@ -0,0 +1,19 @@
package com.pig4cloud.pigx.flow.task.vo;
import com.pig4cloud.pigx.flow.task.entity.Process;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class ProcessVO extends Process {
/**
* 需要发起人选择的节点id
*/
private List<String> selectUserNodeId;
private Map<String, Object> variableMap;
}

View File

@@ -0,0 +1,42 @@
package com.pig4cloud.pigx.flow.task.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserVo {
/**
* 用户od
*/
private Long id;
/**
* 用户名称
*/
private String name;
private LocalDateTime showTime;
private String avatar;
/**
* 意见
*/
private String approveDesc;
private String operType;
/**
* 状态 1进行中2已完成
*/
private Integer status = 0;
}

View File

@@ -0,0 +1,2 @@
com.pig4cloud.pigx.flow.task.api.feign.RemoteFlowTaskService
com.pig4cloud.pigx.flow.task.api.feign.RemoteFlowEngineService