lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/DirectoryValidator.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileMonitorBootstrap.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileMonitorConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/MultiPathMonitor.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDocInfoService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/DirectoryValidator.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package org.jeecg.modules.dnc.listener; import java.io.File; import java.util.List; public class DirectoryValidator { public static void validatePaths(List<String> paths) { //æ ¹æ®é ç½®çç®å½è¿è¡æ ¡éªï¼å¯ä»¥ä¿®æ¹ymlæä»¶å¯¹åºççæ§ç®å½æ¥æ¹åæ ¡éªæ°é if (paths == null || paths.size() < 3) { throw new IllegalArgumentException("å¿ é¡»é ç½®ä¸ä¸ªçæ§ç®å½"); } for (String path : paths) { File dir = new File(path); if (!dir.exists() || !dir.isDirectory()) { throw new IllegalArgumentException("æ æççæ§ç®å½: " + path); } if (!dir.canRead()) { throw new SecurityException("ç®å½ä¸å¯è¯»: " + path); } } } } lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,115 @@ package org.jeecg.modules.dnc.listener; import org.apache.commons.io.monitor.FileAlterationListener; import org.apache.commons.io.monitor.FileAlterationObserver; import org.jeecg.common.util.FileUtil; import org.jeecg.modules.dnc.service.IDocInfoService; import org.jeecg.modules.dnc.utils.file.FileUtilS; import org.jeecg.modules.message.enums.DeployEnum; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.File; import java.util.Objects; @Component public class FileListener implements FileAlterationListener { private static final Logger log = LoggerFactory.getLogger(FileListener.class); @Value("${deploy.deployType}") private String deployType; //å·¥æ§ç½/æ¶å¯ç½é¨ç½² 0为工æ§ç½ 1为æ¶å¯ç½ @Autowired private IDocInfoService docInfoService; // ææ¡£æå¡ @Override public void onStart(FileAlterationObserver observer) { log.info("å¼å§çå¬ç®å½: {}", observer.getDirectory().getAbsolutePath()); } @Override public void onDirectoryCreate(File directory) { log.info("[ç®å½å建]: {}", directory.getAbsolutePath()); } @Override public void onDirectoryChange(File directory) { log.info("[ç®å½ä¿®æ¹]: {}", directory.getAbsolutePath()); } @Override public void onDirectoryDelete(File directory) { log.info("[ç®å½å é¤]: {}", directory.getAbsolutePath()); } @Override public void onFileCreate(File file) { String filePath = file.getAbsolutePath(); log.info("[æ°å»º]: {}", filePath); if (DeployEnum.GW.getCode().equals(deployType)) { //å·¥æ§ç½è§£ææ¶å¯ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ if (filePath.startsWith("D:\\hy_test\\ncFile")) { handleIndustrialDocFile(file); } }else { //æ¶å¯ç½è§£æå·¥æ§ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æï¼ç¨åºåä¼ ï¼ if (filePath.startsWith("D:\\hy_test\\ncFile")) { handleSecretDocFile(file); } } } @Override public void onFileChange(File file) { log.info("[ä¿®æ¹]: {}", file.getAbsolutePath()); } @Override public void onFileDelete(File file) { log.info("[å é¤]: {}", file.getAbsolutePath()); } @Override public void onStop(FileAlterationObserver observer) { log.info("ç»æçå¬ç®å½: {}", observer.getDirectory().getAbsolutePath()); } /** * å·¥æ§ç½è§£ææ¶å¯ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ * @param file */ private void handleIndustrialDocFile(File file) { log.info("å·¥æ§ç½è§£ææ¶å¯ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ: {}", file.getAbsolutePath()); try { if (Objects.equals(FileUtil.getFileSuffix(file.getName()), "nc")) { boolean success = docInfoService.addDocInfoAnalysisGwNcService(file.getAbsolutePath(), file); if (success) { FileUtilS.copyFileRec(file.getAbsolutePath()); FileUtilS.fileRecDelete(file.getAbsolutePath()); } }else if (Objects.equals(FileUtil.getFileSuffix(file.getName()), "txt")) { //todo æ¯å¦è§£æå·¥ä½æµæä½ } } catch (Exception e) { log.error("å·¥æ§ç½è§£ææ¶å¯ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ: {}", e.getMessage()); } } /** * æ¶å¯ç½è§£æå·¥æ§ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æï¼ç¨åºåä¼ ï¼ * @param file */ private void handleSecretDocFile(File file) { log.info("æ¶å¯ç½è§£æå·¥æ§ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ: {}", file.getAbsolutePath()); try { boolean b= docInfoService.addDocInfoAnalysisSmwNcService(file.getAbsolutePath(), file); }catch (Exception e) { log.error("æ¶å¯ç½è§£æå·¥æ§ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ: {}", e.getMessage()); } } } lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileMonitorBootstrap.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,53 @@ package org.jeecg.modules.dnc.listener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.web.servlet.ServletContextInitializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FileMonitorBootstrap implements ApplicationRunner { private MultiPathMonitor monitor; @Autowired private FileMonitorConfig config; @Autowired private FileListener listener; @Bean public MultiPathMonitor fileMonitor() { return new MultiPathMonitor( config.getPaths(), config.getInterval(), listener ); } @Override public void run(ApplicationArguments args) throws Exception { monitor = fileMonitor(); monitor.start(); } // å¨åºç¨å ³éæ¶åæ¢çæ§ @Bean public ServletContextInitializer stopMonitorOnShutdown() { return servletContext -> { servletContext.addListener(new javax.servlet.ServletContextListener() { @Override public void contextDestroyed(javax.servlet.ServletContextEvent sce) { try { if (monitor != null) { monitor.stop(); } } catch (Exception e) { System.err.println("åæ¢çæ§æ¶åºé: " + e.getMessage()); } } }); }; } } lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileMonitorConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package org.jeecg.modules.dnc.listener; import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @Setter @Getter @Component @ConfigurationProperties(prefix = "file.monitor") public class FileMonitorConfig { private List<String> paths = new ArrayList<>(); private long interval = 10000L; // é»è®¤10ç§ } lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/MultiPathMonitor.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,66 @@ package org.jeecg.modules.dnc.listener; import org.apache.commons.io.monitor.FileAlterationMonitor; import org.apache.commons.io.monitor.FileAlterationObserver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.util.List; public class MultiPathMonitor { private static final Logger log = LoggerFactory.getLogger(MultiPathMonitor.class); private final List<String> paths; private final FileListener listener; private final long interval; private final FileAlterationMonitor monitor; public MultiPathMonitor(List<String> paths, long interval, FileListener listener) { // éªè¯ç®å½ DirectoryValidator.validatePaths(paths); this.paths = paths; this.interval = interval; this.listener = listener; this.monitor = new FileAlterationMonitor(interval); } public void start() { // 为æ¯ä¸ªè·¯å¾å建ç¬ç«çè§å¯è paths.forEach(path -> { FileAlterationObserver observer = new FileAlterationObserver(new File(path)); observer.addListener(listener); monitor.addObserver(observer); log.info("å¼å§çæ§ç®å½: {}", path); }); try { monitor.start(); log.info("æä»¶çæ§å¨å·²å¯å¨ï¼çæ§ç®å½æ°é: {}", paths.size()); } catch (Exception e) { log.error("çæ§å¯å¨å¤±è´¥", e); throw new RuntimeException("çæ§å¯å¨å¤±è´¥", e); } } public void stop() throws Exception { if (monitor != null) { monitor.stop(); log.info("æä»¶çæ§å¨å·²åæ¢"); } } // å¨ææ·»å æ°ç®å½ public void addMonitorPath(String newPath) { File dir = new File(newPath); if (!dir.exists() || !dir.isDirectory() || !dir.canRead()) { log.error("æ æ³æ·»å æ æç®å½: {}", newPath); return; } FileAlterationObserver newObserver = new FileAlterationObserver(dir); newObserver.addListener(listener); monitor.addObserver(newObserver); paths.add(newPath); log.info("æ°å¢çæ§ç®å½: {}", newPath); } } lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDocInfoService.java
@@ -49,11 +49,17 @@ boolean addDocInfoRec(String pathFile,File fileRec); /** * è§£æNCææ¡£éç¨æ¹æ³ * è§£æNCææ¡£éç¨æ¹æ³ï¼å·¥æ§è§£ææ¶å¯ï¼ * @param pathFile,fileRec * @return */ boolean addDocInfoAnalysisNcService(String pathFile,File fileRec) throws FileNotFoundException; boolean addDocInfoAnalysisGwNcService(String pathFile,File fileRec) throws FileNotFoundException; /** * ç¨åºåä¼ ï¼æ¶å¯è§£æå·¥æ§ï¼ * @param pathFile */ boolean addDocInfoAnalysisSmwNcService(String pathFile,File fileRec); /** * ææ¡£è§£æ lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
@@ -275,7 +275,7 @@ */ @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDocInfoAnalysisNcService(String pathFile,File file) throws FileNotFoundException { public boolean addDocInfoAnalysisGwNcService(String pathFile,File file) throws FileNotFoundException { String line; int count = 0; String loFilePath = config.getPaths().get(0)+"/" + file.getName(); @@ -334,6 +334,18 @@ return true; } /** * ç¨åºåä¼ ï¼æ¶å¯è§£æå·¥æ§ï¼ * @param pathFile */ @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDocInfoAnalysisSmwNcService(String pathFile,File fileRec){ //todo ç¨åºåä¼ return true; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDocInfoRecService(String equipmentId,File fileRec,String fileNameSuffix,String fileNameNew,String filePath ) { lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml
@@ -311,7 +311,13 @@ deploy: #å·¥æ§ç½/æ¶å¯ç½é¨ç½² 0为æ¶å¯ç½ 1为工æ§ç½ deployType: 0 #æ¶å¯ç½ä¼ è¾ncæä»¶å¤¹ secretFolder: D:\\hy_test\\a #å·¥æ§ç½çæ§ncæä»¶å¤¹ workFolder: D:\\hy_test\\b #æ¶å¯ç½ä¼ è¾å·¥æ§ç½ncæä»¶å¤¹(ææ´¾è®¾å¤ncæä»¶) å·¥æ§ç½ä¼ è¾æ¶å¯ç½ncæä»¶å¤¹(è§£æåä¼ åçncæä»¶) secretFolder: D:\\test\\a file: monitor: # ä¸ä¸ªçæ§ç®å½é ç½® paths: - D:\\hy_test\\ncFile #å·¥æ§è´è´£è§£æéé¢çæä»¶;æ¶å¯ç½è¿è¡è§£æåä¼ çæä½ - D:\\hy_test\\b - D:\\hy_test\\c interval: 10000 # çæ§é´é(ms)