package org.springblade.mdm.flow.excution.replace; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.RuntimeService; import org.flowable.engine.delegate.DelegateExecution; import org.springblade.mdm.flow.entity.ApproveRecord; import org.springblade.mdm.flow.entity.FlowProgramFile; import org.springblade.mdm.flow.service.ApproveRecordService; import org.springblade.mdm.flow.service.FlowProgramFileService; import org.springblade.mdm.flow.service.ReplaceFlowService; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.service.NcNodeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; /** * 替换完成执行的事件,功能:插入审批表数据 */ @Slf4j @Component("replaceFinishListener") public class ReplaceFinishListener { @Autowired private RuntimeService runtimeService; @Autowired private ApproveRecordService approveRecordService; @Autowired private FlowProgramFileService flowProgramFileService; @Autowired private NcNodeService ncNodeService; /** * 在流程结束时自动调用,(配置在审批结束事件的executelistener中了) * @param execution 执行对象 */ public void handle(DelegateExecution execution) { ReplaceFlowService a; // 执行业务逻辑 String instId = execution.getProcessInstanceId(); Long nodeId = runtimeService.getVariable(execution.getId(),ReplaceFlowService.NODE_ID,Long.class); log.info("事件名称{},instid={}" , execution.getEventName(),instId); List programFiles = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, instId).list(); replaceProgram(nodeId,programFiles); log.info("流程已完成 in replaceFinishListener"); } /** * 替换原来程序的文件 * @param programFiles 新的文件 */ void replaceProgram(Long nodeId, List programFiles){ NcNode packageNode = ncNodeService.getById(nodeId); //程序包名节点升级版本 //TODO还是新创建一个? //packageNode.setVersionNumber(packageNode.genNewVersionNumber()); //ncNodeService.updateById(packageNode); List programFileNodes = ncNodeService.getProgramFilesByPackageId(nodeId); for(NcNode fileNode: programFileNodes){ fileNode.setIsLastEdition(0); ncNodeService.updateById(fileNode); } for(FlowProgramFile programFile: programFiles){ NcNode node = new NcNode(); node.setIsLastEdition(1); node.setProcessEdition(packageNode.getProcessEdition()); node.setName(programFile.getName()); node.setParentIds(packageNode.getParentIds()+","+packageNode.getId()); node.setParentId(packageNode.getId()); node.setFlowProgramFileId(programFile.getId()); node.setMachineCode(packageNode.getMachineCode()); node.setProcessName(packageNode.getProcessName()); node.setNodeType(NcNode.TYPE_PROGRAM_FILE); node.setVersionNumber(1); node.setCraftEdition(packageNode.getCraftEdition()); node.setIsLocked(0); ncNodeService.save(node); } } void updateApproveRecordNodeId(NcNode pkgNode){ //更新审批记录的ncNodeId approveRecordService.lambdaUpdate() .eq(ApproveRecord::getProcessInstanceId, pkgNode.getProcessInstanceId()) .set(ApproveRecord::getNcNodeId,pkgNode.getId()).update(); } }