| | |
| | | import org.apache.commons.compress.utils.IOUtils; |
| | | import org.apache.commons.compress.utils.SeekableInMemoryByteChannel; |
| | | import org.flowable.engine.*; |
| | | import org.springblade.core.tool.utils.DateUtil; |
| | | import org.springblade.core.tool.utils.FileUtil; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springblade.mdm.flow.service.CureFlowService; |
| | | import org.springblade.mdm.program.entity.NcProgram; |
| | | import org.springblade.mdm.program.entity.NcProgramExchange; |
| | | import org.springblade.mdm.program.mapper.NcProgramExchangeMapper; |
| | | import org.springblade.mdm.program.vo.DncSendBackData; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | |
| | | @AllArgsConstructor |
| | | public class DncSendBackService { |
| | | |
| | | private final RepositoryService repositoryService; |
| | | private final RuntimeService runtimeService; |
| | | private final HistoryService historyService; |
| | | private final ProcessEngine processEngine; |
| | | |
| | | /** |
| | | * dnc回传文件上传 |
| | | * @param file |
| | | * @return |
| | | */ |
| | | public List<DncSendBackData> dncSendBackUpload(MultipartFile file) { |
| | | List<DncSendBackData> list=new ArrayList<>(); |
| | | try { |
| | | String fileName = file.getOriginalFilename(); |
| | | InputStream fileInputStream = file.getInputStream(); |
| | | |
| | | byte[] bytes = FileUtil.copyToByteArray(fileInputStream); |
| | | list = parseDncZipFromByteArray(bytes); |
| | | //TODO 解析为列表文件 |
| | | |
| | | DncSendBackData dt = new DncSendBackData(); |
| | | dt.setId(1L); |
| | | dt.setProgramName("test.nc"); |
| | | dt.setProgramNo("001"); |
| | | |
| | | list.add(dt); |
| | | |
| | | } catch (IOException e) { |
| | | log.error("上传dnc文件失败",e); |
| | | } |
| | | |
| | | return list; |
| | | } |
| | | |
| | | public static List<DncSendBackData> parseDncZipFromByteArray(byte[] zipData) throws IOException { |
| | | //List<DncSendBackData> datas = new ArrayList<>(); |
| | | List<DncSendBackData> datas = ZipFileDirectoryScanner.getFilesInDirectoryRecursive(zipData, ""); |
| | | //private final RepositoryService repositoryService; |
| | | //private final RuntimeService runtimeService; |
| | | //private final HistoryService historyService; |
| | | //private final ProcessEngine processEngine; |
| | | private final NcProgramService ncProgramService; |
| | | private final CureFlowService cureFlowService; |
| | | private final NcProgramExchangeMapper ncProgramExchangeMapper; |
| | | |
| | | |
| | | |
| | | /* |
| | | try (ByteArrayInputStream bis = new ByteArrayInputStream(zipData); |
| | | ZipArchiveInputStream zis = new ZipArchiveInputStream(bis)) { |
| | | |
| | | |
| | | ZipArchiveEntry entry; |
| | | while ((entry = zis.getNextZipEntry()) != null) { |
| | | DncSendBackData prog = new DncSendBackData(); |
| | | prog.setProgramName(entry.getName()); |
| | | if (!entry.isDirectory()) { |
| | | System.out.println("文件名: " + entry.getName()); |
| | | System.out.println("大小: " + entry.getSize()); |
| | | |
| | | // 读取文件内容到字节数组 |
| | | ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| | | IOUtils.copy(zis, outputStream); |
| | | byte[] fileContent = outputStream.toByteArray(); |
| | | |
| | | // 处理文件内容... |
| | | System.out.println("内容长度: " + fileContent.length); |
| | | }else{ |
| | | //文件夹,读内部文件,获取文件列表 |
| | | |
| | | System.out.println("文件夹程序:"+entry.getName()); |
| | | List<String> children = new ArrayList<>(); |
| | | prog.setChildren(children); |
| | | } |
| | | |
| | | datas.add(prog); |
| | | } |
| | | |
| | | |
| | | }*/ |
| | | return datas; |
| | | } |
| | | /** |
| | | * 入库回传文件,并启动固化流程 |
| | | * @param ids |
| | |
| | | */ |
| | | public void dncFileAccept(String ids) { |
| | | List<Long> idList = Func.toLongList(ids); |
| | | NcProgramExchange exchange; |
| | | NcProgram program; |
| | | for (Long id : idList) { |
| | | exchange = ncProgramExchangeMapper.selectById(id); |
| | | exchange.setStatus(2);//已入库状态 |
| | | program = ncProgramService.getLastNcProgram(exchange.getName()); |
| | | |
| | | //如果是已经固化的则不需要启动流程 |
| | | //启动固化流程 |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | class ZipFileDirectoryScanner { |
| | | |
| | | public static List<DncSendBackData> getFilesInDirectoryRecursive(byte[] zipData, String dirPath) throws IOException { |
| | | List<DncSendBackData> list = new ArrayList<>(); |
| | | |
| | | if (!dirPath.endsWith("/")) { |
| | | dirPath += "/"; |
| | | } |
| | | |
| | | try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData); |
| | | ZipFile zipFile = new ZipFile(channel)) { |
| | | |
| | | Enumeration<ZipArchiveEntry> entries = zipFile.getEntries(); |
| | | while (entries.hasMoreElements()) { |
| | | ZipArchiveEntry entry = entries.nextElement(); |
| | | String entryName = entry.getName(); |
| | | DncSendBackData d = new DncSendBackData(); |
| | | d.setProgramName(entryName); |
| | | if(entry.isDirectory()){ |
| | | d.setHasChildren(true); |
| | | } |
| | | list.add(d); |
| | | |
| | | //if (entryName.startsWith(dirPath) && !entry.isDirectory()) { |
| | | // fileList.add(entryName); |
| | | //} |
| | | if(program.getIsCured() !=1) {//未固化的程序,启动固化流程 |
| | | cureFlowService.start(program.getId()); |
| | | } |
| | | } |
| | | return list; |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | |