| | |
| | | import com.alibaba.excel.util.StringUtils; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.io.FilenameUtils; |
| | | import org.apache.commons.io.IOUtils; |
| | | import org.springblade.core.oss.OssTemplate; |
| | | import org.springblade.core.oss.model.BladeFile; |
| | | import org.springblade.mdm.basesetting.machine.entity.Machine; |
| | | import org.springblade.mdm.basesetting.machine.service.MachineService; |
| | | import org.springblade.mdm.flow.constants.FlowContants; |
| | | import org.springblade.mdm.flow.entity.FlowProgramFile; |
| | | import org.springblade.mdm.flow.excution.ListenerHelper; |
| | | 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.program.service.ProgramAnnotationService; |
| | | import org.springblade.mdm.program.service.programannotation.*; |
| | | import org.springblade.mdm.utils.ProgramFileNameParser; |
| | | import org.springblade.system.pojo.entity.DictBiz; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.io.ByteArrayInputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | |
| | | @Component("normalDispatchFinishDataHandler") |
| | | public class NormalFinishDataHandler implements FinishDataHandler{ |
| | | @Autowired |
| | | private NcProgramApprovedService approvedService; |
| | | @Autowired |
| | | private FlowProgramFileService flowProgramFileService; |
| | | @Autowired |
| | | private MachineAnnotationConfig annotationConfig; |
| | | @Autowired |
| | | private MachineService machineService; |
| | | @Autowired |
| | | private NcNodeService ncNodeService; |
| | | @Autowired |
| | | private NcNodeAutoCreateService ncNodeAutoCreateService; |
| | | @Autowired |
| | | private ProgramAnnotationService programAnnotationService; |
| | | @Autowired |
| | | private ListenerHelper listenerHelper; |
| | | @Autowired |
| | | private OssTemplate ossTemplate; |
| | | |
| | | /** |
| | | * DispatchFinishListener中调用 |
| | | * @param props 流程属性 |
| | | */ |
| | | public void handleData(FlowProgramProperties props) { |
| | | public void handleData(FlowProgramProperties props) throws IOException { |
| | | // 执行业务逻辑 |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | NcNode packageNode; |
| | |
| | | |
| | | packageNode = ncNodeAutoCreateService.createNodeTreeWithProgram(props,newVersion); |
| | | }else{ |
| | | //可用,升版(修改其工序版次),原来的节点清除 |
| | | //String oriProcessEdition = packageNode.getProcessEdition(); |
| | | //可用,空升版(修改其工序版次),原来的节点清除 |
| | | moveToNewProcessEdition(packageNode,props); |
| | | |
| | | //更新已固化的,同名、不同机床组的程序为锁定状态 |
| | | ncNodeService.lockSameNameOtherMachineGroupProgramPackage(packageNode); |
| | | } |
| | | }else{ |
| | | //普通试切 |
| | |
| | | ncNodeService.updateById(packageNode); |
| | | } |
| | | |
| | | addApproveTable(packageNode,props); |
| | | listenerHelper.addApproveTable(packageNode,props); |
| | | |
| | | log.info("普通流程已完成in DispatchFinishListener"); |
| | | } |
| | |
| | | * @param packageNode 程序包名节点 |
| | | * @param props 流程属性 |
| | | */ |
| | | private void moveToNewProcessEdition(NcNode packageNode, FlowProgramProperties props) { |
| | | ncNodeService.deleteMachineNodeByParentId(packageNode.getParentId()); |
| | | private void moveToNewProcessEdition(NcNode packageNode, FlowProgramProperties props) throws IOException { |
| | | //ncNodeService.deleteMachineGroupNodeByParentId(); |
| | | ncNodeService.getBaseMapper().deleteById(packageNode.getParentId());//删除机床组节点 |
| | | |
| | | FlowProgramProperties tempProps = new FlowProgramProperties(); |
| | | BeanUtils.copyProperties(props,tempProps); |
| | |
| | | NcNode machineGroupNode = ncNodeAutoCreateService.createNodeTreeToMachineGroup(tempProps); |
| | | |
| | | //移动历史节点到新的版次节点下 |
| | | /* |
| | | List<NcNode> packageHisNodes = ncNodeService.getTryNodeHistory(packageNode);//该包的历史节点列表 |
| | | for(NcNode hisPackageNode : packageHisNodes){ |
| | | hisPackageNode.setParentId(machineGroupNode.getId()); |
| | |
| | | ncNodeService.updateBatchById(oriProgramNodes); |
| | | } |
| | | ncNodeService.updateBatchById(packageHisNodes); |
| | | |
| | | */ |
| | | //移动程序包名节点 |
| | | packageNode.setProcessEdition(tempProps.getProcessEdition()); |
| | | packageNode.setParentId(machineGroupNode.getId()); |
| | | packageNode.setParentIds(machineGroupNode.getParentIds()+","+machineGroupNode.getId()); |
| | | packageNode.setParentIds(machineGroupNode.subNodeParentIds()); |
| | | packageNode.setName(tempProps.getDrawingNo()+"-"+tempProps.getProcessNo()+"-"+tempProps.getProcessEdition()); |
| | | this.ncNodeService.updateById(packageNode); |
| | | |
| | | this.ncNodeService.updateById(packageNode); |
| | | Machine machine = machineService.getByCode(packageNode.getMachineCode()); |
| | | //移动程序节点 |
| | | //List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList(); |
| | | List<NcNode> programNodes = ncNodeService.getProgramFilesByPackageId(packageNode.getId()); |
| | | for(NcNode programNode : programNodes){ |
| | | FlowProgramFile progFile = this.flowProgramFileService.getById(programNode.getFlowProgramFileId()); |
| | | |
| | | programNode.setName(buildNewFilename(programNode.getName(),tempProps.getProcessEdition()));//名称修改,工序版次部分 |
| | | programNode.setParentIds(packageNode.getParentIds()+","+packageNode.getId()); |
| | | programNode.setParentIds(packageNode.subNodeParentIds()); |
| | | programNode.setProcessEdition(tempProps.getProcessEdition());//修改工序版次 |
| | | programNode.setVersionNumber(packageNode.getVersionNumber()); |
| | | if(progFile.isProgram()) { |
| | | programNode.setName(buildNewFilename(programNode.getName(), tempProps.getProcessEdition()));//名称修改,工序版次部分 |
| | | setNewProgramNameAnnotation(programNode.getName(), progFile, machine.getControlSystem()); |
| | | } |
| | | } |
| | | ncNodeService.updateBatchById(programNodes); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 构建新的程序市名 |
| | | * @param filename 程序包名 |
| | | * @param newProcessEdition 新的工序版次 |
| | | * @return 新的程序文件名 |
| | | */ |
| | | String buildNewFilename(String filename,String newProcessEdition){ |
| | | ProgramNameVO pnameVO = ProgramFileNameParser.parseProgramName(filename); |
| | | String ext = FilenameUtils.getExtension(filename); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 保存审批完成的记录 |
| | | * @param packageNode |
| | | * @param props |
| | | * 设置固化注释,实现方式,获取文件字节下,修改后替换文件 |
| | | * @param flowProgramFile oss 文件 |
| | | * |
| | | */ |
| | | void addApproveTable(NcNode packageNode,FlowProgramProperties props){ |
| | | NcProgramApproved approved = new NcProgramApproved(); |
| | | void setNewProgramNameAnnotation(String filename,FlowProgramFile flowProgramFile, String controlSystem) throws IOException { |
| | | |
| | | approved.setProgramName(packageNode.getName()); |
| | | approved.setNcNodeId(packageNode.getId());//程序包节点id |
| | | approved.setTitle(props.getTitle()); |
| | | approved.setProgrammerId(props.getActProgrammerId()); |
| | | approved.setProcessInstanceId(props.getProcessInstanceId()); |
| | | approvedService.save(approved); |
| | | try(InputStream ins = ossTemplate.statFileStream(flowProgramFile.getOssName());){ |
| | | ByteArrayInputStream byteInputStream = new ByteArrayInputStream(IOUtils.toByteArray(ins)); |
| | | |
| | | //List<DictBiz> annoDictList = programAnnotationService.getAnnotionDictList(); |
| | | |
| | | AnnotationProcessor annoProcessor = ProcessorHelper.getProcessor(controlSystem,this.annotationConfig); |
| | | /* |
| | | AnnotationProperties annoProps = annotationConfig.getConfigMap().get(controlSystem); |
| | | if(annoProps == null){ |
| | | annoProps = AnnotationProperties.getDefault(); |
| | | }*/ |
| | | InputStream finishedStream = annoProcessor.setFilenameAnnotation(filename,byteInputStream); |
| | | //InputStream finishedStream = AnnotationUtil.setAnnotationAndGetInputStream(byteInputStream, "GH", annoProps.getStatusLineIndex(), controlSystem, annoDictList); |
| | | try(finishedStream) { |
| | | finishedStream.reset(); |
| | | BladeFile bfile = ossTemplate.putFile(flowProgramFile.getName(), finishedStream); |
| | | //替换原有的文件地址 |
| | | flowProgramFile.setOssName(bfile.getName()); |
| | | flowProgramFile.setName(filename); |
| | | flowProgramFileService.updateById(flowProgramFile); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |