|
@@ -1,18 +1,23 @@
|
|
|
package com.jiayue.ipp.idp.service.an;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.jiayue.ipfcst.common.core.util.DateMomentUtil;
|
|
|
import com.jiayue.ipfcst.common.core.util.DateTimeUtil;
|
|
|
+import com.jiayue.ipfcst.common.core.util.NumberUtils;
|
|
|
import com.jiayue.ipp.common.data.entity.ForecastPowerShortTerm;
|
|
|
import com.jiayue.ipp.common.data.entity.ForecastPowerShortTermHis;
|
|
|
+import com.jiayue.ipp.common.data.entity.Nwp;
|
|
|
import com.jiayue.ipp.common.data.entity.an.ParsingChannel;
|
|
|
import com.jiayue.ipp.common.data.entity.an.ParsingLog;
|
|
|
import com.jiayue.ipp.common.data.entity.an.ParsingUrl;
|
|
|
import com.jiayue.ipp.idp.dto.ParsingConstant;
|
|
|
import com.jiayue.ipp.idp.service.ForecastPowerShortTermHisService;
|
|
|
import com.jiayue.ipp.idp.service.ForecastPowerShortTermService;
|
|
|
+import com.jiayue.ipp.idp.service.NwpService;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.io.FileUtils;
|
|
@@ -26,6 +31,7 @@ import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
import java.io.InputStreamReader;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.nio.file.Files;
|
|
|
import java.text.ParseException;
|
|
@@ -55,6 +61,8 @@ public class DownloadService {
|
|
|
|
|
|
private final ForecastPowerShortTermService forecastPowerShortTermService;
|
|
|
|
|
|
+ private final NwpService nwpService;
|
|
|
+
|
|
|
/**
|
|
|
* 解析
|
|
|
*
|
|
@@ -201,6 +209,102 @@ public class DownloadService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if (file.getName().startsWith("NWP")) {
|
|
|
+ List<Nwp> listNwp = new ArrayList<>();
|
|
|
+ if (file.renameTo(file)) {
|
|
|
+ InputStreamReader readNwp = null;
|
|
|
+ BufferedReader bufferedReaderNwp = null;
|
|
|
+ try {
|
|
|
+ readNwp = new InputStreamReader(Files.newInputStream(file.toPath()), StandardCharsets.UTF_8);//考虑到编码格式
|
|
|
+ bufferedReaderNwp = new BufferedReader(readNwp);
|
|
|
+ String lineTxt;
|
|
|
+ Nwp nwpData;
|
|
|
+ BigDecimal nwpDirectRadiation = new BigDecimal("0.7"); //直接辐射
|
|
|
+ BigDecimal nwpDiffuseRadiation = new BigDecimal("0.3"); //散接辐射
|
|
|
+
|
|
|
+ while ((lineTxt = bufferedReaderNwp.readLine()) != null) {
|
|
|
+ //NWP文件按照Tab方式截取
|
|
|
+ String[] datas = lineTxt.split("\t");
|
|
|
+ if (datas.length >= 35 && datas[0].startsWith("#")) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss");
|
|
|
+ nwpData = new Nwp();
|
|
|
+ nwpData.setForecastManufactor(parsingUrl.getForecastManufactor());
|
|
|
+ //将截取的文件放入nwpData中
|
|
|
+ nwpData.setStationCode(parsingUrl.getStationCode());
|
|
|
+ nwpData.setScDate(sdf1.parse(datas[2]));
|
|
|
+// nwpData.setScTime(sdf.parse(datas[3]));
|
|
|
+ nwpData.setPreDate(sdf1.parse(datas[4]));
|
|
|
+ nwpData.setPreTime(sdf.parse(datas[5]));//采集时间 与 短期预测时间关联
|
|
|
+ nwpData.setT(NumberUtils.subtract(new BigDecimal(datas[6]), new BigDecimal("273.15")));//温度
|
|
|
+
|
|
|
+ nwpData.setSenf(new BigDecimal(datas[11]).setScale(2, RoundingMode.HALF_UP));//感热
|
|
|
+ nwpData.setSwr(new BigDecimal(datas[9]).setScale(2, RoundingMode.HALF_UP));//短波辐射(相当于总辐射)
|
|
|
+ nwpData.setLwr(new BigDecimal(datas[10]).setScale(2, RoundingMode.HALF_UP));//短波辐射(相当于总辐射)
|
|
|
+ nwpData.setPressure(new BigDecimal(datas[8]).setScale(2, RoundingMode.HALF_UP));//地表气压
|
|
|
+ nwpData.setRh(new BigDecimal(datas[7]).setScale(2, RoundingMode.HALF_UP));//2m相对湿度
|
|
|
+ nwpData.setDiffuseRadiation(new BigDecimal(datas[9]).multiply(nwpDiffuseRadiation).setScale(2, RoundingMode.HALF_UP));//散接辐射
|
|
|
+ nwpData.setDirectRadiation(new BigDecimal(datas[9]).multiply(nwpDirectRadiation).setScale(2, RoundingMode.HALF_UP));//直接辐射
|
|
|
+
|
|
|
+ nwpData.setWs10(new BigDecimal(datas[19]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWs30(new BigDecimal(datas[20]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWs50(new BigDecimal(datas[21]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWs70(new BigDecimal(datas[22]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWs80(new BigDecimal(datas[23]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWs90(new BigDecimal(datas[24]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWs100(new BigDecimal(datas[25]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWs170(new BigDecimal(datas[26]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWd10(new BigDecimal(datas[27]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWd30(new BigDecimal(datas[28]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWd50(new BigDecimal(datas[29]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWd70(new BigDecimal(datas[30]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWd80(new BigDecimal(datas[31]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWd90(new BigDecimal(datas[32]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWd100(new BigDecimal(datas[33]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ nwpData.setWd170(new BigDecimal(datas[34]).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ listNwp.add(nwpData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (listNwp.size() > 0 ) {
|
|
|
+ // 保存nwp实时
|
|
|
+ Date startTime = listNwp.get(0).getPreTime();
|
|
|
+ Date endTime = listNwp.get(listNwp.size() - 1).getPreTime();
|
|
|
+ LambdaQueryWrapper<Nwp> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(Nwp::getStationCode, parsingUrl.getStationCode());
|
|
|
+ lambdaQueryWrapper.eq(Nwp::getForecastManufactor, parsingUrl.getForecastManufactor());
|
|
|
+ lambdaQueryWrapper.between(Nwp::getPreTime, startTime, endTime);
|
|
|
+ nwpService.remove(lambdaQueryWrapper);
|
|
|
+ nwpService.saveBatch(listNwp);
|
|
|
+ log.info(parsingUrl.getStationCode() + "下" + fileName + "嘉越云端文件解析成功!");
|
|
|
+ try {
|
|
|
+ File file1 = new File(success + File.separator + fileName);
|
|
|
+ if (file1.exists()) {
|
|
|
+ file1.delete();
|
|
|
+ }
|
|
|
+ FileUtils.moveFile(file, new File(success + File.separator + fileName));
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (IOException | ParseException | RuntimeException e) {
|
|
|
+ log.error("系统错误:", e);
|
|
|
+ File destFile = new File(file.getPath().replaceFirst("new", "error"));
|
|
|
+ if (destFile.exists()) {
|
|
|
+ destFile.delete();
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ FileUtils.moveFile(file, destFile);
|
|
|
+ } catch (IOException e1) {
|
|
|
+ log.error(file.getName() + "文件解析失败", e);
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ close(bufferedReaderNwp, readNwp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
log.info("解析嘉越云端文件定时执行完成");
|