Răsfoiți Sursa

文件监听

huangxingxing 6 luni în urmă
părinte
comite
0e9641db84

+ 20 - 2
src/main/java/com/miniframe/bisiness/mdo/MDO0039Service.java

@@ -27,6 +27,8 @@ import com.miniframe.modo.temp.problem.WorkflowVo;
 import com.miniframe.tools.XIFileUtils;
 import com.miniframe.tools.XiJsonUtil;
 import com.miniframe.tools.docker.DockerExe;
+import com.miniframe.tools.file.FileMonitor;
+import com.miniframe.tools.file.SurromdaoFileListener;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import lombok.SneakyThrows;
@@ -117,7 +119,17 @@ public class MDO0039Service extends MDO0039BaseModel implements ExecProcessFlow
 
 	}
 
-	private void run2(String pid) {
+	private void run2(String pid) throws Exception {
+		MdoProComvalMapper comvalDao =UtilTools.getBean(MdoProComvalMapper.class);
+		MdoProComvalSQLBuilder sb =new MdoProComvalSQLBuilder();
+		MdoProComvalSQLBuilder.Criteria sc = sb.createCriteria();
+		sc.andPidEqualTo(pid);
+		comvalDao.deleteByExample(sb);
+		FileMonitor fileMonitor = new FileMonitor(1000);
+		SurromdaoFileListener t= new SurromdaoFileListener(pid);
+		fileMonitor.monitor("/cephfs/mdo/"+pid+"/in/myid_0", t);
+		fileMonitor.start();
+
 		LogService.addLog(pid,"求解——————————————————开始");
 		DockerExe.stopDocker(pid);
 		DockerExe.runMdo2(pid);
@@ -143,12 +155,18 @@ public class MDO0039Service extends MDO0039BaseModel implements ExecProcessFlow
 					super.onComplete();
 				}
 			});
+
+
 			LogService.addLog(pid,"求解——————————————————成功");
 		} catch (Exception e) {
 			LogService.addLog(pid,"求解——————————————————失败");
-
 			e.printStackTrace();
 		}
+			try {
+				fileMonitor.stop();
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
 			return null;
 		});
 	}

+ 39 - 0
src/main/java/com/miniframe/tools/file/FileMonitor.java

@@ -0,0 +1,39 @@
+package com.miniframe.tools.file;
+
+import org.apache.commons.io.monitor.FileAlterationListener;
+import org.apache.commons.io.monitor.FileAlterationMonitor;
+import org.apache.commons.io.monitor.FileAlterationObserver;
+
+import java.io.File;
+
+public class FileMonitor {
+
+    private FileAlterationMonitor monitor;
+
+    public FileMonitor(long interval) {
+        monitor = new FileAlterationMonitor(interval);
+    }
+
+    /**
+     * 给文件添加监听
+     *
+     * @param path     文件路径
+     * @param listener 文件监听器
+     */
+    public void monitor(String path, FileAlterationListener listener) {
+        FileAlterationObserver observer = new FileAlterationObserver(new File(path));
+        monitor.addObserver(observer);
+        observer.addListener(listener);
+    }
+
+    public void stop() throws Exception {
+        monitor.stop();
+    }
+
+    public void start() throws Exception {
+        monitor.start();
+
+    }
+
+
+}

+ 82 - 0
src/main/java/com/miniframe/tools/file/SurromdaoFileListener.java

