Browse Source

工作流相关

master
liupopo 2 years ago
parent
commit
1183ccd9e9
  1. 35
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/BusinessTaskParam.java
  2. 28
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/BusinessTaskQuery.java
  3. 65
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/BusinessVariables.java
  4. 38
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/SQLOperationSymbol.java
  5. 27
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/StartProcessInstanceQuery.java
  6. 68
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/UpdateFlowFieldVo.java
  7. 15
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/UserAndOrgPath.java
  8. 23
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/AppUserVo.java
  9. 42
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/CompleteTaskQuery.java
  10. 106
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/FlowTask.java
  11. 186
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/FlowTaskFeign.java
  12. 181
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/FlowTaskFeignFallBack.java
  13. 46
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/FlowTaskQueryOne.java
  14. 26
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/FlowViewerDto.java
  15. 34
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/LatestTaskVo.java
  16. 34
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/TaskQuery.java
  17. 111
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/TaskQueryParamsVo.java
  18. 31
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/TaskUserInfo.java
  19. 81
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/TaskVo.java
  20. 88
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/CharsetKit.java
  21. 1006
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/Convert.java
  22. 165
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/Excel.java
  23. 14
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/ORDERBY.java
  24. 104
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/ProcDefEnum.java
  25. 38
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/ProcessStateEnum.java
  26. 19
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/RecordQuery.java
  27. 137
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/ServletUtils.java
  28. 37
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/SqlUtil.java
  29. 75
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/flow/FlowableRest.java
  30. 188
      yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/flow/FlowableService.java

35
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/BusinessTaskParam.java

@ -0,0 +1,35 @@
package com.yxt.supervise.feign.flowable;
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;
}

28
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/BusinessTaskQuery.java

@ -0,0 +1,28 @@
package com.yxt.supervise.feign.flowable;
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<BusinessTaskParam> 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;
}
}

65
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/BusinessVariables.java

@ -0,0 +1,65 @@
package com.yxt.supervise.feign.flowable;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
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<String, Object> formVariables =new HashMap<>();
/* @ApiModelProperty("机构sid:切换结构使用")
private String orgPath;*/
}

38
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/SQLOperationSymbol.java

@ -0,0 +1,38 @@
package com.yxt.supervise.feign.flowable;
/**
* 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;
}
}

27
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/StartProcessInstanceQuery.java

@ -0,0 +1,27 @@
package com.yxt.supervise.feign.flowable;
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<String, Object> variables;
}

68
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/UpdateFlowFieldVo.java

@ -0,0 +1,68 @@
package com.yxt.supervise.feign.flowable;
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;
}
}

15
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/UserAndOrgPath.java

@ -0,0 +1,15 @@
package com.yxt.supervise.feign.flowable;
import lombok.Data;
@Data
public class UserAndOrgPath {
/**
* 用户sid
*/
private String userSid;
/**
* 组织及部门sid全路径
*/
private String orgPath;
}

23
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/AppUserVo.java

@ -0,0 +1,23 @@
package com.yxt.supervise.feign.flowable.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;
}

42
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/CompleteTaskQuery.java

@ -0,0 +1,42 @@
package com.yxt.supervise.feign.flowable.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<String, Object> variables;
}

106
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/FlowTask.java

@ -0,0 +1,106 @@
package com.yxt.supervise.feign.flowable.flowtask;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yxt.common.core.domain.BaseEntity;
import com.yxt.supervise.system.flow.FlowCommentDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* <p>工作流任务<p>
*
* @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<TaskUserInfo> taskUserInfos;
}

186
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/FlowTaskFeign.java

