欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

08接收任务

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

一、接收任务

接收任务(receivetask)即等待任务,接收任务是一个简单任务,它会等待对应消息的到达。当前,官方只实现这个任务的java语义。 当流程达到接收任务,流程状态会保存到数据库中。在任务创建后,意味着流程会进入等待状,直到引擎接收了一个特定的消息, 这会触发流程穿过接收任务继续执行。

1、流程图

08接收任务

 

 

代码实现:
    //运行流程
    @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;
    }