08接收任务
程序员文章站
2024-01-14 13:18:58
一、接收任务 接收任务(ReceiveTask)即等待任务,接收任务是一个简单任务,它会等待对应消息的到达。当前,官方只实现了这个任务的java语义。 当流程达到接收任务,流程状态会保存到数据库中。在任务创建后,意味着流程会进入等待状态,直到引擎接收了一个特定的消息, 这会触发流程穿过接收任务继续执 ......
一、接收任务
接收任务(receivetask)即等待任务,接收任务是一个简单任务,它会等待对应消息的到达。当前,官方只实现了这个任务的java语义。 当流程达到接收任务,流程状态会保存到数据库中。在任务创建后,意味着流程会进入等待状态,直到引擎接收了一个特定的消息, 这会触发流程穿过接收任务继续执行。
1、流程图
代码实现:
//运行流程
@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;
}