@ -0,0 +1,186 @@
package com.yxt.supervise.feign.flowable.flowtask;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yxt.supervise.feign.flowable.UserAndOrgPath;
import com.yxt.supervise.feign.flowable.utils.RecordQuery;
import com.yxt.supervise.feign.flowable.BusinessTaskQuery;
import com.yxt.supervise.feign.flowable.BusinessVariables;
import com.yxt.supervise.feign.flowable.StartProcessInstanceQuery;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.supervise.system.flow.FlowRecordVo;
import com.yxt.supervise.system.flow.FlowTaskDto;
import com.yxt.supervise.system.flow.FlowTaskQuery;
import com.yxt.supervise.system.flow.FlowTaskVo;
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.List;
/**
* @author dimengzhe
* @date 2021/7/29 14:37
* @description
*/
@FeignClient(
contextId = "supervise-flowable-FlowTask",
name = "supervise-flowable",
path = "v1/flowable/task",
fallback = FlowTaskFeignFallBack.class)
public interface FlowTaskFeign {
@ApiOperation(value = "启动流程")
@PostMapping("/startProcessInstanceByKey")
@ResponseBody
ResultBean<String> startProcessInstanceByKey(@RequestBody StartProcessInstanceQuery startProcessInstanceQuery);
@ApiOperation(value = "业务系统审批")
@PostMapping("/businessComplete")
@ResponseBody
ResultBean<FlowTask> businessComplete(@RequestBody BusinessVariables dto);
@ApiOperation(value = "审批")
@PostMapping("/complete")
@ResponseBody
ResultBean<String> complete(@RequestBody FlowTaskVo flowTaskVo);
@ApiOperation(value = "待办任务列表")
@PostMapping("/todoList")
@ResponseBody
ResultBean todoList(@RequestBody PagerQuery<FlowTaskQuery> taskQueryPagerQuery);
@ApiOperation(value = "业务系统查询待办任务列表")
@PostMapping("/businessTodoList/{userSid}")
@ResponseBody
ResultBean<Page<FlowTaskDto>> businessTodoList(@ApiParam(value = "当前用户sid") @PathVariable(value = "userSid") String userSid,
@RequestBody PagerQuery<BusinessTaskQuery> taskQueryPagerQuery);
@ApiOperation(value = "业务系统查询待办任务列表包含url")
@PostMapping("/businessTodoListForApp/{userSid}")
@ResponseBody
ResultBean<Page<FlowTaskDto>> businessTodoListForApp(@ApiParam(value = "当前用户sid") @PathVariable(value = "userSid") String userSid,
@RequestBody PagerQuery<BusinessTaskQuery> taskQueryPagerQuery);
@ApiOperation(value = "业务系统查询待办任务列表数量")
@GetMapping("/getTodoNum/{userSid}")
ResultBean<Integer> getTodoNum(@PathVariable(value = "userSid") String userSid);
@ApiOperation(value = "业务系统查询待办任务列表数量")
@PostMapping("/getTodoNum")
@ResponseBody
ResultBean<Integer> getTodoNum(@RequestBody UserAndOrgPath uaop);
@ApiOperation(value = "已办任务列表")
@PostMapping("/doneList")
@ResponseBody
ResultBean doneList(@RequestBody PagerQuery<FlowTaskQuery> taskQueryPagerQuery);
@ApiOperation(value = "业务系统查询已办任务列表")
@PostMapping("/businessDoneList/{userSid}")
@ResponseBody
ResultBean businessDoneList(@ApiParam(value = "当前用户sid") @PathVariable(value = "userSid") String userSid,
@RequestBody PagerQuery<BusinessTaskQuery> taskQueryPagerQuery);
@ApiOperation(value = "业务系统查询已办任务列表_移动端")
@PostMapping("/businessDoneListForApp/{userSid}")
@ResponseBody
ResultBean<Page<FlowTaskDto>> businessDoneListForApp(@ApiParam(value = "当前用户sid") @PathVariable(value = "userSid") String userSid,
@RequestBody PagerQuery<BusinessTaskQuery> 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<FlowTaskQuery> taskQueryPagerQuery);
@ApiOperation(value = "业务系统查询我的流程分页列表")
@PostMapping(value = "/businessMyprocess/{userSid}")
@ResponseBody
ResultBean businessMyprocess(@ApiParam(value = "当前用户sid") @PathVariable(value = "userSid") String userSid,
@RequestBody PagerQuery<BusinessTaskQuery> 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<List<LatestTaskVo>> taskReject(@RequestBody FlowTaskVo flowTaskVo);
@ApiOperation(value = "撤回流程", response = FlowTaskDto.class)
@PostMapping(value = "/revokeProcess")
public ResultBean<List<LatestTaskVo>> 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<FlowRecordVo> 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<List<LatestTaskVo>> getLatestTasks(@PathVariable(value = "procId") String procId);
@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);
}

