|
@@ -190,10 +190,17 @@ public class PullInitData implements IPullInitForecastData{
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ * 解析原始dq、nwp文件并返回ForecastDataList
|
|
|
+ * @param dqFile
|
|
|
+ * @param nwpFile
|
|
|
+ * @param station
|
|
|
+ * @param localDateTime
|
|
|
+ * @return
|
|
|
+ */
|
|
|
public List<ForecastData> fileAnalysis(File dqFile, File nwpFile, Station station, LocalDateTime localDateTime) {
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
List<ForecastData> aioList = new ArrayList<>();
|
|
|
- List<ForecastData> resultList = new ArrayList<>();
|
|
|
boolean jx = true;
|
|
|
if (dqFile.renameTo(dqFile)) {
|
|
|
InputStreamReader dqRead = null;
|
|
@@ -203,6 +210,7 @@ public class PullInitData implements IPullInitForecastData{
|
|
|
try {
|
|
|
dqRead = new InputStreamReader(new FileInputStream(dqFile), "utf-8");
|
|
|
dqBufferedReader = new BufferedReader(dqRead);
|
|
|
+ // 循环解析dq文件并放入aioList
|
|
|
while ((stringLine = dqBufferedReader.readLine()) != null) {
|
|
|
String[] string_arr = stringLine.split("\t");
|
|
|
if (string_arr.length == 4 && string_arr[0].startsWith("#")) {
|
|
@@ -237,7 +245,7 @@ public class PullInitData implements IPullInitForecastData{
|
|
|
String lineTxt;
|
|
|
BigDecimal nwpDirectRadiation = new BigDecimal(0.7); //直接辐射
|
|
|
BigDecimal nwpDiffuseRadiation = new BigDecimal(0.3); //散接辐射
|
|
|
-
|
|
|
+ // 循环解析nwp文件,并将nwp数据存入对应时间的aioList中(就是将短期和nwp数据合并放入一个bean中)
|
|
|
while ((lineTxt = bufferedReaderNwp.readLine()) != null) {
|
|
|
//NWP文件按照Tab方式截取
|
|
|
String[] datas = lineTxt.split("\t");
|
|
@@ -246,16 +254,16 @@ public class PullInitData implements IPullInitForecastData{
|
|
|
Long finalTime = sdf.parse(datas[5]).getTime();
|
|
|
List<ForecastData> filterAios = aioList.stream().filter(a -> a.getForecastTime().longValue() == finalTime.longValue()).collect(Collectors.toList());
|
|
|
if (CollectionUtil.isNotEmpty(filterAios)) {
|
|
|
- ForecastData aio = filterAios.get(0);
|
|
|
- aio.setTemperature(new BigDecimal(datas[6]).subtract(new BigDecimal(273.15)).setScale(2, RoundingMode.HALF_UP));//温度
|
|
|
- aio.setSwr(new BigDecimal(datas[9]).setScale(2, RoundingMode.HALF_UP));//短波辐射(相当于总辐射)
|
|
|
- aio.setPressure(new BigDecimal(datas[8]).setScale(2, RoundingMode.HALF_UP));//地表气压
|
|
|
- aio.setHumidity(new BigDecimal(datas[7]).setScale(2, RoundingMode.HALF_UP));//2m相对湿度
|
|
|
- aio.setDiffuseRadiation(new BigDecimal(datas[9]).multiply(nwpDiffuseRadiation).setScale(2, RoundingMode.HALF_UP));//散接辐射
|
|
|
- aio.setDirectRadiation(new BigDecimal(datas[9]).multiply(nwpDirectRadiation).setScale(2, RoundingMode.HALF_UP));//直接辐射
|
|
|
- aio.setWindSpeed(new BigDecimal(datas[19]).setScale(2, RoundingMode.HALF_UP));
|
|
|
- aio.setWindDir(new BigDecimal(datas[27]).setScale(2, RoundingMode.HALF_UP));
|
|
|
- resultList.add(aio);
|
|
|
+ filterAios.get(0).setTemperature(new BigDecimal(datas[6]).subtract(new BigDecimal(273.15)).setScale(2, RoundingMode.HALF_UP));//温度
|
|
|
+ filterAios.get(0).setSwr(new BigDecimal(datas[9]).setScale(2, RoundingMode.HALF_UP));//短波辐射(相当于总辐射)
|
|
|
+ filterAios.get(0).setPressure(new BigDecimal(datas[8]).setScale(2, RoundingMode.HALF_UP));//地表气压
|
|
|
+ filterAios.get(0).setHumidity(new BigDecimal(datas[7]).setScale(2, RoundingMode.HALF_UP));//2m相对湿度
|
|
|
+ filterAios.get(0).setDiffuseRadiation(new BigDecimal(datas[9]).multiply(nwpDiffuseRadiation).setScale(2, RoundingMode.HALF_UP));//散接辐射
|
|
|
+ filterAios.get(0).setDirectRadiation(new BigDecimal(datas[9]).multiply(nwpDirectRadiation).setScale(2, RoundingMode.HALF_UP));//直接辐射
|
|
|
+ filterAios.get(0).setWindSpeed(new BigDecimal(datas[19]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ filterAios.get(0).setWindDir(new BigDecimal(datas[27]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }else{
|
|
|
+ log.error(finalTime+"此时刻没有预测数据");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -270,8 +278,8 @@ public class PullInitData implements IPullInitForecastData{
|
|
|
}
|
|
|
|
|
|
if (jx) {
|
|
|
- resultList.sort(Comparator.comparing(ForecastData::getForecastTime));
|
|
|
- return resultList;
|
|
|
+ aioList.sort(Comparator.comparing(ForecastData::getForecastTime));
|
|
|
+ return aioList;
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|