【activiti审批手动回退上一任务,处理垃圾数据,不是常规回退】

记录activiti手动回退上一节点方法

开发背景

项目中出现了节点操作同意时,节点没有走到下一节点,反而回到了上一节点生成了任务。所以需要手动回滚至上一节点,并清除审批轨迹的日志。
因为不存在多任务情况,以及实例都是未完成情况,所以代码较为简单。
public Task errorHistoryData(String processInstanceId) throws Exception{
      List<HistoricTaskInstance> historicTaskInstanceList = historyService.createHistoricTaskInstanceQuery()
              .processInstanceId(processInstanceId)
              .orderByHistoricTaskInstanceEndTime().desc()
              .list();
      //找到历史最新的历史任务
      if(CollectionUtils.isEmpty(historicTaskInstanceList)){
        throw new Exception("未找到任务");
      }else{
        if(historicTaskInstanceList.size() < 2){
          throw new Exception("任务数量异常");
        }
      }
      HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
      //判断实例是否结束
      if(null == historicProcessInstance){
        throw new Exception("未找到实例");
      }else{
        if(null != historicProcessInstance.getEndTime()){
          throw new Exception("实例已结束");
        }
      }
      //删除当前任务和历史任务
      taskMapper.deleteTask(historicTaskInstanceList.get(historicTaskInstanceList.size()-1).getId());
      taskMapper.deleteHisTask(historicTaskInstanceList.get(historicTaskInstanceList.size()-1).getId());
      //execution替换act_id字段为当前任务act_id
      taskMapper.updateExecutionActId(historicTaskInstanceList.get(historicTaskInstanceList.size()-1).getTaskDefinitionKey(),historicTaskInstanceList.get(0).getTaskDefinitionKey(),historicTaskInstanceList.get(historicTaskInstanceList.size()-1).getExecutionId());
      //删除当前任务实例参数
      taskMapper.deleteHisVarinst(historicTaskInstanceList.get(historicTaskInstanceList.size()-1).getId());
      //新增历史任务为当前任务,调用完成方法生成代办任务
      Map<String, Object> taskMap = new HashMap<>();
      taskMap.put("id", historicTaskInstanceList.get(0).getId());
      taskMap.put("rev",1);
      taskMap.put("executionId",historicTaskInstanceList.get(0).getExecutionId());
      taskMap.put("procInstId",historicTaskInstanceList.get(0).getProcessInstanceId());
      taskMap.put("procDefId",historicTaskInstanceList.get(0).getProcessDefinitionId());
      taskMap.put("name",historicTaskInstanceList.get(0).getName());
      taskMap.put("taskDefKey",historicTaskInstanceList.get(0).getTaskDefinitionKey());
      taskMap.put("assignee",SecurityUtils.getLoginUser().getUserName());
      taskMap.put("priority",historicTaskInstanceList.get(0).getPriority());
      taskMap.put("createTime",historicTaskInstanceList.get(0).getCreateTime());
      taskMap.put("suspensionState",1);
      taskMap.put("tenantId",historicTaskInstanceList.get(0).getTenantId());
      taskMap.put("formKey",historicTaskInstanceList.get(0).getFormKey());
      taskMap.put("businessKey",historicTaskInstanceList.get(0).getBusinessKey());
      taskMapper.insertRunTask(taskMap);
      //删除日志
      taskMapper.deleteComment(historicTaskInstanceList.get(historicTaskInstanceList.size()-1).getId());
      //完成任务
      TaskResultDTO data = new TaskResultDTO();
      HashMap<String, Object> variable = new HashMap<>();
      variable.put("approvalStatus", "0");
      data.setVariable(variable);
      Task task = this.completeByTask(historicTaskInstanceList.get(0).getId(), data);
      return task;
    }
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值