package org.springblade.mdm.flow.excution.dispatch; import com.alibaba.excel.util.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.springblade.mdm.flow.constants.FlowContants; 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.FlowProgramProperties; import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO; 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.springblade.mdm.utils.ProgramFileNameParser; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; /** * 普通派工完成数据处理器,功能:插入审批表数据,DispatchFinishListener调用 */ @Slf4j @Component("normalDispatchFinishDataHandler") public class NormalFinishDataHandler implements FinishDataHandler{ @Autowired private NcProgramApprovedService approvedService; @Autowired private FlowProgramFileService flowProgramFileService; @Autowired private NcNodeService ncNodeService; @Autowired private NcNodeAutoCreateService ncNodeAutoCreateService; /** * DispatchFinishListener中调用 * @param props 执行对象 */ public void handleData(FlowProgramProperties props) { // 执行业务逻辑 NcNode packageNode; if(FlowContants.Y.equals(props.getHasCuredProgram())){ //有固化 packageNode = ncNodeService.getById(props.getCuredNodeId()); if(FlowContants.N.equals(props.getCureProgramUseable())) { //程序不可用 //原来的固化节点锁定 packageNode.lock(); ncNodeService.updateById(packageNode); Integer newVersion = packageNode.genNewVersionNumber(); packageNode = ncNodeAutoCreateService.createNodeTreeWithProgram(props,newVersion); }else{ //可用,升版(修改其工序版次),原来的节点清除 moveToNewProcessEdition(packageNode,props); } }else{ //普通试切 packageNode = ncNodeAutoCreateService.createNodeTreeWithProgram(props,1); } addApproveTable(packageNode,props); //updateApproveRecordNodeId(instId, packageNode.getId()); log.info("普通流程已完成in DispatchFinishListener"); } /** * 节点移动到新的工序版本下 * @param packageNode 程序包名节点 * @param props 流程属性 */ private void moveToNewProcessEdition(NcNode packageNode, FlowProgramProperties props) { ncNodeService.deleteMachineNodeByParentId(packageNode.getParentId()); FlowProgramProperties tempProps = new FlowProgramProperties(); BeanUtils.copyProperties(props,tempProps); tempProps.setProcessDefinitionKey(FlowContants.CURE_PROCESS_KEY);//临时修改其为固化,在固化下创建节点 NcNode machineNode = ncNodeAutoCreateService.createNodeTreeToMachine(tempProps); //移动历史节点到新的版次节点下 List packageHisNodes = ncNodeService.getNodeHistory(packageNode);//该包的历史节点列表 for(NcNode hisPackageNode : packageHisNodes){ hisPackageNode.setParentId(machineNode.getParentId()); hisPackageNode.setParentIds(machineNode.getParentIds()); List oriProgramNodes = ncNodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list(); for(NcNode oldProgramNode : oriProgramNodes){ oldProgramNode.setParentIds(hisPackageNode.getParentIds()+","+hisPackageNode.getId()); } ncNodeService.updateBatchById(oriProgramNodes); } ncNodeService.updateBatchById(packageHisNodes); //移动程序包名节点 packageNode.setProcessEdition(tempProps.getProcessEdition()); packageNode.setParentId(machineNode.getParentId()); packageNode.setParentIds(machineNode.getParentIds()); packageNode.setName(tempProps.getDrawingNo()+"-"+tempProps.getProcessNo()+"-"+tempProps.getProcessEdition()); this.ncNodeService.updateById(packageNode); //移动程序节点 List programNodes = ncNodeService.getProgramFilesByPackageId(packageNode.getId()); for(NcNode programNode : programNodes){ programNode.setName(buildNewFilename(programNode.getName(),tempProps.getProcessEdition()));//名称修改,工序版次部分 programNode.setParentIds(packageNode.getParentIds()+","+packageNode.getId()); programNode.setProcessEdition(tempProps.getProcessEdition());//修改工序版次 programNode.setVersionNumber(packageNode.getVersionNumber()); } ncNodeService.updateBatchById(programNodes); } String buildNewFilename(String filename,String newProcessEdition){ ProgramNameVO pnameVO = ProgramFileNameParser.parseProgramName(filename); String ext = FilenameUtils.getExtension(filename); String name= pnameVO.getDrawingNo()+"-"+pnameVO.getProcessNo()+"-"+newProcessEdition+"-"+pnameVO.getSegmentCount()+"-"+pnameVO.getSegmentNo(); if(StringUtils.isNotBlank(ext)){ name += "."+ext; } return name; } /** * 保存审批完成的记录 * @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.getActProgrammerId()); approved.setProcessInstanceId(props.getProcessInstanceId()); approvedService.save(approved); } }