|
@@ -0,0 +1,150 @@
|
|
|
+package com.gyee.impala.schdule;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.gyee.impala.common.feign.RemoteServiceBuilder;
|
|
|
+import com.gyee.impala.common.spring.InitialRunner;
|
|
|
+import com.gyee.impala.common.util.DateUtil;
|
|
|
+import com.gyee.impala.model.custom.AlertCustom;
|
|
|
+import com.gyee.impala.model.custom.AlertHistory;
|
|
|
+import com.gyee.impala.model.master.Casewarningcustom;
|
|
|
+import com.gyee.impala.model.master.Casewarningscada;
|
|
|
+import com.gyee.impala.service.master.CasewarningcustomService;
|
|
|
+import com.gyee.impala.service.master.CasewarningscadaService;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
+
|
|
|
+@Component
|
|
|
+public class TaskWarning {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CasewarningcustomService customService;
|
|
|
+ @Autowired
|
|
|
+ private CasewarningscadaService scadaService;
|
|
|
+ @Autowired
|
|
|
+ private RemoteServiceBuilder remoteService;
|
|
|
+
|
|
|
+ private String initTime = "2022-01-01";
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自定义报警同步
|
|
|
+ * “30 10 1 * * ?” 每天1点40分30触发任务
|
|
|
+ */
|
|
|
+ @Scheduled(cron = "0 40 1 * * ?")
|
|
|
+ //@Scheduled(initialDelay = 10 * 1000, fixedRate = 2 * 86400000 * 1000)
|
|
|
+ public void customWarningTask(){
|
|
|
+ if (InitialRunner.stationMap.size() == 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ InitialRunner.stationMap.forEach((k, v) -> {
|
|
|
+ String time = initTime;
|
|
|
+ Casewarningcustom custom = customService.getOneMaxTimeByStation(k);
|
|
|
+ if (custom != null)
|
|
|
+ time = custom.getTime();
|
|
|
+
|
|
|
+ String currentTime = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD_HH_MM_SS);
|
|
|
+ while(time.compareTo(currentTime) <= -1){
|
|
|
+ String st = time;
|
|
|
+ cal.setTime(DateUtil.parseStrtoDate(time, DateUtil.YYYY_MM_DD));
|
|
|
+ cal.add(Calendar.DATE, 1);
|
|
|
+ String et = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD);
|
|
|
+ saveCustomWarning(k, st, et);
|
|
|
+ time = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD);
|
|
|
+ try {
|
|
|
+ Thread.sleep(200);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private void saveCustomWarning(String station, String st, String et){
|
|
|
+ List<Casewarningcustom> list = new ArrayList<>();
|
|
|
+ JSONArray data = remoteService.sharding().getAlarmCount(station, st, et);
|
|
|
+ for (int i = 0; i < data.size(); i++){
|
|
|
+ JSONObject json = data.getJSONObject(i);
|
|
|
+ Set<String> keys = json.keySet();
|
|
|
+ for(String key : keys){
|
|
|
+ JSONArray array = json.getJSONArray(key);
|
|
|
+ for (int j = 0; j < array.size(); j++){
|
|
|
+ JSONObject obj = array.getJSONObject(j);
|
|
|
+ AlertCustom alert = JSON.toJavaObject(obj, AlertCustom.class);
|
|
|
+ if (alert != null && !StringUtils.isEmpty(alert.getRelatePartsText())) {
|
|
|
+ Casewarningcustom cw = (Casewarningcustom) new Casewarningcustom().toData(alert);
|
|
|
+ cw.setTime(st);
|
|
|
+ list.add(cw);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ customService.insertBatch(list);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * scada报警同步
|
|
|
+ * “30 10 1 * * ?” 每天1点40分30触发任务
|
|
|
+ */
|
|
|
+ @Scheduled(cron = "0 55 1 * * ?")
|
|
|
+ //@Scheduled(initialDelay = 10 * 1000, fixedRate = 2 * 86400000 * 1000)
|
|
|
+ public void scadaWarningTask(){
|
|
|
+ if (InitialRunner.stationMap.size() == 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ Calendar cal = Calendar.getInstance();
|
|
|
+ InitialRunner.stationMap.forEach((k, v) -> {
|
|
|
+ String time = initTime;
|
|
|
+ Casewarningscada scada = scadaService.getOneMaxTimeByStation(k);
|
|
|
+ if (scada != null)
|
|
|
+ time = scada.getWarntime();
|
|
|
+
|
|
|
+ String currentTime = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD);
|
|
|
+ while(time.compareTo(currentTime) <= -1){
|
|
|
+ String st = time;
|
|
|
+ cal.setTime(DateUtil.parseStrtoDate(time, DateUtil.YYYY_MM_DD));
|
|
|
+ cal.add(Calendar.DATE, 1);
|
|
|
+ String et = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD);
|
|
|
+ saveScadaWarning(k, st, et);
|
|
|
+ time = DateUtil.format(cal.getTime(), DateUtil.YYYY_MM_DD);
|
|
|
+ try {
|
|
|
+ Thread.sleep(200);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private void saveScadaWarning(String station, String st, String et){
|
|
|
+ List<Casewarningscada> list = new ArrayList<>();
|
|
|
+ JSONObject data = remoteService.sharding().getAlertHistory("windturbine", st, et, station, null);
|
|
|
+ if (data == null)
|
|
|
+ return;
|
|
|
+
|
|
|
+ JSONArray records = data.getJSONArray("records");
|
|
|
+ for (int i = 0; i < records.size(); i++){
|
|
|
+ JSONObject json = records.getJSONObject(i);
|
|
|
+ AlertHistory alert = JSON.toJavaObject(json, AlertHistory.class);
|
|
|
+ if (alert != null && !StringUtils.isEmpty(alert.getCategory2()) && alert.getMessageType() == 1) {
|
|
|
+ Casewarningscada cs = (Casewarningscada) new Casewarningscada().toData(alert);
|
|
|
+ list.add(cs);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ scadaService.insertBatch(list);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static void main(String[] args){
|
|
|
+ }
|
|
|
+}
|