package org.springblade.mdm.flow.excution.dispatch; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.RuntimeService; import org.flowable.engine.delegate.DelegateExecution; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.flow.constants.FlowContants; 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.FlowCommonService; import org.springblade.mdm.flow.service.FlowProgramFileService; import org.springblade.mdm.flow.service.FlowProgramProperties; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcProgramApproved; import org.springblade.mdm.program.service.NcNodeAutoCreateService; import org.springblade.mdm.program.service.NcNodeService; import org.springblade.mdm.program.service.NcProgramApprovedService; import org.springblade.mdm.utils.EntityUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; /** * 临时派工审批通过执行的事件,功能:建立临时节点,插入审批完成记录 */ @Slf4j @Component("tempDispatchFinishDataHandler") public class TempFinishDataHandler implements FinishDataHandler{ @Autowired private NcProgramApprovedService approvedService; @Autowired private FlowProgramFileService flowProgramFileService; @Autowired private NcNodeService ncNodeService; /** * 在流程结束时自动调用,由 * @param props 流程属性 */ public void handleData(FlowProgramProperties props ) { // 执行业务逻辑 String programName = NcNodeService.genProgramName(props.getDrawingNo(),props.getProcessNo()); //临时流程,不处理树,只处理文件.由于导出是基于节点的,这里创建临时节点,不在树立展示 NcNode tempPkgNode = new NcNode(); tempPkgNode.setNodeType(NcNode.TYPE_PROGRAM_PACKAGE); tempPkgNode.setIsLastEdition(0); tempPkgNode.setProcessNo(props.getProcessNo()); tempPkgNode.setMachineCode(props.getMachineCode()); tempPkgNode.setProcessName(props.getProcessName()); tempPkgNode.setProcessEdition(props.getProcessEdition()); tempPkgNode.setName(programName); tempPkgNode.setParentIds("0,4"); tempPkgNode.setIsLocked(0); tempPkgNode.setCraftEdition(props.getCraftEdition()); tempPkgNode.setDrawingNo(props.getDrawingNo()); tempPkgNode.setProcessInstanceId(props.getProcessInstanceId()); ncNodeService.save(tempPkgNode); List newFlowFileList = flowProgramFileService.listByProcessInstanceId(props.getProcessInstanceId()); for(FlowProgramFile newFlowFile : newFlowFileList) { NcNode tempProgramNode = new NcNode(); BeanUtils.copyProperties(tempPkgNode,tempProgramNode); EntityUtil.clearBaseProperties(tempProgramNode); tempProgramNode.setNodeType(NcNode.TYPE_PROGRAM_FILE); tempProgramNode.setName(newFlowFile.getName()); BeanUtils.copyProperties(tempPkgNode,tempProgramNode); tempProgramNode.setParentId(tempPkgNode.getId()); tempProgramNode.setIsLastEdition(1);//导出时需要使用最新节点 tempProgramNode.setParentIds(tempPkgNode.getParentIds()+","+tempPkgNode.getId()); tempProgramNode.setProcessInstanceId(props.getProcessInstanceId()); tempProgramNode.setFlowProgramFileId(newFlowFile.getId()); ncNodeService.save(tempProgramNode); } addApproveTable(tempPkgNode,props); log.info("流程已完成in DispatchFinishListener"); } /** * 保存审批完成的记录 * @param packageNode * @param props */ void addApproveTable(NcNode packageNode,FlowProgramProperties props){ NcProgramApproved approved = new NcProgramApproved(); approved.setProgramName(packageNode.getName()); approved.setNcNodeId(packageNode.getId());//程序包节点id approved.setTitle(props.getTitle()); approved.setProgrammerId(props.getProgrammerId()); approvedService.save(approved); } }