瀏覽代碼

新文件解析

hxf 1 年之前
父節點
當前提交
6df78ab871

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

@@ -73,6 +73,17 @@ public class FileAnalysisJob {
         log.debug("声雷达文件解析定时任务执行完成");
 
     }
+//    @Scheduled(fixedDelay = 6000
+//   @Scheduled(fixedDelay = 60000 * 15)
+    public void eolFileAnalysis() {
+
+        log.debug("eol文件解析定时任务执行开始");
+
+        this.analysisData.parseEol();
+
+        log.debug("eol文件解析定时任务执行完成");
+
+    }
 //    @Scheduled(fixedDelay = 60000 * 6000)
 
 

+ 188 - 2
neim-biz/src/main/java/com/jiayue/biz/service/impl/AnalysisDataImpl.java

@@ -9,13 +9,17 @@ import cn.hutool.core.util.ZipUtil;
 import cn.hutool.poi.excel.ExcelReader;
 import cn.hutool.poi.excel.ExcelUtil;
 import com.jiayue.biz.domain.*;
+import com.jiayue.biz.service.EmailService;
+import com.jiayue.biz.service.EmailWindTowerInfoService;
 import com.jiayue.biz.util.CalculationUtil;
 import com.jiayue.common.utils.file.FileUtils;