181
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/FlowTaskFeignFallBack.java

@ -0,0 +1,181 @@
package com.yxt.supervise.feign.flowable.flowtask;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yxt.supervise.feign.flowable.UserAndOrgPath;
import com.yxt.supervise.feign.flowable.utils.RecordQuery;
import com.yxt.supervise.feign.flowable.BusinessTaskQuery;
import com.yxt.supervise.feign.flowable.BusinessVariables;
import com.yxt.supervise.feign.flowable.StartProcessInstanceQuery;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.supervise.system.flow.FlowTaskDto;
import com.yxt.supervise.system.flow.FlowTaskQuery;
import com.yxt.supervise.system.flow.FlowTaskVo;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author dimengzhe
* @date 2021/8/20 15:43
* @description
*/
@Component
public class FlowTaskFeignFallBack implements FlowTaskFeign {
@Override
public ResultBean<String> startProcessInstanceByKey(StartProcessInstanceQuery startProcessInstanceQuery) {
return null;
}
@Override
public ResultBean<FlowTask>businessComplete (BusinessVariables dto) {
return null;
}
@Override
public ResultBean<String> complete(FlowTaskVo flowTaskVo) {
return null;
}
@Override
public ResultBean<Page<FlowTaskDto>> todoList(PagerQuery<FlowTaskQuery> taskQueryPagerQuery) {
return null;
}
@Override
public ResultBean<Page<FlowTaskDto>> businessTodoList(String userSid, PagerQuery<BusinessTaskQuery> taskQueryPagerQuery) {
return null;
}
@Override
public ResultBean<Page<FlowTaskDto>> businessTodoListForApp(String userSid, PagerQuery<BusinessTaskQuery> taskQueryPagerQuery) {
return null;
}
@Override
public ResultBean getTodoNum(String userSid) {
return null;
}
@Override
public ResultBean<Integer> getTodoNum(UserAndOrgPath uaop) {
return null;
}
@Override
public ResultBean doneList(PagerQuery<FlowTaskQuery> taskQueryPagerQuery) {
return null;
}
@Override
public ResultBean businessDoneList(String userSid, PagerQuery<BusinessTaskQuery> taskQueryPagerQuery) {
return null;
}
@Override
public ResultBean businessDoneListForApp(String userSid, PagerQuery<BusinessTaskQuery> 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<FlowTaskQuery> taskQueryPagerQuery) {
return null;
}
@Override
public ResultBean businessMyprocess(String userSid, PagerQuery<BusinessTaskQuery> 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 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;
}
}

46
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/FlowTaskQueryOne.java

@ -0,0 +1,46 @@
package com.yxt.supervise.feign.flowable.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<String, Object> values=new HashMap<>();
@ApiModelProperty("审批人")
private String assignee;
@ApiModelProperty("候选人")
private List<String> candidateUsers;
@ApiModelProperty("审批组")
private List<String> candidateGroups;
}

26
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/FlowViewerDto.java

@ -0,0 +1,26 @@
package com.yxt.supervise.feign.flowable.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;
}
}

34
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/LatestTaskVo.java

@ -0,0 +1,34 @@
package com.yxt.supervise.feign.flowable.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;
}

34
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/TaskQuery.java

@ -0,0 +1,34 @@
package com.yxt.supervise.feign.flowable.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;
}

111
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/TaskQueryParamsVo.java

@ -0,0 +1,111 @@
package com.yxt.supervise.feign.flowable.flowtask;
import com.yxt.supervise.feign.flowable.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<String> 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<String, ORDERBY> orderbyMap;
}

31
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/TaskUserInfo.java

@ -0,0 +1,31 @@
package com.yxt.supervise.feign.flowable.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;
}
}

81
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/flowtask/TaskVo.java

