zoukankan      html  css  js  c++  java
  • 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;
        }



  • 相关阅读:
    React入门实例
    【C语言】一些重要的知识点
    【C语言】字符串模块
    【C语言】指针模块
    贝尔曼福特算法
    dijkstra算法
    拓扑序列
    树和图的广度优先遍历
    树和图的深度优先遍历
    回溯剪枝,dfs,bfs
  • 原文地址:https://www.cnblogs.com/Guorisy/p/12099263.html
Copyright © 2011-2022 走看看