Jelajahi Sumber

新文件格式解析

hxf 1 tahun lalu
induk
melakukan
12785dfcb3

+ 1 - 1
neim-biz/src/main/java/com/jiayue/biz/job/FileAnalysisJob.java

@@ -79,7 +79,7 @@ public class FileAnalysisJob {
 
         log.debug("eol文件解析定时任务执行开始");
 
-        this.analysisData.parseEol();
+        this.analysisData.moveEolFileAndParseEol();
 
         log.debug("eol文件解析定时任务执行完成");
 

+ 92 - 50
neim-biz/src/main/java/com/jiayue/biz/service/impl/AnalysisDataImpl.java

@@ -59,6 +59,10 @@ public class AnalysisDataImpl {
     @Value("${file.excelBackDir}")
     private String excelBackDir;
 
+    private String eolFilePath = "D:\\program\\systemFile\\";
+
+    private String eolDatafolder = "D:\\EOLdata";
+
 
     private final WindTowerInfoServiceImpl windTowerInfoService;
     private final WindTowerDataParentTableServiceImpl windTowerDataParentTableService;
@@ -66,7 +70,7 @@ public class AnalysisDataImpl {
 
     private final EmailWindTowerInfoServiceImpl emailWindTowerInfoService;
 
-    public AnalysisDataImpl(WindTowerInfoServiceImpl windTowerInfoService,WindTowerDataParentTableServiceImpl windTowerDataParentTableService,EmailWindTowerInfoServiceImpl emailWindTowerInfoService){
+    public AnalysisDataImpl(WindTowerInfoServiceImpl windTowerInfoService, WindTowerDataParentTableServiceImpl windTowerDataParentTableService, EmailWindTowerInfoServiceImpl emailWindTowerInfoService) {
         this.emailWindTowerInfoService = emailWindTowerInfoService;
         this.windTowerInfoService = windTowerInfoService;
         this.windTowerDataParentTableService = windTowerDataParentTableService;
@@ -215,7 +219,7 @@ public class AnalysisDataImpl {
                     String[] s = strs_cell[1].split(" ");
                     String split = s[2].substring(0, 2);
                     latitude = s[1] + " " + split;
-                    latitude =   CoordinateUtil.changeToDu(latitude);
+                    latitude = CoordinateUtil.changeToDu(latitude);
                 }
                 if (valueString.contains("Longitude")) {
                     //经度
@@ -999,24 +1003,58 @@ public class AnalysisDataImpl {
         return str2.toString();
     }
 
+    public void moveEolFileAndParseEol() {
+        File file = new File(eolDatafolder);
+        File[] files = file.listFiles();
+        try {
+            for (File file1 : files) {
+                if (file1.isDirectory()) {
+                    File[] files1 = file1.listFiles();
+                    //筛选包含.elog后缀的文件
+                    List<File> fileNameList = Arrays.asList(files1).stream().filter(f -> f.getName().contains(".elog")).collect(Collectors.toList());
+                    //循环文件名
+                    for (File fileNameForELog : fileNameList) {
+
+                        String fileName = fileNameForELog.getName().substring(0, fileNameForELog.getName().indexOf(".elog"));
+                        String eqNo = fileName.substring(fileName.indexOf("ID") + 2, fileName.indexOf("_"));
+                        //移动原始文件
+                        com.jiayue.biz.util.FileUtil.move(fileNameForELog.getPath(), eolFilePath + File.separator + eqNo);
+                        //找出csv文件
+                        List<File> csvFile = Arrays.stream(files1).filter(f -> f.getName().contains(".csv") && f.getName().contains(fileName)).collect(Collectors.toList());
+                        //找出wnd文件
+                        List<File> wndFile = Arrays.stream(files1).filter(f -> f.getName().contains(".wnd") && f.getName().contains(fileName)).collect(Collectors.toList());
+                        if (csvFile.size() > 0 && wndFile.size() > 0) {
+                            parseEol(csvFile.get(0), wndFile.get(0), eqNo);
+
+                        }
+
+                    }
+
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
     //解析eol文件
-    public void parseEol() {
+    public void parseEol(File fileCsv, File wndFile, String eqNo) {
         //todo 需要修改
-        String s = "C:\\Users\\Administrator\\Desktop\\ID220810_20220919_180304_20230515_063537.log_20230515_063540.csv";
+//        String s = "C:\\Users\\Administrator\\Desktop\\ID220810_20220919_180304_20230515_063537.log_20230515_063540.csv";
+//        //从文件中读取CSV数据
+//        File file = FileUtil.file(s);
 
         CsvReader reader = CsvUtil.getReader();
-        //从文件中读取CSV数据
-        File file = FileUtil.file(s);
-        CsvData data = reader.read(file);
+        CsvData data = reader.read(fileCsv);
         List<CsvRow> rows = data.getRows();
         //todo  不严谨但是能用
         CsvRow row = data.getRow(2);
 
-
         HashSet<String> wsHeight = new HashSet<>();
         HashSet<String> wdHeight = new HashSet<>();
 
-
         boolean state = true;
         //遍历行
         List<Map<String, Object>> dataList = new ArrayList<>();
@@ -1042,64 +1080,68 @@ public class AnalysisDataImpl {
             if (hashMap.size() > 3 && !hashMap.get("time").equals("DateTime")) {
                 dataList.add(hashMap);
             }
-
         }
-
-        String numberFromString = CalculationUtil.getNumberFromString(file.getName().substring(0, file.getName().indexOf("_")));
-
         List<WindTowerInfo> list = windTowerInfoService.list();
-        List<WindTowerInfo> collect = list.stream().filter(w -> w.getEquipmentNo().equals(numberFromString)).collect(Collectors.toList());
-        if(collect.size() > 0){
-            HashMap<String, String> stringStringHashMap = this.dome1();
-
-            String wsH = this.heightReverseOrder(wsHeight);
-            String wdH = this.heightReverseOrder(wdHeight);
-            WindTowerInfo windTowerInfo = new WindTowerInfo();
-            windTowerInfo.setEquipmentNo(numberFromString);
-            windTowerInfo.setName(numberFromString);
-            windTowerInfo.setId(UUID.randomUUID().toString());
-            windTowerInfo.setType("email");
-            windTowerInfo.setHeights(wsH);
-            windTowerInfo.setWdHeights(wdH);
-            windTowerInfo.setLatitude(CalculationUtil.getBigDecimal(stringStringHashMap.get("Latitude")));
-            windTowerInfo.setLongitude(CalculationUtil.getBigDecimal(stringStringHashMap.get("Longitude")));
-            windTowerInfo.setRecorderNo(stringStringHashMap.get("SiteNumber"));
-            windTowerInfoService.saveOrUpdate(windTowerInfo);
+        List<WindTowerInfo> collect = list.stream().filter(w -> w.getEquipmentNo().equals(eqNo)).collect(Collectors.toList());
+        if (collect.size() > 0) {
+            if (collect.get(0).getRecorderNo() == null) {
+                HashMap<String, String> stringStringHashMap = this.parseWnd(wndFile);
+                String wsH = this.heightReverseOrder(wsHeight);
+                String wdH = this.heightReverseOrder(wdHeight);
+                WindTowerInfo windTowerInfo = new WindTowerInfo();
+                windTowerInfo.setEquipmentNo(eqNo);
+                windTowerInfo.setName(eqNo);
+                windTowerInfo.setId(collect.get(0).getId());
+                windTowerInfo.setType("email");
+                windTowerInfo.setHeights(wsH);
+                windTowerInfo.setWdHeights(wdH);
+                windTowerInfo.setLatitude(CalculationUtil.getBigDecimal(stringStringHashMap.get("Latitude")));
+                windTowerInfo.setLongitude(CalculationUtil.getBigDecimal(stringStringHashMap.get("Longitude")));
+                windTowerInfo.setRecorderNo(stringStringHashMap.get("SiteNumber"));
+                windTowerInfo.setModelNumber("eol");
+                windTowerInfoService.saveOrUpdate(windTowerInfo);
+            }
+
         }
-        this.emailWindTowerInfoSave(numberFromString);
+        this.emailWindTowerInfoSave(eqNo);
 
+        try {
+            //移动csv文件
+            com.jiayue.biz.util.FileUtil.move(fileCsv.getPath(), eolFilePath + File.separator + eqNo);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
 
-        windTowerDataParentTableService.packageData(dataList, numberFromString, "", "eol", "");
+        windTowerDataParentTableService.packageData(dataList, eqNo, "", "eol", "");
 
     }
 
-    //解析经纬度 记录仪编号
-    public HashMap<String, String> dome1() {
-        //todo 需要写文件夹判断wnd文件再将文件转移
-        String s = "C:\\Users\\Administrator\\Desktop\\";
-        String fileName = "ID220810_20220919_180304_20230424_023957.log_20230424_024000.wnd";
+    //解析经纬度 记录仪编号 解析wnd文件
+    public HashMap<String, String> parseWnd(File wndFile) {
+
+        String fileParent = wndFile.getParent();
+        String fileName = wndFile.getName();
         String xls = fileName.replace(".wnd", ".csv");
         CsvReader reader = CsvUtil.getReader();
         //从文件中读取CSV数据
-        File file = FileUtil.file(s + fileName);
-        file.renameTo(new File(s + xls));
-        CsvData data = reader.read(new File(s + xls));
-        List<CsvRow> rows = data.getRows();
+        File file = FileUtil.file(fileParent + File.separator + fileName);
+        file.renameTo(new File(fileParent + File.separator + xls));
+        CsvData data = reader.read(new File(fileParent + File.separator + xls));
         CsvRow row = data.getRow(1);
         String Longitude = "";
         String Latitude = "";
         String SiteNumber = "";
         HashMap<String, String> hashMap = new HashMap<>();
         for (String s1 : row) {
-            if(s1.contains("Longitude")){
+            if (s1.contains("Longitude")) {
                 Longitude = CalculationUtil.getNumberFromStringForDian(s1);
-                hashMap.put("Longitude",Longitude);
-            }else if (s1.contains("Latitude")){
+                hashMap.put("Longitude", Longitude);
+            } else if (s1.contains("Latitude")) {
                 Latitude = CalculationUtil.getNumberFromStringForDian(s1);
-                hashMap.put("Latitude",Latitude);
-            }else if (s1.contains("SiteNumber")){
+                hashMap.put("Latitude", Latitude);
+            } else if (s1.contains("SiteNumber")) {
                 SiteNumber = CalculationUtil.getNumberFromString(s1);
-                hashMap.put("SiteNumber",SiteNumber);
+                hashMap.put("SiteNumber", SiteNumber);
             }
 
         }
@@ -1108,10 +1150,10 @@ public class AnalysisDataImpl {
 
     }
 
-    public void emailWindTowerInfoSave(String equipmentNo){
+    public void emailWindTowerInfoSave(String equipmentNo) {
         List<EmailWindTowerInfo> emailWindTowerInfoList = emailWindTowerInfoService.list();
         List<EmailWindTowerInfo> emailWindTowerInfos = emailWindTowerInfoList.stream().filter(e -> e.getEquipmentNo().equals(equipmentNo)).collect(Collectors.toList());
-        if(emailWindTowerInfos.size() == 0){
+        if (emailWindTowerInfos.size() == 0) {
             EmailWindTowerInfo emailWindTowerInfo = new EmailWindTowerInfo();
             emailWindTowerInfo.setId(UUID.randomUUID().toString());
             emailWindTowerInfo.setEquipmentNo(equipmentNo);
@@ -1119,7 +1161,7 @@ public class AnalysisDataImpl {
 
     }
 
-    public String heightReverseOrder(HashSet<String> Height){
+    public String heightReverseOrder(HashSet<String> Height) {
         StringBuilder builder = new StringBuilder();
         List<String> wsCollect = Height.stream().map(Integer::parseInt).sorted(Comparator.reverseOrder()).map(String::valueOf).collect(Collectors.toList());
         for (String h : wsCollect) {

+ 6 - 0
neim-biz/src/main/java/com/jiayue/biz/service/impl/WindTowerDataParentTableServiceImpl.java

@@ -840,6 +840,12 @@ public class WindTowerDataParentTableServiceImpl extends ServiceImpl<WindTowerDa
                     if (time >= startTime && time <= endTime) {
                         return file;
                     }
+                }else if(name.contains(".elog")){
+                    String[] elogNameTime = name.split("_");
+                    long time = DateUtil.parse(elogNameTime[1], "yyyyMMdd").getTime();
+                    if (time >= startTime && time <= endTime) {
+                        return file;
+                    }
                 }
                 return null;
             }).filter(file -> file != null && file.getName().contains(equipmentId)).collect(Collectors.toList());