dangsn
2023-07-30 8b6a2a8255d9da50b90a086222583ba1b4a77c99
Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java
@@ -24,20 +24,21 @@
import com.vci.ubcs.flow.engine.constant.FlowEngineConstant;
import com.vci.ubcs.flow.engine.entity.FlowProcess;
import com.vci.ubcs.flow.engine.utils.FlowCache;
import com.vci.ubcs.system.user.cache.UserCache;
import com.vci.ubcs.system.user.entity.User;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.flowable.engine.HistoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.history.HistoricProcessInstanceQuery;
import org.flowable.engine.runtime.Execution;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.flowable.engine.task.Comment;
import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.Func;
@@ -45,6 +46,7 @@
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -323,6 +325,37 @@
         flow.setVariables(task.getProcessVariables());
         HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance(task.getProcessInstanceId());
         //获取上一任务信息
         HistoricActivityInstance historicActivityInstance = getPrevHistoricActivityInstance(task.getProcessInstanceId(),task.getId());
         flow.setHistoryActivityId(historicActivityInstance.getTaskId());
         flow.setHistoryActivityName(historicActivityInstance.getActivityName());
         //获取历史任务执行人
         if(historicActivityInstance.getActivityType().equals(FlowEngineConstant.USR_TASK)){
            User user = UserCache.getUser(TaskUtil.getUserId(historicActivityInstance.getAssignee()));
            flow.setHistoryActivityAssigne(historicActivityInstance.getAssignee());
            flow.setHistoryActivityAssigneName(user.getName());
            List<Comment> commentList = taskService.getTaskComments(historicActivityInstance.getTaskId());
            if (commentList.size() > 0) {
               flow.setHistoryActivityIdea(commentList.get(0).getFullMessage());
            }
         }
         // 获取流程发起人名称
         if (FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())) {
            List<HistoricProcessInstance> processInstanceList = historyService.createHistoricProcessInstanceQuery()
               .processInstanceId(task.getProcessInstanceId()).orderByProcessInstanceStartTime().asc().list();
            if (processInstanceList.size() > 0) {
               if (StringUtil.isNotBlank(processInstanceList.get(0).getStartUserId())) {
                  String taskUser = processInstanceList.get(0).getStartUserId();
                  User user = UserCache.getUser(TaskUtil.getUserId(taskUser));
                  if (user != null) {
                     flow.setHistoryActivityAssigne(historicActivityInstance.getAssignee());
                     flow.setHistoryActivityAssigneName(user.getName());
                  }
               }
            }
         }
         if (Func.isNotEmpty(historicProcessInstance)) {
            String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
            flow.setBusinessTable(businessKey[0]);
@@ -342,6 +375,29 @@
      });
   }
   private HistoricActivityInstance getPrevHistoricActivityInstance(String processInstanceId, String taskDefinitionId) {
      List<HistoricActivityInstance> historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId)
         .orderByHistoricActivityInstanceStartTime().asc()
         .orderByHistoricActivityInstanceEndTime().asc().list();
      List<HistoricActivityInstance> tempList = new ArrayList<>();
      int index = 0;
      for(HistoricActivityInstance historicActivityInstance : historicActivityInstanceList){
         if (StringUtils.equals(FlowEngineConstant.USR_TASK, historicActivityInstance.getActivityType())
            || FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())
            || FlowEngineConstant.END_EVENT.equals(historicActivityInstance.getActivityType())) {
            tempList.add(historicActivityInstance);
         }
         if(StringUtils.isNotEmpty(historicActivityInstance.getTaskId()) && historicActivityInstance.getTaskId().equals(taskDefinitionId)){
            index = tempList.indexOf(historicActivityInstance);
            break;
         }
      }
      if(index == 0){
         return tempList.get(0);
      }
      return tempList.get(index-1);
   }
   /**
    * 获取历史流程
    *