package org.springblade.mdm.flow.service.execute; import org.apache.commons.lang3.StringUtils; import org.flowable.task.api.Task; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.support.Kv; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import org.springblade.mdm.flow.constants.FlowContants; import org.springblade.mdm.flow.service.FlowCommonService; import org.springblade.mdm.flow.service.FlowProgramFileService; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.service.NcNodeAutoCreateService; import org.springblade.mdm.program.service.NcNodeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Map; /** * 试切流程完成任务的实现 */ @Service("tryFlowCompleteService") public class TryFlowCompleteService extends AbstractFlowCompleteService { @Autowired private FlowProgramFileService flowProgramFileService; @Autowired private NcNodeService ncNodeService; @Autowired private NcNodeAutoCreateService ncNodeAutoCreateService; @Autowired private FlowCommonService flowCommonService; @Override public void completeTask(String taskId, String processInstanceId, String comment, Map variables) { Task task = currentTask(taskId); String operateResult = this.getApproveResult(variables); if(task.getTaskDefinitionKey().equals("programmingTask")) {//编制节点 flowProgramFileService.checkProgramFiles(processInstanceId,"Y".equals(operateResult)); } if (StringUtil.isNoneBlank(processInstanceId, comment)) { taskService.addComment(taskId, processInstanceId, comment); } // 非空判断 if (Func.isEmpty(variables)) { variables = Kv.create(); } variables.put(FlowContants.LAST_STEP_USER_NICKNAME, AuthUtil.getNickName()); if(!variables.containsKey("assignee")) { throw new ServiceException("请指定流程下一步处理人"); } addApproveRecord(taskId,comment,variables); //在编制任务时,创建节点(没有节点则创建,有就直接使用 if(task.getTaskDefinitionKey().equals("programmingTask") && "Y".equals(operateResult)) { ncNodeAutoCreateService.createNodeTreeWithProgram(flowCommonService.getProgramProperties(processInstanceId)); } if(!"confirmIsUseableTask".equals(task.getTaskDefinitionKey())){ variables.remove(FlowContants.PROCESS_EDITION);//TODO 临时错误是,组长提交的时候会提交一个空串,清空了内部数据 }else{ //工序版次不一致,并且审核通过(可用)是,才更新为新的工序版次号 Map currentVars = task.getProcessVariables(); if(StringUtils.equals(String.valueOf(currentVars.getOrDefault(FlowContants.IS_PROCESS_EDITION_SAME, FlowContants.Y)),FlowContants.N) && operateResult.equals(FlowContants.Y)){ //工序版次不一致,并且审核通过(可用) 升版,更新为新的工序版本,后续进入 校对 节点 Object objProcessEdition = variables.get(FlowContants.PROCESS_EDITION); if(objProcessEdition == null){ //应该升版,但前端没有传递该参数 throw new ServiceException("请录入新的工序版本号"); } String newProcessEdition = String.valueOf(objProcessEdition); NcNode programPkgNode= ncNodeService.getByProcessInstanceId(processInstanceId); programPkgNode.setProcessEdition(newProcessEdition); ncNodeService.updateById(programPkgNode); //创建程序树 //节点在试切下还是固化下面?确认了,节点建立在试切下,最终走固化流程后才进入固化 //确认程序可用了,进入校对。这里直接建立节点,因为可能不走编程节点了 this.ncNodeAutoCreateService.createNodeTreeWithProgram(flowCommonService.getProgramProperties(processInstanceId)); }else{ //工序版次一致,但是拒绝了,后续会进入编制节点 variables.remove(FlowContants.PROCESS_EDITION); } } taskService.complete(taskId, variables); } }