08接收任务

一、接收任务

接收任务(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;
    }



posted @ 2019-12-25 22:09  Guorisy  阅读(306)  评论(0编辑  收藏  举报