瀏覽代碼

新增解析nwp

xusl 2 年之前
父節點
當前提交
9582b2e0af

+ 384 - 58
ipfcst/ipfcst-console/src/main/java/com/jiayue/ipfcst/console/service/FileAnalysisService.java

@@ -61,6 +61,10 @@ public class FileAnalysisService extends BaseService {
 
 	NwpService nwpService;
 
+  NwpOneService nwpOneService;
+
+  NwpTwoService nwpTwoService;
+
 	FileAnalysisRecordService fileAnalysisRecordService;
 
 	EntityManagerRepository entityManagerRepository;
@@ -332,62 +336,204 @@ public class FileAnalysisService extends BaseService {
 
 					if (file.getName().startsWith("NWP")) {
 						try {
-							List<Nwp> listNwp = fileAnalysisNwp(file);
-							Nwp nwpData = null;
-							SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-							if (listNwp != null && listNwp.size() > 0) {
-								while (listNwp.get(listNwp.size() - 1).getPreTime() < DateTimeUtil.getMillisecondsSubDay() + 4 * 24 * 60 * 60 * 1000 - timeD) {
-									nwpData = new Nwp();
-									long time = 0;
-									try {
-										time = sdf.parse(listNwp.get(listNwp.size() - 96).getPreDate()).getTime() + 24 * 60 * 60 * 1000;
-									} catch (ParseException e) {
-										e.printStackTrace();
-									}
-									nwpData.setFarmId(listNwp.get(listNwp.size() - 96).getFarmId());
-									nwpData.setScDate(listNwp.get(listNwp.size() - 96).getScDate());
-									nwpData.setScTime(listNwp.get(listNwp.size() - 96).getScTime());
-									nwpData.setPreDate(sdf.format(time));
-									nwpData.setPreTime(listNwp.get(listNwp.size() - 1).getPreTime() + timeD);
-									nwpData.setT(listNwp.get(listNwp.size() - 96).getT());//温度
-									nwpData.setRh(listNwp.get(listNwp.size() - 96).getRh());//湿度
-									nwpData.setPressure(listNwp.get(listNwp.size() - 96).getPressure());//气压
-									nwpData.setSwr(listNwp.get(listNwp.size() - 96).getSwr());//辐射
-									nwpData.setLwr(listNwp.get(listNwp.size() - 96).getLwr());//辐射
-									nwpData.setDiffuseRadiation(listNwp.get(listNwp.size() - 96).getDiffuseRadiation());//散接辐射
-									nwpData.setDirectRadiation(listNwp.get(listNwp.size() - 96).getDirectRadiation());//直接辐射
-
-									nwpData.setSenf(listNwp.get(listNwp.size() - 96).getSenf());//热感通量
-
-									nwpData.setWs10(listNwp.get(listNwp.size() - 96).getWs10());//10 m 风速
-									nwpData.setWs30(listNwp.get(listNwp.size() - 96).getWs30());//30 m 风速
-									nwpData.setWs50(listNwp.get(listNwp.size() - 96).getWs50());//50 m 风速
-									nwpData.setWs70(listNwp.get(listNwp.size() - 96).getWs70());//70 m 风速
-									nwpData.setWs80(listNwp.get(listNwp.size() - 96).getWs80());//80 m 风速
-									nwpData.setWs90(listNwp.get(listNwp.size() - 96).getWs90());//90 m 风速
-									nwpData.setWs100(listNwp.get(listNwp.size() - 96).getWs100());//100 m 风速
-									nwpData.setWs170(listNwp.get(listNwp.size() - 96).getWs170());//170 m 风速
-
-									nwpData.setWd10(listNwp.get(listNwp.size() - 96).getWd10());//10 m 风向
-									nwpData.setWd30(listNwp.get(listNwp.size() - 96).getWd30());//30 m 风向
-									nwpData.setWd50(listNwp.get(listNwp.size() - 96).getWd50());//50 m 风向
-									nwpData.setWd70(listNwp.get(listNwp.size() - 96).getWd70());//70 m 风向
-									nwpData.setWd80(listNwp.get(listNwp.size() - 96).getWd80());//80 m 风向
-									nwpData.setWd90(listNwp.get(listNwp.size() - 96).getWd90());//90 m 风向
-									nwpData.setWd100(listNwp.get(listNwp.size() - 96).getWd100());//100 m 风向
-									nwpData.setWd170(listNwp.get(listNwp.size() - 96).getWd170());//170 m 风向
-									listNwp.add(nwpData);
-								}
-							} else {
-								flag = false;
-								log.info(file.getName() + "文件数据内容为空、不能正常解析 、移除该文件、执行数据修正功能");
-							}
+              try (InputStreamReader read = new InputStreamReader(new FileInputStream(file), "utf-8");
+                   BufferedReader bufferedReader = new BufferedReader(read);){
+                String stringLine;
+                while ((stringLine = bufferedReader.readLine()) != null) {
+                  // 读取第一行的场站名称判断是哪期的
+                  String[] firstRow = stringLine.split(" ");
+                  if (firstRow.length==2){
+                    // 获取场站名称
+                    String czmc = firstRow[0].split("::")[1];
+                    if ("龙阜风电场".equals(czmc)){
+                      ycbs = 0;
+                    }
+                    if ("龙阜风电场一期".equals(czmc)){
+                      ycbs = 1;
+                    }
+                    else if ("龙阜风电场二期".equals(czmc)){
+                      ycbs = 2;
+                    }
+                  }
+                  break;
+                }
+              }
 
-							//保存NWP实时数据
-							Long startTime = listNwp.get(0).getPreTime();
-							Long endTime = listNwp.get(listNwp.size() - 1).getPreTime();//删除相同时间数据
-							nwpService.deleteBetweenAndPreTime(startTime, endTime, listNwp);
-							flag = true;
+              if (ycbs==0) {
+                // 原来总的
+                List<Nwp> listNwp = fileAnalysisNwp(file);
+                Nwp nwpData = null;
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                if (listNwp != null && listNwp.size() > 0) {
+                  while (listNwp.get(listNwp.size() - 1).getPreTime() < DateTimeUtil.getMillisecondsSubDay() + 4 * 24 * 60 * 60 * 1000 - timeD) {
+                    nwpData = new Nwp();
+                    long time = 0;
+                    try {
+                      time = sdf.parse(listNwp.get(listNwp.size() - 96).getPreDate()).getTime() + 24 * 60 * 60 * 1000;
+                    } catch (ParseException e) {
+                      e.printStackTrace();
+                    }
+                    nwpData.setFarmId(listNwp.get(listNwp.size() - 96).getFarmId());
+                    nwpData.setScDate(listNwp.get(listNwp.size() - 96).getScDate());
+                    nwpData.setScTime(listNwp.get(listNwp.size() - 96).getScTime());
+                    nwpData.setPreDate(sdf.format(time));
+                    nwpData.setPreTime(listNwp.get(listNwp.size() - 1).getPreTime() + timeD);
+                    nwpData.setT(listNwp.get(listNwp.size() - 96).getT());//温度
+                    nwpData.setRh(listNwp.get(listNwp.size() - 96).getRh());//湿度
+                    nwpData.setPressure(listNwp.get(listNwp.size() - 96).getPressure());//气压
+                    nwpData.setSwr(listNwp.get(listNwp.size() - 96).getSwr());//辐射
+                    nwpData.setLwr(listNwp.get(listNwp.size() - 96).getLwr());//辐射
+                    nwpData.setDiffuseRadiation(listNwp.get(listNwp.size() - 96).getDiffuseRadiation());//散接辐射
+                    nwpData.setDirectRadiation(listNwp.get(listNwp.size() - 96).getDirectRadiation());//直接辐射
+
+                    nwpData.setSenf(listNwp.get(listNwp.size() - 96).getSenf());//热感通量
+
+                    nwpData.setWs10(listNwp.get(listNwp.size() - 96).getWs10());//10 m 风速
+                    nwpData.setWs30(listNwp.get(listNwp.size() - 96).getWs30());//30 m 风速
+                    nwpData.setWs50(listNwp.get(listNwp.size() - 96).getWs50());//50 m 风速
+                    nwpData.setWs70(listNwp.get(listNwp.size() - 96).getWs70());//70 m 风速
+                    nwpData.setWs80(listNwp.get(listNwp.size() - 96).getWs80());//80 m 风速
+                    nwpData.setWs90(listNwp.get(listNwp.size() - 96).getWs90());//90 m 风速
+                    nwpData.setWs100(listNwp.get(listNwp.size() - 96).getWs100());//100 m 风速
+                    nwpData.setWs170(listNwp.get(listNwp.size() - 96).getWs170());//170 m 风速
+
+                    nwpData.setWd10(listNwp.get(listNwp.size() - 96).getWd10());//10 m 风向
+                    nwpData.setWd30(listNwp.get(listNwp.size() - 96).getWd30());//30 m 风向
+                    nwpData.setWd50(listNwp.get(listNwp.size() - 96).getWd50());//50 m 风向
+                    nwpData.setWd70(listNwp.get(listNwp.size() - 96).getWd70());//70 m 风向
+                    nwpData.setWd80(listNwp.get(listNwp.size() - 96).getWd80());//80 m 风向
+                    nwpData.setWd90(listNwp.get(listNwp.size() - 96).getWd90());//90 m 风向
+                    nwpData.setWd100(listNwp.get(listNwp.size() - 96).getWd100());//100 m 风向
+                    nwpData.setWd170(listNwp.get(listNwp.size() - 96).getWd170());//170 m 风向
+                    listNwp.add(nwpData);
+                  }
+                } else {
+                  flag = false;
+                  log.info(file.getName() + "文件数据内容为空、不能正常解析 、移除该文件、执行数据修正功能");
+                }
+
+                //保存NWP实时数据
+                Long startTime = listNwp.get(0).getPreTime();
+                Long endTime = listNwp.get(listNwp.size() - 1).getPreTime();//删除相同时间数据
+                nwpService.deleteBetweenAndPreTime(startTime, endTime, listNwp);
+                flag = true;
+              }
+              else if (ycbs==1) {
+                // 一期
+                List<NwpOne> listNwp = fileAnalysisNwpOne(file);
+                NwpOne nwpData = null;
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                if (listNwp != null && listNwp.size() > 0) {
+                  while (listNwp.get(listNwp.size() - 1).getPreTime() < DateTimeUtil.getMillisecondsSubDay() + 4 * 24 * 60 * 60 * 1000 - timeD) {
+                    nwpData = new NwpOne();
+                    long time = 0;
+                    try {
+                      time = sdf.parse(listNwp.get(listNwp.size() - 96).getPreDate()).getTime() + 24 * 60 * 60 * 1000;
+                    } catch (ParseException e) {
+                      e.printStackTrace();
+                    }
+                    nwpData.setFarmId(listNwp.get(listNwp.size() - 96).getFarmId());
+                    nwpData.setScDate(listNwp.get(listNwp.size() - 96).getScDate());
+                    nwpData.setScTime(listNwp.get(listNwp.size() - 96).getScTime());
+                    nwpData.setPreDate(sdf.format(time));
+                    nwpData.setPreTime(listNwp.get(listNwp.size() - 1).getPreTime() + timeD);
+                    nwpData.setT(listNwp.get(listNwp.size() - 96).getT());//温度
+                    nwpData.setRh(listNwp.get(listNwp.size() - 96).getRh());//湿度
+                    nwpData.setPressure(listNwp.get(listNwp.size() - 96).getPressure());//气压
+                    nwpData.setSwr(listNwp.get(listNwp.size() - 96).getSwr());//辐射
+                    nwpData.setLwr(listNwp.get(listNwp.size() - 96).getLwr());//辐射
+                    nwpData.setDiffuseRadiation(listNwp.get(listNwp.size() - 96).getDiffuseRadiation());//散接辐射
+                    nwpData.setDirectRadiation(listNwp.get(listNwp.size() - 96).getDirectRadiation());//直接辐射
+
+                    nwpData.setSenf(listNwp.get(listNwp.size() - 96).getSenf());//热感通量
+
+                    nwpData.setWs10(listNwp.get(listNwp.size() - 96).getWs10());//10 m 风速
+                    nwpData.setWs30(listNwp.get(listNwp.size() - 96).getWs30());//30 m 风速
+                    nwpData.setWs50(listNwp.get(listNwp.size() - 96).getWs50());//50 m 风速
+                    nwpData.setWs70(listNwp.get(listNwp.size() - 96).getWs70());//70 m 风速
+                    nwpData.setWs80(listNwp.get(listNwp.size() - 96).getWs80());//80 m 风速
+                    nwpData.setWs90(listNwp.get(listNwp.size() - 96).getWs90());//90 m 风速
+                    nwpData.setWs100(listNwp.get(listNwp.size() - 96).getWs100());//100 m 风速
+                    nwpData.setWs170(listNwp.get(listNwp.size() - 96).getWs170());//170 m 风速
+
+                    nwpData.setWd10(listNwp.get(listNwp.size() - 96).getWd10());//10 m 风向
+                    nwpData.setWd30(listNwp.get(listNwp.size() - 96).getWd30());//30 m 风向
+                    nwpData.setWd50(listNwp.get(listNwp.size() - 96).getWd50());//50 m 风向
+                    nwpData.setWd70(listNwp.get(listNwp.size() - 96).getWd70());//70 m 风向
+                    nwpData.setWd80(listNwp.get(listNwp.size() - 96).getWd80());//80 m 风向
+                    nwpData.setWd90(listNwp.get(listNwp.size() - 96).getWd90());//90 m 风向
+                    nwpData.setWd100(listNwp.get(listNwp.size() - 96).getWd100());//100 m 风向
+                    nwpData.setWd170(listNwp.get(listNwp.size() - 96).getWd170());//170 m 风向
+                    listNwp.add(nwpData);
+                  }
+                } else {
+                  flag = false;
+                  log.info(file.getName() + "一期NWP文件数据内容为空、不能正常解析 、移除该文件、执行数据修正功能");
+                }
+                //保存NWP实时数据
+                Long startTime = listNwp.get(0).getPreTime();
+                Long endTime = listNwp.get(listNwp.size() - 1).getPreTime();//删除相同时间数据
+                nwpOneService.deleteBetweenAndPreTime(startTime, endTime, listNwp);
+                flag = true;
+              }
+              else if (ycbs==2) {
+                // 二期
+                List<NwpTwo> listNwp = fileAnalysisNwpTwo(file);
+                NwpTwo nwpData = null;
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                if (listNwp != null && listNwp.size() > 0) {
+                  while (listNwp.get(listNwp.size() - 1).getPreTime() < DateTimeUtil.getMillisecondsSubDay() + 4 * 24 * 60 * 60 * 1000 - timeD) {
+                    nwpData = new NwpTwo();
+                    long time = 0;
+                    try {
+                      time = sdf.parse(listNwp.get(listNwp.size() - 96).getPreDate()).getTime() + 24 * 60 * 60 * 1000;
+                    } catch (ParseException e) {
+                      e.printStackTrace();
+                    }
+                    nwpData.setFarmId(listNwp.get(listNwp.size() - 96).getFarmId());
+                    nwpData.setScDate(listNwp.get(listNwp.size() - 96).getScDate());
+                    nwpData.setScTime(listNwp.get(listNwp.size() - 96).getScTime());
+                    nwpData.setPreDate(sdf.format(time));
+                    nwpData.setPreTime(listNwp.get(listNwp.size() - 1).getPreTime() + timeD);
+                    nwpData.setT(listNwp.get(listNwp.size() - 96).getT());//温度
+                    nwpData.setRh(listNwp.get(listNwp.size() - 96).getRh());//湿度
+                    nwpData.setPressure(listNwp.get(listNwp.size() - 96).getPressure());//气压
+                    nwpData.setSwr(listNwp.get(listNwp.size() - 96).getSwr());//辐射
+                    nwpData.setLwr(listNwp.get(listNwp.size() - 96).getLwr());//辐射
+                    nwpData.setDiffuseRadiation(listNwp.get(listNwp.size() - 96).getDiffuseRadiation());//散接辐射
+                    nwpData.setDirectRadiation(listNwp.get(listNwp.size() - 96).getDirectRadiation());//直接辐射
+
+                    nwpData.setSenf(listNwp.get(listNwp.size() - 96).getSenf());//热感通量
+
+                    nwpData.setWs10(listNwp.get(listNwp.size() - 96).getWs10());//10 m 风速
+                    nwpData.setWs30(listNwp.get(listNwp.size() - 96).getWs30());//30 m 风速
+                    nwpData.setWs50(listNwp.get(listNwp.size() - 96).getWs50());//50 m 风速
+                    nwpData.setWs70(listNwp.get(listNwp.size() - 96).getWs70());//70 m 风速
+                    nwpData.setWs80(listNwp.get(listNwp.size() - 96).getWs80());//80 m 风速
+                    nwpData.setWs90(listNwp.get(listNwp.size() - 96).getWs90());//90 m 风速
+                    nwpData.setWs100(listNwp.get(listNwp.size() - 96).getWs100());//100 m 风速
+                    nwpData.setWs170(listNwp.get(listNwp.size() - 96).getWs170());//170 m 风速
+
+                    nwpData.setWd10(listNwp.get(listNwp.size() - 96).getWd10());//10 m 风向
+                    nwpData.setWd30(listNwp.get(listNwp.size() - 96).getWd30());//30 m 风向
+                    nwpData.setWd50(listNwp.get(listNwp.size() - 96).getWd50());//50 m 风向
+                    nwpData.setWd70(listNwp.get(listNwp.size() - 96).getWd70());//70 m 风向
+                    nwpData.setWd80(listNwp.get(listNwp.size() - 96).getWd80());//80 m 风向
+                    nwpData.setWd90(listNwp.get(listNwp.size() - 96).getWd90());//90 m 风向
+                    nwpData.setWd100(listNwp.get(listNwp.size() - 96).getWd100());//100 m 风向
+                    nwpData.setWd170(listNwp.get(listNwp.size() - 96).getWd170());//170 m 风向
+                    listNwp.add(nwpData);
+                  }
+                } else {
+                  flag = false;
+                  log.info(file.getName() + "二期NWP文件数据内容为空、不能正常解析 、移除该文件、执行数据修正功能");
+                }
+                //保存NWP实时数据
+                Long startTime = listNwp.get(0).getPreTime();
+                Long endTime = listNwp.get(listNwp.size() - 1).getPreTime();//删除相同时间数据
+                nwpTwoService.deleteBetweenAndPreTime(startTime, endTime, listNwp);
+                flag = true;
+              }
 						} catch (Exception e) {
 							log.error("解析NWP文件失败", e);
 							flag = false;
@@ -1182,8 +1328,8 @@ public class FileAnalysisService extends BaseService {
 			try {
 				readNwp = new InputStreamReader(new FileInputStream(file), "utf-8");//考虑到编码格式
 				bufferedReaderNwp = new BufferedReader(readNwp);
-				String fileName = file.getName();
-				fileName = fileName.substring(fileName.indexOf("_") + 1, fileName.lastIndexOf("."));
+//				String fileName = file.getName();
+//				fileName = fileName.substring(fileName.indexOf("_") + 1, fileName.lastIndexOf("."));
 				String lineTxt;
 				Nwp nwpData = null;
 				BigDecimal nwpDirectRadiation = new BigDecimal(0.7); //直接辐射
@@ -1262,6 +1408,178 @@ public class FileAnalysisService extends BaseService {
 		return listNwp;
 	}
 
+  /**
+   * 一期NWP解析
+   *
+   * @param file 文件路径
+   * @return 样例集合
+   */
+  private List<NwpOne> fileAnalysisNwpOne(File file) {
+    List<NwpOne> listNwpOne = new ArrayList<>();
+    if (file.renameTo(file)) {
+      InputStreamReader readNwp = null;
+      BufferedReader bufferedReaderNwp = null;
+      try {
+        readNwp = new InputStreamReader(new FileInputStream(file), "utf-8");//考虑到编码格式
+        bufferedReaderNwp = new BufferedReader(readNwp);
+//        String fileName = file.getName();
+//        fileName = fileName.substring(fileName.indexOf("_") + 1, fileName.lastIndexOf("."));
+        String lineTxt;
+        NwpOne nwpData = null;
+        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");
+            if (datas != null && datas.length > 0) {
+              //过滤当天的数据
+              //if (sdf.parse(datas[5]).getTime() >= TimeUtils.getMillisecondsSubDay() + 24 * 60 * 60 *
+              // 1000) {
+              nwpData = new NwpOne();
+
+              //将截取的文件放入nwpData中
+              nwpData.setFarmId(datas[1]);
+              nwpData.setScDate(datas[2]);
+              nwpData.setScTime(datas[3]);
+              nwpData.setPreDate(datas[4]);
+              nwpData.setPreTime(sdf.parse(datas[5]).getTime());//采集时间 与 短期预测时间关联
+              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));
+              listNwpOne.add(nwpData);
+            }
+          }
+        }
+      } 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() + "一期NWP文件解析失败", e);
+        }
+      } finally {
+        close(bufferedReaderNwp, readNwp);
+      }
+    }
+    return listNwpOne;
+  }
+
+  /**
+   * 二期NWP解析
+   *
+   * @param file 文件路径
+   * @return 样例集合
+   */
+  private List<NwpTwo> fileAnalysisNwpTwo(File file) {
+    List<NwpTwo> listNwpTwo = new ArrayList<>();
+    if (file.renameTo(file)) {
+      InputStreamReader readNwp = null;
+      BufferedReader bufferedReaderNwp = null;
+      try {
+        readNwp = new InputStreamReader(new FileInputStream(file), "utf-8");//考虑到编码格式
+        bufferedReaderNwp = new BufferedReader(readNwp);
+//        String fileName = file.getName();
+//        fileName = fileName.substring(fileName.indexOf("_") + 1, fileName.lastIndexOf("."));
+        String lineTxt;
+        NwpTwo nwpData = null;
+        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");
+            if (datas != null && datas.length > 0) {
+              //过滤当天的数据
+              //if (sdf.parse(datas[5]).getTime() >= TimeUtils.getMillisecondsSubDay() + 24 * 60 * 60 *
+              // 1000) {
+              nwpData = new NwpTwo();
+
+              //将截取的文件放入nwpData中
+              nwpData.setFarmId(datas[1]);
+              nwpData.setScDate(datas[2]);
+              nwpData.setScTime(datas[3]);
+              nwpData.setPreDate(datas[4]);
+              nwpData.setPreTime(sdf.parse(datas[5]).getTime());//采集时间 与 短期预测时间关联
+              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));
+              listNwpTwo.add(nwpData);
+            }
+          }
+        }
+      } 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() + "二期NWP文件解析失败", e);
+        }
+      } finally {
+        close(bufferedReaderNwp, readNwp);
+      }
+    }
+    return listNwpTwo;
+  }
+
 	/**
 	 * update文件解析
 	 *
@@ -1782,7 +2100,15 @@ public class FileAnalysisService extends BaseService {
         fileType = "DQ2";//二期短期文件
       }
 		} else if (file.getName().startsWith("NWP")) {
-			fileType = "NWP";//NWP文件
+      if (ycbs==0){
+        fileType = "NWP";//总NWP
+      }
+      else if (ycbs==1){
+        fileType = "NWP1";//一期NWP
+      }
+      else if (ycbs==2){
+        fileType = "NWP2";//二期NWP
+      }
 		} else if (file.getName().startsWith("UP")) {
 			fileType = "UP";//UP文件
 		} else {

+ 36 - 0
ipfcst/ipfcst-console/src/main/java/com/jiayue/ipfcst/console/service/NwpOneService.java

@@ -0,0 +1,36 @@
+package com.jiayue.ipfcst.console.service;
+
+
+import com.jiayue.ipfcst.common.data.entity.NwpOne;
+import com.jiayue.ipfcst.common.data.repository.NwpOneRepository;
+import com.jiayue.ipfcst.common.data.service.BaseService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+
+@Service
+@Slf4j
+public class NwpOneService extends BaseService {
+
+    @Autowired
+    NwpOneRepository nwpOneRepository;
+
+    /**
+     * 根据时间段删除数据
+     *
+     * @param startTime
+     * @param endTime
+     * @param listNwp
+     */
+    @Transactional(propagation = Propagation.REQUIRED)
+    public void deleteBetweenAndPreTime(Long startTime, Long endTime, List<NwpOne> listNwp) {
+      nwpOneRepository.deleteByPreTimeBetween(startTime, endTime);
+      nwpOneRepository.saveAll(listNwp);
+    }
+
+}

+ 36 - 0
ipfcst/ipfcst-console/src/main/java/com/jiayue/ipfcst/console/service/NwpTwoService.java

@@ -0,0 +1,36 @@
+package com.jiayue.ipfcst.console.service;
+
+
+import com.jiayue.ipfcst.common.data.entity.NwpTwo;
+import com.jiayue.ipfcst.common.data.repository.NwpTwoRepository;
+import com.jiayue.ipfcst.common.data.service.BaseService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+@Slf4j
+public class NwpTwoService extends BaseService {
+
+    @Autowired
+    NwpTwoRepository nwpTwoRepository;
+
+
+    /**
+     * 根据时间段删除数据
+     *
+     * @param startTime
+     * @param endTime
+     * @param listNwp
+     */
+    @Transactional(propagation = Propagation.REQUIRED)
+    public void deleteBetweenAndPreTime(Long startTime, Long endTime, List<NwpTwo> listNwp) {
+      nwpTwoRepository.deleteByPreTimeBetween(startTime, endTime);
+      nwpTwoRepository.saveAll(listNwp);
+    }
+
+}