From f4c6e0e1308bccb943ca1cddfdf7f643b6b6a1aa Mon Sep 17 00:00:00 2001 From: yangys <y_ys79@sina.com> Date: 星期二, 15 七月 2025 23:39:30 +0800 Subject: [PATCH] 测试导出dnc --- blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/DirectorLockService.java | 40 ++++ blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java | 89 +++++++++ blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java | 9 blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/ShutdownHook.java | 21 ++ blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java | 17 + blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/FileLockChecker.java | 43 ++++ blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/DirectoryWatcherController.java | 78 ++++++++ blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamContants.java | 13 + blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java | 4 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/FileWatcherService.java | 97 ++++++++++ blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java | 6 blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProcessProgRefMapper.xml | 2 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/MachineFileBackListener.java | 57 ++++++ blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/entity/MachineBackFile.java | 1 blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/DynamicDirectoryWatcher.java | 28 +++ blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java | 33 +- 16 files changed, 513 insertions(+), 25 deletions(-) diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamContants.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamContants.java new file mode 100644 index 0000000..f40f2c8 --- /dev/null +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamContants.java @@ -0,0 +1,13 @@ +package org.springblade.mdm.commons.contants; + +public class ParamContants { + public static final String NETWORK_TYPE_KEY = "networkType"; + /** + * 娑夊瘑缃� + */ + public static final String NETWORK_TYPE_SHEMI = "0"; + /** + * 宸ユ帶缃� + */ + public static final String NETWORK_TYPE_GONGKONG = "1"; +} diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java new file mode 100644 index 0000000..a837e3b --- /dev/null +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java @@ -0,0 +1,89 @@ +package org.springblade.mdm.config; + +import jakarta.annotation.PostConstruct; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springblade.core.tool.api.R; +import org.springblade.mdm.basesetting.machine.MachineService; +import org.springblade.mdm.basesetting.machine.entity.Machine; +import org.springblade.mdm.commons.contants.ParamContants; +import org.springblade.mdm.machineback.filewatch.DirectorLockService; +import org.springblade.mdm.machineback.filewatch.DynamicDirectoryWatcher; +import org.springblade.mdm.machineback.filewatch.FileWatcherService; +import org.springblade.mdm.machineback.filewatch.MachineFileBackListener; +import org.springblade.mdm.machineback.service.MachineBackFileService; +import org.springblade.mdm.program.service.NcProgramService; +import org.springblade.system.feign.ISysClient; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@AllArgsConstructor +@Component +public class InitBean { + private final DirectorLockService directorLockService; + private final MachineService machineService; + private final FileWatcherService fileWatcherService; + private final ISysClient sysClient; + private final DynamicDirectoryWatcher directoryWatcher; + private final MachineBackFileService machineBackFileService; + private final NcProgramService ncProgramService; + //private final FileWatcherService.FileChangeListener listener; + @PostConstruct + public void init() { + System.out.println("搴旂敤鍚姩鏃舵墽琛屽垵濮嬪寲鎿嶄綔 @PostConstruct"); + // 鍒濆鍖栭�昏緫 + R<String> networkTypeR = sysClient.getParamValue(ParamContants.NETWORK_TYPE_KEY); + String networkType = networkTypeR.getData() == null ? ParamContants.NETWORK_TYPE_SHEMI : networkTypeR.getData(); + if (networkType.equals(ParamContants.NETWORK_TYPE_GONGKONG)) { + initMachineDirMonitor(); + } + } + + /** + * 鍒濆鍖栫洃鎺х洰褰� + */ + void initMachineDirMonitor() { + boolean locked = directorLockService.acquireLock(); + if (!locked) { + log.info("鍥炰紶鎺ユ敹鐩綍宸茬粡琚叾浠栭儴缃茬偣浣嶉攣瀹氾紝鐩存帴杩斿洖"); + return; + } + List<Machine> machineList = machineService.list(); + List<String> monitorDirList = new ArrayList<String>(); + machineList.forEach(m -> { + if (StringUtils.isNotEmpty(m.getProgReceiveDir())) { + String dir = StringUtils.removeEnd(StringUtils.removeEnd(m.getProgReceiveDir(), "/"), "\\"); + if (!monitorDirList.contains(dir)) { + monitorDirList.add(dir); + } + + } + }); + for (String dir : monitorDirList) { + Path dirPath = Paths.get(dir); + try { + if(!dirPath.toFile().exists()) { + dirPath.toFile().mkdirs(); + } + directoryWatcher.addDirectory(dirPath,getListener()); + } catch (Exception e) { + log.error("娣诲姞鐩戞帶鐩綍寮傚父",e); + } + } + + } + + + FileWatcherService.FileChangeListener getListener() { + return new MachineFileBackListener(machineBackFileService,ncProgramService); + } + + +} diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/ShutdownHook.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/ShutdownHook.java new file mode 100644 index 0000000..efacca8 --- /dev/null +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/ShutdownHook.java @@ -0,0 +1,21 @@ +package org.springblade.mdm.config; + +import jakarta.annotation.PreDestroy; +import lombok.AllArgsConstructor; +import org.springblade.mdm.machineback.filewatch.DirectorLockService; +import org.springframework.stereotype.Component; + +@AllArgsConstructor +@Component +public class ShutdownHook { + private final DirectorLockService directorLockService; + @PreDestroy + public void onExit() { + System.out.println("鎵ц閫�鍑哄墠娓呯悊鎿嶄綔..."); + // 1. 鍏抽棴鏂囦欢鐩戞帶 + // 2. 閲婃斁璧勬簮 + // 3. 淇濆瓨鐘舵�� + // 4. 閫氱煡鍏朵粬鏈嶅姟 + directorLockService.releaseLock(); + } +} diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/DirectoryWatcherController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/DirectoryWatcherController.java new file mode 100644 index 0000000..385da92 --- /dev/null +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/controller/DirectoryWatcherController.java @@ -0,0 +1,78 @@ +package org.springblade.mdm.machineback.controller; +import org.springblade.mdm.machineback.filewatch.DynamicDirectoryWatcher; +import org.springblade.mdm.machineback.filewatch.FileLockChecker; +import org.springblade.mdm.machineback.filewatch.FileWatcherService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; + +@RestController +@RequestMapping("/machineback/file") +public class DirectoryWatcherController { + private final DynamicDirectoryWatcher directoryWatcher; + + @Autowired + public DirectoryWatcherController(DynamicDirectoryWatcher directoryWatcher) { + this.directoryWatcher = directoryWatcher; + } + + @PostMapping("/watch") + public String watchDirectory(@RequestParam String directoryPath) { + try { + Path path = Paths.get(directoryPath); + directoryWatcher.addDirectory(path, new SimpleFileChangeListener()); + return "Started watching directory: " + directoryPath; + } catch (Exception e) { + return "Error: " + e.getMessage(); + } + } + + @PostMapping("/unwatch") + public String unwatchDirectory(@RequestParam String directoryPath) { + try { + Path path = Paths.get(directoryPath); + directoryWatcher.removeDirectory(path); + return "Stopped watching directory: " + directoryPath; + } catch (Exception e) { + return "Error: " + e.getMessage(); + } + } + @PostMapping("/canlock") + public String canlock(@RequestParam String filePath) { + try { + Path path = Paths.get(filePath); + boolean comp = FileLockChecker.isFileCompletelyWritten(path); + + return filePath+ " lock: " + comp; + } catch (Exception e) { + return "Error: " + e.getMessage(); + } + } + private static class SimpleFileChangeListener implements FileWatcherService.FileChangeListener { + @Override + public void onFileCreated(Path filePath) { + System.out.println("File created: " + filePath); + } + + @Override + public void onFileModified(Path filePath) { + System.out.println("File modified: " + filePath); + //boolean comp = FileLockChecker.isFileCompletelyWritten(filePath); + boolean comp = false; + try { + comp = FileLockChecker.isFileComplete(filePath); + } catch (Exception e) { + throw new RuntimeException(e); + } + System.out.println("File FINISHED: " + comp); + } + + @Override + public void onFileDeleted(Path filePath) { + System.out.println("File deleted: " + filePath); + } + } +} diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/entity/MachineBackFile.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/entity/MachineBackFile.java index 80baad6..8dd1e71 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/entity/MachineBackFile.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/entity/MachineBackFile.java @@ -18,6 +18,7 @@ public static int STATUS_REJECTED = 2; private String programId; + private Long ncProgramId; /** * 纭鏃堕棿 */ diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/DirectorLockService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/DirectorLockService.java new file mode 100644 index 0000000..3731531 --- /dev/null +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/DirectorLockService.java @@ -0,0 +1,40 @@ +package org.springblade.mdm.machineback.filewatch; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.lang.management.ManagementFactory; + + +@Slf4j +@AllArgsConstructor +@Service +public class DirectorLockService { + private final JdbcTemplate jdbcTemplate; + + public boolean acquireLock() { + int affect = 0; + try { + affect = jdbcTemplate.update( + "INSERT INTO mdm_file_locks (lock_id,locked_by, lock_time) " + + "VALUES (1,?, CURRENT_TIMESTAMP)",getInstanceId()); + } catch (Exception e) { + log.info("鏂囦欢閿佸畾澶辫触锛屼笉杩涜鐩綍鐩戞帶",e); + } + return affect > 0; + } + + public void releaseLock() { + jdbcTemplate.update( + "DELETE FROM mdm_file_locks"); + } + + private String getInstanceId() { + // 杩斿洖褰撳墠瀹炰緥鐨勫敮涓�鏍囪瘑 + return ManagementFactory.getRuntimeMXBean().getName(); + } + +} diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/DynamicDirectoryWatcher.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/DynamicDirectoryWatcher.java new file mode 100644 index 0000000..ad8e1df --- /dev/null +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/DynamicDirectoryWatcher.java @@ -0,0 +1,28 @@ +package org.springblade.mdm.machineback.filewatch; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.nio.file.Path; +import java.util.Set; +@Service +public class DynamicDirectoryWatcher { + private final FileWatcherService fileWatcherService; + + @Autowired + public DynamicDirectoryWatcher(FileWatcherService fileWatcherService) { + this.fileWatcherService = fileWatcherService; + } + + public void addDirectory(Path directory, FileWatcherService.FileChangeListener listener) throws Exception { + fileWatcherService.watchDirectory(directory, listener); + } + + public void removeDirectory(Path directory) throws Exception { + fileWatcherService.stopWatching(directory); + } + + public Set<Path> getWatchedDirectories() { + return null; + //return fileWatcherService.getWatchedDirectories(); + } +} diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/FileLockChecker.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/FileLockChecker.java new file mode 100644 index 0000000..3fbf736 --- /dev/null +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/FileLockChecker.java @@ -0,0 +1,43 @@ +package org.springblade.mdm.machineback.filewatch; +import java.io.*; +import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; +import java.nio.file.Files; +import java.nio.file.Path; +/* +鐩戞帶鏂囦欢鏄惁浼犺緭瀹屾垚锛堜娇鐢ㄥ彲鍚﹂攣瀹氭潵鍒ゆ柇锛� + */ + +public class FileLockChecker { + public static boolean isFileCompletelyWritten(Path file) { + try (RandomAccessFile raf = new RandomAccessFile(file.toFile(), "rw"); + FileChannel channel = raf.getChannel()) { + + // 灏濊瘯鑾峰彇鐙崰閿� + FileLock lock = channel.tryLock(); + if (lock != null) { + lock.release(); + // 濡傛灉鑳借幏鍙栭攣锛岃鏄庢枃浠朵笉鍐嶈鍐欏叆 + return true; + } + return false; + } catch (Exception e) { + // 濡傛灉鍙戠敓寮傚父锛屽彲鑳芥枃浠朵粛鍦ㄨ鍐欏叆 + return false; + } + } + + /** + * 鏂囦欢鏄惁浼犺緭瀹屾垚锛堥噰鐢ㄥ墠鍚庢枃浠跺ぇ灏忔瘮瀵规柟娉曪級 + * @param file + * @return + * @throws IOException + * @throws InterruptedException + */ + public static boolean isFileComplete(Path file) throws IOException, InterruptedException { + long initialSize = Files.size(file); + Thread.sleep(3000); // 绛夊緟1绉� + long currentSize = Files.size(file); + return initialSize == currentSize; + } +} diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/FileWatcherService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/FileWatcherService.java new file mode 100644 index 0000000..1112168 --- /dev/null +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/FileWatcherService.java @@ -0,0 +1,97 @@ +package org.springblade.mdm.machineback.filewatch; + +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.nio.file.*; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import static java.nio.file.StandardWatchEventKinds.*; +@Service +public class FileWatcherService { + + private final ExecutorService executor = Executors.newCachedThreadPool(); + private final Map<Path, WatchService> watchServices = new HashMap<>(); + private final Map<Path, FileChangeListener> listeners = new HashMap<>(); + + public interface FileChangeListener { + void onFileCreated(Path filePath); + void onFileModified(Path filePath); + void onFileDeleted(Path filePath); + } + + public void watchDirectory(Path directory, FileChangeListener listener) throws IOException { + if (!Files.isDirectory(directory)) { + throw new IllegalArgumentException("Path must be a directory: " + directory); + } + + if (watchServices.containsKey(directory)) { + throw new IllegalStateException("Directory is already being watched: " + directory); + } + + WatchService watchService = FileSystems.getDefault().newWatchService(); + directory.register(watchService, ENTRY_CREATE, ENTRY_MODIFY, ENTRY_DELETE); + + watchServices.put(directory, watchService); + listeners.put(directory, listener); + + executor.submit(() -> { + try { + while (true) { + WatchKey key = watchService.take(); + for (WatchEvent<?> event : key.pollEvents()) { + WatchEvent.Kind<?> kind = event.kind(); + + @SuppressWarnings("unchecked") + WatchEvent<Path> ev = (WatchEvent<Path>) event; + Path fileName = ev.context(); + Path fullPath = directory.resolve(fileName); + + FileChangeListener currentListener = listeners.get(directory); + if (currentListener == null) break; + + if (kind == ENTRY_CREATE) { + currentListener.onFileCreated(fullPath); + } else if (kind == ENTRY_MODIFY) { + currentListener.onFileModified(fullPath); + } else if (kind == ENTRY_DELETE) { + currentListener.onFileDeleted(fullPath); + } + } + boolean valid = key.reset(); + if (!valid) { + break; + } + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } catch (ClosedWatchServiceException e) { + // Service was closed, exit normally + } + }); + } + + public void stopWatching(Path directory) throws IOException { + WatchService watchService = watchServices.remove(directory); + listeners.remove(directory); + if (watchService != null) { + watchService.close(); + } + } + + public void shutdown() { + executor.shutdownNow(); + watchServices.values().forEach(watchService -> { + try { + watchService.close(); + } catch (IOException e) { + // Ignore on shutdown + } + }); + watchServices.clear(); + listeners.clear(); + } +} diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/MachineFileBackListener.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/MachineFileBackListener.java new file mode 100644 index 0000000..8ca6944 --- /dev/null +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machineback/filewatch/MachineFileBackListener.java @@ -0,0 +1,57 @@ +package org.springblade.mdm.machineback.filewatch; + +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springblade.mdm.machineback.entity.MachineBackFile; +import org.springblade.mdm.machineback.service.MachineBackFileService; +import org.springblade.mdm.program.entity.NcProgram; +import org.springblade.mdm.program.service.NcProgramService; + +import java.io.IOException; +import java.nio.file.Path; + +@Slf4j +public class MachineFileBackListener implements FileWatcherService.FileChangeListener{ + private final MachineBackFileService machineBackFileService; + private final NcProgramService ncProgramService; + public MachineFileBackListener(MachineBackFileService backService, NcProgramService aNcProgramService) { + this.machineBackFileService = backService; + this.ncProgramService = aNcProgramService; + } + @Override + public void onFileCreated(Path filePath) { + log.info("鏂囦欢鍒涘缓{}",filePath); + } + + + @Override + public void onFileModified(Path filePath) { + //鏂囦欢淇敼 + try { + if(FileLockChecker.isFileComplete(filePath)){ + log.info("鏂囦欢浼犺緭瀹屾垚{}",filePath); + MachineBackFile backFile = new MachineBackFile(); + + String programName = filePath.getFileName().toFile().getName(); + NcProgram prog = ncProgramService.getByName(programName); + if(prog == null){ + log.warn("鏇存柊鐨勬枃浠舵棤娉曞尮閰嶅埌鏁版帶绋嬪簭,{}",filePath); + return; + } + backFile.setNcProgramId(prog.getId()); + machineBackFileService.save(backFile); + }else{ + log.warn("鏂囦欢浼犺緭涓紝鍚庣画鍐嶆搷浣渰}",filePath); + } + } catch (IOException e) { + throw new RuntimeException(e); + } catch (InterruptedException e) { + log.error("sleep鍑洪敊"); + } + } + + @Override + public void onFileDeleted(Path filePath) { + log.info("鏂囦欢鍒犻櫎{}",filePath); + } +} diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java index c24f7a1..a8aa0e8 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramController.java @@ -121,12 +121,12 @@ return R.data(approveRecordService.listByNcProgramId(ncProgramId)); } - + /* @PostMapping("/send") - @Operation(summary = "绋嬪簭涓嬪彂", description = "宸ユ帶缃戞暟鎺х▼搴忎笅鍙戯紙鍙戦�佸埌鏈哄簥閰嶇疆鐨勪笅鍙戠洰褰曪級") + @Operation(summary = "绋嬪簭涓嬪彂", description = "宸ユ帶缃戞暟鎺х▼搴忎笅鍙戯紙鍙戦�佸埌鏈哄簥閰嶇疆鐨勪笅鍙戠洰褰曪級,鏍规嵁id") public R<List<NcProgramVO>> send(@Parameter(description="鎵�灞炶妭鐐笽D")@RequestParam Long id) { return null;//R.data(ncProcessProgRefService.listByProcess(processInstanceId)); - } + }*/ @PostMapping("/send-to-machine-by-nodeid") @Operation(summary = "绋嬪簭涓嬪彂", description = "涓嬪彂缁欐満搴婅瀹氱殑鐩綍") diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java index 3c25961..bd2f615 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/controller/NcProgramExportDNCController.java @@ -11,6 +11,7 @@ import org.springblade.core.log.exception.ServiceException; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; import org.springblade.mdm.commons.vo.IdsVO; import org.springblade.mdm.program.service.NcProgramApprovedService; import org.springblade.mdm.program.service.NcProgramExportDNCService; @@ -52,7 +53,8 @@ throw new ServiceException("鏈�夋嫨鏂囦欢瀵煎嚭"); } try { - response.setHeader("Content-Disposition", "attachment; filename=dnc-t.zip"); + String filename = "todncexp-"+ DateUtil.format(DateUtil.now(), "yyyyMMddHHmm")+".zip"; + response.setHeader("Content-Disposition", "attachment; filename="+filename); response.setContentType("application/octet-stream"); ncProgramExportDNCService.exportDnc(vo.getIds(),response.getOutputStream()); } catch (IOException e) { diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProcessProgRefMapper.xml b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProcessProgRefMapper.xml index 067d372..dc83159 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProcessProgRefMapper.xml +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/mapper/ProcessProgRefMapper.xml @@ -4,7 +4,7 @@ <select id="listByProcess" resultType="org.springblade.mdm.program.vo.NcProgramVO"> - select p.id,p.name,url,code from mdm_process_prog_ref r join mdm_nc_program p on r.nc_program_id=p.id + select p.id,p.name,p.machine_code,url,code from mdm_process_prog_ref r join mdm_nc_program p on r.nc_program_id=p.id where process_instance_id=#{processInstanceId} and p.is_deleted=0 </select> </mapper> diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java index 25af59b..f9fdce0 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java @@ -238,25 +238,25 @@ JSONArray jsonArray = JSONArray.parseArray(jsonStr); for(int i=0;i<jsonArray.size();i++){ JSONObject jsonObject = jsonArray.getJSONObject(i); - NcProgram d = new NcProgram(); - d.setId(jsonObject.getLong("id")); - d.setName(jsonObject.getString("name")); + NcProgram prog = new NcProgram(); + prog.setId(jsonObject.getLong("id")); + prog.setName(jsonObject.getString("name")); - d.setCode(jsonObject.getString("code")); - d.setDescription(jsonObject.getString("description")); - d.setCategory(jsonObject.getString("category")); - d.setBindNcNodeId(jsonObject.getLong("bindNcNodeId")); - d.setIsLastEdition(jsonObject.getInteger("isLastEdition")); - d.setIsLocked(jsonObject.getInteger("isLocked")); - d.setIsTest(jsonObject.getInteger("isTest")); - d.setMachineCode(jsonObject.getString("machineCode")); - d.setNcNodeId(jsonObject.getLong("ncNodeId")); - d.setDrawingNo(jsonObject.getString("drawingNo")); - d.setProcessEdition(jsonObject.getString("processEdition")); + prog.setCode(jsonObject.getString("code")); + prog.setDescription(jsonObject.getString("description")); + prog.setCategory(jsonObject.getString("category")); + prog.setBindNcNodeId(jsonObject.getLong("bindNcNodeId")); + prog.setIsLastEdition(jsonObject.getInteger("isLastEdition")); + prog.setIsLocked(jsonObject.getInteger("isLocked")); + prog.setIsTest(jsonObject.getInteger("isTest")); + prog.setMachineCode(jsonObject.getString("machineCode")); + prog.setNcNodeId(jsonObject.getLong("ncNodeId")); + prog.setDrawingNo(jsonObject.getString("drawingNo")); + prog.setProcessEdition(jsonObject.getString("processEdition")); - setBaseProperties(d,jsonObject); + setBaseProperties(prog,jsonObject); - progList.add(d); + progList.add(prog); } } @@ -296,6 +296,7 @@ record.setUserNickname(jsonObject.getString("userNickname")); record.setOperateResult(jsonObject.getString("operateResult")); record.setOperateTime(jsonObject.getDate("operateTime")); + record.setComment(jsonObject.getString("comment")); setBaseProperties(record,jsonObject); recordList.add(record); diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java index 17e2b18..a692911 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java @@ -130,6 +130,7 @@ recObj.put("code", program.getCode()); recObj.put("ossName",program.getOssName()); recObj.put("isTextFile",program.getIsTextFile()); + recObj.put("isLastEdition",program.getIsLastEdition()); recObj.put("category",program.getCategory()); recObj.put("description",program.getDescription()); recObj.put("name",program.getName()); @@ -196,11 +197,11 @@ ArrayList<Long> exportNodeIdList = new ArrayList<>(); for(NcProgram program : programs){ - JSONObject recObj = new JSONObject(); - if(!exportNodeIdList.contains(program.getNcNodeId())){ - exportNodeIdList.add(program.getNcNodeId()); + //JSONObject recObj = new JSONObject(); + if(!exportNodeIdList.contains(program.getBindNcNodeId())){ + exportNodeIdList.add(program.getBindNcNodeId()); } - NcNode ncNode = ncNodeService.getById(program.getNcNodeId()); + NcNode ncNode = ncNodeService.getById(program.getBindNcNodeId());//浠庣粦瀹氱殑鑺傜偣鏈韩寮�濮嬪鍑� if(StringUtils.isNotEmpty(ncNode.getParentIds())){ List<Long> pids = Func.toLongList(ncNode.getParentIds()); diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java index fa5f0de..f378729 100644 --- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java +++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramService.java @@ -159,6 +159,10 @@ node.setDrawingNo(uploadVO.getDrawingNo()); node.setProcessName(uploadVO.getProcessName()); + NcNode parentNode = nodeService.getById(uploadVO.getNodeId()); + node.setParentIds(parentNode.getParentIds()+","+uploadVO.getNodeId()); + //uploadVO.getre + //node.setDescription(uploadVO.getDrawingNo()); nodeService.save(node); prog.setBindNcNodeId(node.getId()); @@ -318,4 +322,17 @@ return progOpt.orElse(null); } + + /** + * 鏍规嵁绋嬪簭鍚嶇О鑾峰彇鏈�鏂扮殑绋嬪簭鏁版嵁 + * @param name 绋嬪簭鍚嶇О + * @return + */ + public NcProgram getByName(String name) {LambdaQueryWrapper<NcProgram> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(NcProgram::getName, name); + wrapper.eq(NcProgram::getIsLastEdition,1); + Optional<NcProgram> progOpt = this.getOneOpt(wrapper); + + return progOpt.orElse(null); + } } -- Gitblit v1.9.3