소스 검색

一体化云端
定时任务:
通过定时任务名称获取场站编码时,根据"-"分割信息,如果分割完是2部分,则第一部分为场站编码,如果分割完是3部分,则第一部分+"-"+第二部分为场站编码

zhangchenglong 1 년 전
부모
커밋
4d61bdcc84

+ 1 - 1
in-cloud/src/main/java/com/jiayue/insu/incloud/entity/Station.java

@@ -85,7 +85,7 @@ public class Station extends BaseEntity {
     String correctDownTime;
 
     /**
-     * 是否将修正数据下发到场站外网
+     * 是否将修正数据下发到场站外网(0:不下发   1:下发)
      */
     String isPushCorr;
 

+ 9 - 21
in-cloud/src/main/java/com/jiayue/insu/incloud/job/data/pull/PullInitDataJob.java

@@ -8,11 +8,11 @@ import com.jiayue.insu.incloud.entity.Station;
 import com.jiayue.insu.incloud.pulldata.PullInitData;
 import com.jiayue.insu.incloud.service.RecordService;
 import com.jiayue.insu.incloud.service.StationService;
+import lombok.extern.slf4j.Slf4j;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
-
 import java.time.LocalDateTime;
 
 
@@ -23,36 +23,24 @@ import java.time.LocalDateTime;
  * @version 1.0
  * @since 2022/5/22 11:29
  */
+@Slf4j
 public class PullInitDataJob implements Job {
 
     @Autowired
     private PullInitData pullInitData;
     @Autowired
     private StationService stationService;
-    @Autowired
-    private RecordService recordService;
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         String code = jobExecutionContext.getTrigger().getJobKey().getName();
-        String[] split = code.split("-");
-        if (split != null && split.length > 0) {
-            String stationCode = split[0];
-            Station one = stationService.findByStationCode(stationCode);
-            if (one != null) {
-                //查询是否有今天成功记录 (为提高稳定性,该定时任务采取在规定时间段内 重复循环执行的定时策略,故:需要查询是否存在成功记录)
-                Record successRecord = recordService.findTimeAndTypeAndStateAndStation(
-                        LocalDateTimeUtil.beginOfDay(LocalDateTime.now()),
-                        CommonStant.RECORD_TYPE_PULL_INIT,
-                        StatusEnum.SUCCESS.getCode(), stationCode);
-
-                //没有成功记录进行业务
-                if (successRecord == null) {
-                    pullInitData.pullDQAndNWPData(one);
-                }
-
-            }
+        // 校验并获取场站信息
+        Station station = stationService.checkAndFindStation(code,CommonStant.RECORD_TYPE_PULL_INIT);
+        //没有成功记录进行业务
+        if (station != null) {
+            pullInitData.pullDQAndNWPData(station);
+        }else{
+            log.error("========== 一体化定时任务异常:  场站信息为空  {}==========",code);
         }
-
     }
 }

+ 9 - 20
in-cloud/src/main/java/com/jiayue/insu/incloud/job/data/pull/QNHLPullCorrectDataJob.java

@@ -10,6 +10,7 @@ import com.jiayue.insu.incloud.pulldata.PullCorrectDataForQNHL;
 import com.jiayue.insu.incloud.pulldata.PullInitData;
 import com.jiayue.insu.incloud.service.RecordService;
 import com.jiayue.insu.incloud.service.StationService;
+import lombok.extern.slf4j.Slf4j;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -23,36 +24,24 @@ import java.time.LocalDateTime;
  * @version 1.0
  * @since 2022/5/22 11:29
  */
+@Slf4j
 public class QNHLPullCorrectDataJob implements Job {
 
     @Autowired
     private PullCorrectDataForQNHL pullCorrectDataForQNHL;
     @Autowired
     private StationService stationService;
-    @Autowired
-    private RecordService recordService;
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         String code = jobExecutionContext.getTrigger().getJobKey().getName();
-        String[] split = code.split("-");
-        if(split!=null && split.length>0){
-            String stationCode = split[0];
-            Station one = stationService.findByStationCode(stationCode);
-            if (one != null) {
-                //查询是否有今天成功记录 (为提高稳定性,该定时任务采取在规定时间段内 重复循环执行的定时策略,故:需要查询是否存在成功记录)
-                Record successRecord = recordService.findTimeAndTypeAndStateAndStation(
-                        LocalDateTimeUtil.beginOfDay(LocalDateTime.now()),
-                        CommonStant.RECORD_TYPE_PULL_CORRECT,
-                        QNHLEnum.REQUEST_SUCCESS.getSign(), stationCode);
-                //没有成功记录进行业务
-                if(successRecord == null){
-                    pullCorrectDataForQNHL.pullDQAndNWPData(one);
-                }
-
-            }
+        // 校验并获取场站信息
+        Station station = stationService.checkAndFindStation(code,CommonStant.RECORD_TYPE_PULL_CORRECT);
+        //没有成功记录进行业务
+        if (station != null) {
+            pullCorrectDataForQNHL.pullDQAndNWPData(station);
+        }else{
+            log.error("========== 一体化定时任务异常:  场站信息为空  {}==========",code);
         }
-
-
     }
 }

+ 9 - 18
in-cloud/src/main/java/com/jiayue/insu/incloud/job/data/push/QNHLPushInitDqDataJob.java

@@ -8,6 +8,7 @@ import com.jiayue.insu.incloud.entity.Station;
 import com.jiayue.insu.incloud.pushdata.PushDataForQNHL;
 import com.jiayue.insu.incloud.service.RecordService;
 import com.jiayue.insu.incloud.service.StationService;
+import lombok.extern.slf4j.Slf4j;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -22,33 +23,23 @@ import java.time.LocalDateTime;
  * @version 1.0
  * @since 2022/5/22 11:29
  */
+@Slf4j
 public class QNHLPushInitDqDataJob implements Job {
 
     @Autowired
     private PushDataForQNHL pushDataForQNHL;
     @Autowired
     private StationService stationService;
-    @Autowired
-    private RecordService recordService;
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         String code = jobExecutionContext.getTrigger().getJobKey().getName();
-        String[] split = code.split("-");
-        if(split!=null && split.length>0){
-            String stationCode = split[0];
-            Station one = stationService.findByStationCode(stationCode);
-            if (one != null) {
-                //查询是否有今天成功记录 (为提高稳定性,该定时任务采取在规定时间段内 重复循环执行的定时策略,故:需要查询是否存在成功记录)
-                Record successRecord = recordService.findTimeAndTypeAndStateAndStation(
-                        LocalDateTimeUtil.beginOfDay(LocalDateTime.now()),
-                        CommonStant.RECORD_TYPE_PUSH_INIT,
-                        QNHLEnum.REQUEST_SUCCESS.getSign(), stationCode);
-                //没有成功记录进行业务
-                if(successRecord == null) {
-                    pushDataForQNHL.pushDQAndNWPData(one);
-                }
-            }
+        // 校验并获取场站信息
+        Station station = stationService.checkAndFindStation(code,CommonStant.RECORD_TYPE_PUSH_INIT);
+        //没有成功记录进行业务
+        if (station != null) {
+            pushDataForQNHL.pushDQAndNWPData(station);
+        }else{
+            log.error("========== 一体化定时任务异常:  场站信息为空  {}==========",code);
         }
-
     }
 }

+ 7 - 7
in-cloud/src/main/java/com/jiayue/insu/incloud/job/permission/QNHLPermissonJob.java

@@ -3,6 +3,7 @@ package com.jiayue.insu.incloud.job.permission;
 import com.jiayue.insu.incloud.compermisson.QNHLComPermisson;
 import com.jiayue.insu.incloud.entity.Station;
 import com.jiayue.insu.incloud.service.StationService;
+import lombok.extern.slf4j.Slf4j;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -15,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
  * @version 1.0
  * @since 2022/5/22 11:29
  */
+@Slf4j
 public class QNHLPermissonJob implements Job {
     @Autowired
     private QNHLComPermisson qNHLComPermisson;
@@ -24,13 +26,11 @@ public class QNHLPermissonJob implements Job {
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         String code = jobExecutionContext.getTrigger().getJobKey().getName();
-        String[] split = code.split("-");
-        if(split!=null && split.length>0){
-            String stationCode = split[0];
-            Station station = stationService.findByStationCode(stationCode);
-            qNHLComPermisson.generateKey(station);
+        // 校验并获取场站信息
+        Station station = stationService.checkAndFindStation(code,null);
+        if (station == null) {
+            log.error("========== 一体化定时任务异常:  场站不存在  {}==========",code);
         }
-
-
+        qNHLComPermisson.generateKey(station);
     }
 }

+ 2 - 0
in-cloud/src/main/java/com/jiayue/insu/incloud/service/StationService.java

@@ -16,4 +16,6 @@ public interface StationService extends IService<Station> {
 
     Station findByStationCode(String stationCode);
     List<Station> findByInCode(String incode);
+
+    Station checkAndFindStation(String jobName,String recordType);
 }

+ 34 - 5
in-cloud/src/main/java/com/jiayue/insu/incloud/service/impl/ApiServiceImpl.java

@@ -64,6 +64,9 @@ public class ApiServiceImpl implements ApiService {
     private String cloudFileCreateLog;
     @Value("${minio.postBackUrl}")
     private String postBackUrl;
+    @Value("${minio.pushCorrFileUrl}")
+    private String pushCorrFileUrl;
+
 
     @Autowired
     RedisTemplate redisTemplate;
@@ -409,7 +412,7 @@ public class ApiServiceImpl implements ApiService {
                     JSONObject powerJson = putPowerJson(station.getStationCode(), "power", valuesArr);
                     //返回短期数据JSONArray
                     resultArr.add(powerJson);
-                }else if("nwp".equals(type)){
+                } else if ("nwp".equals(type)) {
                     while ((stringLine = dqBufferedReader.readLine()) != null) {
                         String[] string_arr = stringLine.split("\t");
                         if (string_arr[0].startsWith("#")) {
@@ -417,7 +420,7 @@ public class ApiServiceImpl implements ApiService {
                                 // 每一条数据的json,放入预测数据和预测时间
                                 oneJson = new JSONObject();
                                 oneJson.set("farmId", string_arr[1]);
-                                oneJson.set("scDate",string_arr[2]);
+                                oneJson.set("scDate", string_arr[2]);
                                 oneJson.set("scTime", string_arr[3]);
                                 oneJson.set("preDate", string_arr[4]);
                                 oneJson.set("preTime", string_arr[5]);
@@ -435,7 +438,7 @@ public class ApiServiceImpl implements ApiService {
                                 oneJson.set("ws90", new BigDecimal(string_arr[17]));
                                 oneJson.set("ws100", new BigDecimal(string_arr[18]));
                                 oneJson.set("ws170", new BigDecimal(string_arr[19]));
-                                oneJson.set("wd10",new BigDecimal( string_arr[20]));
+                                oneJson.set("wd10", new BigDecimal(string_arr[20]));
                                 oneJson.set("wd30", new BigDecimal(string_arr[21]));
                                 oneJson.set("wd50", new BigDecimal(string_arr[22]));
                                 oneJson.set("wd70", new BigDecimal(string_arr[23]));
@@ -559,8 +562,9 @@ public class ApiServiceImpl implements ApiService {
         if (!fileUrl.exists()) {// 判断目录是否存在
             fileUrl.mkdirs();
         }
+        Date now = new Date();
         // 文件名
-        String fileName = fileType + "_" + DateUtil.format(new Date(), "yyyyMMddHHmmss") + "0" + dateType + ".RB";
+        String fileName = fileType + "_" + DateUtil.format(now, "yyyyMMddHHmmss") + "0" + dateType + ".RB";
 
         // 根据文件路径和文件名,初始化文件
         File file = new File(fUrl + File.separatorChar + fileName);
@@ -600,13 +604,16 @@ public class ApiServiceImpl implements ApiService {
         // 获取推送到minIo的文件名
         String minIoFileUrl = pushMinIoResult.getStr(JsonResultUtil.DATA_TAG);
         String[] minIoFileUrlArr = minIoFileUrl.split(";");
+        String pushDate = DateUtil.format(now, "yyyyMMdd");
         if (minIoFileUrlArr.length > 1) {
             for (String url : minIoFileUrlArr) {
                 postFileCreateInfoToCloud(station.getStationCode(), file.getName(), url);
+                pushCorr(station, file.getName(),pushDate, url);
             }
         } else {
             // 如果文件放成功,回传文件生成信息到云端
             postFileCreateInfoToCloud(station.getStationCode(), file.getName(), pushMinIoResult.getStr(JsonResultUtil.DATA_TAG));
+            pushCorr(station, file.getName(),pushDate, minIoFileUrl);
         }
 
         return JsonResultUtil.success();
@@ -761,7 +768,7 @@ public class ApiServiceImpl implements ApiService {
                 String formatStartTime = startTime.replace("-", "").replace(" ", "").replace(":", "");
                 // 根据CDQ_201910100115 筛选超短期文件
                 listFile = list.stream().filter(f -> f.getFileName().contains("CDQ_" + formatStartTime)).collect(Collectors.toList());
-            } else if("nwp".equals(type)){
+            } else if ("nwp".equals(type)) {
                 listFile = list.stream().filter(f -> f.getFileName().contains("NWP_" + startTime.replace("-", ""))).collect(Collectors.toList());
                 // 将短期文件倒序,获取最新的文件
                 listFile.sort(Comparator.comparing(FileCreateLog::getFileName).reversed());
@@ -888,4 +895,26 @@ public class ApiServiceImpl implements ApiService {
         result.set("values", valuesArr);
         return result;
     }
+
+    /**
+     * @param station
+     * @param fileName
+     * @param url
+     */
+    public void pushCorr(Station station, String fileName,String pushDate, String url) {
+        // 如果场站信息为空或者 不推送修正数据
+        if (station == null || "0".equals(station.getIsPushCorr())) {
+            return;
+        }
+        Map params = new HashMap(5);
+        params.put("stationCode", station.getStationCode());
+        params.put("forecastDay", pushDate);
+        params.put("forecastFileName", fileName);
+        String fileDownloadUrl = url.split("\\?")[0];
+        params.put("fileDownloadPath", fileDownloadUrl);
+        params.put("remark", "数源:一体化修正");
+        log.info("发送下发修正文件请求");
+        String repose = HttpUtil.post(pushCorrFileUrl, params, 10000);
+        log.info("发送下发修正文件请求,请求响应 {}", repose);
+    }
 }

+ 58 - 2
in-cloud/src/main/java/com/jiayue/insu/incloud/service/impl/StationServiceImpl.java

@@ -1,12 +1,20 @@
 package com.jiayue.insu.incloud.service.impl;
 
+import cn.hutool.core.date.LocalDateTimeUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jiayue.insu.incloud.constants.CommonStant;
+import com.jiayue.insu.incloud.constants.enums.StatusEnum;
+import com.jiayue.insu.incloud.entity.Record;
 import com.jiayue.insu.incloud.entity.Station;
 import com.jiayue.insu.incloud.mapper.StationMapper;
+import com.jiayue.insu.incloud.service.RecordService;
 import com.jiayue.insu.incloud.service.StationService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -17,13 +25,16 @@ import java.util.List;
  * @since 2022/5/22 11:29
  */
 @Service
+@Slf4j
 public class StationServiceImpl extends ServiceImpl<StationMapper, Station> implements StationService {
 
+    @Autowired
+    private RecordService recordService;
 
     @Override
     public Station findByStationCode(String stationCode) {
         LambdaQueryWrapper<Station> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        lambdaQueryWrapper.eq(Station::getStationCode,stationCode);
+        lambdaQueryWrapper.eq(Station::getStationCode, stationCode);
         return this.getOne(lambdaQueryWrapper);
 
     }
@@ -31,7 +42,52 @@ public class StationServiceImpl extends ServiceImpl<StationMapper, Station> impl
     @Override
     public List<Station> findByInCode(String incode) {
         LambdaQueryWrapper<Station> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        lambdaQueryWrapper.eq(Station::getInCode,incode);
+        lambdaQueryWrapper.eq(Station::getInCode, incode);
         return this.list(lambdaQueryWrapper);
     }
+
+    /**
+     * 校验场站编码并获取场站信息
+     *
+     * @param jobName
+     * @return
+     */
+    @Override
+    public Station checkAndFindStation(String jobName ,String recordType) {
+        String[] split = jobName.split("-");
+        Station station = new Station();
+        if(split==null || split.length<=0){
+            log.error("========== 一体化定时任务异常:  场站编码不正确  {}==========",jobName);
+            return station;
+        }
+        String stationCode;
+        // 如果定时任务名称根据"-"分割后是两半 例如J00156-QNHLPUSH
+        if (split.length == 2) {
+            stationCode = split[0];
+            // 如果定时任务名称根据"-"分割后是三块 例如J00156-A-QNHLPUSH,则场站编码将前两个拼在一起
+        } else if (split.length == 3) {
+            stationCode = split[0] + "-" + split[1];
+        } else {
+            log.error("========== 一体化定时任务异常:  场站编码不正确  " + jobName + "==========");
+            return station;
+        }
+        // 如果操作类型不为空,则获取操作吉林
+        if(recordType!=null){
+            // 获取操作记录
+            Record successRecord = recordService.findTimeAndTypeAndStateAndStation(
+                    LocalDateTimeUtil.beginOfDay(LocalDateTime.now()),
+                    recordType,
+                    StatusEnum.SUCCESS.getCode(), station.getStationCode());
+
+            if (successRecord == null) {
+                station = this.findByStationCode(stationCode);
+            }else{
+                log.info("========== 一体化定时任务异常:  定时任务已执行过,不再重复执行  " + jobName + "==========");
+            }
+        // 如果操作类型为空,则直接获取场站信息
+        }else{
+            station = this.findByStationCode(stationCode);
+        }
+        return station;
+    }
 }