yangys
2025-08-20 432198337fb3d8a99fadb4b7825771d68bb10b9e
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/execute/BatchDispatchService.java
@@ -1,13 +1,17 @@
package org.springblade.mdm.flow.service.execute;
import org.apache.commons.lang3.StringUtils;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.mdm.flow.constants.FlowVariableContants;
import org.springblade.mdm.flow.service.ApproveRecordService;
import org.springblade.mdm.flow.service.FlowCommonService;
import org.springblade.mdm.flow.service.FlowProgramFileService;
import org.springblade.mdm.flow.vo.BatchDispatchVO;
import org.springblade.mdm.program.service.NcNodeAutoCreateService;
@@ -27,8 +31,12 @@
   private ApproveRecordService approveRecordService;
   @Autowired
   private TaskService taskService;
   @Autowired
   private RuntimeService runtimeService;
   @Autowired
   private FlowCommonService flowCommonService;
   @Transactional
   public void batchCompleteTask(BatchDispatchVO batchDispatchVO) {
   public void batchDispatchTask(BatchDispatchVO batchDispatchVO) {
      //String[] taskIds, String[] processInstanceIds, String comment, String assignee
      if(StringUtils.isBlank(batchDispatchVO.getAssignee())){
         throw new ServiceException("缺少处理人参数");
@@ -46,16 +54,14 @@
         taskId = taskIds[i];
         processInstanceId = batchDispatchVO.getProcessInstanceIds()[i];
         Task task = taskService.createTaskQuery()
            .taskId(taskId)
            .singleResult();
         taskService.complete(taskId, variables);
         Task task = getTask(taskId);
         if (StringUtil.isNoneBlank(processInstanceId, comment)) {
            taskService.addComment(taskId, processInstanceId, comment);
         }
         approveRecordService.saveApproveRecords(task,FlowContants.Y,comment);
         taskService.complete(taskId, variables);
      }
   }
@@ -63,11 +69,97 @@
    * 自动批量派工
    * @param batchDispatchVO 批量处理参数
    */
   public void batchAutoCompleteTask(BatchDispatchVO batchDispatchVO) {
      //TODO 带实现
   @Transactional
   public void batchAutoDispatchTask(BatchDispatchVO batchDispatchVO) {
      //TODO 待实现
      checkBatchParameter(batchDispatchVO);
      String[] taskIds = batchDispatchVO.getTaskIds();
      String taskId;
      String processInstanceId;
      Map<String, Object> variables = Kv.create();
      //variables.put("assignee", batchDispatchVO.getAssignee());
      variables.put("approve", FlowContants.Y);//自动分派默认就是通过
      variables.put(FlowVariableContants.COMMENT,batchDispatchVO.getComment());
      ProcessInstance processInstance;
      Object programmer;
      for(int i=0;i<taskIds.length;i++) {
         taskId = taskIds[i];
         processInstanceId = batchDispatchVO.getProcessInstanceIds()[i];
         variables.put("assignee", getAutoProgrammer(processInstanceId));
         Task task = getTask(taskId);
         if (StringUtil.isNoneBlank(processInstanceId, batchDispatchVO.getComment())) {
            taskService.addComment(taskId, processInstanceId, batchDispatchVO.getComment());
         }
         approveRecordService.saveApproveRecords(task,FlowContants.Y,batchDispatchVO.getComment());
         //最后一步完成
         taskService.complete(taskId, variables);
      }
   }
   private Task getTask(String taskId) {
      return taskService.createTaskQuery()
         .taskId(taskId)
         .singleResult();
   }
   /**
    * 获取编程的工艺员id
    * @param processInstanceId
    * @return
    */
   Object getAutoProgrammer(String processInstanceId){
      ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().includeProcessVariables()
         .processInstanceId(processInstanceId)
         .singleResult();
      Object programmer = processInstance.getProcessVariables().get(FlowContants.PROGRAMMER);
      if(programmer == null){
         throw new ServiceException(processInstance.getProcessVariables().get(FlowContants.TITLE)+":未找到编程人员");
      }
      return programmer;
   }
   /**
    * 高师批量审批
    * @param batchDispatchVO
    */
   @Transactional
   public void batchApprove(BatchDispatchVO batchDispatchVO) {
      //TODO 待实现
      checkBatchParameter(batchDispatchVO);
      String[] taskIds = batchDispatchVO.getTaskIds();
      String taskId;
      String processInstanceId;
      //审批结果和处理人都一样的
      Map<String, Object> variables = Kv.create();
      variables.put(FlowVariableContants.APPROVE, batchDispatchVO.getApprove());
      variables.put(FlowVariableContants.COMMENT, batchDispatchVO.getComment());
      for(int i=0;i<taskIds.length;i++) {
         taskId = taskIds[i];
         processInstanceId = batchDispatchVO.getProcessInstanceIds()[i];
         Task task = getTask(taskId);
         if (StringUtil.isNoneBlank(processInstanceId, batchDispatchVO.getComment())) {
            taskService.addComment(taskId, processInstanceId, batchDispatchVO.getComment());
         }
         if(FlowContants.N.equals(batchDispatchVO.getApprove())) {
            //驳回,查询上一步处理人原路驳回
            String assignee = flowCommonService.previusAssignee(processInstanceId);
            variables.put(FlowVariableContants.ASSIGNEE, assignee);
         }
         approveRecordService.saveApproveRecords(task,FlowContants.Y,batchDispatchVO.getComment());
         taskService.complete(taskId, variables);
      }
   }
   /**
    * 验证批量处理参数
    * @param batchDispatchVO 批量处理参数对象