介绍
方式一: 前端通过ajax调用后端接口,发起或者启动一个流程;备注:http://网关(nginx)/je/workflow/button/operate url前缀,请求网关(nginx)
方式二:通过业务代码调用rpc接口发起流程,也可通过流程节点事件发起。
详细步骤
方式一:
1. 调用getInfo接口获取可发起流程信息
rul:/je/workflow/processInfo/getInfo
参数 | 说明 | 示例 |
---|---|---|
funcCode | 功能编码 | TEST_PTLC |
tableCode | 表code | TEST_PTLC |
beanId | 主键id | 4d2fdf33681840b6ba8cd7f76c4a4f17 |
prod | 产品标识 | test |
获取接口返回按钮信息
2. 调用getSubmitOutGoingNode接口获取可提交节点信息
rul:/je/workflow/processInfo/getSubmitOutGoingNode
参数 | 说明 | 示例 |
---|---|---|
pdid | 流程版本id | (上个接口获取的pdid)C4cNyWKzdcFYyKSSLZj:1:2b9774d2-c715-11ed-9757-0242f87b94e8 |
beanId | 主键 | 4d2fdf33681840b6ba8cd7f76c4a4f17 |
tableCode | 表code | TEST_PTLC |
prod | 产品标识 | test |
3.调用operate发起流程,具体的接口信息查看api接口文档中的流程模块
rul:/je/workflow/button/operate
参数 | 说明 | 示例 |
---|---|---|
assignee | 处理人信息 | [{“nodeId”:”taskdMJDSDD5YMskXhlkKpa”,”nodeName”:”回签节点”,”assignee”:”d07890fa093a4a4c90d050a9f9751838”,”assigneeName”:”于春辉”}] |
comment | 提交意见 | 同意 |
target | 线id | 上个接口获取target |
sequentials | 多人节点,手动指定顺序或者并须执行,可以为空 | |
isJump | 是否跳跃 0否 1是 | 0 |
pdid | 流程版本id | 第一个接口获取pdid |
operationId | 操作id | processEmptySponsorOperation发起id 其他id请查看接口文档 |
tableCode | 表code | TEST_PTLC |
funcCode | 功能code | TEST_PTLC |
funcId | 功能id | U8ymbZqVoKTdMMdE5Ss |
prod | 产品标识 | test |
beanId | 主键id | 4d2fdf33681840b6ba8cd7f76c4a4f17 |
方式二:
注意!!!
如果是定时任务发起流程,需要设置当前登录人相关信息
//deptId 用户账号部门的唯一Id (账号部门视图)
//code 用户code
//name 用户name
//realUserId 用户真实Id (用户表Id)
AccountVo account = new AccountVo.Builder().deptId("").code("").name("").realUserId("").build();
1.获取表单流程按钮和表单控制信息,获取到要发起的流程的pdid
List<Map<String, Object>> buttons = processInfoRpcService.getButtons(buttonsVo);
2.获取提交的节点信息和人员信息,获取目标节点ID 、NAME, 目标顺序流
List<ProcessNextNodeInfoVo> submitOutGoingNode = processInfoRpcService.getSubmitOutGoingNode(submitOutGoingNodeVo);
3.执行流程按钮操作
processInfoRpcService.operate(buttonOperateVo);
package com.je.business.controller;
import com.je.workflow.model.*;
import com.je.workflow.rpc.dictionary.WorkFlowExecuteCustomMethodService;
import com.je.workflow.rpc.workflow.ProcessInfoRpcService;
import org.apache.servicecomb.provider.pojo.RpcSchema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RpcSchema(schemaId = "testMyWorkFlowMethodService")
public class TestMyWorkFlowMethodServiceImpl implements WorkFlowExecuteCustomMethodService {
//注入ProcessInfoRpcService rpc接口
@Autowired
private ProcessInfoRpcService processInfoRpcService;
private static final Logger logger = LoggerFactory.getLogger(TestMyWorkFlowMethodServiceImpl.class);
@Override
public void executeCustomMethod(EventSubmitDTO eventSubmitDTO) {
//处理自己的业务逻辑
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(String.format("taskId:%s , ", eventSubmitDTO.getTaskId()));
stringBuffer.append(String.format("currentTaskName:%s , ", eventSubmitDTO.getCurrentTaskName()));
stringBuffer.append(String.format("targetTaskName:%s , ", eventSubmitDTO.getTargetTaskName()));
stringBuffer.append(String.format("targetTransition:%s , ", eventSubmitDTO.getTargetTransition()));
stringBuffer.append(String.format("operatorEnum:%s , ", eventSubmitDTO.getOperatorEnum().toString()));
stringBuffer.append(String.format("submitComment:%s , ", eventSubmitDTO.getSubmitComment()));
stringBuffer.append(String.format("assignees:%s , ", eventSubmitDTO.getAssignees()));
stringBuffer.append(String.format("funcCode:%s , ", eventSubmitDTO.getFuncCode()));
stringBuffer.append(String.format("dynaBean:%s , ", eventSubmitDTO.getDynaBean().toString()));
logger.info(stringBuffer.toString());
System.out.println(eventSubmitDTO);
//1.获取表单流程按钮和表单控制信息
ButtonsVo buttonsVo = new ButtonsVo.Builder().prod("test").funcCode("JE_LCSP_JBSQ").tableCode("JE_LCSP_JBSQ").beanId("4b5e1b2b36ae44bb8ca05a215a811c52").build();
List<Map<String, Object>> buttons = processInfoRpcService.getButtons(buttonsVo);
//获取想要调用的流程的pdid
ArrayList<Map<String, Object>> arrayList = (ArrayList) buttons.get(0).get("buttonList");
String pdid = arrayList.get(0).get("pdid").toString();
//2.获取提交的节点信息和人员信息
SubmitOutGoingNodeVo submitOutGoingNodeVo = new SubmitOutGoingNodeVo.Builder().taskId("").pdid(pdid).prod("test").beanId("4b5e1b2b36ae44bb8ca05a215a811c52").tableCode("JE_LCSP_JBSQ").build();
List<ProcessNextNodeInfoVo> submitOutGoingNode = processInfoRpcService.getSubmitOutGoingNode(submitOutGoingNodeVo);
//获取流转的目标节点ID name 目标顺序流
String target = submitOutGoingNode.get(0).getTarget();
String nodeId = submitOutGoingNode.get(0).getNodeId();
String nodeName = submitOutGoingNode.get(0).getNodeName();
//3.执行流程按钮操作
Map<String, Object> operationCustomerParam = new HashMap<>();
//设置节点,人员信息
operationCustomerParam.put("assignee", "[{\"nodeId\":\""+nodeId+"\",\"nodeName\":\""+nodeName+"\",\"assignee\":\"33ff53e1e64f491d855adebdc2bb0973\",\"assigneeName\":\"王超\"}]");
//设置目标信息
operationCustomerParam.put("target", target);
operationCustomerParam.put("taskId", "");
operationCustomerParam.put("piid", "");
//具体操作类型
operationCustomerParam.put("opinionType", "");
//审批意见
operationCustomerParam.put("comment", "同意");
operationCustomerParam.put("sequentials", "");
operationCustomerParam.put("isJump","0");
ButtonOperateVo buttonOperateVo = new ButtonOperateVo.Builder().operationId("processEmptySponsorOperation").prod("test").funcCode("JE_LCSP_JBSQ").pdid(pdid).beanId("4b5e1b2b36ae44bb8ca05a215a811c52").tableCode("JE_LCSP_JBSQ").funcId("").operationCustomerParam(operationCustomerParam).build();
processInfoRpcService.operate(buttonOperateVo);
}
}
定时任务demo
package com.je.business.controller;
import com.je.common.auth.impl.RealOrganizationUser;
import com.je.common.auth.impl.account.Account;
import com.je.common.base.util.SecurityUserHolder;
import com.je.workflow.model.*;
import com.je.workflow.rpc.dictionary.WorkFlowExecuteCustomMethodService;
import com.je.workflow.rpc.workflow.ProcessInfoRpcService;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.apache.servicecomb.provider.pojo.RpcSchema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.task.TaskExecutor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RpcSchema(schemaId = "testMyWorkFlowMethodService")
public class TestMyWorkFlowMethodServiceImpl implements WorkFlowExecuteCustomMethodService {
@Autowired
private ProcessInfoRpcService processInfoRpcService;
private static final Logger logger = LoggerFactory.getLogger(TestMyWorkFlowMethodServiceImpl.class);
@Qualifier("taskExecutor")
@Autowired
private TaskExecutor taskExecutor;
@Override
@XxlJob("testMyWorkFlowMethodServiceTask")
public void executeCustomMethod(EventSubmitDTO eventSubmitDTO) {
System.out.println("----------------------------------------------------定时任务执行--------------------------------------------------");
taskExecutor.execute(() -> {
AccountVo account = new AccountVo.Builder().deptId("33ff53e1e64f491d855adebdc2bb0973").code("wangchaowy").name("王超").realUserId("933bbf6a47d34a5cad9b710da9a570a7").build();
//1.获取表单流程按钮和表单控制信息
ButtonsVo buttonsVo = new ButtonsVo.Builder().prod("test").funcCode("JE_LCSP_JBSQ").tableCode("JE_LCSP_JBSQ").beanId("4b5e1b2b36ae44bb8ca05a215a811c52").account(account).build();
List<Map<String, Object>> buttons = processInfoRpcService.getButtons(buttonsVo);
//获取流程pdid
ArrayList<Map<String, Object>> arrayList = (ArrayList) buttons.get(0).get("buttonList");
String pdid = arrayList.get(0).get("pdid").toString();
//2.获取提交的节点信息和人员信息
SubmitOutGoingNodeVo submitOutGoingNodeVo = new SubmitOutGoingNodeVo.Builder().taskId("").pdid(pdid).prod("test").beanId("4b5e1b2b36ae44bb8ca05a215a811c52").tableCode("JE_LCSP_JBSQ").account(account).build();
List<ProcessNextNodeInfoVo> submitOutGoingNode = processInfoRpcService.getSubmitOutGoingNode(submitOutGoingNodeVo);
//获取目标节点ID name 目标
String target = submitOutGoingNode.get(0).getTarget();
String nodeId = submitOutGoingNode.get(0).getNodeId();
String nodeName = submitOutGoingNode.get(0).getNodeName();
//3.执行流程按钮操作
Map<String, Object> operationCustomerParam = new HashMap<>();
//设置节点,人员信息
operationCustomerParam.put("assignee", "[{\"nodeId\":\"" + nodeId + "\",\"nodeName\":\"" + nodeName + "\",\"assignee\":\"33ff53e1e64f491d855adebdc2bb0973\",\"assigneeName\":\"王超\"}]");
operationCustomerParam.put("target", target);
operationCustomerParam.put("taskId", "");
operationCustomerParam.put("piid", "");
//具体操作类型
operationCustomerParam.put("opinionType", "");
//审批意见
operationCustomerParam.put("comment", "同意");
operationCustomerParam.put("sequentials", "");
operationCustomerParam.put("isJump", "0");
ButtonOperateVo buttonOperateVo = new ButtonOperateVo.Builder().operationId("processEmptySponsorOperation").prod("test").funcCode("JE_LCSP_JBSQ").pdid(pdid).beanId("4b5e1b2b36ae44bb8ca05a215a811c52").tableCode("JE_LCSP_JBSQ").funcId("").operationCustomerParam(operationCustomerParam).account(account).build();
processInfoRpcService.operate(buttonOperateVo);
});
System.out.println("-----------------------------------------------定时任务执行结束-------------------------------------------------------");
}
}
最后编辑: 王超 文档更新时间: 2025-01-15 16:00 作者:于春辉