一、接收任务
接收任务(ReceiveTask)即等待任务,接收任务是一个简单任务,它会等待对应消息的到达。当前,官方只实现了这个任务的java语义。 当流程达到接收任务,流程状态会保存到数据库中。在任务创建后,意味着流程会进入等待状态,直到引擎接收了一个特定的消息, 这会触发流程穿过接收任务继续执行。
1、流程图
![](https://img2018.cnblogs.com/i-beta/1771568/201912/1771568-20191225220821025-1851031601.png)
代码实现:
//运行流程
@Test
public void doTask() {
RuntimeService runtimeService = this.processEngine.getRuntimeService();
String processDefinitionKey = "myProcess";
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println("流程启动成功:" + processInstance.getId());
/** 使用流程变量设置当日销售额,用来传递业务参数 */
int value = 0;// 应该是去查询数据库,进行汇总 ---耗时操作
int tryNum=0;//尝试汇总次数
while (true) {
tryNum++;
try {
value = this.hzxx();
break;
} catch (Exception e) {
e.printStackTrace();
if(tryNum==10) {
System.out.println("尝试10次汇总。全部失败,已终止汇总");
break;
}
}
}
runtimeService.setVariable(processInstance.getId(), "当前的销售额", value);
/** 向后执行一步,如果流程处于等待状态,使得流程继续执行 */
runtimeService.signal(processInstance.getId());
/** 从流程变量中获取汇总当日销售额的值 */
Integer saleMoney = (Integer) runtimeService//
.getVariable(processInstance.getId(), "当前的销售额");
System.out.println(saleMoney);
System.out.println("发送短信");
Boolean flag = false;
int num = 0;
do {
flag = send();
num++;
if (num == 10) {
System.out.println("尝试10次发送。全部失败,已终止发送");
break;
}
} while (!flag);
/** 向后执行一步,如果流程处于等待状态,使得流程继续执行 */
runtimeService.signal(processInstance.getId());
System.out.println("流程执行完成");
}
//汇总信息
public Integer hzxx() {
// 查询数据库
System.out.println("数据汇总中....");
try {
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("数据汇总完成");
return 10000;
}
//发送短信
private Boolean send() {
System.out.println("发送成功");
return true;
}