|
@@ -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;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|