+import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.xssf.streaming.SXSSFRow;
 import org.apache.poi.xssf.streaming.SXSSFSheet;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -58,11 +62,16 @@ public class AnalysisDataImpl {
     private final WindTowerInfoServiceImpl windTowerInfoService;
     private final WindTowerDataParentTableServiceImpl windTowerDataParentTableService;
 
-    public AnalysisDataImpl(WindTowerInfoServiceImpl windTowerInfoService, WindTowerDataParentTableServiceImpl windTowerDataParentTableService) {
+
+    private final EmailWindTowerInfoServiceImpl emailWindTowerInfoService;
+
+    public AnalysisDataImpl(WindTowerInfoServiceImpl windTowerInfoService,WindTowerDataParentTableServiceImpl windTowerDataParentTableService,EmailWindTowerInfoServiceImpl emailWindTowerInfoService){
+        this.emailWindTowerInfoService = emailWindTowerInfoService;
         this.windTowerInfoService = windTowerInfoService;
         this.windTowerDataParentTableService = windTowerDataParentTableService;
     }
 
+
     /**
      * 先把outPutDir目录下的文件转成excel放到excelDir里 然后解析excel文件 读取数据存入数据库中
      *
@@ -966,7 +975,6 @@ public class AnalysisDataImpl {
 
     }
 
-
     /**
      * 从 String 中提取数字
      *
@@ -988,4 +996,182 @@ public class AnalysisDataImpl {
         return str2.toString();
     }
 
+    //解析eol文件
+    public void parseEol() {
+        //todo 需要修改
+        String s = "C:\\Users\\Administrator\\Desktop\\ID220810_20220919_180304_20230515_063537.log_20230515_063540.csv";
+
+        CsvReader reader = CsvUtil.getReader();
+        //从文件中读取CSV数据
+        File file = FileUtil.file(s);
+        CsvData data = reader.read(file);
+        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<>();
+
+        for (CsvRow csvRow : rows) {
+            //getRawList返回一个List列表,列表的每一项为CSV中的一个单元格(既逗号分隔部分)
+            HashMap<String, Object> hashMap = new HashMap<>();
+            for (int i = 0; i < csvRow.size(); i++) {
+                String str = csvRow.get(i);
+                if (str.contains("DateTime")) {
+                    if (state) {
+                        state = false;
+                        break;
+                    }
+                }
+                String s1 = this.assembleWind(str, wsHeight, wdHeight);
+                //修改表头
+                csvRow.set(i, s1);
+
+                hashMap.put(row.get(i), str);
+            }
+            //过滤数据
+            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){
+            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);
+            windTowerInfoService.saveOrUpdate(windTowerInfo);
+        }
+        this.emailWindTowerInfoSave(numberFromString);
+
+
+        windTowerDataParentTableService.packageData(dataList, numberFromString, "", "eol", "");
+
+    }
+
+    //解析经纬度 记录仪编号
+    public void dome1() {
+        //todo 需要写文件夹判断wnd文件再将文件转移
+        String s = "C:\\Users\\Administrator\\Desktop\\";
+        String fileName = "ID220810_20220919_180304_20230424_023957.log_20230424_024000.wnd";
+        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();
+        CsvRow row = data.getRow(1);
+        String Longitude = "";
+        String Latitude = "";
+        String SiteNumber = "";
+        for (String s1 : row) {
+            if(s1.contains("Longitude")){
+                Longitude = CalculationUtil.getNumberFromStringForDian(s1);
+            }else if (s1.contains("Latitude")){
+                Latitude = CalculationUtil.getNumberFromStringForDian(s1);
+            }else if (s1.contains("SiteNumber")){
+                SiteNumber = CalculationUtil.getNumberFromString(s1);
+            }
+
+        }
+        System.out.println("SiteNumber = " + SiteNumber);
+
+    }
+
+    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){
+            EmailWindTowerInfo emailWindTowerInfo = new EmailWindTowerInfo();
+            emailWindTowerInfo.setId(UUID.randomUUID().toString());
+            emailWindTowerInfo.setEquipmentNo(equipmentNo);
+        }
+
+    }
+
+    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) {
+            if (builder.length() > 0) {
+                builder.append(",");
+            }
+            builder.append(h);
+        }
+        return builder.toString();
+    }
+
+
+    public String assembleWind(String s, HashSet<String> wsHeight, HashSet<String> wdHeight) {
+        String str = s;
+        if (s.contains("WS")) {
+            String wsAndType = s.substring(s.indexOf("WS"));
+            //层高
+            String height = "";
+            if (!s.contains("TI")) {
+                height = CalculationUtil.getNumberFromString(s.substring(s.indexOf("WS")));
+                wsHeight.add(height);
+            }
+            //ave/min/max/sta
+            String type = this.assembleProperty(wsAndType);
+            str = "ws" + type + "_" + height;
+
+        } else if (s.contains("WD")) {
+            String wdAndType = s.substring(s.indexOf("WD"));
+            //层高
+            String height = CalculationUtil.getNumberFromString(wdAndType);
+            wdHeight.add(height);
+            //ave/min/max/sta
+            String type = this.assembleProperty(wdAndType);
+            str = "wd" + type + "_" + height;
+
+        } else if (s.contains("DateTime")) {
+            str = "time";
+        } else if (s.contains("PR")) {
+            String type = this.assembleProperty(s);
+            str = "pa" + type;
+        } else if (s.contains("TEM")) {
+            String type = this.assembleProperty(s);
+            str = "t" + type;
+        }
+        return str;
+    }
+
+
+    public String assembleProperty(String property) {
+        String s = "";
+        if (property.contains("-")) {
+            if (property.contains("STDev")) {
+                s = "Sta";
+            } else if (property.contains("Max")) {
+                s = "Max";
+
+            } else if (property.contains("Min")) {
+                s = "Min";
+            }
+        } else {
+            s = "Ave";
+        }
+        return s;
+
+    }
+
+
 }

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

@@ -86,6 +86,9 @@ public class WindTowerDataParentTableServiceImpl extends ServiceImpl<WindTowerDa
         if (type.equals("sld")) {
             simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmm");
         }
+        if (type.equals("eol")) {
+            simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
+        }
         String eqNo = equipmentId;
         List<WindTowerInfo> windTowerInfoList = windTowerInfoService.list();
         List<WindTowerInfo> windTowerInfo = windTowerInfoList.stream().filter(w -> w.getEquipmentNo().equals(eqNo)).collect(Collectors.toList());