@ -0,0 +1,81 @@
package com.yxt.supervise.feign.flowable.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;
}

88
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/CharsetKit.java

@ -0,0 +1,88 @@
package com.yxt.supervise.feign.flowable.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();
}
}

1006
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/Convert.java

File diff suppressed because it is too large

165
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/Excel.java

@ -0,0 +1,165 @@
package com.yxt.supervise.feign.flowable.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;
}
}
}

14
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/ORDERBY.java

@ -0,0 +1,14 @@
package com.yxt.supervise.feign.flowable.utils;
/**
* @author bruce.liu
* @Description 排序的enum
* @time 2021年4月16日
*/
public enum ORDERBY {
DESC, ASC;
public ORDERBY reverse() {
return (this == ASC) ? DESC : ASC;
}
}

104
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/ProcDefEnum.java

@ -0,0 +1,104 @@
package com.yxt.supervise.feign.flowable.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"),
PR("采购申请", "process_xb9q6w5v:8:1307630"),
/******************************测试流程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;
}
}

38
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/ProcessStateEnum.java

@ -0,0 +1,38 @@
package com.yxt.supervise.feign.flowable.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;
}
}

19
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/RecordQuery.java

@ -0,0 +1,19 @@
package com.yxt.supervise.feign.flowable.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;
}

137
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/ServletUtils.java

@ -0,0 +1,137 @@
package com.yxt.supervise.feign.flowable.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;
}
}

37
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/feign/flowable/utils/SqlUtil.java

@ -0,0 +1,37 @@
package com.yxt.supervise.feign.flowable.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);
}
}

75
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/flow/FlowableRest.java

@ -25,6 +25,7 @@
*********************************************************/
package com.yxt.supervise.system.flow;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
@ -35,6 +36,7 @@ import com.yxt.supervise.system.sysuser.SysUserService;
import com.yxt.supervise.feign.wh.ShStorehouseFeign;
import com.yxt.supervise.feign.wh.ShStorehouseQuery;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -58,10 +60,10 @@ import java.util.List;
@RequestMapping("v1/flow")
@Api(tags = "业务系统中业务和工作流相关操作")
//public class FlowableRest implements FlowableFeign {
public class FlowableRest{
//
// @Autowired
// private FlowableService flowableService;
public class FlowableRest {
@Autowired
private FlowableService flowableService;
@Autowired
private SysStaffOrgService sysStaffOrgService;
@Autowired
@ -213,29 +215,40 @@ public class FlowableRest{
// return ResultBean.fireSuccess();
// }
//
// @Override
// public ResultBean<Page<FlowTaskDto>> todoAllTaskList(String userSid, PagerQuery<FlowTaskAllQuery> pQuery) {//待办列表
// SysUser sysUser = sysUserService.fetchBySid(userSid);
// String staffSid = sysUser.getStaffSid();
// List<SysStaffOrgVo> sysStaffOrgListByStaffSid = sysStaffOrgService.getSysStaffOrgListByStaffSid(staffSid);
// StringBuilder sb = new StringBuilder();
// for (SysStaffOrgVo s : sysStaffOrgListByStaffSid) {
// sb.append(s.getOrgSidPath());
// sb.append(",");
// }
// if (sb.length() > 0) {
// sb.delete(sb.length() - 1, sb.length());
// }
// pQuery.getParams().setOrgSid(sb.toString());
// Page<FlowTaskDto> page = new Page<>();
//
// BeanUtil.copyProperties(flowableService.todoAllTaskList(userSid, pQuery).getData(),page);
//
// ResultBean< Page<FlowTaskDto>> success = new ResultBean< Page<FlowTaskDto>>().success();
// success.setData(page);
// return success;
// }
//
/**
* 待办列表
*
* @param userSid 用户sid
* @param pQuery 查询参数
* @return
*/
@ApiOperation(value = "总待办列表")
@PostMapping("/todoAllTaskList/{userSid}")
public ResultBean<Page<FlowTaskDto>> todoAllTaskList(@PathVariable("userSid") String userSid, PagerQuery<FlowTaskAllQuery> pQuery) {//待办列表
System.out.println("llll--userSid: "+userSid);
SysUser sysUser = sysUserService.fetchBySid(userSid);
String staffSid = sysUser.getStaffSid();
List<SysStaffOrgVo> sysStaffOrgListByStaffSid = sysStaffOrgService.getSysStaffOrgListByStaffSid(staffSid);
StringBuilder sb = new StringBuilder();
for (SysStaffOrgVo s : sysStaffOrgListByStaffSid) {
sb.append(s.getOrgSidPath());
sb.append(",");
}
if (sb.length() > 0) {
sb.delete(sb.length() - 1, sb.length());
}
pQuery.getParams().setOrgSid(sb.toString());
Page<FlowTaskDto> page = new Page<>();
BeanUtil.copyProperties(flowableService.todoAllTaskList(userSid, pQuery).getData(), page);
ResultBean<Page<FlowTaskDto>> success = new ResultBean<Page<FlowTaskDto>>().success();
success.setData(page);
return success;
}
//
// @Override
// public ResultBean<Integer> getTodoNum(String userSid) {
// ResultBean<Integer> rb=ResultBean.fireFail();
@ -300,24 +313,26 @@ public class FlowableRest{
// //BeanUtil.copyProperties(flowableService.todoAllTaskList(userSid, pQuery).getData(),page);
// ResultBean< Page<FlowTaskDto>> success = new ResultBean< Page<FlowTaskDto>>().success();
ResultBean success = new ResultBean();
FlowTaskVo flowTaskVo=new FlowTaskVo();
FlowTaskVo flowTaskVo = new FlowTaskVo();
flowTaskVo.setTodoNumber(5);
List<String> list=new ArrayList<>();
List<String> list = new ArrayList<>();
list.add("【一级风险】");
list.add("【二级风险】");
list.add("【三级风险】");
list.add("【四级风险】");
flowTaskVo.setNotice(list);
String [] urls={"http://jianguan.yyundong.com/img/banner001.jpg"};
String[] urls = {"http://jianguan.yyundong.com/img/banner001.jpg"};
flowTaskVo.setImageUrl(urls);
flowTaskVo.setPendingWork(6);
success.success().setData(flowTaskVo);
return success;
}
@PostMapping("/storeHouseListPage")
public ResultBean task(@RequestBody PagerQuery<ShStorehouseQuery> pq) {
return shStorehouseFeign.listPage(pq);
}
@GetMapping("/fetchDetailsBySid/{sid}")
public ResultBean fetchDetailsBySid(@PathVariable("sid") String sid) {
return shStorehouseFeign.fetchDetailsBySid(sid);

188
yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/flow/FlowableService.java

@ -23,56 +23,56 @@
// * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
// *********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
// *********************************************************/
//package com.yxt.supervise.system.flow;
package com.yxt.supervise.system.flow;
//
//import cn.hutool.core.bean.BeanUtil;
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.yxt.anrui.flowable.api.flow.UserAndOrgPath;
//import com.yxt.anrui.flowable.api.flowdefinition.FlowDefinitionFeign;
//import com.yxt.anrui.flowable.api.flowtask.FlowRecordVo;
//import com.yxt.anrui.flowable.api.flowtask.FlowTaskDto;
//import com.yxt.anrui.flowable.api.flowtask.FlowTaskFeign;
import com.yxt.supervise.feign.flowable.flowtask.FlowTaskFeign;
//import com.yxt.anrui.flowable.api.flowtask.LatestTaskVo;
//import com.yxt.anrui.flowable.api.sysformlink.SysFormLinkFeign;
//import com.yxt.anrui.flowable.api.sysprourl.SysProUrlFeign;
//import com.yxt.anrui.flowable.sqloperationsymbol.BusinessTaskParam;
//import com.yxt.anrui.flowable.sqloperationsymbol.BusinessTaskQuery;
//import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables;
//import com.yxt.anrui.flowable.sqloperationsymbol.SQLOperationSymbol;
import com.yxt.supervise.feign.flowable.BusinessTaskParam;
import com.yxt.supervise.feign.flowable.BusinessTaskQuery;
import com.yxt.supervise.feign.flowable.BusinessVariables;
import com.yxt.supervise.feign.flowable.SQLOperationSymbol;
//import com.yxt.common.base.config.component.FileUploadComponent;
//import com.yxt.common.base.service.MybatisBaseService;
//import com.yxt.common.base.utils.ConstantUtils;
//import com.yxt.common.base.utils.StringUtils;
//import com.yxt.common.core.query.PagerQuery;
//import com.yxt.common.core.result.ResultBean;
//import com.yxt.common.core.vo.PagerVo;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.*;
//import java.util.stream.Collectors;
//
///**
// * Project: anrui-parent <br/>
// * File: FlowableService.java <br/>
// * Class: com.yxt.anrui.portal.biz.flow.FlowableService <br/>
// * Description: <描述类的功能>. <br/>
// * Copyright: Copyright (c) 2011 <br/>
// * Company: https://gitee.com/liuzp315 <br/>
// * Makedate: 2021/10/23 上午11:14 <br/>
// *
// * @author popo
// * @version 1.0
// * @since 1.0
// */
//@Service
//public class FlowableService extends MybatisBaseService<FlowableMapper, Flowable> {
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.ConstantUtils;
import com.yxt.common.base.utils.StringUtils;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* Project: anrui-parent <br/>
* File: FlowableService.java <br/>
* Class: com.yxt.anrui.portal.biz.flow.FlowableService <br/>
* Description: <描述类的功能>. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2021/10/23 上午11:14 <br/>
*
* @author popo
* @version 1.0
* @since 1.0
*/
@Service
public class FlowableService extends MybatisBaseService<FlowableMapper, Flowable> {
// @Autowired
// private FlowDefinitionFeign flowDefinitionFeign;
// @Autowired
// private FlowTaskFeign flowTaskFeign;
@Autowired
private FlowTaskFeign flowTaskFeign;
// @Autowired
// private SysFormLinkFeign sysFormLinkFeign;
// @Autowired
@ -319,62 +319,62 @@
// }
//
//
// public ResultBean<Page<FlowTaskDto>> todoAllTaskList(String userSid, PagerQuery<FlowTaskAllQuery> pQuery) {
// ResultBean<Page<FlowTaskDto>> rb = new ResultBean<Page<FlowTaskDto>>().fireFail();
// FlowTaskAllQuery params = pQuery.getParams();
// if (StringUtils.isBlank(userSid)) {
// return rb.setMsg("用户SID为空");
// }
// PagerQuery<BusinessTaskQuery> taskQueryPagerQuery = new PagerQuery<>();
// taskQueryPagerQuery.setCurrent(pQuery.getCurrent()).setSize(pQuery.getSize());
//
// String orgSid = params.getOrgSid();
// String processDefinitionId = params.getProcessDefinitionId();
// String proDefName = params.getProDefName();
// String startDate = params.getStartDate();
// String endDate = params.getEndDate();
// BusinessTaskQuery taskQuery = new BusinessTaskQuery();
// List<BusinessTaskParam> taskParamList = new ArrayList<>();
// if (StringUtils.isNotBlank(proDefName)) {
// BusinessTaskParam taskParam = new BusinessTaskParam();
// taskParam.setField("proDefName");
// taskParam.setValue(proDefName);
// taskParam.setSqlOperationSymbol(SQLOperationSymbol.LIKE);
// taskParamList.add(taskParam);
// }
// if (StringUtils.isNotBlank(startDate)) {
// BusinessTaskParam taskParam = new BusinessTaskParam();
// taskParam.setField("startDate");
// taskParam.setValue(startDate);
// taskParam.setSqlOperationSymbol(SQLOperationSymbol.GE);
// taskParamList.add(taskParam);
// }
// if (StringUtils.isNotBlank(endDate)) {
// BusinessTaskParam taskParam = new BusinessTaskParam();
// taskParam.setField("endDate");
// taskParam.setValue(endDate);
// taskParam.setSqlOperationSymbol(SQLOperationSymbol.LE);
// taskParamList.add(taskParam);
// }
// if (StringUtils.isNotBlank(processDefinitionId)) {
// BusinessTaskParam taskParam = new BusinessTaskParam();
// taskParam.setField("processDefinitionId");
// taskParam.setSqlOperationSymbol(SQLOperationSymbol.NONE);
// taskParam.setValue(processDefinitionId);
// taskParamList.add(taskParam);
// }
// if (StringUtils.isNotBlank(orgSid)) {
// BusinessTaskParam taskParam = new BusinessTaskParam();
// taskParam.setField(BusinessVariables.ORGPATH);
// taskParam.setSqlOperationSymbol(SQLOperationSymbol.NONE);
// taskParam.setValue(orgSid);
// taskParamList.add(taskParam);
// }
//
// taskQuery.setFields(taskParamList);
// taskQueryPagerQuery.setParams(taskQuery);
// return flowTaskFeign.businessTodoList(userSid, taskQueryPagerQuery);
// }
public ResultBean<Page<FlowTaskDto>> todoAllTaskList(String userSid, PagerQuery<FlowTaskAllQuery> pQuery) {
ResultBean<Page<FlowTaskDto>> rb = new ResultBean<Page<FlowTaskDto>>().fireFail();
FlowTaskAllQuery params = pQuery.getParams();
if (StringUtils.isBlank(userSid)) {
return rb.setMsg("用户SID为空");
}
PagerQuery<BusinessTaskQuery> taskQueryPagerQuery = new PagerQuery<>();
taskQueryPagerQuery.setCurrent(pQuery.getCurrent()).setSize(pQuery.getSize());
String orgSid = params.getOrgSid();
String processDefinitionId = params.getProcessDefinitionId();
String proDefName = params.getProDefName();
String startDate = params.getStartDate();
String endDate = params.getEndDate();
BusinessTaskQuery taskQuery = new BusinessTaskQuery();
List<BusinessTaskParam> taskParamList = new ArrayList<>();
if (StringUtils.isNotBlank(proDefName)) {
BusinessTaskParam taskParam = new BusinessTaskParam();
taskParam.setField("proDefName");
taskParam.setValue(proDefName);
taskParam.setSqlOperationSymbol(SQLOperationSymbol.LIKE);
taskParamList.add(taskParam);
}
if (StringUtils.isNotBlank(startDate)) {
BusinessTaskParam taskParam = new BusinessTaskParam();
taskParam.setField("startDate");
taskParam.setValue(startDate);
taskParam.setSqlOperationSymbol(SQLOperationSymbol.GE);
taskParamList.add(taskParam);
}
if (StringUtils.isNotBlank(endDate)) {
BusinessTaskParam taskParam = new BusinessTaskParam();
taskParam.setField("endDate");
taskParam.setValue(endDate);
taskParam.setSqlOperationSymbol(SQLOperationSymbol.LE);
taskParamList.add(taskParam);
}
if (StringUtils.isNotBlank(processDefinitionId)) {
BusinessTaskParam taskParam = new BusinessTaskParam();
taskParam.setField("processDefinitionId");
taskParam.setSqlOperationSymbol(SQLOperationSymbol.NONE);
taskParam.setValue(processDefinitionId);
taskParamList.add(taskParam);
}
if (StringUtils.isNotBlank(orgSid)) {
BusinessTaskParam taskParam = new BusinessTaskParam();
taskParam.setField(BusinessVariables.ORGPATH);
taskParam.setSqlOperationSymbol(SQLOperationSymbol.NONE);
taskParam.setValue(orgSid);
taskParamList.add(taskParam);
}
taskQuery.setFields(taskParamList);
taskQueryPagerQuery.setParams(taskQuery);
return flowTaskFeign.businessTodoList(userSid, taskQueryPagerQuery);
}
//
// public ResultBean<Integer> getTodoNum(String userSid) {
// return flowTaskFeign.getTodoNum(userSid);
@ -445,5 +445,5 @@
// public ResultBean getFlowViewer(String procInsId) {
// return flowTaskFeign.getFlowViewer(procInsId);
// }
//
//}
}

Loading…
Cancel
Save