diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/pom.xml b/yxt_supervise/supervise-flowable/supervise-flowable-api/pom.xml
new file mode 100644
index 00000000..219e7cd5
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/pom.xml
@@ -0,0 +1,52 @@
+
+
+
+ supervise-flowable
+ com.yxt.supervise
+ 0.0.1
+
+ 4.0.0
+
+ supervise-flowable-api
+
+
+
+ com.yxt
+ yxt-common-base
+ 0.0.1
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+ org.projectlombok
+ lombok
+
+
+ com.baomidou
+ mybatis-plus-annotation
+
+
+ org.flowable
+ flowable-bpmn-model
+ 6.5.0
+ compile
+
+
+
+
+
+
+ nexus-releases
+ http://172.18.0.3:8081/repository/yxt-mvn-releases/
+
+
+ nexus-snapshots
+ http://172.18.0.3:8081/repository/yxt-mvn-snapshot/
+
+
+
+
\ No newline at end of file
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowCommentDto.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowCommentDto.java
new file mode 100644
index 00000000..a8fd9f6d
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowCommentDto.java
@@ -0,0 +1,40 @@
+package com.yxt.anrui.flowable.api.flow;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author XuanXuan
+ * @date 2021/3/28 15:50
+ */
+@Data
+@Builder
+/*@NoArgsConstructor
+@AllArgsConstructor*/
+public class FlowCommentDto implements Serializable {
+ public FlowCommentDto() {
+ }
+
+ public FlowCommentDto(String type, String comment) {
+ this.type = type;
+ this.comment = comment;
+ }
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1929734226858491967L;
+
+ /**
+ * 意见类别 1正常(同意)意见 2退回意见 3 驳回意见 4 委派意见 5 转办意见 6 终止流程 7 撤回流程
+ */
+ private String type;
+
+ /**
+ * 意见内容
+ */
+ private String comment;
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowDto.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowDto.java
new file mode 100644
index 00000000..c916a3ba
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowDto.java
@@ -0,0 +1,26 @@
+package com.yxt.anrui.flowable.api.flow;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel("工作流数据")
+@Data
+public class FlowDto {
+
+ @ApiModelProperty("业务sid")
+ private String businessSid;
+
+ @ApiModelProperty("意见")
+ private String comment;
+
+ @ApiModelProperty("流程实例id")
+ private String instanceId;
+
+ @ApiModelProperty("任务id")
+ private String taskId;
+ @ApiModelProperty("流程定义id")
+ private String modelId;
+ @ApiModelProperty("下一环节的代办人sid")
+ private String nextNodeUserSids;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowProcinst.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowProcinst.java
new file mode 100644
index 00000000..2bef0ee3
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowProcinst.java
@@ -0,0 +1,175 @@
+package com.yxt.anrui.flowable.api.flow;
+
+public class FlowProcinst {
+ private String ID_;// `varchar (192),
+ private String REV_;//` int (11),
+ private String PROC_INST_ID_;//` varchar (192),
+ private String BUSINESS_KEY_;//` varchar (765),
+ private String PROC_DEF_ID_;//` varchar (192),
+ private String START_TIME_;//` datetime ,
+ private String END_TIME_;//` datetime ,
+ private String DURATION_;//` bigint (20),
+ private String START_USER_ID_;//` varchar (765),
+ private String START_ACT_ID_;//` varchar (765),
+ private String END_ACT_ID_;//` varchar (765),
+ private String SUPER_PROCESS_INSTANCE_ID_;//` varchar (192),
+ private String DELETE_REASON_;//` varchar (12000),
+ private String TENANT_ID_;//` varchar (765),
+ private String NAME_;//` varchar (765),
+ private String CALLBACK_ID_;//` varchar (765),
+ private String CALLBACK_TYPE_;//` varchar (765),
+ private String REFERENCE_ID_;//` varchar (765),
+ private String REFERENCE_TYPE_;//` varchar (765)
+
+ public String getID_() {
+ return ID_;
+ }
+
+ public void setID_(String ID_) {
+ this.ID_ = ID_;
+ }
+
+ public String getREV_() {
+ return REV_;
+ }
+
+ public void setREV_(String REV_) {
+ this.REV_ = REV_;
+ }
+
+ public String getPROC_INST_ID_() {
+ return PROC_INST_ID_;
+ }
+
+ public void setPROC_INST_ID_(String PROC_INST_ID_) {
+ this.PROC_INST_ID_ = PROC_INST_ID_;
+ }
+
+ public String getBUSINESS_KEY_() {
+ return BUSINESS_KEY_;
+ }
+
+ public void setBUSINESS_KEY_(String BUSINESS_KEY_) {
+ this.BUSINESS_KEY_ = BUSINESS_KEY_;
+ }
+
+ public String getPROC_DEF_ID_() {
+ return PROC_DEF_ID_;
+ }
+
+ public void setPROC_DEF_ID_(String PROC_DEF_ID_) {
+ this.PROC_DEF_ID_ = PROC_DEF_ID_;
+ }
+
+ public String getSTART_TIME_() {
+ return START_TIME_;
+ }
+
+ public void setSTART_TIME_(String START_TIME_) {
+ this.START_TIME_ = START_TIME_;
+ }
+
+ public String getEND_TIME_() {
+ return END_TIME_;
+ }
+
+ public void setEND_TIME_(String END_TIME_) {
+ this.END_TIME_ = END_TIME_;
+ }
+
+ public String getDURATION_() {
+ return DURATION_;
+ }
+
+ public void setDURATION_(String DURATION_) {
+ this.DURATION_ = DURATION_;
+ }
+
+ public String getSTART_USER_ID_() {
+ return START_USER_ID_;
+ }
+
+ public void setSTART_USER_ID_(String START_USER_ID_) {
+ this.START_USER_ID_ = START_USER_ID_;
+ }
+
+ public String getSTART_ACT_ID_() {
+ return START_ACT_ID_;
+ }
+
+ public void setSTART_ACT_ID_(String START_ACT_ID_) {
+ this.START_ACT_ID_ = START_ACT_ID_;
+ }
+
+ public String getEND_ACT_ID_() {
+ return END_ACT_ID_;
+ }
+
+ public void setEND_ACT_ID_(String END_ACT_ID_) {
+ this.END_ACT_ID_ = END_ACT_ID_;
+ }
+
+ public String getSUPER_PROCESS_INSTANCE_ID_() {
+ return SUPER_PROCESS_INSTANCE_ID_;
+ }
+
+ public void setSUPER_PROCESS_INSTANCE_ID_(String SUPER_PROCESS_INSTANCE_ID_) {
+ this.SUPER_PROCESS_INSTANCE_ID_ = SUPER_PROCESS_INSTANCE_ID_;
+ }
+
+ public String getDELETE_REASON_() {
+ return DELETE_REASON_;
+ }
+
+ public void setDELETE_REASON_(String DELETE_REASON_) {
+ this.DELETE_REASON_ = DELETE_REASON_;
+ }
+
+ public String getTENANT_ID_() {
+ return TENANT_ID_;
+ }
+
+ public void setTENANT_ID_(String TENANT_ID_) {
+ this.TENANT_ID_ = TENANT_ID_;
+ }
+
+ public String getNAME_() {
+ return NAME_;
+ }
+
+ public void setNAME_(String NAME_) {
+ this.NAME_ = NAME_;
+ }
+
+ public String getCALLBACK_ID_() {
+ return CALLBACK_ID_;
+ }
+
+ public void setCALLBACK_ID_(String CALLBACK_ID_) {
+ this.CALLBACK_ID_ = CALLBACK_ID_;
+ }
+
+ public String getCALLBACK_TYPE_() {
+ return CALLBACK_TYPE_;
+ }
+
+ public void setCALLBACK_TYPE_(String CALLBACK_TYPE_) {
+ this.CALLBACK_TYPE_ = CALLBACK_TYPE_;
+ }
+
+ public String getREFERENCE_ID_() {
+ return REFERENCE_ID_;
+ }
+
+ public void setREFERENCE_ID_(String REFERENCE_ID_) {
+ this.REFERENCE_ID_ = REFERENCE_ID_;
+ }
+
+ public String getREFERENCE_TYPE_() {
+ return REFERENCE_TYPE_;
+ }
+
+ public void setREFERENCE_TYPE_(String REFERENCE_TYPE_) {
+ this.REFERENCE_TYPE_ = REFERENCE_TYPE_;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTask.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTask.java
new file mode 100644
index 00000000..f5d0a8f6
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTask.java
@@ -0,0 +1,98 @@
+package com.yxt.anrui.flowable.api.flow;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yxt.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
工作流任务
+ *
+ * @author XuanXuan
+ * @date 2021-04-03
+ */
+@ApiModel("工作流任务相关-返回参数")
+@Data
+public class FlowTask extends BaseEntity implements Serializable {
+
+ @ApiModelProperty("任务编号")
+ private String taskId;
+
+ @ApiModelProperty("任务名称")
+ private String taskName;
+
+ @ApiModelProperty("任务Key")
+ private String taskDefKey;
+
+ @ApiModelProperty("任务执行人Id")
+ private Long assigneeId;
+
+ @ApiModelProperty("部门名称")
+ private String deptName;
+
+ @ApiModelProperty("流程发起人部门名称")
+ private String startDeptName;
+
+ @ApiModelProperty("任务执行人名称")
+ private String assigneeName;
+
+ @ApiModelProperty("任务执行人头像")
+ private String assigneeHeadImage;
+
+ @ApiModelProperty("流程发起人Id")
+ private String startUserId;
+
+ @ApiModelProperty("流程发起人名称")
+ private String startUserName;
+
+ @ApiModelProperty("流程类型")
+ private String category;
+
+ @ApiModelProperty("流程变量信息")
+ private Object procVars;
+
+ @ApiModelProperty("局部变量信息")
+ private Object taskLocalVars;
+
+ @ApiModelProperty("流程部署编号")
+ private String deployId;
+
+ @ApiModelProperty("流程ID")
+ private String procDefId;
+
+ @ApiModelProperty("流程key")
+ private String procDefKey;
+
+ @ApiModelProperty("流程定义名称")
+ private String procDefName;
+
+ @ApiModelProperty("流程定义内置使用版本")
+ private int procDefVersion;
+
+ @ApiModelProperty("流程实例ID")
+ private String procInsId;
+
+ @ApiModelProperty("历史流程实例ID")
+ private String hisProcInsId;
+
+ @ApiModelProperty("任务耗时")
+ private String duration;
+
+ @ApiModelProperty("任务意见")
+ private FlowCommentDto comment = new FlowCommentDto();
+
+ @ApiModelProperty("候选执行人")
+ private String candidate;
+
+ @ApiModelProperty("任务创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ @ApiModelProperty("任务完成时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date finishTime;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTaskQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTaskQuery.java
new file mode 100644
index 00000000..bdfb9c40
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTaskQuery.java
@@ -0,0 +1,23 @@
+package com.yxt.anrui.flowable.api.flow;
+
+import com.yxt.common.core.query.Query;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author hanweijia
+ * @date 2021/11/06 13:53
+ * @description
+ */
+@Data
+public class FlowTaskQuery implements Query {
+ private static final long serialVersionUID = -7395299971899690002L;
+ @ApiModelProperty(value = "用户sid", required = true)
+ private String userSid;
+ @ApiModelProperty(value = "zd", required = true)
+ private String zd;
+ @ApiModelProperty(value = "days", required = true)
+ private String days;
+
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTaskVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTaskVo.java
new file mode 100644
index 00000000..e3f83a32
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowTaskVo.java
@@ -0,0 +1,51 @@
+package com.yxt.anrui.flowable.api.flow;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
流程任务
+ *
+ * @author XuanXuan
+ * @date 2021-04-03
+ */
+@ApiModel("工作流任务相关--请求参数")
+@Data
+public class FlowTaskVo {
+
+ @ApiModelProperty("任务Id")
+ private String taskId;
+
+ @ApiModelProperty("用户Id")
+ private String userId;
+ @ApiModelProperty("用户Sid")
+ private String userSid;
+
+ @ApiModelProperty("任务意见")
+ private String comment;
+
+ @ApiModelProperty("流程实例Id")
+ private String instanceId;
+
+ @ApiModelProperty("节点")
+ private String targetKey;
+
+ @ApiModelProperty("流程变量信息")
+ private Map values=new HashMap<>();
+
+ @ApiModelProperty("审批人")
+ private String assignee;
+
+ @ApiModelProperty("候选人")
+ private List candidateUsers=new ArrayList<>();
+
+ @ApiModelProperty("审批组")
+ private List candidateGroups=new ArrayList<>();
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/Flowable.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/Flowable.java
new file mode 100644
index 00000000..ac33d6ab
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/Flowable.java
@@ -0,0 +1,8 @@
+package com.yxt.anrui.flowable.api.flow;
+
+import com.yxt.common.core.domain.BaseEntity;
+import lombok.Data;
+
+@Data
+public class Flowable extends BaseEntity {
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowableFallback.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowableFallback.java
new file mode 100644
index 00000000..194c325b
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowableFallback.java
@@ -0,0 +1,74 @@
+package com.yxt.anrui.flowable.api.flow;
+
+import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
+import com.yxt.common.core.query.PagerQuery;
+import com.yxt.common.core.result.ResultBean;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+public class FlowableFallback implements FlowableFeign {
+ @Override
+ public ResultBean businessStart(BusinessVariables bv) {
+ return null;
+ }
+
+ @Override
+ public ResultBean processPagerList(Integer pageNum, Integer pageSize) {
+ return null;
+ }
+
+ @Override
+ public ResultBean myprocess(String userSid, PagerQuery taskQueryPagerQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBean stopProcess(FlowTaskVo flowTaskVo) {
+ return null;
+ }
+
+ @Override
+ public ResultBean deleteProcess(String procInsId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean getNextNodeUserSidsOfCreate(BusinessVariables bv ) {
+ return null;
+ }
+
+ @Override
+ public ResultBean getNextNodeUserSidsOfSubmit(BusinessVariables bv ) {
+ return null;
+ }
+
+ @Override
+ public ResultBean startProcess(BusinessVariables dto) {
+ return null;
+ }
+
+
+ @Override
+ public ResultBean handleProsess(BusinessVariables bv) {
+ return null;
+ }
+
+ @Override
+ public ResultBean revokeProcess(com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl ) {
+ return null;
+ }
+
+ @Override
+ public ResultBean taskReject(com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl) {
+ return null;
+ }
+
+ @Override
+ public ResultBean breakProcess(com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl) {
+ return null;
+ }
+
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowableFeign.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowableFeign.java
new file mode 100644
index 00000000..4748b54b
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/FlowableFeign.java
@@ -0,0 +1,116 @@
+package com.yxt.anrui.flowable.api.flow;
+
+import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
+import com.yxt.common.core.query.PagerQuery;
+import com.yxt.common.core.result.ResultBean;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+@Api(tags = "Flowable")
+@FeignClient(
+ contextId = "anrui-flowable-Flowable",
+ name = "anrui-flowable",
+ path = "v1/flow",
+ fallback = FlowableFallback.class)
+public interface FlowableFeign {
+ /**
+ * 业务系统发起流程申请
+ *
+ * @return
+ */
+ @PostMapping("/businessStart")
+ public ResultBean businessStart(@RequestBody BusinessVariables bv);
+
+ /**
+ * 流程定义列表 一般业务中不需要查询该列表
+ *
+ * @param pageNum 页数
+ * @param pageSize 容量
+ * @return
+ */
+ @PostMapping("/processPagerList/{userSid}")
+ public ResultBean processPagerList(@ApiParam(value = "当前页码", required = true) @RequestParam("pageNum") Integer pageNum,
+ @ApiParam(value = "每页条数", required = true) @RequestParam("pageSize") Integer pageSize);
+
+ /**
+ * 我的流程 我发起的流程
+ *
+ * @param userSid 用户sid
+ * @param taskQueryPagerQuery 查询参数
+ * @return
+ */
+ @PostMapping("/myprocess/{userSid}")
+ public ResultBean myprocess(@ApiParam(value = "用户sid") @PathVariable(value = "userSid") String userSid,
+ @ApiParam(value = "变量集合,json对象") @RequestBody PagerQuery taskQueryPagerQuery);
+
+ /**
+ * 取消申请
+ *
+ * @param flowTaskVo
+ * @return
+ */
+ @ApiOperation(value = "取消申请")
+ @PostMapping(value = "/task/stopProcess")
+ @ResponseBody
+ ResultBean stopProcess(@ApiParam(value = "工作流任务相关--请求参数") @RequestBody FlowTaskVo flowTaskVo);
+
+ /**
+ * 删除流程实例
+ *
+ * @param procInsId 流程实例id
+ * @return
+ */
+ @ApiOperation(value = "删除流程实例")
+ @DeleteMapping(value = "/task/deleteProcess/{procInsId}")
+ @ResponseBody
+ ResultBean deleteProcess(@ApiParam(value = "流程实例id") @PathVariable(value = "procInsId") String procInsId);
+
+ /**
+ * 创建流程实例时取下一环节的用户sid
+ *
+ * @return
+ */
+ @ApiOperation(value = "创建流程实例时取下一环节的用户sid")
+ @GetMapping(value = "/getNextNodeUserSidsOfCreate")
+ @ResponseBody
+ ResultBean getNextNodeUserSidsOfCreate( @RequestBody BusinessVariables bv);
+ /**
+ * 提交流程实例时取下一环节的用户sid
+ *
+ * @return
+ */
+ @ApiOperation(value = "提交流程实例时取下一环节的用户sid")
+ @GetMapping(value = "/getNextNodeUserSidsOfSubmit")
+ @ResponseBody
+ ResultBean getNextNodeUserSidsOfSubmit(@RequestBody BusinessVariables bv);
+
+ @ApiOperation(value = "启动流程")
+ @PostMapping(value = "/startProcess")
+ @ResponseBody
+ ResultBean startProcess(@RequestBody BusinessVariables dto);
+
+ @ApiOperation(value = "处理流程")
+ @PostMapping(value = "/handleProsess")
+ @ResponseBody
+ ResultBean handleProsess(@RequestBody BusinessVariables bv);
+
+ @ApiOperation(value = "撤回流程")
+ @PostMapping(value = "/revokeProcess")
+ @ResponseBody
+ ResultBean revokeProcess(@RequestBody com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl);
+
+ @ApiOperation(value = "驳回流程")
+ @PostMapping(value = "/taskReject")
+ @ResponseBody
+ ResultBean taskReject(@RequestBody com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl);
+
+ @ApiOperation(value = "终止流程")
+ @PostMapping(value = "/breakProcess")
+ @ResponseBody
+ ResultBean breakProcess(@RequestBody com.yxt.anrui.flowable.api.flowtask.FlowTaskVo fl);
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/StartProcessDto.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/StartProcessDto.java
new file mode 100644
index 00000000..50a24904
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/StartProcessDto.java
@@ -0,0 +1,60 @@
+package com.yxt.anrui.flowable.api.flow;
+
+import java.util.Map;
+
+public class StartProcessDto {
+ private String orgSidPath;
+ private String businessSid;
+ private String orgSid; //部门sid
+ private String proDefId;
+ private String userSid;
+ private Map variables;
+
+ public String getOrgSidPath() {
+ return orgSidPath;
+ }
+
+ public void setOrgSidPath(String orgSidPath) {
+ this.orgSidPath = orgSidPath;
+ }
+
+ public String getBusinessSid() {
+ return businessSid;
+ }
+
+ public void setBusinessSid(String businessSid) {
+ this.businessSid = businessSid;
+ }
+
+ public String getOrgSid() {
+ return orgSid;
+ }
+
+ public void setOrgSid(String orgSid) {
+ this.orgSid = orgSid;
+ }
+
+ public String getProDefId() {
+ return proDefId;
+ }
+
+ public void setProDefId(String proDefId) {
+ this.proDefId = proDefId;
+ }
+
+ public String getUserSid() {
+ return userSid;
+ }
+
+ public void setUserSid(String userSid) {
+ this.userSid = userSid;
+ }
+
+ public Map getVariables() {
+ return variables;
+ }
+
+ public void setVariables(Map variables) {
+ this.variables = variables;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/TaskQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/TaskQuery.java
new file mode 100644
index 00000000..680660d6
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/TaskQuery.java
@@ -0,0 +1,90 @@
+/*********************************************************
+ *********************************************************
+ ******************** *******************
+ ************* ************
+ ******* _oo0oo_ *******
+ *** o8888888o ***
+ * 88" . "88 *
+ * (| -_- |) *
+ * 0\ = /0 *
+ * ___/`---'\___ *
+ * .' \\| |// '. *
+ * / \\||| : |||// \ *
+ * / _||||| -:- |||||- \ *
+ * | | \\\ - /// | | *
+ * | \_| ''\---/'' |_/ | *
+ * \ .-\__ '-' ___/-. / *
+ * ___'. .' /--.--\ `. .'___ *
+ * ."" '< `.___\_<|>_/___.' >' "". *
+ * | | : `- \`.;`\ _ /`;.`/ - ` : | | *
+ * \ \ `_. \_ __\ /__ _/ .-` / / *
+ * =====`-.____`.___ \_____/___.-`___.-'===== *
+ * `=---=' *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
+ *********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
+ *********************************************************/
+package com.yxt.anrui.flowable.api.flow;
+
+import com.yxt.common.core.query.Query;
+
+/**
+ * Project: anrui-parent
+ * File: TaskQuery.java
+ * Class: com.yxt.anrui.portal.biz.flow.TaskQuery
+ * Description: <描述类的功能>.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021/10/27 下午3:36
+ *
+ * @author popo
+ * @version 1.0
+ * @since 1.0
+ */
+public class TaskQuery implements Query {
+
+ private String userSid;
+ private String days;
+ private String zd1;
+ private String processDefinitionId;
+ private String startTime;
+
+ public String getZd1() {
+ return zd1;
+ }
+
+ public void setZd1(String zd1) {
+ this.zd1 = zd1;
+ }
+
+ public String getProcessDefinitionId() {
+ return processDefinitionId;
+ }
+
+ public void setProcessDefinitionId(String processDefinitionId) {
+ this.processDefinitionId = processDefinitionId;
+ }
+
+ public String getUserSid() {
+ return userSid;
+ }
+
+ public void setUserSid(String userSid) {
+ this.userSid = userSid;
+ }
+
+ public String getDays() {
+ return days;
+ }
+
+ public void setDays(String days) {
+ this.days = days;
+ }
+
+ public String getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(String startTime) {
+ this.startTime = startTime;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UpdateFlowFieldVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UpdateFlowFieldVo.java
new file mode 100644
index 00000000..fbb5b314
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UpdateFlowFieldVo.java
@@ -0,0 +1,70 @@
+package com.yxt.anrui.flowable.api.flow;
+
+import com.yxt.anrui.flowable.api.utils.ProcDefEnum;
+
+public class UpdateFlowFieldVo {
+
+ private String sid;
+ private String procDefId;
+ private String nodeState;
+ private String procInsId;
+ private String taskDefKey;
+ private String taskId;
+ private String nextNodeUserSids;
+
+ public String getNextNodeUserSids() {
+ return nextNodeUserSids;
+ }
+
+ public void setNextNodeUserSids(String nextNodeUserSids) {
+ this.nextNodeUserSids = nextNodeUserSids;
+ }
+
+ public String getSid() {
+ return sid;
+ }
+
+ public void setSid(String sid) {
+ this.sid = sid;
+ }
+
+ public String getProcDefId() {
+ return procDefId;
+ }
+
+ public void setProcDefId(String procDefId) {
+ this.procDefId = procDefId;
+ }
+
+ public String getNodeState() {
+ return nodeState;
+ }
+
+ public void setNodeState(String nodeState) {
+ this.nodeState = nodeState;
+ }
+
+ public String getProcInsId() {
+ return procInsId;
+ }
+
+ public void setProcInsId(String procInsId) {
+ this.procInsId = procInsId;
+ }
+
+ public String getTaskDefKey() {
+ return taskDefKey;
+ }
+
+ public void setTaskDefKey(String taskDefKey) {
+ this.taskDefKey = taskDefKey;
+ }
+
+ public String getTaskId() {
+ return taskId;
+ }
+
+ public void setTaskId(String taskId) {
+ this.taskId = taskId;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UserAndOrgPath.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UserAndOrgPath.java
new file mode 100644
index 00000000..1d4d1cf8
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UserAndOrgPath.java
@@ -0,0 +1,15 @@
+package com.yxt.anrui.flowable.api.flow;
+
+import lombok.Data;
+
+@Data
+public class UserAndOrgPath {
+ /**
+ * 用户sid
+ */
+ private String userSid;
+ /**
+ * 组织及部门sid全路径
+ */
+ private String orgPath;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowcomment/FlowComment.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowcomment/FlowComment.java
new file mode 100644
index 00000000..ceb9f9f9
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowcomment/FlowComment.java
@@ -0,0 +1,60 @@
+package com.yxt.anrui.flowable.api.flowcomment;
+
+/**
+ * @author dimengzhe
+ * @date 2021/6/16 9:05
+ * @description 流程意见类型
+ */
+
+public enum FlowComment {
+
+ /**
+ * 说明
+ */
+ START("0", "发起"),
+
+ NORMAL("1", "同意"),
+
+ REBACK("2", "退回"),
+
+ REJECT("3", "驳回"),
+ DELEGATE("4", "委派意见"),
+
+ ASSIGN("5", "转办意见"),
+ STOP("6", "终止"),
+
+ RECALL("7", "撤回"),
+ SETTLE("8", "已办结"),
+ AGAIN("9", "重新提交");
+
+ /**
+ * 类型
+ */
+ private final String type;
+
+ /**
+ * 说明
+ */
+ private final String remark;
+
+ FlowComment(String type, String remark) {
+ this.type = type;
+ this.remark = remark;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+ public static String getRemarkByType(String type){
+ for(FlowComment f : FlowComment.values()){
+ if(type.equals(f.type)){
+ return f.getRemark();
+ }
+ }
+ return null;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowcomment/FlowCommentDto.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowcomment/FlowCommentDto.java
new file mode 100644
index 00000000..91b80c08
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowcomment/FlowCommentDto.java
@@ -0,0 +1,39 @@
+package com.yxt.anrui.flowable.api.flowcomment;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author XuanXuan
+ * @date 2021/3/28 15:50
+ */
+@Data
+@Builder
+/*@NoArgsConstructor
+@AllArgsConstructor*/
+public class FlowCommentDto implements Serializable {
+ public FlowCommentDto() {
+ }
+
+ public FlowCommentDto(String type, String comment) {
+ this.type = type;
+ this.comment = comment;
+ }
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1929734226858491967L;
+
+ /**
+ * 意见类别 1正常(同意)意见 2退回意见 3 驳回意见 4 委派意见 5 转办意见 6 终止流程 7 撤回流程
+ */
+ private String type;
+
+ /**
+ * 意见内容
+ */
+ private String comment;
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowcomment/FlowCommentVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowcomment/FlowCommentVo.java
new file mode 100644
index 00000000..7ff5ff52
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowcomment/FlowCommentVo.java
@@ -0,0 +1,24 @@
+package com.yxt.anrui.flowable.api.flowcomment;
+
+import com.yxt.common.core.vo.Vo;
+import lombok.Data;
+
+/**
+ * @author dimengzhe
+ * @date 2021/8/23 15:02
+ * @description
+ */
+@Data
+public class FlowCommentVo implements Vo {
+ private static final long serialVersionUID = 8476778511839065050L;
+
+ /**
+ * 意见类别 意见类别 1正常(同意)意见 2退回意见 3 驳回意见 4 委派意见 5 转办意见 6 终止流程 7 撤回流程
+ */
+ private String type;
+
+ /**
+ * 意见内容
+ */
+ private String comment;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionFeign.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionFeign.java
new file mode 100644
index 00000000..a5a6282e
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionFeign.java
@@ -0,0 +1,85 @@
+package com.yxt.anrui.flowable.api.flowdefinition;
+
+import com.yxt.anrui.flowable.api.flowtask.FlowTask;
+import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
+import com.yxt.common.core.result.ResultBean;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Map;
+
+/**
+ * @author dimengzhe
+ * @date 2021/6/16 17:16
+ * @description 流程定义
+ */
+@FeignClient(
+ contextId = "anrui-flowable-FlowDefinition",
+ name = "anrui-flowable",
+ path = "/v1/flowable/definition",
+ fallback = FlowDefinitionFeignFallBack.class)
+public interface FlowDefinitionFeign {
+
+ @ApiOperation(value = "导入流程文件", notes = "上传bpmn20的xml文件")
+ @PostMapping("/import")
+ @ResponseBody
+ public ResultBean importFile(@RequestParam( name ="name", required = false) String name,
+ @RequestParam(name ="category",required = false) String category,
+ MultipartFile file);
+
+ @ApiOperation(value = "流程定义分页列表")
+ @PostMapping("/pagerList")
+ @ResponseBody
+ public ResultBean pagerList(@ApiParam(value = "当前页码", required = true) @RequestParam("pageNum") Integer pageNum,
+ @ApiParam(value = "每页条数", required = true) @RequestParam("pageSize") Integer pageSize);
+
+ /**
+ * 挂起后,就不可以再开启一个流程实例了,也就是 runtimeService.startProcessInstanceByKey("流程定义ID");会抛出异常
+ * 流程定义的挂起,不影响已经启动的流程实例继续
+ */
+ @ApiOperation(value = "激活或挂起流程定义")
+ @PostMapping(value = "/updateState")
+ public ResultBean updateState(@ApiParam(value = "1:激活,2:挂起", required = true) @RequestParam("state") Integer state,
+ @ApiParam(value = "流程部署ID", required = true) @RequestParam("deployId") String deployId);
+
+ @ApiOperation(value = "删除流程")
+ @DeleteMapping(value = "/delete")
+ @ResponseBody
+ public ResultBean delete(@ApiParam(value = "流程部署ID", required = true) @RequestParam("deployId") String deployId);
+
+ @ApiOperation(value = "保存xml文件")
+ @PostMapping(value = "/save")
+ @ResponseBody
+ public ResultBean save(@RequestBody FlowSaveXmlQuery flowSaveXmlQuery);
+
+ @ApiOperation(value = "读取xml文件")
+ @GetMapping("/readXml/{deployId}")
+ @ResponseBody
+ public ResultBean readXml(@ApiParam(value = "流程定义id") @PathVariable(value = "deployId") String deployId);
+
+
+ @ApiOperation(value = "指定流程办理人员列表")
+ @GetMapping("/userList")
+ @ResponseBody
+ public ResultBean userList(SysUser user);
+
+ @ApiOperation(value = "指定流程办理候选组(角色)")
+ @GetMapping("/roleList")
+ @ResponseBody
+ public ResultBean roleList();
+
+ @ApiOperation(value = "根据流程定义id启动流程实例")
+ @PostMapping("/start/{procDefId}")
+ @ResponseBody
+ public ResultBean start(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId,
+ @ApiParam(value = "变量集合,json对象") @RequestBody Map variables);
+
+ /* @ApiOperation(value = "业务系统发起流程根据流程定义id启动流程实例")
+ @PostMapping("/businessStart")
+ @ResponseBody
+ public ResultBean businessStart(@ApiParam(value = "请求参数") @RequestBody
+ BusinessVariables dto);*/
+}
\ No newline at end of file
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionFeignBusinessStartDTO.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionFeignBusinessStartDTO.java
new file mode 100644
index 00000000..d9f42834
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionFeignBusinessStartDTO.java
@@ -0,0 +1,78 @@
+/*********************************************************
+ *********************************************************
+ ******************** *******************
+ ************* ************
+ ******* _oo0oo_ *******
+ *** o8888888o ***
+ * 88" . "88 *
+ * (| -_- |) *
+ * 0\ = /0 *
+ * ___/`---'\___ *
+ * .' \\| |// '. *
+ * / \\||| : |||// \ *
+ * / _||||| -:- |||||- \ *
+ * | | \\\ - /// | | *
+ * | \_| ''\---/'' |_/ | *
+ * \ .-\__ '-' ___/-. / *
+ * ___'. .' /--.--\ `. .'___ *
+ * ."" '< `.___\_<|>_/___.' >' "". *
+ * | | : `- \`.;`\ _ /`;.`/ - ` : | | *
+ * \ \ `_. \_ __\ /__ _/ .-` / / *
+ * =====`-.____`.___ \_____/___.-`___.-'===== *
+ * `=---=' *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
+ *********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
+ *********************************************************/
+package com.yxt.anrui.flowable.api.flowdefinition;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Project: anrui-parent
+ * File: FlowDefinitionFeignDTO.java
+ * Class: com.yxt.anrui.flowable.api.flowdefinition.FlowDefinitionFeignDTO
+ * Description: <描述类的功能>.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021/10/25 上午11:47
+ *
+ * @author popo
+ * @version 1.0
+ * @since 1.0
+ */
+public class FlowDefinitionFeignBusinessStartDTO {
+
+ @ApiModelProperty("流程定义id")
+ private String procDefId;
+ @ApiModelProperty("用户sid")
+ private String userSid;
+ @ApiModelProperty("流程定义id")
+ private Map variables = new HashMap<>();
+
+ public String getProcDefId() {
+ return procDefId;
+ }
+
+ public void setProcDefId(String procDefId) {
+ this.procDefId = procDefId;
+ }
+
+ public String getUserSid() {
+ return userSid;
+ }
+
+ public void setUserSid(String userSid) {
+ this.userSid = userSid;
+ }
+
+ public Map getVariables() {
+ return variables;
+ }
+
+ public void setVariables(Map variables) {
+ this.variables = variables;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionFeignFallBack.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionFeignFallBack.java
new file mode 100644
index 00000000..d8004902
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionFeignFallBack.java
@@ -0,0 +1,68 @@
+package com.yxt.anrui.flowable.api.flowdefinition;
+
+import com.yxt.anrui.flowable.api.flowtask.FlowTask;
+import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
+import com.yxt.common.core.result.ResultBean;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Map;
+
+/**
+ * @author dimengzhe
+ * @date 2021/8/20 15:44
+ * @description
+ */
+@Component
+public class FlowDefinitionFeignFallBack implements FlowDefinitionFeign {
+ @Override
+ public ResultBean importFile(String name, String category, MultipartFile file) {
+ return null;
+ }
+
+ @Override
+ public ResultBean pagerList(Integer pageNum, Integer pageSize) {
+ return null;
+ }
+
+ @Override
+ public ResultBean updateState(Integer state, String deployId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean delete(String deployId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean save(FlowSaveXmlQuery flowSaveXmlQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBean readXml(String deployId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean userList(SysUser user) {
+ return null;
+ }
+
+ @Override
+ public ResultBean roleList() {
+ return null;
+ }
+
+ @Override
+ public ResultBean start(String procDefId, Map variables) {
+ return null;
+ }
+
+ /* @Override
+ public ResultBean businessStart(BusinessVariables dto) {
+ return null;
+ }
+*/
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionVo.java
new file mode 100644
index 00000000..796dca2c
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowDefinitionVo.java
@@ -0,0 +1,49 @@
+package com.yxt.anrui.flowable.api.flowdefinition;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author dimengzhe
+ * @date 2021/6/18 8:57
+ * @description 流程定义
+ */
+@Data
+public class FlowDefinitionVo implements Vo {
+ private static final long serialVersionUID = 2046175148595754071L;
+
+ @ApiModelProperty("流程id")
+ private String id;
+
+ @ApiModelProperty("流程名称")
+ private String name;
+
+ @ApiModelProperty("流程key")
+ private String key;
+
+ @ApiModelProperty("流程分类")
+ private String category;
+
+ @ApiModelProperty("配置表单名称")
+ private String formName;
+
+ @ApiModelProperty("配置表单id")
+ private Long formId;
+
+ @ApiModelProperty("版本")
+ private int version;
+
+ @ApiModelProperty("部署ID")
+ private String deploymentId;
+
+ @ApiModelProperty("流程定义状态: 1:激活 , 2:中止")
+ private int suspensionState;
+
+ @ApiModelProperty("部署时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date deploymentTime;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowInstanceDto.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowInstanceDto.java
new file mode 100644
index 00000000..d3b28510
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowInstanceDto.java
@@ -0,0 +1,18 @@
+package com.yxt.anrui.flowable.api.flowdefinition;
+
+import com.yxt.common.core.dto.Dto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author dimengzhe
+ * @date 2021/6/21 19:15
+ * @description 流程实例dto
+ */
+@Data
+public class FlowInstanceDto implements Dto {
+
+ private static final long serialVersionUID = -2972287297281145598L;
+ @ApiModelProperty(value = "流程定义id")
+ private String processId;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowSaveXmlQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowSaveXmlQuery.java
new file mode 100644
index 00000000..0929c677
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/FlowSaveXmlQuery.java
@@ -0,0 +1,27 @@
+package com.yxt.anrui.flowable.api.flowdefinition;
+
+import com.yxt.common.core.query.Query;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author dimengzhe
+ * @date 2021/8/31 16:56
+ * @description
+ */
+@Data
+public class FlowSaveXmlQuery implements Query {
+ private static final long serialVersionUID = -9097158378333761305L;
+
+
+ @ApiModelProperty(value = "流程名称")
+ private String name;
+
+
+ @ApiModelProperty(value = "流程分类")
+ private String category;
+
+
+ @ApiModelProperty(value = "xml文件")
+ private String xml;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/SysUser.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/SysUser.java
new file mode 100644
index 00000000..aad9a412
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowdefinition/SysUser.java
@@ -0,0 +1,64 @@
+package com.yxt.anrui.flowable.api.flowdefinition;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yxt.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Project: anrui_portal(门户建设)
+ * File: SysUser.java
+ * Class: com.yxt.anrui.portal.api.sysuser.SysUser
+ * Description: 用户表.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-08-03 00:24:30
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@Data
+public class SysUser extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+ @ApiModelProperty("登录名,登录名不能相同")
+ private String userName;
+
+ @ApiModelProperty("密码(加密或签名后)")
+ private String password;
+
+ @ApiModelProperty("密码修改时限")
+ private String pwdDayslimit;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @ApiModelProperty("最后一次密码修改时间")
+ private Date pwdModifyTime;
+
+ @ApiModelProperty("在线状态(0为离线、1为在线)")
+ private Integer onlineState;
+
+ @ApiModelProperty("用户登录时随机生成身份验证字符串")
+ private String token;
+
+ @ApiModelProperty("是否是管理员:1管理员,2一般用户,0是超级管理员,3尚无单位人员")
+ private String isAdmin;
+
+ @ApiModelProperty("手机登录唯一标识,手机与用户绑定字段")
+ private String appId;
+
+ @ApiModelProperty("关联的人员sid")
+ private String staffSid;
+
+ @ApiModelProperty("手机号")
+ private String mobile;
+
+ @ApiModelProperty("用户类型:1员工、2客户、3供应商")
+ private Integer userType;
+
+ @ApiModelProperty("用户头像")
+ private String headImage;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowinstance/FlowInstanceFeign.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowinstance/FlowInstanceFeign.java
new file mode 100644
index 00000000..caa94f83
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowinstance/FlowInstanceFeign.java
@@ -0,0 +1,44 @@
+package com.yxt.anrui.flowable.api.flowinstance;
+
+import com.yxt.anrui.flowable.api.flowdefinition.FlowInstanceDto;
+import com.yxt.common.core.result.ResultBean;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * @author dimengzhe
+ * @date 2021/6/16 10:33
+ * @description 工作流流程实例管理
+ */
+@FeignClient(
+ contextId = "anrui-flowable-FlowInstance",
+ name = "anrui-flowable",
+ path = "v1/flowable/instance",
+ fallback = FlowInstanceFeignFallBack.class)
+public interface FlowInstanceFeign {
+
+ @PostMapping("/start")
+ @ResponseBody
+ @ApiOperation(value = "启动流程")
+ public ResultBean startProcess(@RequestBody FlowInstanceDto flowTaskDto);
+
+
+ @ApiOperation(value = "根据流程定义id启动流程实例")
+ @PostMapping("/startBy/{procDefId}")
+ @ResponseBody
+ public ResultBean startById(@ApiParam(value = "流程定义id") @PathVariable(value = "procDefId") String procDefId);
+
+
+ @ApiOperation(value = "删除流程实例")
+ @DeleteMapping(value = "/delete")
+ public ResultBean delete(@ApiParam(value = "流程实例ID", required = true) @RequestParam(value = "instanceId") String instanceId,
+ @ApiParam(value = "删除原因") @RequestParam(value = "deleteReason", required = false) String deleteReason);
+
+ @ApiOperation(value = "激活或挂起流程实例")
+ @PostMapping(value = "/updateState")
+ public ResultBean updateState(@ApiParam(value = "1:激活,2:挂起", required = true) @RequestParam(value = "state") Integer state,
+ @ApiParam(value = "流程实例ID", required = true) @RequestParam(value = "instanceId") String instanceId);
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowinstance/FlowInstanceFeignFallBack.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowinstance/FlowInstanceFeignFallBack.java
new file mode 100644
index 00000000..8778ba6a
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowinstance/FlowInstanceFeignFallBack.java
@@ -0,0 +1,33 @@
+package com.yxt.anrui.flowable.api.flowinstance;
+
+import com.yxt.anrui.flowable.api.flowdefinition.FlowInstanceDto;
+import com.yxt.common.core.result.ResultBean;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author dimengzhe
+ * @date 2021/6/22 10:51
+ * @description
+ */
+@Component
+public class FlowInstanceFeignFallBack implements FlowInstanceFeign {
+ @Override
+ public ResultBean startProcess(FlowInstanceDto flowTaskDto) {
+ return null;
+ }
+
+ @Override
+ public ResultBean startById(String procDefId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean delete(String instanceId, String deleteReason) {
+ return null;
+ }
+
+ @Override
+ public ResultBean updateState(Integer state, String instanceId) {
+ return null;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowinstance/FlowInstanceVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowinstance/FlowInstanceVo.java
new file mode 100644
index 00000000..9ffa4bc5
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowinstance/FlowInstanceVo.java
@@ -0,0 +1,25 @@
+package com.yxt.anrui.flowable.api.flowinstance;
+
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author dimengzhe
+ * @date 2021/6/16 11:18
+ * @description
+ */
+@Data
+public class FlowInstanceVo implements Vo {
+
+ private static final long serialVersionUID = -7702924188219076066L;
+ @ApiModelProperty("任务Id")
+ private String taskId;
+
+ @ApiModelProperty("流程实例Id")
+ private String instanceId;
+ @ApiModelProperty(value = "表单sid")
+ private String formSid;
+
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/AppUserVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/AppUserVo.java
new file mode 100644
index 00000000..c6b29a03
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/AppUserVo.java
@@ -0,0 +1,23 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author dimengzhe
+ * @Date 2022/7/28 16:24
+ * @Description
+ */
+@Data
+public class AppUserVo implements Vo {
+ private static final long serialVersionUID = -3220584066025636920L;
+ @ApiModelProperty(value = "名称")
+ @JsonProperty("name")
+ private String assigneeName;
+ @ApiModelProperty(value = "头像")
+ @JsonProperty("image")
+ private String assigneeHeadImage;
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/CompleteTaskQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/CompleteTaskQuery.java
new file mode 100644
index 00000000..15922d4c
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/CompleteTaskQuery.java
@@ -0,0 +1,42 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import com.yxt.common.core.query.Query;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author dimengzhe
+ * @date 2021/8/4 18:22
+ * @description
+ */
+@Data
+public class CompleteTaskQuery implements Query {
+ private static final long serialVersionUID = 5847441978537887466L;
+
+ @ApiModelProperty(value = "用户sid")
+ private String userSid;
+
+ @ApiModelProperty("任务Id")
+ private String taskId;
+
+ @ApiModelProperty("用户Id")
+ private String userId;
+
+ @ApiModelProperty("任务意见")
+ private String comment;
+
+ @ApiModelProperty("流程实例Id")
+ private String instanceId;
+
+
+
+
+
+ @ApiModelProperty(value = "流程标题", required = false)
+ private String formTitle;
+
+ @ApiModelProperty(value = "任务参数", required = false)
+ private Map variables;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowRecordVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowRecordVo.java
new file mode 100644
index 00000000..8a9a6811
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowRecordVo.java
@@ -0,0 +1,16 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class FlowRecordVo {
+ private List flowList = new ArrayList<>();
+
+ public List getFlowList() {
+ return flowList;
+ }
+
+ public void setFlowList(List flowList) {
+ this.flowList = flowList;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTask.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTask.java
new file mode 100644
index 00000000..57a8205e
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTask.java
@@ -0,0 +1,107 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yxt.anrui.flowable.api.flowcomment.FlowCommentDto;
+import com.yxt.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 工作流任务
+ *
+ * @author XuanXuan
+ * @date 2021-04-03
+ */
+@ApiModel("工作流任务相关-返回参数")
+@Data
+public class FlowTask extends BaseEntity implements Serializable {
+
+ @ApiModelProperty("任务编号")
+ private String taskId;
+
+ @ApiModelProperty("任务名称")
+ private String taskName;
+
+ @ApiModelProperty("任务Key")
+ private String taskDefKey;
+
+ @ApiModelProperty("任务执行人Id")
+ private Long assigneeId;
+
+ @ApiModelProperty("部门名称")
+ private String deptName;
+
+ @ApiModelProperty("流程发起人部门名称")
+ private String startDeptName;
+
+ @ApiModelProperty("任务执行人名称")
+ private String assigneeName;
+
+ @ApiModelProperty("任务执行人头像")
+ private String assigneeHeadImage;
+
+ @ApiModelProperty("流程发起人Id")
+ private String startUserId;
+
+ @ApiModelProperty("流程发起人名称")
+ private String startUserName;
+
+ @ApiModelProperty("流程类型")
+ private String category;
+
+ @ApiModelProperty("流程变量信息")
+ private Object procVars;
+
+ @ApiModelProperty("局部变量信息")
+ private Object taskLocalVars;
+
+ @ApiModelProperty("流程部署编号")
+ private String deployId;
+
+ @ApiModelProperty("流程ID")
+ private String procDefId;
+
+ @ApiModelProperty("流程key")
+ private String procDefKey;
+
+ @ApiModelProperty("流程定义名称")
+ private String procDefName;
+
+ @ApiModelProperty("流程定义内置使用版本")
+ private int procDefVersion;
+
+ @ApiModelProperty("流程实例ID")
+ private String procInsId;
+
+ @ApiModelProperty("历史流程实例ID")
+ private String hisProcInsId;
+
+ @ApiModelProperty("任务耗时")
+ private String duration;
+
+ @ApiModelProperty("任务意见")
+ private FlowCommentDto comment = new FlowCommentDto();
+
+ @ApiModelProperty("候选执行人")
+ private String candidate;
+
+ /* @ApiModelProperty("任务创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" )
+ private String createTime;*/
+
+ @ApiModelProperty("任务完成时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+ private String finishTime;
+
+ @ApiModelProperty("流程完成时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS" )
+ private String processEndTime;
+
+ @ApiModelProperty("环节的办理人信息")
+ private List taskUserInfos;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskDto.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskDto.java
new file mode 100644
index 00000000..17503c69
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskDto.java
@@ -0,0 +1,118 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yxt.anrui.flowable.api.flowcomment.FlowCommentDto;
+import com.yxt.anrui.flowable.api.sysprourl.SysProUrlVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 工作流任务
+ *
+ * @author XuanXuan
+ * @date 2021-04-03
+ */
+@ApiModel("工作流任务相关-返回参数")
+@Data
+public class FlowTaskDto implements Serializable {
+
+ @ApiModelProperty("任务编号")
+ private String taskId;
+
+ @ApiModelProperty("任务名称")
+ private String taskName;
+
+ @ApiModelProperty("任务Key")
+ private String taskDefKey;
+
+ @ApiModelProperty("任务执行人Id")
+ private String assigneeSid;
+
+ @ApiModelProperty("部门名称")
+ private String deptName;
+
+ @ApiModelProperty("流程发起人部门名称")
+ private String startDeptName;
+
+ @ApiModelProperty("任务执行人名称")
+ private String assigneeName;
+
+ @ApiModelProperty("流程发起人Id")
+ private String startUserSid;
+
+ @ApiModelProperty("流程发起人名称")
+ private String startUserName;
+
+ @ApiModelProperty("流程类型")
+ private String category;
+
+ @ApiModelProperty("流程变量信息")
+ private Object procVars;
+
+ @ApiModelProperty("局部变量信息")
+ private Object taskLocalVars;
+
+ @ApiModelProperty("流程部署编号")
+ private String deployId;
+
+ @ApiModelProperty("流程ID")
+ private String procDefId;
+
+ @ApiModelProperty("流程key")
+ private String procDefKey;
+
+ @ApiModelProperty("流程定义名称")
+ private String procDefName;
+
+ @ApiModelProperty("流程定义内置使用版本")
+ private int procDefVersion;
+
+ @ApiModelProperty("流程实例ID")
+ private String procInsId;
+
+ @ApiModelProperty("历史流程实例ID")
+ private String hisProcInsId;
+
+ @ApiModelProperty("任务耗时")
+ private String duration;
+
+ @ApiModelProperty("任务意见")
+ private FlowCommentDto comment;
+
+ @ApiModelProperty("候选执行人")
+ private String candidate;
+ @ApiModelProperty("结束事件ID")
+ private String endActId;
+
+ @ApiModelProperty("流程创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date processCreateTime;
+ @ApiModelProperty("任务创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+ @ApiModelProperty("任务结束时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date endTime;
+
+ @ApiModelProperty("任务完成时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date finishTime;
+ @ApiModelProperty("业务表单参数集合")
+ private Map processVariables;
+
+ /*@ApiModelProperty("手机端参数集合")
+ private Map appVariables;
+
+ @ApiModelProperty("pc端参数集合")
+ private Map pcVariables;*/
+
+ @ApiModelProperty("是否显示撤回按钮(登录用户与待办人是否为同一个)")
+ private boolean hasRevokeButton = false;
+ @ApiModelProperty("办理的url")
+ private SysProUrlVo sysProUrlVo ;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskFeign.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskFeign.java
new file mode 100644
index 00000000..376f0bdc
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskFeign.java
@@ -0,0 +1,188 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yxt.anrui.flowable.api.flow.UserAndOrgPath;
+import com.yxt.anrui.flowable.api.utils.RecordQuery;
+import com.yxt.anrui.flowable.sqloperationsymbol.BusinessTaskQuery;
+import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
+import com.yxt.anrui.flowable.test.StartProcessInstanceQuery;
+import com.yxt.common.core.query.PagerQuery;
+import com.yxt.common.core.result.ResultBean;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.flowable.bpmn.model.FlowElement;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author dimengzhe
+ * @date 2021/7/29 14:37
+ * @description
+ */
+@FeignClient(
+ contextId = "anrui-flowable-FlowTask",
+ name = "anrui-flowable",
+ path = "v1/flowable/task",
+ fallback = FlowTaskFeignFallBack.class)
+public interface FlowTaskFeign {
+
+ @ApiOperation(value = "启动流程")
+ @PostMapping("/startProcessInstanceByKey")
+ @ResponseBody
+ ResultBean startProcessInstanceByKey(@RequestBody StartProcessInstanceQuery startProcessInstanceQuery);
+
+ @ApiOperation(value = "业务系统审批")
+ @PostMapping("/businessComplete")
+ @ResponseBody
+ ResultBean businessComplete(@RequestBody BusinessVariables dto);
+
+ @ApiOperation(value = "审批")
+ @PostMapping("/complete")
+ @ResponseBody
+ ResultBean complete(@RequestBody FlowTaskVo flowTaskVo);
+
+ @ApiOperation(value = "待办任务列表")
+ @PostMapping("/todoList")
+ @ResponseBody
+ ResultBean todoList(@RequestBody PagerQuery taskQueryPagerQuery);
+
+ @ApiOperation(value = "业务系统查询待办任务列表")
+ @PostMapping("/businessTodoList/{userSid}")
+ @ResponseBody
+ ResultBean> businessTodoList(@ApiParam(value = "当前用户sid") @PathVariable(value = "userSid")String userSid,
+ @RequestBody PagerQuery taskQueryPagerQuery);
+ @ApiOperation(value = "业务系统查询待办任务列表包含url")
+ @PostMapping("/businessTodoListForApp/{userSid}")
+ @ResponseBody
+ ResultBean> businessTodoListForApp(@ApiParam(value = "当前用户sid") @PathVariable(value = "userSid")String userSid,
+ @RequestBody PagerQuery taskQueryPagerQuery);
+
+ @ApiOperation(value = "业务系统查询待办任务列表数量")
+ @GetMapping("/getTodoNum/{userSid}")
+ ResultBean getTodoNum(@PathVariable(value = "userSid")String userSid);
+
+ @ApiOperation(value = "业务系统查询待办任务列表数量")
+ @PostMapping("/getTodoNum")
+ @ResponseBody
+ ResultBean getTodoNum(@RequestBody UserAndOrgPath uaop);
+
+ @ApiOperation(value = "已办任务列表")
+ @PostMapping("/doneList")
+ @ResponseBody
+ ResultBean doneList(@RequestBody PagerQuery taskQueryPagerQuery);
+
+ @ApiOperation(value = "业务系统查询已办任务列表")
+ @PostMapping("/businessDoneList/{userSid}")
+ @ResponseBody
+ ResultBean businessDoneList(@ApiParam(value = "当前用户sid") @PathVariable(value = "userSid")String userSid,
+ @RequestBody PagerQuery taskQueryPagerQuery);
+ @ApiOperation(value = "业务系统查询已办任务列表_移动端")
+ @PostMapping("/businessDoneListForApp/{userSid}")
+ @ResponseBody
+ ResultBean> businessDoneListForApp(@ApiParam(value = "当前用户sid") @PathVariable(value = "userSid")String userSid,
+ @RequestBody PagerQuery taskQueryPagerQuery);
+
+ @ApiOperation(value = "流程历史流转记录")
+ @PostMapping(value = "/flowRecord")
+ @ResponseBody
+ ResultBean flowRecord(@RequestBody RecordQuery recordQuery);
+
+ @ApiOperation(value = "取消申请")
+ @PostMapping(value = "/stopProcess/{userSid}")
+ @ResponseBody
+ ResultBean stopProcess(@ApiParam(value = "当前用户sid") @PathVariable(value = "userSid")String userSid,
+ @RequestBody FlowTaskVo flowTaskVo);
+
+ @ApiOperation(value = "我的流程分页列表")
+ @PostMapping(value = "/myprocess")
+ @ResponseBody
+ ResultBean myprocess(@RequestBody PagerQuery taskQueryPagerQuery);
+
+ @ApiOperation(value = "业务系统查询我的流程分页列表")
+ @PostMapping(value = "/businessMyprocess/{userSid}")
+ @ResponseBody
+ ResultBean businessMyprocess(@ApiParam(value = "当前用户sid") @PathVariable(value = "userSid")String userSid,
+ @RequestBody PagerQuery taskQueryPagerQuery);
+
+ @ApiOperation(value = "获取流程变量")
+ @GetMapping(value = "/processVariables/{taskId}")
+ @ResponseBody
+ ResultBean processVariables(@ApiParam(value = "流程任务Id") @PathVariable(value = "taskId") String taskId);
+
+ /**
+ * 生成流程图
+ *
+ * @param procInsId 任务ID
+ */
+ @RequestMapping("/flowViewer/{procInsId}")
+ public ResultBean getFlowViewer(@PathVariable("procInsId") String procInsId) ;
+
+ @ApiOperation(value = "获取所有可回退的节点")
+ @PostMapping(value = "/returnList")
+ public ResultBean findReturnTaskList(@RequestBody FlowTaskVo flowTaskVo);
+
+
+ @ApiOperation(value = "退回任务")
+ @PostMapping(value = "/return")
+ public ResultBean taskReturn(@RequestBody FlowTaskVo flowTaskVo);
+
+ @ApiOperation(value = "驳回任务")
+ @PostMapping(value = "/reject")
+ public ResultBean> taskReject(@RequestBody FlowTaskVo flowTaskVo);
+
+ @ApiOperation(value = "撤回流程", response = FlowTaskDto.class)
+ @PostMapping(value = "/revokeProcess")
+ public ResultBean> revokeProcess(@RequestBody FlowTaskVo flowTaskVo);
+
+ @ApiOperation(value = "终止流程")
+ @PostMapping(value = "/breakProcess")
+ public ResultBean breakProcess(@RequestBody FlowTaskVo flowTaskVo);
+
+ @ApiOperation(value = "流程历史流转记录" )
+ @GetMapping(value = "/flowRecord/{procInsId}/{deployId}")
+ public ResultBean flowRecord(@PathVariable(value = "procInsId")String procInsId,
+ @PathVariable(value = "deployId")String deployId);
+
+ @ApiOperation(value = "业务系统流程历史流转记录" )
+ @GetMapping(value = "/businessFlowRecord/{procInsId}")
+ public ResultBean businessFlowRecord(@PathVariable(value = "procInsId")String procInsId);
+
+ @ApiOperation(value = "删除流程实例")
+ @DeleteMapping(value = "/deleteProcess/{procInsId}")
+ @ResponseBody
+ ResultBean deleteProcess(@PathVariable(value = "procInsId")String procInsId);
+
+ @ApiOperation(value = "获取当前环节的下一分支节点")
+ @PostMapping(value = "/getNextTasks/{taskId}")
+ public ResultBean getNextTasks(@PathVariable(value = "taskId")String taskId);
+
+ @ApiOperation(value = "根据流程实例的id获取最新待办环节")
+ @PostMapping(value = "/getLatestTasks/{procId}")
+ ResultBean> getLatestTasks(@PathVariable(value = "procId") String procId);
+
+
+ @ApiOperation(value = "根据流程实例的id获取最新待办环节")
+ @PostMapping(value = "/getProcessCirculationNodes")
+ ResultBean< List> getProcessCirculationNodes(@RequestParam(value = "procId") String procI,
+ @RequestParam(value = "modelId") String modelId,
+ @RequestParam(value = "k")String k,
+ @RequestParam(value = "v")String v,
+ @RequestParam(value = "outcome")String outcome);
+
+ @ApiOperation(value = "根据流程实例的id获取最新待办环节")
+ @PostMapping(value = "/getProcessCirculationNodesByMap")
+ ResultBean getProcessCirculationNodesByMap(@RequestBody BusinessVariables bv);
+
+ @ApiOperation("获取流程图")
+ @GetMapping("/readXml/{sid}")
+ ResultBean readXml(@PathVariable(value ="sid") String sid);
+ @ApiOperation(value = "获取下一个环节")
+ @PostMapping(value = "/getNextNodesForSubmit")
+ ResultBean getNextNodesForSubmit(@RequestBody BusinessVariables bv);
+ @ApiOperation(value = "根据流程实例的id获取最新待办环节")
+ @PostMapping(value = "/获取上一个环节")
+ ResultBean getPreviousNodesForReject(@RequestBody BusinessVariables bv);
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskFeignFallBack.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskFeignFallBack.java
new file mode 100644
index 00000000..8bb749c8
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskFeignFallBack.java
@@ -0,0 +1,186 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yxt.anrui.flowable.api.flow.UserAndOrgPath;
+import com.yxt.anrui.flowable.api.utils.RecordQuery;
+import com.yxt.anrui.flowable.sqloperationsymbol.BusinessTaskQuery;
+import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
+import com.yxt.anrui.flowable.test.StartProcessInstanceQuery;
+import com.yxt.common.core.query.PagerQuery;
+import com.yxt.common.core.result.ResultBean;
+import feign.Param;
+import org.flowable.bpmn.model.FlowElement;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author dimengzhe
+ * @date 2021/8/20 15:43
+ * @description
+ */
+@Component
+public class FlowTaskFeignFallBack implements FlowTaskFeign {
+ @Override
+ public ResultBean startProcessInstanceByKey(StartProcessInstanceQuery startProcessInstanceQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBeanbusinessComplete (BusinessVariables dto) {
+ return null;
+ }
+
+ @Override
+ public ResultBean complete(FlowTaskVo flowTaskVo) {
+ return null;
+ }
+
+ @Override
+ public ResultBean> todoList(PagerQuery taskQueryPagerQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBean> businessTodoList(String userSid, PagerQuery taskQueryPagerQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBean> businessTodoListForApp(String userSid, PagerQuery taskQueryPagerQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBean getTodoNum(String userSid) {
+ return null;
+ }
+
+ @Override
+ public ResultBean getTodoNum(UserAndOrgPath uaop) {
+ return null;
+ }
+
+
+ @Override
+ public ResultBean doneList(PagerQuery taskQueryPagerQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBean businessDoneList(String userSid, PagerQuery taskQueryPagerQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBean businessDoneListForApp(String userSid, PagerQuery taskQueryPagerQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBean flowRecord(RecordQuery recordQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBean stopProcess(String userSid, FlowTaskVo flowTaskVo) {
+ return null;
+ }
+
+
+ @Override
+ public ResultBean myprocess(PagerQuery taskQueryPagerQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBean businessMyprocess(String userSid, PagerQuery taskQueryPagerQuery) {
+ return null;
+ }
+
+ @Override
+ public ResultBean processVariables(String taskId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean getFlowViewer(String procInsId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean findReturnTaskList(FlowTaskVo flowTaskVo) {
+ return null;
+ }
+
+ @Override
+ public ResultBean taskReturn(FlowTaskVo flowTaskVo) {
+ return null;
+ }
+
+ @Override
+ public ResultBean taskReject(FlowTaskVo flowTaskVo) {
+ return null;
+ }
+ @Override
+ public ResultBean revokeProcess(FlowTaskVo flowTaskVo) {
+ return null;
+ }
+
+ @Override
+ public ResultBean breakProcess(FlowTaskVo flowTaskVo) {
+ return null;
+ }
+
+ @Override
+ public ResultBean flowRecord(String procInsId, String deployId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean businessFlowRecord(String procInsId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean deleteProcess(String procInsId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean getNextTasks(String procInsId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean getLatestTasks(String procId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean< List > getProcessCirculationNodes(String procId, String modelId,
+ String k, String v, String outcome) {
+ return null;
+ }
+ @Override
+ public ResultBean getProcessCirculationNodesByMap(BusinessVariables bv) {
+ return null;
+ }
+
+ @Override
+ public ResultBean readXml(String deployId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean getNextNodesForSubmit(BusinessVariables bv) {
+ return null;
+ }
+
+ @Override
+ public ResultBean getPreviousNodesForReject(BusinessVariables bv) {
+ return null;
+ }
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskQuery.java
new file mode 100644
index 00000000..08c1fa93
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskQuery.java
@@ -0,0 +1,23 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import com.yxt.common.core.query.Query;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @author dimengzhe
+ * @date 2021/8/20 13:53
+ * @description
+ */
+public class FlowTaskQuery implements Query {
+ private static final long serialVersionUID = -7395299971899690002L;
+ @ApiModelProperty(value = "用户sid", required = true)
+ private String userSid;
+
+ public String getUserSid() {
+ return userSid;
+ }
+
+ public void setUserSid(String userSid) {
+ this.userSid = userSid;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskQueryOne.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskQueryOne.java
new file mode 100644
index 00000000..d74e908a
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskQueryOne.java
@@ -0,0 +1,46 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author dimengzhe
+ * @date 2021/9/2 15:41
+ * @description
+ */
+@Data
+@ApiModel("工作流任务相关--请求参数")
+public class FlowTaskQueryOne {
+
+ @ApiModelProperty("任务Id")
+ private String taskId;
+
+ @ApiModelProperty("用户sid")
+ private String userSid;
+
+ @ApiModelProperty("任务意见")
+ private String comment;
+
+ @ApiModelProperty("流程实例Id")
+ private String instanceId;
+
+ @ApiModelProperty("节点")
+ private String targetKey;
+
+ @ApiModelProperty("流程变量信息")
+ private Map values=new HashMap<>();
+
+ @ApiModelProperty("审批人")
+ private String assignee;
+
+ @ApiModelProperty("候选人")
+ private List candidateUsers;
+
+ @ApiModelProperty("审批组")
+ private List candidateGroups;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskVo.java
new file mode 100644
index 00000000..94ac010b
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowTaskVo.java
@@ -0,0 +1,53 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 流程任务
+ *
+ * @author XuanXuan
+ * @date 2021-04-03
+ */
+@ApiModel("工作流任务相关--请求参数")
+@Data
+public class FlowTaskVo {
+
+ @ApiModelProperty("任务Id")
+ private String taskId;
+ @ApiModelProperty("业务sid")
+ private String businessSid;
+ @ApiModelProperty("用户Id")
+ private String userId;
+ @ApiModelProperty("用户Sid")
+ private String userSid;
+
+ @ApiModelProperty("任务意见")
+ private String comment;
+
+ @ApiModelProperty("流程实例Id")
+ private String instanceId;
+
+ @ApiModelProperty("节点")
+ private String targetKey;
+
+ @ApiModelProperty("流程变量信息")
+ private Map values=new HashMap<>();
+
+ @ApiModelProperty("审批人")
+ private String assignee;
+
+ @ApiModelProperty("候选人")
+ private List candidateUsers;
+
+ @ApiModelProperty("审批组")
+ private List candidateGroups;
+
+
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowViewerDto.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowViewerDto.java
new file mode 100644
index 00000000..a7459fd6
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/FlowViewerDto.java
@@ -0,0 +1,26 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import java.io.Serializable;
+
+/**
+ * @author Xuan xuan
+ * @date 2021/4/21 20:55
+ */
+public class FlowViewerDto implements Serializable {
+
+ private String key;
+ private boolean completed;
+ public String getKey() {
+ return key;
+ }
+ public void setKey(String key) {
+ this.key = key;
+ }
+ public boolean isCompleted() {
+ return completed;
+ }
+ public void setCompleted(boolean completed) {
+ this.completed = completed;
+ }
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/LatestTaskVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/LatestTaskVo.java
new file mode 100644
index 00000000..2defac60
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/LatestTaskVo.java
@@ -0,0 +1,34 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description
+ * @Author liuguohui
+ * @Date 2022/1/11
+ */
+@ApiModel("最近环节")
+@Data
+public class LatestTaskVo implements Vo {
+
+ @ApiModelProperty(value = "name_")
+ private String name_;
+
+ @ApiModelProperty(value = "task_def_key_")
+ private String task_def_key_;
+
+ @ApiModelProperty(value = "id_")
+ private String id_;
+
+ @ApiModelProperty(value = "name_")
+ private String ASSIGNEE_;
+
+ @ApiModelProperty(value = "orgPath")
+ private String orgPath;
+
+ @ApiModelProperty(value = "incomingSourceRef")
+ private String incomingSourceRef;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskQuery.java
new file mode 100644
index 00000000..e6b7b415
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskQuery.java
@@ -0,0 +1,34 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import com.yxt.common.core.query.Query;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author dimengzhe
+ * @date 2021/8/6 10:50
+ * @description
+ */
+@Data
+public class TaskQuery implements Query {
+ private static final long serialVersionUID = -6335769975925521118L;
+ @ApiModelProperty(value = "用户sid")
+ private String userSid;
+ @ApiModelProperty(value = "表单名称")
+ private String formName;
+ @ApiModelProperty(value = "开始时间")
+ private String startTime;
+ @ApiModelProperty(value = "结束时间")
+ private String endTime;
+ @ApiModelProperty(value = "业务系统的sid")
+ private String businessKey;
+ @ApiModelProperty(value = "待办人")
+ private String assignee;
+ @ApiModelProperty(value = "流程实例id")
+ private String processInstanceId;
+ @ApiModelProperty(value = "审批状态")
+ private Integer flowStatus;
+ @ApiModelProperty(value = "节点名称")
+ private String taskName;
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskQueryParamsVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskQueryParamsVo.java
new file mode 100644
index 00000000..64783099
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskQueryParamsVo.java
@@ -0,0 +1,111 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import com.yxt.anrui.flowable.api.utils.ORDERBY;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * QueryParamsVo
+ *
+ * @author bruce.liu
+ * @date 2021/04/22 15:03
+ */
+@Data
+@ApiModel(value = "TaskQueryParamsVo", description = "查询任务实例的参数")
+public class TaskQueryParamsVo implements Serializable {
+ //用户的工号
+ @ApiModelProperty(
+ value = "用户的工号",
+ example = "00004737"
+ )
+ private String userCode;
+ //系统标识
+ @ApiModelProperty(
+ value = "系统标识",
+ example = "flow"
+ )
+ private String appSn;
+ //系统标识
+ @ApiModelProperty(
+ value = "系统标识列表",
+ example = "flow itp"
+ )
+ private List appSns;
+ //表单名称
+ @ApiModelProperty(
+ value = "表单名称",
+ example = "费用报销"
+ )
+ private String formName;
+ //开始时间
+ @ApiModelProperty(
+ value = "开始时间",
+ example = "2020-08-05 08:12:41"
+ )
+ private String startTime;
+ //结束时间
+ @ApiModelProperty(
+ value = "结束时间",
+ example = "2020-08-05 08:12:41"
+ )
+ private String endTime;
+ //业务系统的id
+ @ApiModelProperty(
+ value = "业务主键",
+ example = "1234656"
+ )
+ private String businessKey;
+ //待办人
+ @ApiModelProperty(
+ value = "待办人",
+ example = "00004737"
+ )
+ private String assignee;
+ //排序字段 1 升序 0 降序
+ @ApiModelProperty(
+ value = "排序字段 1 升序 0 降序",
+ example = "0"
+ )
+ private Integer orderFlag = 0;
+ //流程实例ID
+ @ApiModelProperty(
+ value = "流程实例ID",
+ example = "sfsafsfasfasfhkshdfwiey"
+ )
+ private String processInstanceId;
+ //模型key
+ @ApiModelProperty(
+ value = "流程模型key",
+ example = "modelKey"
+ )
+ private String modelKey;
+ //流程状态 1 审批中,2结束
+ @ApiModelProperty(
+ value = "流程状态 1 审批中,2结束",
+ example = "1"
+ )
+ private Integer flowStatus;
+ @ApiModelProperty(
+ value = "查询关键字",
+ example = "财务"
+ )
+ private String keyword;
+ @ApiModelProperty(
+ value = "节点名称",
+ example = "部门经理"
+ )
+ //节点名称
+ private String taskName;
+ /**
+ * 排序 key:字段 value 是规则
+ */
+ @ApiModelProperty(
+ value = "排序 key:字段 value 是规则"
+ )
+ private Map orderbyMap;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskUserInfo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskUserInfo.java
new file mode 100644
index 00000000..c05dfa87
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskUserInfo.java
@@ -0,0 +1,31 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+public class TaskUserInfo {
+ private String assigneeName;
+ private String assigneeHeadImage;
+ private String assigneeSid;
+
+ public String getAssigneeSid() {
+ return assigneeSid;
+ }
+
+ public void setAssigneeSid(String assigneeSid) {
+ this.assigneeSid = assigneeSid;
+ }
+
+ public String getAssigneeName() {
+ return assigneeName;
+ }
+
+ public void setAssigneeName(String assigneeName) {
+ this.assigneeName = assigneeName;
+ }
+
+ public String getAssigneeHeadImage() {
+ return assigneeHeadImage;
+ }
+
+ public void setAssigneeHeadImage(String assigneeHeadImage) {
+ this.assigneeHeadImage = assigneeHeadImage;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskVo.java
new file mode 100644
index 00000000..5a388c4e
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flowtask/TaskVo.java
@@ -0,0 +1,81 @@
+package com.yxt.anrui.flowable.api.flowtask;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author dimengzhe
+ * @date 2021/8/6 10:29
+ * @description 待办工作返回参数
+ */
+@Data
+@ApiModel("工作流任务相关-返回参数")
+public class TaskVo implements Vo {
+ private static final long serialVersionUID = 6590730229583603323L;
+
+ @ApiModelProperty(value = "任务编号")
+ private String taskId;
+ @ApiModelProperty(value = "任务名称")
+ private String taskName;
+ @ApiModelProperty(value = "任务定义key")
+ private String taskDefKey;
+ @ApiModelProperty(value = "任务执行人sid")
+ private String assigneeSid;
+
+ @ApiModelProperty(value = "任务执行人名称")
+ private String assigneeName;
+
+ @ApiModelProperty("流程发起人sId")
+ private String startUserSid;
+
+ @ApiModelProperty("流程发起人姓名")
+ private String startName;
+ @ApiModelProperty("流程类型")
+ private String category;
+
+ @ApiModelProperty("流程变量信息")
+ private Object procVars;
+
+ @ApiModelProperty("局部变量信息")
+ private Object taskLocalVars;
+
+ @ApiModelProperty("流程部署编号")
+ private String deployId;
+
+ @ApiModelProperty("流程ID")
+ private String procDefId;
+
+ @ApiModelProperty("流程key")
+ private String procDefKey;
+
+ @ApiModelProperty("流程定义名称")
+ private String procDefName;
+
+ @ApiModelProperty("流程定义内置使用版本")
+ private int procDefVersion;
+
+ @ApiModelProperty("流程实例ID")
+ private String procInsId;
+
+ @ApiModelProperty("历史流程实例ID")
+ private String hisProcInsId;
+
+ @ApiModelProperty("任务耗时")
+ private String duration;
+
+ @ApiModelProperty("候选执行人")
+ private String candidate;
+
+ @ApiModelProperty("任务创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ @ApiModelProperty("任务完成时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date finishTime;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessComment.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessComment.java
new file mode 100644
index 00000000..73cb5e3a
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessComment.java
@@ -0,0 +1,68 @@
+/*********************************************************
+ *********************************************************
+ ******************** *******************
+ ************* ************
+ ******* _oo0oo_ *******
+ *** o8888888o ***
+ * 88" . "88 *
+ * (| -_- |) *
+ * 0\ = /0 *
+ * ___/`---'\___ *
+ * .' \\| |// '. *
+ * / \\||| : |||// \ *
+ * / _||||| -:- |||||- \ *
+ * | | \\\ - /// | | *
+ * | \_| ''\---/'' |_/ | *
+ * \ .-\__ '-' ___/-. / *
+ * ___'. .' /--.--\ `. .'___ *
+ * ."" '< `.___\_<|>_/___.' >' "". *
+ * | | : `- \`.;`\ _ /`;.`/ - ` : | | *
+ * \ \ `_. \_ __\ /__ _/ .-` / / *
+ * =====`-.____`.___ \_____/___.-`___.-'===== *
+ * `=---=' *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
+ *********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
+ *********************************************************/
+package com.yxt.anrui.flowable.api.processcomment;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yxt.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Project: processcomment(流程评论)
+ * File: ProcessComment.java
+ * Class: com.yxt.anrui.flowable.api.processcomment.api.processcomment.ProcessComment
+ * Description: process_comment.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2023-01-30 14:40:37
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@Data
+@ApiModel(value = "process_comment", description = "process_comment")
+@TableName("process_comment")
+public class ProcessComment extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("评论人")
+ private String reviewer; // 评论人
+ @ApiModelProperty("评论人sid")
+ private String reviewerSid; // 评论人sid
+ @ApiModelProperty("评论时间")
+ private Date time; // 评论时间
+ @ApiModelProperty("评论内容")
+ private String content; // 评论内容
+ @ApiModelProperty("评论的流程id")
+ private String processId; // 评论的流程id
+ @ApiModelProperty("评论的流程实列的sid")
+ private String processInstSid; // 评论的流程实列的sid
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentDetailsVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentDetailsVo.java
new file mode 100644
index 00000000..311ea5a2
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentDetailsVo.java
@@ -0,0 +1,69 @@
+/*********************************************************
+ *********************************************************
+ ******************** *******************
+ ************* ************
+ ******* _oo0oo_ *******
+ *** o8888888o ***
+ * 88" . "88 *
+ * (| -_- |) *
+ * 0\ = /0 *
+ * ___/`---'\___ *
+ * .' \\| |// '. *
+ * / \\||| : |||// \ *
+ * / _||||| -:- |||||- \ *
+ * | | \\\ - /// | | *
+ * | \_| ''\---/'' |_/ | *
+ * \ .-\__ '-' ___/-. / *
+ * ___'. .' /--.--\ `. .'___ *
+ * ."" '< `.___\_<|>_/___.' >' "". *
+ * | | : `- \`.;`\ _ /`;.`/ - ` : | | *
+ * \ \ `_. \_ __\ /__ _/ .-` / / *
+ * =====`-.____`.___ \_____/___.-`___.-'===== *
+ * `=---=' *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
+ *********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
+ *********************************************************/
+package com.yxt.anrui.flowable.api.processcomment;
+
+
+import com.yxt.common.core.vo.Vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Project: processcomment(流程评论)
+ * File: ProcessCommentVo.java
+ * Class: com.yxt.anrui.flowable.api.processcomment.api.processcomment.ProcessCommentVo
+ * Description: process_comment 视图数据对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2023-01-30 14:40:37
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@Data
+@ApiModel(value = "process_comment 视图数据详情", description = "process_comment 视图数据详情")
+public class ProcessCommentDetailsVo implements Vo {
+
+ private String sid; // sid
+
+ @ApiModelProperty("评论人")
+ private String reviewer; // 评论人
+ @ApiModelProperty("评论人sid")
+ private String reviewerSid; // 评论人sid
+ @ApiModelProperty("评论时间")
+ private Date time; // 评论时间
+ @ApiModelProperty("评论内容")
+ private String content; // 评论内容
+ @ApiModelProperty("评论的流程id")
+ private String processId; // 评论的流程id
+ @ApiModelProperty("评论的流程实列的sid")
+ private String processInstSid; // 评论的流程实列的sid
+
+}
\ No newline at end of file
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentDto.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentDto.java
new file mode 100644
index 00000000..08ff5e22
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentDto.java
@@ -0,0 +1,69 @@
+/*********************************************************
+ *********************************************************
+ ******************** *******************
+ ************* ************
+ ******* _oo0oo_ *******
+ *** o8888888o ***
+ * 88" . "88 *
+ * (| -_- |) *
+ * 0\ = /0 *
+ * ___/`---'\___ *
+ * .' \\| |// '. *
+ * / \\||| : |||// \ *
+ * / _||||| -:- |||||- \ *
+ * | | \\\ - /// | | *
+ * | \_| ''\---/'' |_/ | *
+ * \ .-\__ '-' ___/-. / *
+ * ___'. .' /--.--\ `. .'___ *
+ * ."" '< `.___\_<|>_/___.' >' "". *
+ * | | : `- \`.;`\ _ /`;.`/ - ` : | | *
+ * \ \ `_. \_ __\ /__ _/ .-` / / *
+ * =====`-.____`.___ \_____/___.-`___.-'===== *
+ * `=---=' *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
+ *********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
+ *********************************************************/
+package com.yxt.anrui.flowable.api.processcomment;
+
+
+import com.yxt.common.core.dto.Dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Project: processcomment(流程评论)
+ * File: ProcessCommentDto.java
+ * Class: com.yxt.anrui.flowable.api.processcomment.api.processcomment.ProcessCommentDto
+ * Description: process_comment 数据传输对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2023-01-30 14:40:37
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@Data
+@ApiModel(value = "process_comment 数据传输对象", description = "process_comment 数据传输对象")
+public class ProcessCommentDto implements Dto {
+
+ private String sid; // sid
+
+ @ApiModelProperty("评论人")
+ private String reviewer; // 评论人
+ @ApiModelProperty("评论人sid")
+ private String reviewerSid; // 评论人sid
+ @ApiModelProperty("评论时间")
+ private Date time; // 评论时间
+ @ApiModelProperty("评论内容")
+ private String content; // 评论内容
+ @ApiModelProperty("评论的流程id")
+ private String processId; // 评论的流程id
+ @ApiModelProperty("评论的流程实列的sid")
+ private String processInstSid; // 评论的流程实列的sid
+
+}
\ No newline at end of file
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentFeign.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentFeign.java
new file mode 100644
index 00000000..1212610c
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentFeign.java
@@ -0,0 +1,81 @@
+/*********************************************************
+ *********************************************************
+ ******************** *******************
+ ************* ************
+ ******* _oo0oo_ *******
+ *** o8888888o ***
+ * 88" . "88 *
+ * (| -_- |) *
+ * 0\ = /0 *
+ * ___/`---'\___ *
+ * .' \\| |// '. *
+ * / \\||| : |||// \ *
+ * / _||||| -:- |||||- \ *
+ * | | \\\ - /// | | *
+ * | \_| ''\---/'' |_/ | *
+ * \ .-\__ '-' ___/-. / *
+ * ___'. .' /--.--\ `. .'___ *
+ * ."" '< `.___\_<|>_/___.' >' "". *
+ * | | : `- \`.;`\ _ /`;.`/ - ` : | | *
+ * \ \ `_. \_ __\ /__ _/ .-` / / *
+ * =====`-.____`.___ \_____/___.-`___.-'===== *
+ * `=---=' *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
+ *********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
+ *********************************************************/
+package com.yxt.anrui.flowable.api.processcomment;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import com.yxt.common.core.query.PagerQuery;
+import com.yxt.common.core.result.ResultBean;
+import com.yxt.common.core.vo.PagerVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * Project: processcomment(流程评论)
+ * File: ProcessCommentFeign.java
+ * Class: com.yxt.anrui.flowable.api.processcomment.api.processcomment.ProcessCommentFeign
+ * Description: process_comment.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2023-01-30 14:40:37
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@FeignClient(
+ contextId = "processcomment-ProcessComment",
+ name = "anrui-flowable",
+ path = "v1/processcomment",
+ fallback = ProcessCommentFeignFallback.class)
+public interface ProcessCommentFeign {
+
+ @ApiOperation("根据条件分页查询数据的列表")
+ @PostMapping("/listPage")
+ @ResponseBody
+ public ResultBean> listPage(@RequestBody PagerQuery pq);
+
+ @ApiOperation("新增或修改")
+ @PostMapping("/save")
+ @ResponseBody
+ public ResultBean save(@RequestBody ProcessCommentDto dto);
+
+ @ApiOperation("根据sid删除记录")
+ @DeleteMapping("/delBySids")
+ @ResponseBody
+ public ResultBean delBySids(@RequestBody String[] sids);
+
+ @ApiOperation("根据SID获取一条记录")
+ @GetMapping("/fetchDetailsBySid/{sid}")
+ @ResponseBody
+ public ResultBean fetchDetailsBySid(@PathVariable("sid") String sid);
+ @ApiOperation("根据流程实列的id获取流程相关的评论")
+ @GetMapping("/getCommentList/{processId}")
+ @ResponseBody
+ ResultBean> getCommentList(@PathVariable("processId")String processId);
+}
\ No newline at end of file
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentFeignFallback.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentFeignFallback.java
new file mode 100644
index 00000000..a4e8687c
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentFeignFallback.java
@@ -0,0 +1,77 @@
+/*********************************************************
+ *********************************************************
+ ******************** *******************
+ ************* ************
+ ******* _oo0oo_ *******
+ *** o8888888o ***
+ * 88" . "88 *
+ * (| -_- |) *
+ * 0\ = /0 *
+ * ___/`---'\___ *
+ * .' \\| |// '. *
+ * / \\||| : |||// \ *
+ * / _||||| -:- |||||- \ *
+ * | | \\\ - /// | | *
+ * | \_| ''\---/'' |_/ | *
+ * \ .-\__ '-' ___/-. / *
+ * ___'. .' /--.--\ `. .'___ *
+ * ."" '< `.___\_<|>_/___.' >' "". *
+ * | | : `- \`.;`\ _ /`;.`/ - ` : | | *
+ * \ \ `_. \_ __\ /__ _/ .-` / / *
+ * =====`-.____`.___ \_____/___.-`___.-'===== *
+ * `=---=' *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
+ *********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
+ *********************************************************/
+package com.yxt.anrui.flowable.api.processcomment;
+
+import com.yxt.common.core.query.PagerQuery;
+import com.yxt.common.core.result.ResultBean;
+import com.yxt.common.core.vo.PagerVo;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Project: processcomment(流程评论)
+ * File: ProcessCommentFeignFallback.java
+ * Class: com.yxt.anrui.flowable.api.processcomment.api.processcomment.ProcessCommentFeignFallback
+ * Description: process_comment.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2023-01-30 14:40:37
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@Component
+public class ProcessCommentFeignFallback implements ProcessCommentFeign {
+
+ @Override
+ public ResultBean> listPage(PagerQuery pq){
+ ResultBean rb = ResultBean.fireFail();
+ return rb.setMsg("接口processcomment/processcomment/listPage无法访问");
+ }
+
+ @Override
+ public ResultBean save(ProcessCommentDto dto){
+ return ResultBean.fireFail().setMsg("接口processcomment/processcomment/save无法访问");
+ }
+
+ @Override
+ public ResultBean delBySids( String[] sids){
+ return ResultBean.fireFail().setMsg("接口processcomment/processcomment/delBySids无法访问");
+ }
+
+ @Override
+ public ResultBean fetchDetailsBySid(String sid){
+ ResultBean rb = ResultBean.fireFail();
+ return rb.setMsg("接口processcomment/processcomment/fetchDetailsBySid无法访问");
+ }
+
+ @Override
+ public ResultBean> getCommentList(String processId) {
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentQuery.java
new file mode 100644
index 00000000..13b90162
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentQuery.java
@@ -0,0 +1,67 @@
+/*********************************************************
+ *********************************************************
+ ******************** *******************
+ ************* ************
+ ******* _oo0oo_ *******
+ *** o8888888o ***
+ * 88" . "88 *
+ * (| -_- |) *
+ * 0\ = /0 *
+ * ___/`---'\___ *
+ * .' \\| |// '. *
+ * / \\||| : |||// \ *
+ * / _||||| -:- |||||- \ *
+ * | | \\\ - /// | | *
+ * | \_| ''\---/'' |_/ | *
+ * \ .-\__ '-' ___/-. / *
+ * ___'. .' /--.--\ `. .'___ *
+ * ."" '< `.___\_<|>_/___.' >' "". *
+ * | | : `- \`.;`\ _ /`;.`/ - ` : | | *
+ * \ \ `_. \_ __\ /__ _/ .-` / / *
+ * =====`-.____`.___ \_____/___.-`___.-'===== *
+ * `=---=' *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
+ *********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
+ *********************************************************/
+package com.yxt.anrui.flowable.api.processcomment;
+
+
+import com.yxt.common.core.query.Query;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Project: processcomment(流程评论)
+ * File: ProcessCommentQuery.java
+ * Class: com.yxt.anrui.flowable.api.processcomment.api.processcomment.ProcessCommentQuery
+ * Description: process_comment 查询条件.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2023-01-30 14:40:37
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@Data
+@ApiModel(value = "process_comment 查询条件", description = "process_comment 查询条件")
+public class ProcessCommentQuery implements Query {
+
+ @ApiModelProperty("评论人")
+ private String reviewer; // 评论人
+ @ApiModelProperty("评论人sid")
+ private String reviewerSid; // 评论人sid
+ @ApiModelProperty("评论时间")
+ private Date time; // 评论时间
+ @ApiModelProperty("评论内容")
+ private String content; // 评论内容
+ @ApiModelProperty("评论的流程id")
+ private String processId; // 评论的流程id
+ @ApiModelProperty("评论的流程实列的sid")
+ private String processInstSid; // 评论的流程实列的sid
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentVo.java
new file mode 100644
index 00000000..e4dc90a0
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/processcomment/ProcessCommentVo.java
@@ -0,0 +1,72 @@
+/*********************************************************
+ *********************************************************
+ ******************** *******************
+ ************* ************
+ ******* _oo0oo_ *******
+ *** o8888888o ***
+ * 88" . "88 *
+ * (| -_- |) *
+ * 0\ = /0 *
+ * ___/`---'\___ *
+ * .' \\| |// '. *
+ * / \\||| : |||// \ *
+ * / _||||| -:- |||||- \ *
+ * | | \\\ - /// | | *
+ * | \_| ''\---/'' |_/ | *
+ * \ .-\__ '-' ___/-. / *
+ * ___'. .' /--.--\ `. .'___ *
+ * ."" '< `.___\_<|>_/___.' >' "". *
+ * | | : `- \`.;`\ _ /`;.`/ - ` : | | *
+ * \ \ `_. \_ __\ /__ _/ .-` / / *
+ * =====`-.____`.___ \_____/___.-`___.-'===== *
+ * `=---=' *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
+ *********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
+ *********************************************************/
+package com.yxt.anrui.flowable.api.processcomment;
+
+
+import com.yxt.anrui.flowable.api.flowtask.AppUserVo;
+import com.yxt.common.core.vo.Vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Project: processcomment(流程评论)
+ * File: ProcessCommentVo.java
+ * Class: com.yxt.anrui.flowable.api.processcomment.api.processcomment.ProcessCommentVo
+ * Description: process_comment 视图数据对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2023-01-30 14:40:37
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@Data
+@ApiModel(value = "process_comment 视图数据对象", description = "process_comment 视图数据对象")
+public class ProcessCommentVo implements Vo {
+
+ private String sid; // sid
+
+ @ApiModelProperty("评论人")
+ private String reviewer; // 评论人
+ @ApiModelProperty("评论人sid")
+ private String reviewerSid; // 评论人sid
+ @ApiModelProperty("评论时间")
+ private Date time; // 评论时间
+ @ApiModelProperty("评论内容")
+ private String content; // 评论内容
+ @ApiModelProperty("评论的流程id")
+ private String processId; // 评论的流程id
+ @ApiModelProperty("评论的流程实列的sid")
+ private String processInstSid; // 评论的流程实列的sid
+ @ApiModelProperty("taskUserInfo")
+ private AppUserVo taskUserInfo; // AppUserVo
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysdeployform/SysDeployForm.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysdeployform/SysDeployForm.java
new file mode 100644
index 00000000..20347337
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysdeployform/SysDeployForm.java
@@ -0,0 +1,26 @@
+package com.yxt.anrui.flowable.api.sysdeployform;
+
+import com.yxt.anrui.flowable.api.utils.Excel;
+import com.yxt.common.core.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 流程实例关联表单对象 sys_instance_form
+ *
+ * @author XuanXuan Xuan
+ * @date 2021-03-30
+ */
+@Data
+public class SysDeployForm extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+ /** 表单主键 */
+ @Excel(name = "表单主键")
+ private Long formId;
+
+ /** 流程定义主键 */
+ @Excel(name = "流程定义主键")
+ private String deployId;
+
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysForm.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysForm.java
new file mode 100644
index 00000000..86af5860
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysForm.java
@@ -0,0 +1,35 @@
+package com.yxt.anrui.flowable.api.sysform;
+
+import com.yxt.anrui.flowable.api.utils.Excel;
+import com.yxt.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 流程表单对象 sys_task_form
+ *
+ * @author XuanXuan Xuan
+ * @date 2021-03-30
+ */
+@ApiModel(value = "流程表单对象", description = "流程表单对象")
+@Data
+public class SysForm extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 表单id
+ */
+ private String formId;
+
+ /**
+ * 表单名称
+ */
+ @Excel(name = "表单名称")
+ private String formName;
+
+ /**
+ * 表单内容
+ */
+ @Excel(name = "表单内容")
+ private String formContent;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormFeign.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormFeign.java
new file mode 100644
index 00000000..d6e2e0da
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormFeign.java
@@ -0,0 +1,60 @@
+package com.yxt.anrui.flowable.api.sysform;
+
+import com.yxt.anrui.flowable.api.sysdeployform.SysDeployForm;
+import com.yxt.common.core.query.PagerQuery;
+import com.yxt.common.core.result.ResultBean;
+import com.yxt.common.core.vo.PagerVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+@FeignClient(
+ contextId = "anrui-flowable-SysFormFeign",
+ name = "anrui-flowable",
+ path = "v1/flowable/form",
+ fallback = SysFormFeignFallBack.class)
+public interface SysFormFeign {
+ /**
+ * 查询流程表单列表
+ */
+ @PostMapping("/list")
+ @ResponseBody
+ public ResultBean> list( @RequestBody PagerQuery pq) ;
+
+ /**
+ * 导出流程表单列表
+ */
+ @GetMapping("/export")
+ public ResultBean export(SysForm sysForm) ;
+
+ /**
+ * 获取流程表单详细信息
+ */
+ @GetMapping(value = "/{formId}")
+ @ResponseBody
+ public String getInfo(@PathVariable("formId") Long formId);
+
+ /**
+ * 新增流程表单
+ */
+ @PostMapping(value="/add")
+ @ResponseBody
+ public ResultBean add(@RequestBody SysForm sysForm) ;
+
+ /**
+ * 修改流程表单
+ */
+ @PutMapping
+ public ResultBean edit(@RequestBody SysForm sysForm);
+
+ /**
+ * 删除流程表单
+ */
+ @DeleteMapping("/{formIds}")
+ public ResultBean remove(@PathVariable Long[] formIds);
+
+
+ /**
+ * 挂载流程表单
+ */
+ @PostMapping("/addDeployForm")
+ public ResultBean addDeployForm(@RequestBody SysDeployForm sysDeployForm);
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormFeignFallBack.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormFeignFallBack.java
new file mode 100644
index 00000000..e0b60517
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormFeignFallBack.java
@@ -0,0 +1,51 @@
+package com.yxt.anrui.flowable.api.sysform;
+
+import com.yxt.anrui.flowable.api.sysdeployform.SysDeployForm;
+import com.yxt.common.core.query.PagerQuery;
+import com.yxt.common.core.result.ResultBean;
+import com.yxt.common.core.vo.PagerVo;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author dimengzhe
+ * @date 2021/8/20 15:43
+ * @description
+ */
+@Component
+public class SysFormFeignFallBack implements SysFormFeign {
+
+ @Override
+ public ResultBean> list(PagerQuery pq) {
+ return null;
+ }
+
+ @Override
+ public ResultBean export(SysForm sysForm) {
+ return null;
+ }
+
+ @Override
+ public String getInfo(Long formId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean add(SysForm sysForm) {
+ return null;
+ }
+
+ @Override
+ public ResultBean edit(SysForm sysForm) {
+ return null;
+ }
+
+ @Override
+ public ResultBean remove(Long[] formIds) {
+ return null;
+ }
+
+ @Override
+ public ResultBean addDeployForm(SysDeployForm sysDeployForm) {
+ return null;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormQuery.java
new file mode 100644
index 00000000..2d0f9a3a
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormQuery.java
@@ -0,0 +1,27 @@
+package com.yxt.anrui.flowable.api.sysform;
+
+import com.yxt.common.core.query.Query;
+import lombok.Data;
+
+/**
+ * 流程表单对象 sys_task_form
+ *
+ * @author XuanXuan Xuan
+ * @date 2021-03-30
+ */
+@Data
+public class SysFormQuery implements Query {
+
+ private static final long serialVersionUID = -7125349257031748592L;
+
+ /**
+ * 表单名称
+ */
+ private String formName;
+
+ /**
+ * 表单内容
+ */
+ private String formContent;
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormVo.java
new file mode 100644
index 00000000..3f898fb9
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysFormVo.java
@@ -0,0 +1,25 @@
+package com.yxt.anrui.flowable.api.sysform;
+
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 流程表单对象 sys_task_form
+ *
+ * @author XuanXuan Xuan
+ * @date 2021-03-30
+ */
+@Data
+@ApiModel("流程表单对象")
+public class SysFormVo implements Vo {
+ private static final long serialVersionUID = -3846821999540647493L;
+ /**
+ * 表单主键
+ */
+ private Integer formId;
+
+ private String formName;
+
+ private String formContent;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysTaskForm.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysTaskForm.java
new file mode 100644
index 00000000..8b788fa7
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysform/SysTaskForm.java
@@ -0,0 +1,27 @@
+package com.yxt.anrui.flowable.api.sysform;
+
+import com.yxt.anrui.flowable.api.utils.Excel;
+import com.yxt.common.core.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 流程任务关联单对象 sys_task_form
+ *
+ * @author XuanXuan Xuan
+ * @date 2021-04-03
+ */
+@Data
+public class SysTaskForm extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+
+ /** 表单主键 */
+ @Excel(name = "表单主键")
+ private Long formId;
+
+ /** 所属任务 */
+ @Excel(name = "所属任务")
+ private String taskId;
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLink.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLink.java
new file mode 100644
index 00000000..d12416cc
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLink.java
@@ -0,0 +1,46 @@
+package com.yxt.anrui.flowable.api.sysformlink;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yxt.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Project: anrui-flowable(流程引擎)
+ * File: SysFormLink.java
+ * Class: com.yxt.anrui.flowable.api.sysformlink.SysFormLink
+ * Description: 流程业务关联表.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2022-03-15 16:55:39
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@ApiModel(value = "流程业务关联表", description = "流程业务关联表")
+@TableName("sys_form_link")
+@Data
+public class SysFormLink extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+
+
+ @ApiModelProperty("业务sid")
+ private String businessSid;
+
+ @ApiModelProperty("流程实例id")
+ private String procInsId;
+
+ @ApiModelProperty("节点id")
+ private String taskDefKey;
+
+ @ApiModelProperty("节点状态")
+ private String nodeState;
+
+ @ApiModelProperty("状态判断:0未提交,1办理中, 2已办结, -1退回到发起人,-2终止")
+ private Integer flowState;
+
+ @ApiModelProperty("业务类型(见SysFormLinkTypeEnum枚举类)")
+ private String formType;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkDto.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkDto.java
new file mode 100644
index 00000000..b65a4fd1
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkDto.java
@@ -0,0 +1,50 @@
+package com.yxt.anrui.flowable.api.sysformlink;
+
+
+import com.yxt.common.core.dto.Dto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Project: anrui-flowable(流程引擎)
+ * File: SysFormLinkDto.java
+ * Class: com.yxt.anrui.flowable.api.sysformlink.SysFormLinkDto
+ * Description: 流程业务关联表 数据传输对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2022-03-15 16:55:39
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@ApiModel(value = "流程业务关联表 数据传输对象", description = "流程业务关联表 数据传输对象")
+@Data
+public class SysFormLinkDto implements Dto {
+
+
+ @ApiModelProperty("业务sid")
+ @NotBlank(message = "业务sid不能为空")
+ private String businessSid;
+
+ @ApiModelProperty("流程实例id")
+ @NotBlank(message = "流程实例不能为空")
+ private String procInsId;
+
+ @ApiModelProperty("节点id")
+ private String taskDefKey;
+
+ @ApiModelProperty("节点状态")
+ @NotBlank(message = "节点状态不能为空")
+ private String nodeState;
+
+ @ApiModelProperty("状态判断:0未提交,1办理中, 2已办结, -1退回到发起人,-2终止")
+ private Integer flowState;
+
+ @ApiModelProperty("业务类型")
+ @NotBlank(message = "业务类型")
+ private String formType;
+}
\ No newline at end of file
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkFeign.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkFeign.java
new file mode 100644
index 00000000..fbe4de0b
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkFeign.java
@@ -0,0 +1,48 @@
+package com.yxt.anrui.flowable.api.sysformlink;
+
+import com.yxt.common.core.result.ResultBean;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Map;
+
+/**
+ * Project: anrui-flowable(流程引擎)
+ * File: SysFormLinkFeign.java
+ * Class: com.yxt.anrui.flowable.api.sysformlink.SysFormLinkFeign
+ * Description: 流程业务关联表.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2022-03-15 16:55:39
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@Api(tags = "流程业务关联表")
+@FeignClient(
+ contextId = "anrui-flowable-SysFormLink",
+ name = "anrui-flowable",
+ path = "v1/sysformlink",
+ fallback = SysFormLinkFeignFallback.class)
+public interface SysFormLinkFeign {
+
+ @ApiOperation("保存流程业务关联表(任务发起时)")
+ @PostMapping("/save")
+ ResultBean save(@Valid @RequestBody SysFormLinkDto dto);
+
+ @ApiOperation("根据业务sid查询节点状态")
+ @GetMapping("/selectStateByBusinessSid/{business}")
+ ResultBean selectStateByBusinessSid(@PathVariable("business") String business);
+
+ @ApiOperation("更新关联表节点状态属性")
+ @PostMapping("/updateFiled")
+ ResultBean updateFiled(@RequestBody Map map);
+
+ @ApiOperation("更新关联表节点状态属性")
+ @PostMapping("/selectByBusinessSid/{sid}")
+ ResultBean selectByBusinessSid(@PathVariable("sid") String sid);
+}
\ No newline at end of file
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkFeignFallback.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkFeignFallback.java
new file mode 100644
index 00000000..8ee3fa33
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkFeignFallback.java
@@ -0,0 +1,43 @@
+package com.yxt.anrui.flowable.api.sysformlink;
+
+import com.yxt.common.core.result.ResultBean;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * Project: anrui-flowable(流程引擎)
+ * File: SysFormLinkFeignFallback.java
+ * Class: com.yxt.anrui.flowable.api.sysformlink.SysFormLinkFeignFallback
+ * Description: 流程业务关联表.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2022-03-15 16:55:39
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@Component
+public class SysFormLinkFeignFallback implements SysFormLinkFeign {
+
+ @Override
+ public ResultBean save(SysFormLinkDto dto) {
+ return ResultBean.fireFail().setMsg("接口anrui-flowable/sysformlink/save无法访问");
+ }
+
+ @Override
+ public ResultBean selectStateByBusinessSid(String business) {
+ return ResultBean.fireFail().setMsg("接口anrui-flowable/sysformlink/selectStateByBusinessSid无法访问");
+ }
+
+ @Override
+ public ResultBean updateFiled(Map map) {
+ return ResultBean.fireFail().setMsg("接口anrui-flowable/sysformlink/updateFiled无法访问");
+ }
+
+ @Override
+ public ResultBean selectByBusinessSid(String sid) {
+ return ResultBean.fireFail().setMsg("接口anrui-flowable/sysformlink/selectBySid无法访问");
+ }
+}
\ No newline at end of file
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkFlowStateEnum.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkFlowStateEnum.java
new file mode 100644
index 00000000..2c139cc8
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkFlowStateEnum.java
@@ -0,0 +1,46 @@
+package com.yxt.anrui.flowable.api.sysformlink;
+
+/**
+ * @author liuguohui
+ * @version 1.0
+ * @Description: 流程状态枚举类
+ * @date 2022/03/15
+ */
+public enum SysFormLinkFlowStateEnum {
+
+/* UNCOMMITTED("0", "待提交"),
+ PROCESSING("1", "办理中"),
+ FINISH("2", "已办结"),
+ REJECT("-1", "退回到发起人"),
+ BREAK("-2", "已终止")*/
+ /* START("0", "发起(重新发起)"),
+ AGREE("1", "同意"),
+ REJECT("2", "驳回"),
+ WITHDRAW("3", "撤回"),
+ STOP("4", "终止"),
+ SETTLE("5", "办结")*/
+ ;
+ // 发起(重新发起)、同意、驳回、撤回、终止
+ /**
+ * 流程类型名称
+ */
+ private final String code;
+
+ /**
+ * 流程代号
+ */
+ private final String state;
+
+ SysFormLinkFlowStateEnum(String code, String state) {
+ this.code = code;
+ this.state = state;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public String getState() {
+ return state;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkQuery.java
new file mode 100644
index 00000000..a9dddf63
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkQuery.java
@@ -0,0 +1,41 @@
+package com.yxt.anrui.flowable.api.sysformlink;
+
+
+import com.yxt.common.core.query.Query;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Project: anrui-flowable(流程引擎)
+ * File: SysFormLinkQuery.java
+ * Class: com.yxt.anrui.flowable.api.sysformlink.SysFormLinkQuery
+ * Description: 流程业务关联表 查询条件.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2022-03-15 16:55:39
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@ApiModel(value = "流程业务关联表 查询条件", description = "流程业务关联表 查询条件")
+@Data
+public class SysFormLinkQuery implements Query {
+
+
+ @ApiModelProperty("业务sid")
+ private String businessSid;
+
+ @ApiModelProperty("流程实例id")
+ private String procInsId;
+
+ @ApiModelProperty("节点状态")
+ private String nodeState;
+
+ @ApiModelProperty("状态判断:0未提交,1办理中, 2已办结, -1退回到发起人,-2终止")
+ private Integer flowState;
+
+ @ApiModelProperty("业务类型(见SysFormLinkTypeEnum枚举类)")
+ private String formType;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkTypeEnum.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkTypeEnum.java
new file mode 100644
index 00000000..d88e9a17
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkTypeEnum.java
@@ -0,0 +1,40 @@
+package com.yxt.anrui.flowable.api.sysformlink;
+
+/**
+ * @author liuguohui
+ * @version 1.0
+ * @Description: 流程业务关联表 类型枚举类
+ * @date 2022/03/14
+ */
+public enum SysFormLinkTypeEnum {
+
+ ORDER_DEPOSIT_VEHICLE("0001", "虚拟订单审批"),
+ CAR_SALE_CONTRACT("0002", "新车买卖合同审核"),
+ ADVANCE_GINVOICEAPPLY("0003", "提前开票审批"),
+ VEHICLE_APPLY("0004", "排产申请审批"),
+ BASE_OUTSOURCING_APPLICATION("0005", "外采申请审批"),
+ ;
+
+ /**
+ * 类型代号
+ */
+ private final String code;
+
+ /**
+ * 类型名称
+ */
+ private final String type;
+
+ SysFormLinkTypeEnum(String code, String type) {
+ this.code = code;
+ this.type = type;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public String getType() {
+ return type;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkVo.java
new file mode 100644
index 00000000..eb5dde29
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormLinkVo.java
@@ -0,0 +1,44 @@
+package com.yxt.anrui.flowable.api.sysformlink;
+
+
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Project: anrui-flowable(流程引擎)
+ * File: SysFormLinkVo.java
+ * Class: com.yxt.anrui.flowable.api.sysformlink.SysFormLinkVo
+ * Description: 流程业务关联表 视图数据对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2022-03-15 16:55:39
+ *
+ * @author liupopo
+ * @version 1.0
+ * @since 1.0
+ */
+@ApiModel(value = "流程业务关联表 视图数据对象", description = "流程业务关联表 视图数据对象")
+@Data
+public class SysFormLinkVo implements Vo {
+
+
+ @ApiModelProperty("业务sid")
+ private String businessSid;
+
+ @ApiModelProperty("流程实例id")
+ private String procInsId;
+
+ @ApiModelProperty("节点id")
+ private String taskDefKey;
+
+ @ApiModelProperty("节点状态")
+ private String nodeState;
+
+ @ApiModelProperty("状态判断:0未提交,1办理中, 2已办结, -1退回到发起人,-2终止")
+ private Integer flowState;
+
+ @ApiModelProperty("业务类型(见SysFormLinkTypeEnum枚举类)")
+ private String formType;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormStateVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormStateVo.java
new file mode 100644
index 00000000..190e035b
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysformlink/SysFormStateVo.java
@@ -0,0 +1,23 @@
+package com.yxt.anrui.flowable.api.sysformlink;
+
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author liuguohui
+ * @version 1.0
+ * @description
+ * @date 2022/03/15
+ */
+@ApiModel("流程状态")
+@Data
+public class SysFormStateVo implements Vo {
+
+ @ApiModelProperty("节点状态")
+ private String nodeState;
+
+ @ApiModelProperty("状态判断:0未提交,1办理中, 2已办结, -1退回到发起人,-2终止")
+ private Integer flowState;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/AppSysProUrlQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/AppSysProUrlQuery.java
new file mode 100644
index 00000000..363e2579
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/AppSysProUrlQuery.java
@@ -0,0 +1,27 @@
+package com.yxt.anrui.flowable.api.sysprourl;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author liuguohui
+ * @version 1.0
+ * @description
+ * @date 2022/03/18
+ */
+@Data
+public class AppSysProUrlQuery extends SysProUrlQuery{
+
+ @NotBlank(message = "业务sid不能为空")
+ private String businessSid;
+
+ @NotBlank(message = "任务id不能为空")
+ private String taskId;
+
+ @NotBlank(message = "流程部署编号不能为空")
+ private String deployId;
+
+ @NotBlank(message = "流程实例id不能为空")
+ private String procInsId;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/AppUrlVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/AppUrlVo.java
new file mode 100644
index 00000000..f4d40da7
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/AppUrlVo.java
@@ -0,0 +1,41 @@
+package com.yxt.anrui.flowable.api.sysprourl;
+
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author liuguohui
+ * @version 1.0
+ * @description
+ * @date 2022/03/18
+ */
+@ApiModel("app端待办、已办返回url")
+@Data
+public class AppUrlVo implements Vo {
+
+ @ApiModelProperty(name = "app路径")
+ private String path;
+
+ @ApiModelProperty(name = "插件名称")
+ private String modulePluginName;
+
+ @ApiModelProperty(name = "插件版本")
+ private Integer moduleVersion;
+
+ @ApiModelProperty(name = "msgSid")
+ private String msgSid;
+
+ @ApiModelProperty(name = "json 串(procInsId,businessSid,deployId,taskId)")
+ private String json;
+
+ @ApiModelProperty(name = "类型,0.内置Activity 1.内置WebView 2.RePlugin插件")
+ private String type;
+
+ @ApiModelProperty(name = "跳转实体类路径")
+ private String moduleAction;
+
+ @ApiModelProperty(name = "moduleSid")
+ private String moduleSid;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/PcUrlVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/PcUrlVo.java
new file mode 100644
index 00000000..e6cafd31
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/PcUrlVo.java
@@ -0,0 +1,20 @@
+package com.yxt.anrui.flowable.api.sysprourl;
+
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author liuguohui
+ * @version 1.0
+ * @description
+ * @date 2022/03/18
+ */
+@ApiModel("pc端待办、已办返回url")
+@Data
+public class PcUrlVo implements Vo {
+
+ @ApiModelProperty(name = "url")
+ private String url;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrl.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrl.java
new file mode 100644
index 00000000..77670f52
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrl.java
@@ -0,0 +1,65 @@
+package com.yxt.anrui.flowable.api.sysprourl;
+
+import com.yxt.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 流程表单对象 Sys_Pro_Url
+ *
+ * @author XuanXuan Xuan
+ * @date 2021-03-30
+ */
+@ApiModel(value = "流程业务表单url对象", description = "流程业务表单url对象")
+@Data
+public class SysProUrl extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * url
+ */
+ @ApiModelProperty(name = "url")
+ private String url;
+
+ /**
+ * 类型办理或者详情
+ */
+ @ApiModelProperty(name = "类型办理或者详情")
+ private String type;
+
+ /**
+ * 终端:pc/mobile
+ */
+ @ApiModelProperty(name = "终端:pc/mobile")
+ private String terminal;
+ /**
+ * 表单id
+ */
+ @ApiModelProperty(name = "表单id")
+ private String formId;
+ /**
+ * 名称
+ */
+ @ApiModelProperty(name = "名称")
+ private String title;
+ /**
+ * 流程定义id
+ */
+ @ApiModelProperty(name = "流程定义id")
+ private String proc_def_id;
+
+ /**
+ * 节点
+ */
+ @ApiModelProperty(name = "节点id")
+ private String taskDefKey;
+
+ /**
+ * app插件名称(模块名称)
+ */
+ private String modulePluginName;
+
+ @ApiModelProperty(value = "环节名称")
+ private String taskName;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlDto.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlDto.java
new file mode 100644
index 00000000..196da35d
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlDto.java
@@ -0,0 +1,62 @@
+package com.yxt.anrui.flowable.api.sysprourl;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 流程业务表单url对象
+ */
+@ApiModel("流程业务表单url对象")
+@Data
+public class SysProUrlDto implements Serializable {
+
+ private static final long serialVersionUID = -2191041848170198498L;
+ @ApiModelProperty(value = "sid")
+ private String sid;
+ /**
+ * url
+ */
+ @ApiModelProperty(value = "办理或详情的url")
+ private String url;
+
+ /**
+ * 类型办理或者详情
+ */
+ @ApiModelProperty(value = "办理:1,详情2")
+ private String type;
+
+ /**
+ * 终端:pc/mobile
+ */
+ @ApiModelProperty(value = "pc端:1,移动端2")
+ private String terminal;
+ /**
+ * 名称
+ */
+ @ApiModelProperty(value = "名称")
+ private String title;
+ /**
+ * 流程定义id
+ */
+ @ApiModelProperty(value = "流程定义id")
+ private String proc_def_id;
+
+ /**
+ * 节点
+ */
+ @ApiModelProperty(value = "节点id")
+ private String taskDefKey;
+
+ /**
+ * app插件名称(模块名称)
+ */
+ @ApiModelProperty(value = "app版本sid#类型(1框架2插件)")
+ private String modulePluginName;
+
+ @ApiModelProperty(value = "环节名称")
+ private String taskName;
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlFeign.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlFeign.java
new file mode 100644
index 00000000..225b9909
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlFeign.java
@@ -0,0 +1,89 @@
+package com.yxt.anrui.flowable.api.sysprourl;
+
+import com.yxt.common.core.query.PagerQuery;
+import com.yxt.common.core.result.ResultBean;
+import com.yxt.common.core.vo.PagerVo;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.cloud.openfeign.SpringQueryMap;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@FeignClient(
+ contextId = "anrui-flowable-SysProUrlFeign",
+ name = "anrui-flowable",
+ path = "v1/flowable/proUrl",
+ fallback = SysProUrlFeignFallBack.class)
+public interface SysProUrlFeign {
+ /**
+ * 查询流程业务表单url对 象
+ */
+ @PostMapping("/list")
+ public ResultBean> list(@RequestBody PagerQuery pq);
+
+
+ /**
+ * 获取流程业务表单url对象
+ */
+ @GetMapping(value = "/getSysProUrl/{formId}")
+ public ResultBean getSysProUrl(@PathVariable("formId") int formId);
+
+ /**
+ * 根据流程实例id获取form信息
+ */
+ @GetMapping(value = "/getForm/{proId}")
+ public ResultBean getForm(@PathVariable("proId") String proId);
+
+ /**
+ * 新增流程业务表单url对象
+ */
+ @PostMapping(value = "/add")
+ public ResultBean add(@SpringQueryMap SysProUrlDto dto);
+
+ /**
+ * 删除流程业务表单url对象
+ */
+ @DeleteMapping("/{formIds}")
+ public ResultBean remove(@PathVariable("formIds") Long[] formIds);
+
+ @ApiOperation("pc根据流程定义id,节点id,终端及类型查询流程与业务表单url")
+ @PostMapping("/selectPcUrlByTaskDefKey")
+ ResultBean selectPcUrlByTaskDefKey(@Valid @RequestBody SysProUrlQuery query);
+
+ @ApiOperation("app根据流程定义id,节点id,终端及类型查询流程与业务表单url")
+ @PostMapping("/selectAppUrlByTaskDefKey")
+ ResultBean selectAppUrlByTaskDefKey(@Valid @RequestBody AppSysProUrlQuery query);
+
+
+ /**
+ * pc根据流程定义id,节点id,终端及类型查询流程与业务表单url
+ *
+ * @param procDefId 流程定义id
+ * @param taskDefKey 节点id
+ * @param type 类型:1办理,2详情
+ * @return
+ */
+ @ApiOperation("查询流程与业务表单的url")
+ @GetMapping("/selectUrlByKey")
+ ResultBean> selectUrlByKey(@ApiParam(value = "流程定义id") @RequestParam(value = "procDefId") String procDefId,
+ @ApiParam(value = "节点id") @RequestParam(value = "taskDefKey") String taskDefKey,
+ @ApiParam(value = "类型:1办理,2详情") @RequestParam(value = "type") String type);
+ /**
+ * pc根据流程定义id,节点id,终端及类型查询流程与业务表单url
+ *
+ * @param procDefId 流程定义id
+ * @param taskDefKey 节点id
+ * @param type 类型:1办理,2详情
+ * @return
+ */
+ @ApiOperation("查询流程与业务表单的url")
+ @GetMapping("/selectUrlByKeyWithTerminal")
+ ResultBean selectUrlByKey(@ApiParam(value = "流程定义id") @RequestParam(value = "procDefId") String procDefId,
+ @ApiParam(value = "节点id") @RequestParam(value = "taskDefKey") String taskDefKey,
+ @ApiParam(value = "类型:1办理,2详情") @RequestParam(value = "type") String type
+ ,@ApiParam(value = "终端:1pc,2移动") @RequestParam(value = "terminal") String terminal);
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlFeignFallBack.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlFeignFallBack.java
new file mode 100644
index 00000000..d9af05be
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlFeignFallBack.java
@@ -0,0 +1,62 @@
+package com.yxt.anrui.flowable.api.sysprourl;
+
+import com.yxt.common.core.query.PagerQuery;
+import com.yxt.common.core.result.ResultBean;
+import com.yxt.common.core.vo.PagerVo;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author dimengzhe
+ * @date 2021/8/20 15:43
+ * @description
+ */
+@Component
+public class SysProUrlFeignFallBack implements SysProUrlFeign {
+
+ @Override
+ public ResultBean> list(PagerQuery pq) {
+ return null;
+ }
+
+ @Override
+ public ResultBean getSysProUrl(int formSid) {
+ return null;
+ }
+
+ @Override
+ public ResultBean getForm(String proId) {
+ return null;
+ }
+
+ @Override
+ public ResultBean add(SysProUrlDto dto) {
+ return null;
+ }
+
+ @Override
+ public ResultBean remove(Long[] formIds) {
+ return null;
+ }
+
+ @Override
+ public ResultBean selectPcUrlByTaskDefKey(SysProUrlQuery query) {
+ return null;
+ }
+
+ @Override
+ public ResultBean selectAppUrlByTaskDefKey(AppSysProUrlQuery query) {
+ return null;
+ }
+
+ @Override
+ public ResultBean> selectUrlByKey(String procDefId, String taskDefKey, String type) {
+ return null;
+ }
+
+ @Override
+ public ResultBean selectUrlByKey(String procDefId, String taskDefKey, String type,String terminal) {
+ return null;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlQuery.java
new file mode 100644
index 00000000..e10167b6
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlQuery.java
@@ -0,0 +1,60 @@
+package com.yxt.anrui.flowable.api.sysprourl;
+
+import com.yxt.common.core.query.Query;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 流程表单对象 sys_task_form
+ *
+ * @author XuanXuan Xuan
+ * @date 2021-03-30
+ */
+@Data
+public class SysProUrlQuery implements Query {
+
+
+ /**
+ * 表单主键
+ */
+ private String url;
+
+ /**
+ * 类型办理或者详情
+ */
+ @NotBlank(message = "类型不能为空")
+ private String type;
+
+ /**
+ * 终端:pc/mobile
+ */
+ private String terminal;
+ /**
+ * 表单id
+ */
+ private String formId;
+ /**
+ * 名称
+ */
+ private String title;
+ /**
+ * 流程定义id
+ */
+ @ApiModelProperty(name = "流程定义id")
+ @NotBlank(message = "流程定义id不能为空")
+ private String proc_def_id;
+
+ /**
+ * 节点
+ */
+ @ApiModelProperty(name = "节点id")
+ @NotBlank(message = "节点id不能为空")
+ private String taskDefKey;
+
+ /**
+ * app插件名称(模块名称)
+ */
+ private String modulePluginName;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlVo.java
new file mode 100644
index 00000000..1d81dc34
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/sysprourl/SysProUrlVo.java
@@ -0,0 +1,54 @@
+package com.yxt.anrui.flowable.api.sysprourl;
+
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 流程业务表单url对象 SysProUrl
+ *
+ * @author XuanXuan Xuan
+ * @date 2021-03-30
+ */
+@Data
+@ApiModel("流程业务表单url对象")
+public class SysProUrlVo implements Vo {
+
+ /**
+ * 表单主键
+ */
+ private String url;
+
+ /**
+ * 类型办理或者详情
+ */
+ private String type;
+
+ /**
+ * 终端:pc/mobile
+ */
+ private String terminal;
+ /**
+ * 表单id
+ */
+ private String formId;
+ /**
+ * 名称
+ */
+ private String title;
+
+ /**
+ * 流程定义id
+ */
+ private String proc_def_id;
+
+ /**
+ * 节点id
+ */
+ private String taskDefKey;
+
+ /**
+ * app插件名称(模块名称)
+ */
+ private String modulePluginName;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/CharsetKit.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/CharsetKit.java
new file mode 100644
index 00000000..a036c9ab
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/CharsetKit.java
@@ -0,0 +1,88 @@
+package com.yxt.anrui.flowable.api.utils;
+
+
+import com.yxt.common.base.utils.StringUtils;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 字符集工具类
+ *
+ * @author ruoyi
+ */
+public class CharsetKit
+{
+ /** ISO-8859-1 */
+ public static final String ISO_8859_1 = "ISO-8859-1";
+ /** UTF-8 */
+ public static final String UTF_8 = "UTF-8";
+ /** GBK */
+ public static final String GBK = "GBK";
+
+ /** ISO-8859-1 */
+ public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1);
+ /** UTF-8 */
+ public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8);
+ /** GBK */
+ public static final Charset CHARSET_GBK = Charset.forName(GBK);
+
+ /**
+ * 转换为Charset对象
+ *
+ * @param charset 字符集,为空则返回默认字符集
+ * @return Charset
+ */
+ public static Charset charset(String charset)
+ {
+ return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset);
+ }
+
+ /**
+ * 转换字符串的字符集编码
+ *
+ * @param source 字符串
+ * @param srcCharset 源字符集,默认ISO-8859-1
+ * @param destCharset 目标字符集,默认UTF-8
+ * @return 转换后的字符集
+ */
+ public static String convert(String source, String srcCharset, String destCharset)
+ {
+ return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset));
+ }
+
+ /**
+ * 转换字符串的字符集编码
+ *
+ * @param source 字符串
+ * @param srcCharset 源字符集,默认ISO-8859-1
+ * @param destCharset 目标字符集,默认UTF-8
+ * @return 转换后的字符集
+ */
+ public static String convert(String source, Charset srcCharset, Charset destCharset)
+ {
+ if (null == srcCharset)
+ {
+ srcCharset = StandardCharsets.ISO_8859_1;
+ }
+
+ if (null == destCharset)
+ {
+ destCharset = StandardCharsets.UTF_8;
+ }
+
+ if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset))
+ {
+ return source;
+ }
+ return new String(source.getBytes(srcCharset), destCharset);
+ }
+
+ /**
+ * @return 系统字符集编码
+ */
+ public static String systemCharset()
+ {
+ return Charset.defaultCharset().name();
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/Convert.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/Convert.java
new file mode 100644
index 00000000..ace74bd2
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/Convert.java
@@ -0,0 +1,1006 @@
+package com.yxt.anrui.flowable.api.utils;
+
+import com.yxt.common.base.utils.StringUtils;
+import org.apache.commons.lang3.ArrayUtils;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.text.NumberFormat;
+import java.util.Set;
+
+/**
+ * 类型转换器
+ *
+ * @author ruoyi
+ */
+public class Convert
+{
+ /**
+ * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static String toStr(Object value, String defaultValue)
+ {
+ if (null == value)
+ {
+ return defaultValue;
+ }
+ if (value instanceof String)
+ {
+ return (String) value;
+ }
+ return value.toString();
+ }
+
+ /**
+ * 转换为字符串
+ * 如果给定的值为null
,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static String toStr(Object value)
+ {
+ return toStr(value, null);
+ }
+
+ /**
+ * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Character toChar(Object value, Character defaultValue)
+ {
+ if (null == value)
+ {
+ return defaultValue;
+ }
+ if (value instanceof Character)
+ {
+ return (Character) value;
+ }
+
+ final String valueStr = toStr(value, null);
+ return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
+ }
+
+ /**
+ * 转换为字符
+ * 如果给定的值为null
,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Character toChar(Object value)
+ {
+ return toChar(value, null);
+ }
+
+ /**
+ * 转换为byte
+ * 如果给定的值为null
,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Byte toByte(Object value, Byte defaultValue)
+ {
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ if (value instanceof Byte)
+ {
+ return (Byte) value;
+ }
+ if (value instanceof Number)
+ {
+ return ((Number) value).byteValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr))
+ {
+ return defaultValue;
+ }
+ try
+ {
+ return Byte.parseByte(valueStr);
+ }
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为byte
+ * 如果给定的值为null
,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Byte toByte(Object value)
+ {
+ return toByte(value, null);
+ }
+
+ /**
+ * 转换为Short
+ * 如果给定的值为null
,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Short toShort(Object value, Short defaultValue)
+ {
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ if (value instanceof Short)
+ {
+ return (Short) value;
+ }
+ if (value instanceof Number)
+ {
+ return ((Number) value).shortValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr))
+ {
+ return defaultValue;
+ }
+ try
+ {
+ return Short.parseShort(valueStr.trim());
+ }
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为Short
+ * 如果给定的值为null
,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Short toShort(Object value)
+ {
+ return toShort(value, null);
+ }
+
+ /**
+ * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Number toNumber(Object value, Number defaultValue)
+ {
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ if (value instanceof Number)
+ {
+ return (Number) value;
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr))
+ {
+ return defaultValue;
+ }
+ try
+ {
+ return NumberFormat.getInstance().parse(valueStr);
+ }
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Number toNumber(Object value)
+ {
+ return toNumber(value, null);
+ }
+
+ /**
+ * 转换为int
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Integer toInt(Object value, Integer defaultValue)
+ {
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ if (value instanceof Integer)
+ {
+ return (Integer) value;
+ }
+ if (value instanceof Number)
+ {
+ return ((Number) value).intValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr))
+ {
+ return defaultValue;
+ }
+ try
+ {
+ return Integer.parseInt(valueStr.trim());
+ }
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为int
+ * 如果给定的值为null
,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Integer toInt(Object value)
+ {
+ return toInt(value, null);
+ }
+
+ /**
+ * 转换为Integer数组
+ *
+ * @param str 被转换的值
+ * @return 结果
+ */
+ public static Integer[] toIntArray(String str)
+ {
+ return toIntArray(",", str);
+ }
+
+ /**
+ * 转换为Long数组
+ *
+ * @param str 被转换的值
+ * @return 结果
+ */
+ public static Long[] toLongArray(String str)
+ {
+ return toLongArray(",", str);
+ }
+
+ /**
+ * 转换为Integer数组
+ *
+ * @param split 分隔符
+ * @param split 被转换的值
+ * @return 结果
+ */
+ public static Integer[] toIntArray(String split, String str)
+ {
+ if (StringUtils.isEmpty(str))
+ {
+ return new Integer[] {};
+ }
+ String[] arr = str.split(split);
+ final Integer[] ints = new Integer[arr.length];
+ for (int i = 0; i < arr.length; i++)
+ {
+ final Integer v = toInt(arr[i], 0);
+ ints[i] = v;
+ }
+ return ints;
+ }
+
+ /**
+ * 转换为Long数组
+ *
+ * @param split 分隔符
+ * @param str 被转换的值
+ * @return 结果
+ */
+ public static Long[] toLongArray(String split, String str)
+ {
+ if (StringUtils.isEmpty(str))
+ {
+ return new Long[] {};
+ }
+ String[] arr = str.split(split);
+ final Long[] longs = new Long[arr.length];
+ for (int i = 0; i < arr.length; i++)
+ {
+ final Long v = toLong(arr[i], null);
+ longs[i] = v;
+ }
+ return longs;
+ }
+
+ /**
+ * 转换为String数组
+ *
+ * @param str 被转换的值
+ * @return 结果
+ */
+ public static String[] toStrArray(String str)
+ {
+ return toStrArray(",", str);
+ }
+
+ /**
+ * 转换为String数组
+ *
+ * @param split 分隔符
+ * @param split 被转换的值
+ * @return 结果
+ */
+ public static String[] toStrArray(String split, String str)
+ {
+ return str.split(split);
+ }
+
+ /**
+ * 转换为long
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Long toLong(Object value, Long defaultValue)
+ {
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ if (value instanceof Long)
+ {
+ return (Long) value;
+ }
+ if (value instanceof Number)
+ {
+ return ((Number) value).longValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr))
+ {
+ return defaultValue;
+ }
+ try
+ {
+ // 支持科学计数法
+ return new BigDecimal(valueStr.trim()).longValue();
+ }
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为long
+ * 如果给定的值为null
,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Long toLong(Object value)
+ {
+ return toLong(value, null);
+ }
+
+ /**
+ * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Double toDouble(Object value, Double defaultValue)
+ {
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ if (value instanceof Double)
+ {
+ return (Double) value;
+ }
+ if (value instanceof Number)
+ {
+ return ((Number) value).doubleValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr))
+ {
+ return defaultValue;
+ }
+ try
+ {
+ // 支持科学计数法
+ return new BigDecimal(valueStr.trim()).doubleValue();
+ }
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Double toDouble(Object value)
+ {
+ return toDouble(value, null);
+ }
+
+ /**
+ * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Float toFloat(Object value, Float defaultValue)
+ {
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ if (value instanceof Float)
+ {
+ return (Float) value;
+ }
+ if (value instanceof Number)
+ {
+ return ((Number) value).floatValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr))
+ {
+ return defaultValue;
+ }
+ try
+ {
+ return Float.parseFloat(valueStr.trim());
+ }
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Float toFloat(Object value)
+ {
+ return toFloat(value, null);
+ }
+
+ /**
+ * 转换为boolean
+ * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Boolean toBool(Object value, Boolean defaultValue)
+ {
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ if (value instanceof Boolean)
+ {
+ return (Boolean) value;
+ }
+ String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr))
+ {
+ return defaultValue;
+ }
+ valueStr = valueStr.trim().toLowerCase();
+ switch (valueStr)
+ {
+ case "true":
+ return true;
+ case "false":
+ return false;
+ case "yes":
+ return true;
+ case "ok":
+ return true;
+ case "no":
+ return false;
+ case "1":
+ return true;
+ case "0":
+ return false;
+ default:
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为boolean
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Boolean toBool(Object value)
+ {
+ return toBool(value, null);
+ }
+
+ /**
+ * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值
+ *
+ * @param clazz Enum的Class
+ * @param value 值
+ * @param defaultValue 默认值
+ * @return Enum
+ */
+ public static > E toEnum(Class clazz, Object value, E defaultValue)
+ {
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ if (clazz.isAssignableFrom(value.getClass()))
+ {
+ @SuppressWarnings("unchecked")
+ E myE = (E) value;
+ return myE;
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr))
+ {
+ return defaultValue;
+ }
+ try
+ {
+ return Enum.valueOf(clazz, valueStr);
+ }
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ *
+ * @param clazz Enum的Class
+ * @param value 值
+ * @return Enum
+ */
+ public static > E toEnum(Class clazz, Object value)
+ {
+ return toEnum(clazz, value, null);
+ }
+
+ /**
+ * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static BigInteger toBigInteger(Object value, BigInteger defaultValue)
+ {
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ if (value instanceof BigInteger)
+ {
+ return (BigInteger) value;
+ }
+ if (value instanceof Long)
+ {
+ return BigInteger.valueOf((Long) value);
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr))
+ {
+ return defaultValue;
+ }
+ try
+ {
+ return new BigInteger(valueStr);
+ }
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static BigInteger toBigInteger(Object value)
+ {
+ return toBigInteger(value, null);
+ }
+
+ /**
+ * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue)
+ {
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ if (value instanceof BigDecimal)
+ {
+ return (BigDecimal) value;
+ }
+ if (value instanceof Long)
+ {
+ return new BigDecimal((Long) value);
+ }
+ if (value instanceof Double)
+ {
+ return new BigDecimal((Double) value);
+ }
+ if (value instanceof Integer)
+ {
+ return new BigDecimal((Integer) value);
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr))
+ {
+ return defaultValue;
+ }
+ try
+ {
+ return new BigDecimal(valueStr);
+ }
+ catch (Exception e)
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static BigDecimal toBigDecimal(Object value)
+ {
+ return toBigDecimal(value, null);
+ }
+
+ /**
+ * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
+ *
+ * @param obj 对象
+ * @return 字符串
+ */
+ public static String utf8Str(Object obj)
+ {
+ return str(obj, CharsetKit.CHARSET_UTF_8);
+ }
+
+ /**
+ * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
+ *
+ * @param obj 对象
+ * @param charsetName 字符集
+ * @return 字符串
+ */
+ public static String str(Object obj, String charsetName)
+ {
+ return str(obj, Charset.forName(charsetName));
+ }
+
+ /**
+ * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
+ *
+ * @param obj 对象
+ * @param charset 字符集
+ * @return 字符串
+ */
+ public static String str(Object obj, Charset charset)
+ {
+ if (null == obj)
+ {
+ return null;
+ }
+
+ if (obj instanceof String)
+ {
+ return (String) obj;
+ }
+ else if (obj instanceof byte[])
+ {
+ return str((byte[]) obj, charset);
+ }
+ else if (obj instanceof Byte[])
+ {
+ byte[] bytes = ArrayUtils.toPrimitive((Byte[]) obj);
+ return str(bytes, charset);
+ }
+ else if (obj instanceof ByteBuffer)
+ {
+ return str((ByteBuffer) obj, charset);
+ }
+ return obj.toString();
+ }
+
+ /**
+ * 将byte数组转为字符串
+ *
+ * @param bytes byte数组
+ * @param charset 字符集
+ * @return 字符串
+ */
+ public static String str(byte[] bytes, String charset)
+ {
+ return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
+ }
+
+ /**
+ * 解码字节码
+ *
+ * @param data 字符串
+ * @param charset 字符集,如果此字段为空,则解码的结果取决于平台
+ * @return 解码后的字符串
+ */
+ public static String str(byte[] data, Charset charset)
+ {
+ if (data == null)
+ {
+ return null;
+ }
+
+ if (null == charset)
+ {
+ return new String(data);
+ }
+ return new String(data, charset);
+ }
+
+ /**
+ * 将编码的byteBuffer数据转换为字符串
+ *
+ * @param data 数据
+ * @param charset 字符集,如果为空使用当前系统字符集
+ * @return 字符串
+ */
+ public static String str(ByteBuffer data, String charset)
+ {
+ if (data == null)
+ {
+ return null;
+ }
+
+ return str(data, Charset.forName(charset));
+ }
+
+ /**
+ * 将编码的byteBuffer数据转换为字符串
+ *
+ * @param data 数据
+ * @param charset 字符集,如果为空使用当前系统字符集
+ * @return 字符串
+ */
+ public static String str(ByteBuffer data, Charset charset)
+ {
+ if (null == charset)
+ {
+ charset = Charset.defaultCharset();
+ }
+ return charset.decode(data).toString();
+ }
+
+ // ----------------------------------------------------------------------- 全角半角转换
+ /**
+ * 半角转全角
+ *
+ * @param input String.
+ * @return 全角字符串.
+ */
+ public static String toSBC(String input)
+ {
+ return toSBC(input, null);
+ }
+
+ /**
+ * 半角转全角
+ *
+ * @param input String
+ * @param notConvertSet 不替换的字符集合
+ * @return 全角字符串.
+ */
+ public static String toSBC(String input, Set notConvertSet)
+ {
+ char c[] = input.toCharArray();
+ for (int i = 0; i < c.length; i++)
+ {
+ if (null != notConvertSet && notConvertSet.contains(c[i]))
+ {
+ // 跳过不替换的字符
+ continue;
+ }
+
+ if (c[i] == ' ')
+ {
+ c[i] = '\u3000';
+ }
+ else if (c[i] < '\177')
+ {
+ c[i] = (char) (c[i] + 65248);
+
+ }
+ }
+ return new String(c);
+ }
+
+ /**
+ * 全角转半角
+ *
+ * @param input String.
+ * @return 半角字符串
+ */
+ public static String toDBC(String input)
+ {
+ return toDBC(input, null);
+ }
+
+ /**
+ * 替换全角为半角
+ *
+ * @param text 文本
+ * @param notConvertSet 不替换的字符集合
+ * @return 替换后的字符
+ */
+ public static String toDBC(String text, Set notConvertSet)
+ {
+ char c[] = text.toCharArray();
+ for (int i = 0; i < c.length; i++)
+ {
+ if (null != notConvertSet && notConvertSet.contains(c[i]))
+ {
+ // 跳过不替换的字符
+ continue;
+ }
+
+ if (c[i] == '\u3000')
+ {
+ c[i] = ' ';
+ }
+ else if (c[i] > '\uFF00' && c[i] < '\uFF5F')
+ {
+ c[i] = (char) (c[i] - 65248);
+ }
+ }
+ String returnString = new String(c);
+
+ return returnString;
+ }
+
+ /**
+ * 数字金额大写转换 先写个完整的然后将如零拾替换成零
+ *
+ * @param n 数字
+ * @return 中文大写数字
+ */
+ public static String digitUppercase(double n)
+ {
+ String[] fraction = { "角", "分" };
+ String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
+ String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } };
+
+ String head = n < 0 ? "负" : "";
+ n = Math.abs(n);
+
+ String s = "";
+ for (int i = 0; i < fraction.length; i++)
+ {
+ s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
+ }
+ if (s.length() < 1)
+ {
+ s = "整";
+ }
+ int integerPart = (int) Math.floor(n);
+
+ for (int i = 0; i < unit[0].length && integerPart > 0; i++)
+ {
+ String p = "";
+ for (int j = 0; j < unit[1].length && n > 0; j++)
+ {
+ p = digit[integerPart % 10] + unit[1][j] + p;
+ integerPart = integerPart / 10;
+ }
+ s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
+ }
+ return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/Excel.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/Excel.java
new file mode 100644
index 00000000..0ecfca93
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/Excel.java
@@ -0,0 +1,165 @@
+package com.yxt.anrui.flowable.api.utils;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.math.BigDecimal;
+
+/**
+ * 自定义导出Excel数据注解
+ *
+ * @author ruoyi
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface Excel
+{
+ /**
+ * 导出时在excel中排序
+ */
+ public int sort() default Integer.MAX_VALUE;
+
+ /**
+ * 导出到Excel中的名字.
+ */
+ public String name() default "";
+
+ /**
+ * 日期格式, 如: yyyy-MM-dd
+ */
+ public String dateFormat() default "";
+
+ /**
+ * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
+ */
+ public String dictType() default "";
+
+ /**
+ * 读取内容转表达式 (如: 0=男,1=女,2=未知)
+ */
+ public String readConverterExp() default "";
+
+ /**
+ * 分隔符,读取字符串组内容
+ */
+ public String separator() default ",";
+
+ /**
+ * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
+ */
+ public int scale() default -1;
+
+ /**
+ * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
+ */
+ public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
+
+ /**
+ * 导出类型(0数字 1字符串)
+ */
+ public ColumnType cellType() default ColumnType.STRING;
+
+ /**
+ * 导出时在excel中每个列的高度 单位为字符
+ */
+ public double height() default 14;
+
+ /**
+ * 导出时在excel中每个列的宽 单位为字符
+ */
+ public double width() default 16;
+
+ /**
+ * 文字后缀,如% 90 变成90%
+ */
+ public String suffix() default "";
+
+ /**
+ * 当值为空时,字段的默认值
+ */
+ public String defaultValue() default "";
+
+ /**
+ * 提示信息
+ */
+ public String prompt() default "";
+
+ /**
+ * 设置只能选择不能输入的列内容.
+ */
+ public String[] combo() default {};
+
+ /**
+ * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
+ */
+ public boolean isExport() default true;
+
+ /**
+ * 另一个类中的属性名称,支持多级获取,以小数点隔开
+ */
+ public String targetAttr() default "";
+
+ /**
+ * 是否自动统计数据,在最后追加一行统计数据总和
+ */
+ public boolean isStatistics() default false;
+
+ /**
+ * 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右)
+ */
+ Align align() default Align.AUTO;
+
+ public enum Align
+ {
+ AUTO(0), LEFT(1), CENTER(2), RIGHT(3);
+ private final int value;
+
+ Align(int value)
+ {
+ this.value = value;
+ }
+
+ public int value()
+ {
+ return this.value;
+ }
+ }
+
+ /**
+ * 字段类型(0:导出导入;1:仅导出;2:仅导入)
+ */
+ Type type() default Type.ALL;
+
+ public enum Type
+ {
+ ALL(0), EXPORT(1), IMPORT(2);
+ private final int value;
+
+ Type(int value)
+ {
+ this.value = value;
+ }
+
+ public int value()
+ {
+ return this.value;
+ }
+ }
+
+ public enum ColumnType
+ {
+ NUMERIC(0), STRING(1), IMAGE(2);
+ private final int value;
+
+ ColumnType(int value)
+ {
+ this.value = value;
+ }
+
+ public int value()
+ {
+ return this.value;
+ }
+ }
+}
\ No newline at end of file
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ORDERBY.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ORDERBY.java
new file mode 100644
index 00000000..787ea730
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ORDERBY.java
@@ -0,0 +1,14 @@
+package com.yxt.anrui.flowable.api.utils;
+
+/**
+ * @author bruce.liu
+ * @Description 排序的enum
+ * @time 2021年4月16日
+ */
+public enum ORDERBY {
+ DESC, ASC;
+
+ public ORDERBY reverse() {
+ return (this == ASC) ? DESC : ASC;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java
new file mode 100644
index 00000000..c42914e5
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcDefEnum.java
@@ -0,0 +1,103 @@
+package com.yxt.anrui.flowable.api.utils;
+
+/**
+ * 流程定义:流程名称与代号枚举类
+ */
+public enum ProcDefEnum {
+
+ /***************************正式流程id***********************************/
+
+ ORDERDEPOSITAPPROVE("简易订单-订金收取", "process_pkyns85b:4:575004"),
+ ORDERDEPOSITVEHICLEAPPROVE("简易订单-车辆预定", "process_pkyns85b:5:575008"),
+ ORDERAPPROVE("订单审批", "order_approve_96asleqi:1:227504"),
+ SALESPOLICY("销售政策审批流程", "process_biw9gfh7:2:727504"),//TODO:正式新2022-11-25
+ FINBILLAPPLICATION("开票申请流程", "process_t5ksueur:1:252833"),
+ BUSCENTERADVANCEGINVOICEAPPLY("提前开票申请流程", "advance_ginvoiceapply:1:242664"),
+ ARREARSCARRYVEHICLE("欠款提车审批流程", "process_8ax1xxn3:1:795004"),
+ VEHICLEAPPLY("排产申请流程", "process_9egcg169:12:735004"),//TODO:正式新2022-11-25
+ SCMCARTRANSFER("库存地点变更申请", "process_3bc4p2em:8:725008"), //TODO:正式新2022-11-25
+ BASEVEHICLEACTUALSALES("未售买断", "process_6qx07b75:8:725012"),//ToDo:正式新2022-11-25
+ FINCOSTAPPLY("费用申请", "process_u0pahv0s:6:725016"),//ToDo:正式新2022-11-25
+ FINPAYAPPLY("付款申请", "process_gin2tntb:4:725020"),//ToDo:正式新2022-11-25
+ RECORDAPPLICATION("入库申请", "process_xbwq2c7p:3:675024"),//TODO
+ SCMVEHICLERETURN("采购退库", "process_md8aeoap:2:722508"),//ToDo:正式新2022-11-25
+ SEALAPPLY("盖章申请", "process_7h0z66tp:1:240064"),
+ SALESORDER("销售订单审批流程", "process_p5ils2rn:7:827504"),
+ BASEOUTSOURCINGAPPLICATION("外采申请", "process_5tqysnjc:5:722504"),//ToDo:正式新2022-11-25
+ BASEMODELMODPRICE("车型调价申请", "process_kydcif7k:7:722512"),//ToDo:正式新2022-11-25
+ BASEINTERNALPURCHASE("调车申请", "process_i6luw5xq:3:722516"),//ToDo:正式新2022-11-25
+ BASEACCADJAPPLY("调账申请", "process_r6pyzqoz:2:722520"), //ToDo:正式新2022-11-25
+ BUSDELIVEREDAPPLY("出库申请", "process_wgt1n66l:3:770004"),
+ BASESHUNINVOICAPPLY("调车开票申请", "process_u4xrvaso:1:400008"),
+ BASEVEHINSTALLMODPRICE("上装调价申请", "process_s0a0svth:1:492508"),
+ SCMVEHREBATEWITHAPPLY("单车返利预提申请", "process_qegarc7r:1:535004"),
+ SCMVEHREBATECHECKAPPLY("单车返利核对申请", "process_3xtbbru8:1:560004"),
+ SCMSPECIALREBATEWITHAPPLY("专项返利预提申请", "process_l0yxpgs2:1:590004"),
+ SCMSPECIALREBATECHECKAPPLY("专项返利核对申请", "process_qw22vupn:1:590008"),
+ SCMSPECIALREBATECHEDISTRIBUTE("专项返利分配申请", "process_h3w1aval:1:615004"),
+ SCMCOLLECTIONREBATEWITHAPPLY("回款返利预提申请", "process_k4lodiyg:1:630004"),
+ SCMCOLLECTIONREBATECHECKAPPLY("回款返利核对申请", "process_fgrv1mbv:1:630008"),
+ CONTRACTAPPLY("合同审核", "process_gd8c9xd5:1:545008"),
+ BASEDISPACKAGEAPPLY("优惠包申请流程", "process_l8i6tqho:1:967504"),
+
+
+ /******************************测试流程id*********************************************/
+
+ /*ORDERDEPOSITAPPROVE("简易订单-订金收取", "process_pkyns85b:4:575004"),
+ ORDERDEPOSITVEHICLEAPPROVE("简易订单-车辆预定", "process_pkyns85b:5:575008"),
+ ORDERAPPROVE("订单审批", "order_approve_96asleqi:1:227504"),
+ RECORDAPPLICATION("入库申请", "process_xbwq2c7p:3:675024"),
+ SEALAPPLY("盖章申请", "process_7h0z66tp:1:240064"),
+ SALESORDER("销售订单审批流程", "process_p5ils2rn:7:1123496"),
+ BUSDELIVEREDAPPLY("出库申请", "process_wgt1n66l:2:357504"),
+ BASESHUNINVOICAPPLY("调车开票申请", "process_u4xrvaso:1:400008"),
+ BASEVEHINSTALLMODPRICE("上装调价申请", "process_s0a0svth:1:492508"),
+ SCMVEHREBATEWITHAPPLY("单车返利预提申请", "process_qegarc7r:1:535004"),
+ SCMVEHREBATECHECKAPPLY("单车返利核对申请", "process_3xtbbru8:1:560004"),
+ SCMSPECIALREBATEWITHAPPLY("专项返利预提申请", "process_l0yxpgs2:1:590004"),
+ SCMSPECIALREBATECHECKAPPLY("专项返利核对申请", "process_qw22vupn:1:590008"),
+ SCMSPECIALREBATECHEDISTRIBUTE("专项返利分配申请", "process_h3w1aval:1:615004"),
+ SCMCOLLECTIONREBATEWITHAPPLY("回款返利预提申请", "process_k4lodiyg:1:630004"),
+ SCMCOLLECTIONREBATECHECKAPPLY("回款返利核对申请", "process_fgrv1mbv:1:630008"),
+ CONTRACTAPPLY("合同审核", "process_gd8c9xd5:1:545008"),
+ SCMCARTRANSFER("库存地点变更申请", "process_3bc4p2em:8:860004"), //TODO:测试
+ BASEVEHICLEACTUALSALES("未售买断", "process_6qx07b75:9:852504"),//ToDo:测试
+ VEHICLEAPPLY("排产申请流程", "process_9egcg169:12:910004"),//TODO:测试
+ FINCOSTAPPLY("费用申请","process_u0pahv0s:6:902504"),//ToDo:测试
+ FINPAYAPPLY("付款申请","process_gin2tntb:4:902508"),//ToDo:测试
+ ARREARSCARRYVEHICLE("欠款提车审批流程", "process_8ax1xxn3:2:862512"),//测试(新)2022、11、22
+ BUSCENTERADVANCEGINVOICEAPPLY("提前开票申请流程", "process_zt1gov6e:4:862504"), //测试
+ FINBILLAPPLICATION("开票申请流程", "process_sndce6s9:2:937504"),//测试(新)2022、11、22
+ BASEOUTSOURCINGAPPLICATION("外采申请", "process_5tqysnjc:5:867504"),//测试外采流程定义id
+ BASEMODELMODPRICE("车型调价申请", "process_kydcif7k:7:867520"),//测试车型调价流程定义id
+ BASEINTERNALPURCHASE("调车申请", "process_i6luw5xq:4:892504"),//测试调车流程定义id
+ BASEACCADJAPPLY("调账申请", "process_r6pyzqoz:2:867516"), //测试调账流程定义id
+ SCMVEHICLERETURN("采购退库", "process_md8aeoap:2:867508"),//测试采购退库流程定义id
+ SALESPOLICY("销售政策审批流程", "process_biw9gfh7:2:867524"),//测试销售政策流程定义id
+ BASEDISPACKAGEAPPLY("优惠包申请流程", "process_l8i6tqho:1:967504"),//测试优惠包申请流程定义id*/
+ ;
+
+ ProcDefEnum(String proDefName, String proDefId) {
+ this.proDefName = proDefName;
+ this.proDefId = proDefId;
+
+ }
+
+ /**
+ * 流程类型名称
+ */
+ private final String proDefName;
+
+ /**
+ * 流程代号
+ */
+ private final String proDefId;
+
+ public String getProDefName() {
+ return proDefName;
+ }
+
+ public String getProDefId() {
+ return proDefId;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcessStateEnum.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcessStateEnum.java
new file mode 100644
index 00000000..1d6badb4
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ProcessStateEnum.java
@@ -0,0 +1,38 @@
+package com.yxt.anrui.flowable.api.utils;
+
+/**
+ * @author 10095
+ * @version 1.0
+ * @Description: 流程状态枚举类
+ * @date 2022/03/01
+ */
+public enum ProcessStateEnum {
+
+ STARTED("审批中", "started"),
+ FINISHED("已办结", "finished")
+ ;
+
+
+ ProcessStateEnum(String stateName, String stateCode) {
+ this.stateName = stateName;
+ this.stateCode = stateCode;
+ }
+
+ /**
+ * 状态名称
+ */
+ private final String stateName;
+
+ /**
+ * 状态代号
+ */
+ private final String stateCode;
+
+ public String getStateName() {
+ return stateName;
+ }
+
+ public String getStateCode() {
+ return stateCode;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/RecordQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/RecordQuery.java
new file mode 100644
index 00000000..8a553b19
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/RecordQuery.java
@@ -0,0 +1,19 @@
+package com.yxt.anrui.flowable.api.utils;
+
+import com.yxt.common.core.query.Query;
+import lombok.Data;
+
+/**
+ * @author dimengzhe
+ * @date 2021/8/23 14:18
+ * @description
+ */
+@Data
+public class RecordQuery implements Query {
+ private static final long serialVersionUID = 480213691108105877L;
+
+ private String procInsId;
+ private String deployId;
+
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ServletUtils.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ServletUtils.java
new file mode 100644
index 00000000..e7c1bec5
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/ServletUtils.java
@@ -0,0 +1,137 @@
+package com.yxt.anrui.flowable.api.utils;
+
+import com.yxt.common.base.utils.StringUtils;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+
+/**
+ * 客户端工具类
+ *
+ * @author ruoyi
+ */
+public class ServletUtils
+{
+ /**
+ * 获取String参数
+ */
+ public static String getParameter(String name)
+ {
+ return getRequest().getParameter(name);
+ }
+
+ /**
+ * 获取String参数
+ */
+ public static String getParameter(String name, String defaultValue)
+ {
+ return Convert.toStr(getRequest().getParameter(name), defaultValue);
+ }
+
+ /**
+ * 获取Integer参数
+ */
+ public static Integer getParameterToInt(String name)
+ {
+ return Convert.toInt(getRequest().getParameter(name));
+ }
+
+ /**
+ * 获取Integer参数
+ */
+ public static Integer getParameterToInt(String name, Integer defaultValue)
+ {
+ return Convert.toInt(getRequest().getParameter(name), defaultValue);
+ }
+
+ /**
+ * 获取request
+ */
+ public static HttpServletRequest getRequest()
+ {
+ return getRequestAttributes().getRequest();
+ }
+
+ /**
+ * 获取response
+ */
+ public static HttpServletResponse getResponse()
+ {
+ return getRequestAttributes().getResponse();
+ }
+
+ /**
+ * 获取session
+ */
+ public static HttpSession getSession()
+ {
+ return getRequest().getSession();
+ }
+
+ public static ServletRequestAttributes getRequestAttributes()
+ {
+ RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
+ return (ServletRequestAttributes) attributes;
+ }
+
+ /**
+ * 将字符串渲染到客户端
+ *
+ * @param response 渲染对象
+ * @param string 待渲染的字符串
+ * @return null
+ */
+ public static String renderString(HttpServletResponse response, String string)
+ {
+ try
+ {
+ response.setStatus(200);
+ response.setContentType("application/json");
+ response.setCharacterEncoding("utf-8");
+ response.getWriter().print(string);
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * 是否是Ajax异步请求
+ *
+ * @param request
+ */
+ public static boolean isAjaxRequest(HttpServletRequest request)
+ {
+ String accept = request.getHeader("accept");
+ if (accept != null && accept.indexOf("application/json") != -1)
+ {
+ return true;
+ }
+
+ String xRequestedWith = request.getHeader("X-Requested-With");
+ if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1)
+ {
+ return true;
+ }
+
+ String uri = request.getRequestURI();
+ if (StringUtils.inString(uri, ".json", ".xml"))
+ {
+ return true;
+ }
+
+ String ajax = request.getParameter("__ajax");
+ if (StringUtils.inString(ajax, "json", "xml"))
+ {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/SqlUtil.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/SqlUtil.java
new file mode 100644
index 00000000..383b4943
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/api/utils/SqlUtil.java
@@ -0,0 +1,37 @@
+package com.yxt.anrui.flowable.api.utils;
+
+
+import com.yxt.common.base.utils.StringUtils;
+
+/**
+ * sql操作工具类
+ *
+ * @author ruoyi
+ */
+public class SqlUtil
+{
+ /**
+ * 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序)
+ */
+ public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+";
+
+ /**
+ * 检查字符,防止注入绕过
+ */
+ public static String escapeOrderBySql(String value)
+ {
+ if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value))
+ {
+ //throw new BaseException("参数不符合规范,不能进行查询");
+ }
+ return value;
+ }
+
+ /**
+ * 验证 order by 语法是否符合规范
+ */
+ public static boolean isValidOrderBySql(String value)
+ {
+ return value.matches(SQL_PATTERN);
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/exception/CustomException.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/exception/CustomException.java
new file mode 100644
index 00000000..3ca7810a
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/exception/CustomException.java
@@ -0,0 +1,43 @@
+package com.yxt.anrui.flowable.exception;
+
+/**
+ * 自定义异常
+ *
+ * @author ruoyi
+ */
+public class CustomException extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ private Integer code;
+
+ private String message;
+
+ public CustomException(String message)
+ {
+ this.message = message;
+ }
+
+ public CustomException(String message, Integer code)
+ {
+ this.message = message;
+ this.code = code;
+ }
+
+ public CustomException(String message, Throwable e)
+ {
+ super(message, e);
+ this.message = message;
+ }
+
+ @Override
+ public String getMessage()
+ {
+ return message;
+ }
+
+ public Integer getCode()
+ {
+ return code;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/BusinessTaskParam.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/BusinessTaskParam.java
new file mode 100644
index 00000000..0d8e1a1f
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/BusinessTaskParam.java
@@ -0,0 +1,35 @@
+package com.yxt.anrui.flowable.sqloperationsymbol;
+
+import lombok.Data;
+/**
+ * task 查询参数
+ */
+@Data
+public class BusinessTaskParam {
+
+ public BusinessTaskParam(){}
+
+ public BusinessTaskParam(String field, String value) {
+ this.field = field;
+ this.sqlOperationSymbol = SQLOperationSymbol.EQUAL;
+ this.value = value;
+ }
+
+ public BusinessTaskParam(String field, String value, SQLOperationSymbol sqlOperationSymbol) {
+ this.field = field;
+ this.sqlOperationSymbol = sqlOperationSymbol;
+ this.value = value;
+ }
+ /**
+ * 字段
+ */
+ private String field;
+ /**
+ * 运算符号
+ */
+ private SQLOperationSymbol sqlOperationSymbol;
+ /**
+ * 值
+ */
+ private String value;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/BusinessTaskQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/BusinessTaskQuery.java
new file mode 100644
index 00000000..95b717cf
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/BusinessTaskQuery.java
@@ -0,0 +1,28 @@
+package com.yxt.anrui.flowable.sqloperationsymbol;
+
+import com.yxt.common.core.query.Query;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * task 查询参数 集合
+ */
+@Data
+public class BusinessTaskQuery implements Query {
+ private List fields = new ArrayList<>();
+
+ public static BusinessTaskQuery create(){
+ BusinessTaskQuery bt = new BusinessTaskQuery();
+ return bt;
+ }
+ public BusinessTaskQuery add(BusinessTaskParam param){
+ if(fields==null){
+ fields = new ArrayList<>();
+ }
+ fields.add(param);
+ return this;
+ }
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/BusinessVariables.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/BusinessVariables.java
new file mode 100644
index 00000000..f1d5a9ba
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/BusinessVariables.java
@@ -0,0 +1,67 @@
+package com.yxt.anrui.flowable.sqloperationsymbol;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 业务系统调用flowable流程传递参数的格式
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class BusinessVariables {
+ /**
+ * 分公司sid
+ */
+ public static final String ORGPATH="orgPath";
+ /**
+ * 流程定义的id
+ */
+ private String modelId;
+ /**
+ * 审批意见
+ */
+ private String comment;
+ /**
+ * 流程实例的id
+ */
+ private String instanceId;
+ /**
+ * taskId
+ */
+ private String taskId;
+ /**
+ * 当前用户的id
+ */
+ private String userSid;
+ /**
+ * 当前用户部门的全路径
+ */
+ private String orgSidPath;
+ /**
+ * 业务sid
+ */
+ private String businessSid;
+ /**
+ * 环节定义的ID
+ */
+ private String taskDefKey;
+ /**
+ * nextNodeUserSids 下一环节的用户sid
+ */
+ private String nextNodeUserSids;
+ /**
+ * 业务参数,按需传递
+ */
+ private Map formVariables =new HashMap<>();
+ /* @ApiModelProperty("机构sid:切换结构使用")
+ private String orgPath;*/
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/SQLOperationSymbol.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/SQLOperationSymbol.java
new file mode 100644
index 00000000..05b3275d
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/sqloperationsymbol/SQLOperationSymbol.java
@@ -0,0 +1,38 @@
+package com.yxt.anrui.flowable.sqloperationsymbol;
+
+/**
+ * sql语句运算符号,“=”,“like”,"in",">","<"
+ */
+public enum SQLOperationSymbol {
+ EQUAL("=","相等"),
+ LIKE("like","模糊查询"),
+ LT("<","大于"),//LESS THAN小于
+ GT(">","小于"),//GT 就是 GREATER THAN大于
+ GE(">=","大于等于"),// GREATER THAN OR EQUAL 大于等于
+ LE("<=","小于等于"),//LESS THAN OR EQUAL 小于等于
+ NE("<>","不等于"),//NOT EQUAL不等于
+ NONE("","无");
+ private String symbol;
+ private String desc;
+
+ SQLOperationSymbol(String symbol, String desc) {
+ this.symbol = symbol;
+ this.desc = desc;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public void setDesc(String desc) {
+ this.desc = desc;
+ }
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/FlowCommentVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/FlowCommentVo.java
new file mode 100644
index 00000000..7c4494f9
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/FlowCommentVo.java
@@ -0,0 +1,27 @@
+package com.yxt.anrui.flowable.test;
+
+import com.yxt.common.core.vo.Vo;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * @author dimengzhe
+ * @date 2021/6/25 14:21
+ * @description
+ */
+@Data
+@Builder
+public class FlowCommentVo implements Vo {
+ private static final long serialVersionUID = -5771441948567658394L;
+
+ /**
+ * 意见类别 1正常(同意)意见 2退回意见 3 驳回意见 4 委派意见 5 转办意见 6 终止流程 7 撤回流程
+ */
+ private String type;
+
+ /**
+ * 意见内容
+ */
+ private String comment;
+
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/HolidayTestApi.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/HolidayTestApi.java
new file mode 100644
index 00000000..09e60945
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/HolidayTestApi.java
@@ -0,0 +1,39 @@
+package com.yxt.anrui.flowable.test;
+
+import com.yxt.common.core.result.ResultBean;
+import io.swagger.annotations.ApiOperation;
+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.ResponseBody;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author dimengzhe
+ * @date 2021/6/18 10:37
+ * @description
+ */
+@FeignClient(
+ contextId = "yxt-anrui-flowable-holidayTest",
+ name = "yxt-anrui-flowable",
+ path = "v1/flowable/holidaytest")
+public interface HolidayTestApi {
+
+ /**
+ * 提交请假
+ *
+ * @param taskUser 申请人
+ * @param day 申请天数
+ * @return
+ */
+ @PostMapping(value = "submit")
+ @ResponseBody
+ @ApiOperation(value = "提交请假")
+ public ResultBean submit(String taskUser, Integer day);
+
+ @GetMapping(value = "processImage")
+ @ApiOperation(value = "生成图片的方法")
+ @ResponseBody
+ public void genProcessDiagram(HttpServletResponse httpServletResponse, String processId);
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/HolidayVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/HolidayVo.java
new file mode 100644
index 00000000..e0fc4f0b
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/HolidayVo.java
@@ -0,0 +1,22 @@
+package com.yxt.anrui.flowable.test;
+
+import com.yxt.common.core.vo.Vo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author dimengzhe
+ * @date 2021/6/21 10:11
+ * @description
+ */
+@Data
+public class HolidayVo implements Vo {
+ private static final long serialVersionUID = 9212210138258932085L;
+
+ @ApiModelProperty(value = "流程实例id")
+ private String id;
+ @ApiModelProperty(value = "请假申请人")
+ private String taskUser;
+ @ApiModelProperty(value = "请假天数")
+ private Integer day;
+}
diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/StartProcessInstanceQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/StartProcessInstanceQuery.java
new file mode 100644
index 00000000..55cc4d84
--- /dev/null
+++ b/yxt_supervise/supervise-flowable/supervise-flowable-api/src/main/java/com/yxt/anrui/flowable/test/StartProcessInstanceQuery.java
@@ -0,0 +1,27 @@
+package com.yxt.anrui.flowable.test;
+
+import com.yxt.common.core.query.Query;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author dimengzhe
+ * @date 2021/7/29 15:03
+ * @description
+ */
+@Data
+public class StartProcessInstanceQuery implements Query {
+ private static final long serialVersionUID = -6372254084412955318L;
+
+ @ApiModelProperty(value = "流程定义key", required = true)
+// private String processDefinitionKey;
+ private String processDefinitionId;
+
+ @ApiModelProperty(value = "用户sid", required = true)
+ private String userSid;
+
+ @ApiModelProperty(value = "启动流程变量")
+ private Map variables;
+}