activity工作流设置监听器示例

类型一:在过程添加监听器

应用于在2节点有多人处理,其中所有人同意则结束流程,任意一人拒绝后,流程返回1节点的情景

此时我们在A线上设置监听器,事件选为end,如图

代码如下:

@Service(value="上方图片中的Delegate expression")
public class AirSignListenerService implements ExecutionListener {
   
   private static final long serialVersionUID = 1L;
   @Autowired
   private ActTaskService actTaskService;
   @Autowired
   private AirTaskInfoDao airTaskInfoDao;
    
   @Override
   public void notify(DelegateExecution execution){
         String executionId = execution.getId();
         //流程实例id
         String procInsId = execution.getProcessInstanceId();
         // 总共同意的人
         int signCount = Integer.parseInt( execution.getEngineServices()
               .getRuntimeService().getVariable( executionId , "signCount" ).toString() );

         // 总共会签的人数
         List list = ( List ) execution.getEngineServices().getRuntimeService()
               .getVariable( executionId , "user_list" );
         int signSize = list.size();
         if(signCount == signSize){
            System.out.println("全部同意" );
            execution.getEngineServices()
                  .getRuntimeService().setVariable( executionId , "pass","1" );
            AirTaskInfo airTaskInfo = airTaskInfoDao.getByProcInsId(procInsId);
            airTaskInfo.setFormState(TestTaskInfo.FORM_STATE_04);
            airTaskInfo.setTestStage(TestTaskInfo.TEST_FINISH);
            airTaskInfoDao.updateTestStageAndFormState(airTaskInfo);
         }else {
            System.out.println("有人不同意" );
            execution.getEngineServices()
                  .getRuntimeService().setVariable( executionId , "pass","0" );
         }
   }
   
}

这里的signCount用于记录同意的人数,与选定的全部人数相比,若少于全部人数说明有人拒绝,若相等说明全部同意,此时给pass重新赋值

流程中需有以下方法统计

public void procParam(String taskId,Map<String, Object> vars,String param){
   List<Task> taskResultList = taskService.createTaskQuery().taskId(taskId)
         .list();
   // 当前executionId
   String currentExecutionId = taskResultList.get(0).getExecutionId();
   // 当前签署总数
   if(null == runtimeService.getVariable(currentExecutionId, param)){
      runtimeService.setVariable(currentExecutionId, param, "0");
   }
   System.out.println("------------------------==="+runtimeService.getVariable(currentExecutionId, param).toString());
   String currentSignCount = StringUtils.defaultString(runtimeService
         .getVariable(currentExecutionId, param).toString(), "0");
   if ( "1".equals(vars.get("pass")) )
   {
      // 签署数+1
      runtimeService.setVariable(currentExecutionId, param,
            Integer.parseInt(currentSignCount) + 1);

   }
}

类型二:在节点设置监听器

可应用于流程节点完成后自动执行操作,例如一个流程结束后自动触发另一个流程

在流程的结束节点设置监听,事件为end,操作同类型一

@Service(value = "同类型一")
public class startTestReadyProcessListener implements ExecutionListener {
    @Autowired
    private ActTaskService actTaskService;

    @Override
    public void notify(DelegateExecution execution) throws Exception {
        String executionId = execution.getId();
        String procInsId = execution.getProcessInstanceId();
        //获取流程中所有变量
        Map<String, Object> variables = execution.getEngineServices().getRuntimeService().getVariables(executionId);
        String key = (String)variables.get("key");
        String testTaskId = (String)variables.get("testTaskId");
        //判断是否为终止流程操作
        if(StringUtils.isBlank(key)){
            actTaskService.startProcess(ActUtils.PD_NE_FORM_TEST_READY[0], ActUtils.PD_NE_FORM_TEST_READY[1], testTaskId, "流程", variables,"",ActUtils.PD_NE_FORM_TEST_READY[2],ActUtils.PD_NE_FORM_TEST_READY[3]);
        }else{
            if("1".equals(key)){
                actTaskService.startProcess(ActUtils.PD_NE_FORM_TEST_EXECUTE[0], ActUtils.PD_NE_FORM_TEST_EXECUTE[1], testTaskId, "流程", variables,"",ActUtils.PD_NE_FORM_TEST_EXECUTE[2],ActUtils.PD_NE_FORM_TEST_EXECUTE[3]);
            }else if("2".equals(key)){

            }
        }
    }
}

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值