|
@@ -3,6 +3,7 @@ package com.jiayue.insu.inclientqn.service.client;
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.collection.ListUtil;
|
|
|
import cn.hutool.core.date.DatePattern;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
import cn.hutool.core.io.FileUtil;
|
|
|
import cn.hutool.core.io.file.FileReader;
|
|
@@ -15,7 +16,9 @@ import com.jiayue.insu.inclientqn.constant.CommonStant;
|
|
|
import com.jiayue.insu.inclientqn.entity.*;
|
|
|
import com.jiayue.insu.inclientqn.inenum.ElectricFieldTypeEnum;
|
|
|
import com.jiayue.insu.inclientqn.inenum.QNHLEnum;
|
|
|
+import com.jiayue.insu.inclientqn.inenum.StatusEnum;
|
|
|
import com.jiayue.insu.inclientqn.service.*;
|
|
|
+import com.jiayue.insu.inclientqn.util.DateTimeUtils;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
@@ -56,44 +59,43 @@ public class BackDataAnalysisService {
|
|
|
private final BackForeForecastDataService backForeForecastDataService;
|
|
|
|
|
|
|
|
|
+ private static Map<String, Map<String, Object>> labelMap = new HashMap<>();
|
|
|
|
|
|
- private static Map<String ,Map<String,Object>> labelMap = new HashMap<>();
|
|
|
+ static {
|
|
|
+ Map<String, Object> rp = new HashMap<>();
|
|
|
+ rp.put("label_start", "<" + QNHLEnum.DATA_STAT_TYPE_RealPower.getCode() + ">");
|
|
|
+ rp.put("label_end", "</" + QNHLEnum.DATA_STAT_TYPE_RealPower.getCode() + ">");
|
|
|
|
|
|
- static{
|
|
|
- Map<String,Object> rp = new HashMap<>();
|
|
|
- rp.put("label_start","<" + QNHLEnum.DATA_STAT_TYPE_RealPower.getCode() + ">");
|
|
|
- rp.put("label_end","</" + QNHLEnum.DATA_STAT_TYPE_RealPower.getCode() + ">");
|
|
|
+ labelMap.put(QNHLEnum.DATA_STAT_TYPE_RealPower.getCode(), rp);
|
|
|
|
|
|
- labelMap.put(QNHLEnum.DATA_STAT_TYPE_RealPower.getCode(), rp );
|
|
|
|
|
|
+ Map<String, Object> rw = new HashMap<>();
|
|
|
+ rw.put("label_start", "<" + QNHLEnum.DATA_STAT_TYPE_RealWeather.getCode() + ">");
|
|
|
+ rw.put("label_end", "</" + QNHLEnum.DATA_STAT_TYPE_RealWeather.getCode() + ">");
|
|
|
+ labelMap.put(QNHLEnum.DATA_STAT_TYPE_RealWeather.getCode(), rw);
|
|
|
|
|
|
- Map<String,Object> rw = new HashMap<>();
|
|
|
- rw.put("label_start","<" + QNHLEnum.DATA_STAT_TYPE_RealWeather.getCode() + ">");
|
|
|
- rw.put("label_end","</" + QNHLEnum.DATA_STAT_TYPE_RealWeather.getCode() + ">");
|
|
|
- labelMap.put(QNHLEnum.DATA_STAT_TYPE_RealWeather.getCode(), rw );
|
|
|
|
|
|
+ Map<String, Object> fpr = new HashMap<>();
|
|
|
+ fpr.put("label_start", "<" + QNHLEnum.DATA_STAT_TYPE_ForecastPowerReport.getCode() + ">");
|
|
|
+ fpr.put("label_end", "</" + QNHLEnum.DATA_STAT_TYPE_ForecastPowerReport.getCode() + ">");
|
|
|
+ labelMap.put(QNHLEnum.DATA_STAT_TYPE_ForecastPowerReport.getCode(), fpr);
|
|
|
|
|
|
- Map<String,Object> fpr = new HashMap<>();
|
|
|
- fpr.put("label_start","<" + QNHLEnum.DATA_STAT_TYPE_ForecastPowerReport.getCode() + ">");
|
|
|
- fpr.put("label_end","</" + QNHLEnum.DATA_STAT_TYPE_ForecastPowerReport.getCode() + ">");
|
|
|
- labelMap.put(QNHLEnum.DATA_STAT_TYPE_ForecastPowerReport.getCode(), fpr );
|
|
|
|
|
|
+ Map<String, Object> ufpr = new HashMap<>();
|
|
|
+ ufpr.put("label_start", "<" + QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode() + ">");
|
|
|
+ ufpr.put("label_end", "</" + QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode() + ">");
|
|
|
+ labelMap.put(QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode(), ufpr);
|
|
|
|
|
|
- Map<String,Object> ufpr = new HashMap<>();
|
|
|
- ufpr.put("label_start","<" + QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode() + ">");
|
|
|
- ufpr.put("label_end","</" + QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode() + ">");
|
|
|
- labelMap.put(QNHLEnum.DATA_STAT_TYPE_UltraShortTermForecastReport.getCode(), ufpr );
|
|
|
|
|
|
+ Map<String, Object> fp = new HashMap<>();
|
|
|
+ fp.put("label_start", "<" + QNHLEnum.DATA_FORE_TYPE_ForecastPower.getCode() + ">");
|
|
|
+ fp.put("label_end", "</" + QNHLEnum.DATA_FORE_TYPE_ForecastPower.getCode() + ">");
|
|
|
+ labelMap.put(QNHLEnum.DATA_FORE_TYPE_ForecastPower.getCode(), fp);
|
|
|
|
|
|
- Map<String,Object> fp = new HashMap<>();
|
|
|
- fp.put("label_start","<" + QNHLEnum.DATA_FORE_TYPE_ForecastPower.getCode() + ">");
|
|
|
- fp.put("label_end","</" + QNHLEnum.DATA_FORE_TYPE_ForecastPower.getCode() + ">");
|
|
|
- labelMap.put(QNHLEnum.DATA_FORE_TYPE_ForecastPower.getCode(), fp );
|
|
|
-
|
|
|
- Map<String,Object> ufp = new HashMap<>();
|
|
|
- ufp.put("label_start","<" + QNHLEnum.DATA_FORE_TYPE_UltraShortTermForecast.getCode() + ">");
|
|
|
- ufp.put("label_end","</" + QNHLEnum.DATA_FORE_TYPE_UltraShortTermForecast.getCode() + ">");
|
|
|
- labelMap.put(QNHLEnum.DATA_FORE_TYPE_UltraShortTermForecast.getCode(), ufp );
|
|
|
+ Map<String, Object> ufp = new HashMap<>();
|
|
|
+ ufp.put("label_start", "<" + QNHLEnum.DATA_FORE_TYPE_UltraShortTermForecast.getCode() + ">");
|
|
|
+ ufp.put("label_end", "</" + QNHLEnum.DATA_FORE_TYPE_UltraShortTermForecast.getCode() + ">");
|
|
|
+ labelMap.put(QNHLEnum.DATA_FORE_TYPE_UltraShortTermForecast.getCode(), ufp);
|
|
|
|
|
|
|
|
|
}
|
|
@@ -105,12 +107,17 @@ public class BackDataAnalysisService {
|
|
|
|
|
|
Record record = new Record();
|
|
|
record.setType(CommonStant.RECORD_TYPE_BACK_DATA_FILE);
|
|
|
+ record.setState(StatusEnum.FILE_NULL.getCode());
|
|
|
+ record.setStateContent(StatusEnum.FILE_NULL.getMsg());
|
|
|
+ LocalDateTime localDateTime = LocalDateTimeUtil.of(DateTimeUtils.get15min(DateUtil.date().getTime()));
|
|
|
+ record.setTime(localDateTime);
|
|
|
+ record.setCreateTime(LocalDateTime.now());
|
|
|
//获取扫描文件路径
|
|
|
if (StrUtil.isEmpty(backFilePath)) {
|
|
|
backFilePath = stationService.findThis().getBackFilePath();
|
|
|
}
|
|
|
|
|
|
- //TODO 文件解析
|
|
|
+
|
|
|
File file = FileUtil.file(backFilePath);
|
|
|
|
|
|
if (!file.exists()) {// 判断目录是否存在
|
|
@@ -121,19 +128,38 @@ public class BackDataAnalysisService {
|
|
|
watchMonitor.setWatcher(new DelayWatcher(new Watcher() {
|
|
|
@Override
|
|
|
public void onCreate(WatchEvent<?> event, Path currentPath) {
|
|
|
- Object obj = event.context();
|
|
|
- System.out.println();
|
|
|
- Console.log("创建:{}-> {}", currentPath, obj);
|
|
|
+ File file = null;
|
|
|
+ try {
|
|
|
+ Object obj = event.context();
|
|
|
+ System.out.println();
|
|
|
+ Console.log("创建:{}-> {}", currentPath, obj);
|
|
|
+ if (obj.toString().startsWith(CommonStant.RECORD_TYPE_BACK_DATA_FILE)) {
|
|
|
+
|
|
|
+ file = FileUtil.file(currentPath.toString() + File.separatorChar + obj.toString());
|
|
|
+
|
|
|
+ if (file.exists()) {// 判断目录是否存在
|
|
|
+ FileReader fileReader = new FileReader(currentPath.toString() + File.separatorChar + obj.toString());
|
|
|
+ List<String> contents = fileReader.readLines();
|
|
|
+ if (CollectionUtil.isNotEmpty(contents)) {
|
|
|
+ String s = fileAnalysis(contents);
|
|
|
+ if (StrUtil.isNotEmpty(s)) {
|
|
|
+ record.setStateContent(s);
|
|
|
+ record.setState(StatusEnum.SUCCESS.getCode());
|
|
|
+ }
|
|
|
|
|
|
- File file = FileUtil.file(currentPath.toString() + File.separatorChar + obj.toString());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ file.mkdirs();
|
|
|
+ }
|
|
|
|
|
|
- if (file.exists()) {// 判断目录是否存在
|
|
|
- FileReader fileReader = new FileReader(currentPath.toString() + File.separatorChar + obj.toString());
|
|
|
- List<String> contents = fileReader.readLines();
|
|
|
- if(CollectionUtil.isNotEmpty(contents)){
|
|
|
- fileAnalysis(contents);
|
|
|
}
|
|
|
-
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ record.setCreateTime(LocalDateTime.now());
|
|
|
+ LocalDateTime localDateTime = LocalDateTimeUtil.of(DateTimeUtils.get15min(DateUtil.date().getTime()));
|
|
|
+ record.setTime(localDateTime);
|
|
|
+ recordService.save(record);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -164,17 +190,18 @@ public class BackDataAnalysisService {
|
|
|
//启动监听
|
|
|
watchMonitor.start();
|
|
|
|
|
|
- record.setCreateTime(LocalDateTime.now());
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
|
- public boolean fileAnalysis(List<String> contents) {
|
|
|
- boolean status =true;
|
|
|
+ public String fileAnalysis(List<String> contents) {
|
|
|
+ String result = "";
|
|
|
+
|
|
|
String[] fileTime = contents.get(0).split("\\s+")[2].split("=");
|
|
|
- LocalDateTime signTime = LocalDateTimeUtil.parse(fileTime[1].substring(1,fileTime[1].length()-1), DatePattern.PURE_DATETIME_PATTERN);
|
|
|
+ LocalDateTime signTime = LocalDateTimeUtil.parse(fileTime[1].substring(1, fileTime[1].length() - 1), DatePattern.PURE_DATETIME_PATTERN);
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
|
- Map<String,List<String>> contentMap = new HashMap<>();
|
|
|
+ Map<String, List<String>> contentMap = new HashMap<>();
|
|
|
|
|
|
BackStatData backStatData = new BackStatData();
|
|
|
backStatData.setSignTime(signTime);
|
|
@@ -188,44 +215,42 @@ public class BackDataAnalysisService {
|
|
|
|
|
|
for (Map.Entry<String, Map<String, Object>> entry : labelMap.entrySet()) {
|
|
|
Map<String, Object> map = entry.getValue();
|
|
|
- String label_start = (String)map.get("label_start");
|
|
|
- String label_end = (String)map.get("label_end");
|
|
|
- int start_index =0;
|
|
|
- int end_index =0;
|
|
|
+ String label_start = (String) map.get("label_start");
|
|
|
+ String label_end = (String) map.get("label_end");
|
|
|
+ int start_index = 0;
|
|
|
+ int end_index = 0;
|
|
|
for (int i = 0; i < contents.size(); i++) {
|
|
|
- if(contents.get(i).equals(label_start)){
|
|
|
+ if (contents.get(i).equals(label_start)) {
|
|
|
start_index = i;
|
|
|
}
|
|
|
- if(contents.get(i).equals(label_end)){
|
|
|
+ if (contents.get(i).equals(label_end)) {
|
|
|
end_index = i;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//标签头和标签尾相减大于2 说明除了表头 至少还有1行数据
|
|
|
- if(end_index-start_index >2){
|
|
|
- contentMap.put(entry.getKey(), ListUtil.sub(contents, start_index+2, end_index));
|
|
|
+ if (end_index - start_index > 2) {
|
|
|
+ contentMap.put(entry.getKey(), ListUtil.sub(contents, start_index + 2, end_index));
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
- for (Map.Entry<String, List<String>> entry:contentMap.entrySet()){
|
|
|
+ for (Map.Entry<String, List<String>> entry : contentMap.entrySet()) {
|
|
|
|
|
|
List<String> value = entry.getValue();
|
|
|
|
|
|
- switch (entry.getKey()){
|
|
|
+ switch (entry.getKey()) {
|
|
|
case "RealPower":
|
|
|
try {
|
|
|
String[] rpData = value.get(0).split("\\s+");
|
|
|
- if(rpData.length==3){
|
|
|
- backStatData.setRealPower( new BigDecimal(rpData[2]));
|
|
|
+ if (rpData.length == 3) {
|
|
|
+ backStatData.setRealPower(new BigDecimal(rpData[2]));
|
|
|
+ result += "RealPower,";
|
|
|
|
|
|
- }else{
|
|
|
- status = false;
|
|
|
}
|
|
|
- }catch (Exception e){
|
|
|
+ } catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
- status = false;
|
|
|
}
|
|
|
|
|
|
break;
|
|
@@ -234,18 +259,18 @@ public class BackDataAnalysisService {
|
|
|
|
|
|
try {
|
|
|
String[] rwData = value.get(0).split("\\s+");
|
|
|
- if(station.getType().equals(ElectricFieldTypeEnum.E2.name())){
|
|
|
- if(rwData.length==7){
|
|
|
+ if (station.getType().equals(ElectricFieldTypeEnum.E2.name())) {
|
|
|
+ if (rwData.length == 7) {
|
|
|
backStatData.setWs(new BigDecimal(rwData[2]));
|
|
|
backStatData.setWd(new BigDecimal(rwData[3]));
|
|
|
backStatData.setTemperature(new BigDecimal(rwData[4]));
|
|
|
backStatData.setHumidity(new BigDecimal(rwData[5]));
|
|
|
backStatData.setPressure(new BigDecimal(rwData[6]));
|
|
|
- }else{
|
|
|
- status = false;
|
|
|
+ result += "RealWeather,";
|
|
|
+
|
|
|
}
|
|
|
- }else{
|
|
|
- if(rwData.length==11){
|
|
|
+ } else {
|
|
|
+ if (rwData.length == 11) {
|
|
|
backStatData.setGlobalR(new BigDecimal(rwData[2]));
|
|
|
backStatData.setDirectR(new BigDecimal(rwData[3]));
|
|
|
backStatData.setDiffuseR(new BigDecimal(rwData[4]));
|
|
@@ -255,13 +280,11 @@ public class BackDataAnalysisService {
|
|
|
backStatData.setPressure(new BigDecimal(rwData[8]));
|
|
|
backStatData.setWs(new BigDecimal(rwData[9]));
|
|
|
backStatData.setWd(new BigDecimal(rwData[10]));
|
|
|
- }else{
|
|
|
- status = false;
|
|
|
+ result += "RealWeather,";
|
|
|
}
|
|
|
}
|
|
|
- }catch (Exception e){
|
|
|
+ } catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
- status = false;
|
|
|
}
|
|
|
|
|
|
break;
|
|
@@ -270,15 +293,12 @@ public class BackDataAnalysisService {
|
|
|
|
|
|
try {
|
|
|
String[] fpr = value.get(0).split("\\s+");
|
|
|
- if(fpr.length==3){
|
|
|
+ if (fpr.length == 3) {
|
|
|
backStatData.setReportStateForecast(new BigDecimal(fpr[2]));
|
|
|
-
|
|
|
- }else{
|
|
|
- status = false;
|
|
|
+ result += "fReport,";
|
|
|
}
|
|
|
- }catch (Exception e){
|
|
|
+ } catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
- status = false;
|
|
|
}
|
|
|
|
|
|
break;
|
|
@@ -287,22 +307,20 @@ public class BackDataAnalysisService {
|
|
|
|
|
|
try {
|
|
|
String[] ufpr = value.get(0).split("\\s+");
|
|
|
- if(ufpr.length==3){
|
|
|
+ if (ufpr.length == 3) {
|
|
|
backStatData.setReportStateForecastshort(new BigDecimal(ufpr[2]));
|
|
|
- }else{
|
|
|
- status = false;
|
|
|
+ result += "usfReport,";
|
|
|
}
|
|
|
- }catch (Exception e){
|
|
|
+ } catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
- status = false;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case "UltraShortTermForecast":
|
|
|
|
|
|
- try{
|
|
|
- for (String content: value) {
|
|
|
+ try {
|
|
|
+ for (String content : value) {
|
|
|
String[] datas = content.split("\\s+");
|
|
|
BackForeUsForecastData backForeUsForecastData = new BackForeUsForecastData();
|
|
|
backForeUsForecastData.setSignTime(signTime);
|
|
@@ -312,19 +330,16 @@ public class BackDataAnalysisService {
|
|
|
backForeUsForecastData.setForecastOpenCap(new BigDecimal(datas[4]));
|
|
|
usList.add(backForeUsForecastData);
|
|
|
}
|
|
|
- }catch (Exception e){
|
|
|
+ result += "usf,";
|
|
|
+ } catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
- status = false;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
break;
|
|
|
|
|
|
-
|
|
|
case "ForecastPower":
|
|
|
|
|
|
- try{
|
|
|
- for (String content: value) {
|
|
|
+ try {
|
|
|
+ for (String content : value) {
|
|
|
String[] datas = content.split("\\s+");
|
|
|
BackForeForecastData backForeForecastData = new BackForeForecastData();
|
|
|
backForeForecastData.setSignTime(signTime);
|
|
@@ -334,9 +349,9 @@ public class BackDataAnalysisService {
|
|
|
backForeForecastData.setForecastOpenCap(new BigDecimal(datas[4]));
|
|
|
list.add(backForeForecastData);
|
|
|
}
|
|
|
- }catch (Exception e){
|
|
|
- e.printStackTrace();
|
|
|
- status = false;
|
|
|
+ result += "fp,";
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
|
|
|
|
|
@@ -345,14 +360,13 @@ public class BackDataAnalysisService {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
backStatDataService.save(backStatData);
|
|
|
backForeUsForecastDataService.saveBatch(usList);
|
|
|
backForeForecastDataService.saveBatch(list);
|
|
|
|
|
|
|
|
|
- return status;
|
|
|
+ return result;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
|
|
|
}
|