@@ -0,0 +1,82 @@
+package com.miniframe.tools.file;
+
+import com.miniframe.core.ext.UtilTools;
+import com.miniframe.model.mdo.MdoProComval;
+import com.miniframe.model.mdo.MdoProComvalSQLBuilder;
+import com.miniframe.model.mdo.dao.MdoProComvalMapper;
+import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
+
+import java.io.*;
+import java.util.List;
+
+public class SurromdaoFileListener extends FileAlterationListenerAdaptor {
+    private String filename ="surromdao_history_all.dat";
+    private String pid ;
+    private String line1;
+
+
+    public SurromdaoFileListener(String pid) {
+        this.pid = pid;
+    }
+
+    @Override
+    public void onFileChange(File file) {
+        String compressedPath = file.getAbsolutePath();
+        if(filename.equals(file.getName())){
+            MdoProComvalMapper comvalDao = UtilTools.getBean(MdoProComvalMapper.class);
+            MdoProComvalSQLBuilder sb =new MdoProComvalSQLBuilder();
+            MdoProComvalSQLBuilder.Criteria sc = sb.createCriteria();
+            sc.andPidEqualTo(pid);
+            sb.setOrderByClause("step asc");
+            List<MdoProComval> comvals =comvalDao.selectByExample(sb);
+            int con =0;
+            if(comvals!=null||!comvals.isEmpty()){
+                con=comvals.size();
+            }
+            int i= 0;
+
+            // 使用try-with-resources语句确保资源被正确关闭
+            try (BufferedReader br = new BufferedReader(new FileReader(file))) {
+                String line;
+                // 逐行读取,直到文件末尾
+                while ((line = br.readLine()) != null) {
+                    if(i ==0){
+                        line1=line.replace(" / ","/");
+                        line1=line1.trim().replaceAll("\\s+"," ");//替换多个空格为一个空格
+                        // 处理每一行数据
+                        System.out.println(line);
+                    }
+                    if(i>con){
+                        String tvals=line.trim().replaceAll("\\s+"," ");//替换多个空格为一个空格
+                        MdoProComval comval =new MdoProComval();
+                        comval.setId(UtilTools.getUUid());
+                        comval.setPid(pid);
+                        comval.setStep(String.valueOf(i+1));
+                        comval.setVars(line1);
+                        comval.setVals(tvals);
+                        comvalDao.insert(comval);
+                    }
+                    i++;
+
+                }
+            } catch (IOException e) {
+                // 异常处理
+                e.printStackTrace();
+            }
+        }
+    }
+    @Override
+    public void onFileCreate(File file) {
+        String compressedPath = file.getAbsolutePath();
+        if(filename.equals(file.getName())){
+
+        }
+    }
+    public String getFilename() {
+        return filename;
+    }
+
+    public void setFilename(String filename) {
+        this.filename = filename;
+    }
+}

+ 10 - 7
src/test/java/com/miniframe/ApplicationTests.java

@@ -2,6 +2,8 @@ package com.miniframe;
 
 import com.miniframe.core.ext.UtilTools;
 
+import com.miniframe.tools.file.FileMonitor;
+import com.miniframe.tools.file.SurromdaoFileListener;
 import com.miniframe.utils.MFServiceUtils;
 import freemarker.template.TemplateException;
 import org.junit.jupiter.api.Test;
@@ -13,13 +15,11 @@ import java.io.IOException;
 class ApplicationTests {
 
     @Test
-    void contextLoads() throws IOException, TemplateException {
-//        TemplateGenerator.createFireControl(5);
-//        TemplateGenerator.createFireRunsh(5);
-//        TemplateGenerator.createFireInit(5);
-//        TemplateGenerator.createWaterControl(5);
-//        TemplateGenerator.createWaterRunsh(5);
-//        TemplateGenerator.createWaterInit(5);
+    void contextLoads() throws Exception {
+        FileMonitor fileMonitor = new FileMonitor(1000);
+        SurromdaoFileListener t= new SurromdaoFileListener("sss");
+        fileMonitor.monitor("/test", t);
+        fileMonitor.start();
     }
 
     @Test
@@ -35,4 +35,7 @@ class ApplicationTests {
     @Test
     void httpTest() throws Exception {
     }
+
+
+
 }

+ 2 - 0
系统设计/系统模块/MDO(西工大系统).csv

@@ -59,3 +59,5 @@
 100055,MDO0055,约束条件添加修改,service,
 100056,MDO0056,优化目标添加修改,service,
 
+
+