소스 검색

custom 修复AlarmFunctionSustain 持续时间bug

schedule-job 添加新版诊断报告功能

修改warning-web相关bug
wanghs 2 년 전
부모
커밋
34d28f6a45
45개의 변경된 파일1397개의 추가작업 그리고 240개의 파일을 삭제
  1. 9 3
      alarm/custom/src/main/java/com/gyee/wisdom/alarm/rule/AlarmFunctionSustain.java
  2. 188 26
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/biz/EarlyReportBiz.java
  3. 260 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/biz/EarlyReportTask.java
  4. 33 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/cache/StationCache.java
  5. 49 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/cache/WindturbineCache.java
  6. 19 2
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/controller/EarlyReportController.java
  7. 4 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/AlarmCount.java
  8. 2 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/AlarmCountInfo.java
  9. 78 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/AlertRule2.java
  10. 14 12
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/EarlyReport.java
  11. 13 7
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/EarlyReportInfo.java
  12. 51 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/EarlyReportWindturbine.java
  13. 49 11
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/job/EarlyReportHandler.java
  14. 2 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/AlarmCountMapper.java
  15. 13 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/AlertRule2Mapper.java
  16. 21 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/EarlyReportAlarmMapper.java
  17. 0 21
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/EarlyReportInfoMapper.java
  18. 4 3
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/EarlyReportMapper.java
  19. 28 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/EarlyReportWindturbineMapper.java
  20. 6 1
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/model/EarlyReportParam.java
  21. 23 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/model/TaskResult.java
  22. 39 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/AlarmCountService.java
  23. 14 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/AlarmSnapService.java
  24. 27 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/AlertRule2Service.java
  25. 18 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/EarlyReportAlarmService.java
  26. 8 4
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/EarlyReportService.java
  27. 4 5
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/EarlyReportInfoService.java
  28. 19 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/Warning2Service.java
  29. 23 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/WindpowerstationService.java
  30. 62 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/WindturbineService.java
  31. 15 0
      schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/util/ChineseDes.java
  32. 6 3
      schedule-job/alarm-schedule/src/main/resources/application.yaml
  33. 32 0
      schedule-job/alarm-schedule/src/main/resources/mappers/AlarmCountMapper.xml
  34. 5 0
      schedule-job/alarm-schedule/src/main/resources/mappers/AlertRule2Mapper.xml
  35. 1 1
      schedule-job/alarm-schedule/src/main/resources/mappers/EarlyReportInfoMapper.xml
  36. 7 0
      schedule-job/alarm-schedule/src/main/resources/mappers/EarlyReportWindturbineMapper.xml
  37. 3 0
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/mapper/AlarmHisotryMapper.java
  38. 73 57
      warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/AlarmSnapService.java
  39. 17 1
      warning-web/src/main/resources/mappers-oracle/AlarmHistoryMapper.xml
  40. 8 1
      warning-web/src/main/resources/mappers-oracle/AlarmSnapMapper.xml
  41. 1 1
      warning-web/src/main/resources/mappers-oracle/Alertrule2Mapper.xml
  42. 89 52
      warning-web/src/main/resources/mappers-postgresql/Alertrule2Mapper.xml
  43. 24 3
      warning-web/src/main/resources/mappers-postgresql/ScadabjMapper.xml
  44. 35 25
      warning-web/src/main/resources/mappers/AlarmSnapMapper.xml
  45. 1 1
      warning-web/src/main/resources/mappers/Alertrule2Mapper.xml

+ 9 - 3
alarm/custom/src/main/java/com/gyee/wisdom/alarm/rule/AlarmFunctionSustain.java

@@ -1,12 +1,13 @@
 package com.gyee.wisdom.alarm.rule;
 
+import com.gyee.wisdom.alarm.model.TagInfo;
 import com.gyee.wisdom.alarm.rule.expression.AlarmExpression;
 import com.gyee.wisdom.common.data.timeseries.DoubleTsData;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 
-import java.util.Date;
-import java.util.LinkedList;
+import java.util.*;
 
 
 // 判定状态(表达式成立)持续的时间是否超过给定的时间
@@ -14,6 +15,7 @@ import java.util.LinkedList;
 // 函数原型: Sustain(expression,时间(秒))
 @Data
 @NoArgsConstructor
+@Slf4j
 public class AlarmFunctionSustain extends AlarmFunction {
 
     private boolean lastUpdateStatus;
@@ -28,10 +30,12 @@ public class AlarmFunctionSustain extends AlarmFunction {
     }
 
 
+    private String firstId = "";
+
     @Override
     public Object explain() {
 
-        long ts = new Date().getTime();
+        long ts = getLastExplainTime();
         if (originalTs == 0)
             originalTs = ts;
 
@@ -41,6 +45,7 @@ public class AlarmFunctionSustain extends AlarmFunction {
         if (obj.equals(Boolean.TRUE)) {
             if (lastUpdateStatus == false) {
                 originalTs = ts;
+                lastUpdateStatus = true;
                 return false;
             } else {
                 long tmp = lastUpdateTs - originalTs;
@@ -50,6 +55,7 @@ public class AlarmFunctionSustain extends AlarmFunction {
                     return false;
             }
         } else {
+            lastUpdateStatus = false;
             //originalTs = ts;
             return false;
         }

+ 188 - 26
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/biz/EarlyReportBiz.java

@@ -1,19 +1,17 @@
 package com.gyee.wisdom.alarm.schedule.biz;
 
-import com.gyee.wisdom.alarm.schedule.entity.AlarmCount;
-import com.gyee.wisdom.alarm.schedule.entity.EarlyReport;
-import com.gyee.wisdom.alarm.schedule.entity.EarlyReportInfo;
-import com.gyee.wisdom.alarm.schedule.mapper.AlarmCountMapper;
-import com.gyee.wisdom.alarm.schedule.service.AlarmCountService;
-import com.gyee.wisdom.alarm.schedule.service.EarlyReportInfoService;
-import com.gyee.wisdom.alarm.schedule.service.EarlyReportService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.gyee.wisdom.alarm.schedule.entity.*;
+import com.gyee.wisdom.alarm.schedule.mapper.EarlyReportAlarmMapper;
+import com.gyee.wisdom.alarm.schedule.service.*;
 import com.gyee.wisdom.alarm.schedule.util.SnowflakeGenerator;
+import com.gyee.wisdom.common.utils.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @description:
@@ -26,31 +24,195 @@ public class EarlyReportBiz {
     @Autowired
     private EarlyReportService earlyReportService;
     @Autowired
-    private EarlyReportInfoService earlyReportInfoService;
+    private EarlyReportWindturbineService earlyReportWindturbineService;
+    @Autowired
+    private EarlyReportAlarmService earlyReportAlarmService;
     @Autowired
     private AlarmCountService alarmCountService;
+    @Autowired
+    private AlertRule2Service alertRule2Service;
+    @Autowired
+    private AlarmSnapService alarmSnapService;
+    @Autowired
+    private Warning2Service warning2Service;
+
+
+    /**
+     * @param idList 自定义报警规则id
+     * @return
+     * @return java.util.List<com.gyee.wisdom.alarm.schedule.entity.AlertRule2>
+     * @author Wanghs
+     * @description 根据预警规则id获取预警规则
+     * @date 2022/8/23
+     **/
+    public List<AlertRule2> getAlertRule2(List<String> idList) {
+        Collection<AlertRule2> ruleList = alertRule2Service.listByIds(idList);
+        return new ArrayList<>(ruleList);
+    }
+
+    /**
+     * @param idList 风机原始报警规则id
+     * @return java.util.List<com.gyee.wisdom.alarm.schedule.entity.Warning2>
+     * @author Wanghs
+     * @description 根据风机原始报警规则id获取风机报警
+     * @date 2022/8/23
+     **/
+    public List<Warning2> getWarning2(List<String> idList) {
+        Collection<Warning2> warning2List = warning2Service.listByIds(idList);
+        return new ArrayList<>(warning2List);
+    }
+
+    /**
+     * @param alertValueList 报警值  预警规则和原始报警规则中ednavalue值
+     * @param type           区分风机原始报警和自定义报警  原始报警-windturbine,风机预警 custom
+     * @return
+     * @return java.util.List<com.gyee.wisdom.alarm.schedule.entity.AlarmSnap>
+     * @author Wanghs
+     * @description 根据alertvalue获取alarmsnap数据
+     * @date 2022/8/23
+     **/
+
+    public List<AlarmSnap> getAlarmSnap(List<String> alertValueList, String type) {
+        List<AlarmSnap> list = alarmSnapService.list(new QueryWrapper<AlarmSnap>().in("ALERTVALUE", alertValueList).eq("CATEGORY1", type));
+        return list;
+    }
+
+    /**
+     * @param snapIdList 报警快照id
+     * @param startTime  查询起始时间
+     * @param endTime    查询结束时间
+     * @return java.util.List<com.gyee.wisdom.alarm.schedule.entity.AlarmCount>
+     * @author Wanghs
+     * @description 根据alarmSnapId 和时间区间获取 每台风机的报警次数 时长等信息
+     * @date 2022/8/23
+     **/
+    public List<AlarmCount> getAlarmCount(List<Long> snapIdList, Date startTime, Date endTime) {
+        List<String> snapIdStringList = snapIdList.stream().map(s -> String.valueOf(s)).collect(Collectors.toList());
+        List<AlarmCount> list = alarmCountService.getAlarmCount(snapIdStringList, startTime, endTime);
+        return list;
+    }
+
+    /**
+     * @param
+     * @param alarmCountList
+     * @return
+     * @return com.gyee.wisdom.alarm.schedule.entity.AlarmCount
+     * @author Wanghs
+     * @description 根据一个规则纬度获取平均次数以及平均时长
+     * @date 2022/8/23
+     **/
+    public AlarmCount getAvgAlarmCount(List<AlarmCount> alarmCountList) {
+        OptionalDouble avgCount = alarmCountList.stream().mapToInt(AlarmCount::getCount).average();
+        OptionalDouble avgTime = alarmCountList.stream().mapToDouble(AlarmCount::getTime).average();
+        AlarmCount alarmCount = new AlarmCount();
+        alarmCount.setCount(avgCount.isPresent() ? (int) avgCount.getAsDouble() : 0);
+        alarmCount.setTime(avgTime.isPresent() ? avgTime.getAsDouble() : 0);
+        return alarmCount;
+
+    }
+
+    /**
+     * @param lst alarmcount 集合
+     * @return
+     * @return java.util.Map<java.lang.String, com.gyee.wisdom.alarm.schedule.entity.AlarmCount>
+     * @author Wanghs
+     * @description 将每一台风机的所有规则报警次数时长求和并根据总持续时间排序,取出最大的几条数据
+     * @date 2022/8/23
+     **/
+    public Map<String, AlarmCount> getSumAlarmCountByWindturbine(List<AlarmCount> lst, int limit) {
+
+        //根据风机编号分组,并次数求和
+        Map<String, Integer> mapCount = lst.stream().filter(s -> StringUtil.isNotBlank(s.getWindturbineId())).collect(Collectors.groupingBy(AlarmCount::getWindturbineId, Collectors.summingInt(AlarmCount::getCount)));
+        //根据风机编号分组,并时长求和
+        Map<String, Double> mapTime = lst.stream().filter(s -> StringUtil.isNotBlank(s.getWindturbineId())).collect(Collectors.groupingBy(AlarmCount::getWindturbineId, Collectors.summingDouble(AlarmCount::getTime)));
+
+        List<AlarmCount> alarmCountList = new ArrayList<>();
+        for (Map.Entry<String, Double> entry :
+                mapTime.entrySet()) {
+            AlarmCount data = new AlarmCount();
+            data.setWindturbineId(entry.getKey());
+            data.setTime(entry.getValue());
+            if (mapCount.containsKey(entry.getKey())) {
+                data.setCount(mapCount.get(entry.getKey()));
+            }
+            alarmCountList.add(data);
+        }
+        Map<String, AlarmCount> collect = alarmCountList.stream().
+                sorted(Comparator.comparing(AlarmCount::getTime, Comparator.reverseOrder())).
+                limit(limit).collect(Collectors.toMap(AlarmCount::getWindturbineId, s -> s, (key1, key2) -> key2));
+        return collect;
 
-    public boolean calc(){
-        return true;
     }
 
+    /**
+     * @param ztCode            风机状态码
+     * @param windturbineIdList 风机id集合
+     * @param startTime         计算起始时间
+     * @param endTime           计算结束时间
+     * @return java.util.Map<java.lang.String, java.lang.Double>
+     * @author Wanghs
+     * @description 获取风机在指定时间区间中的运行总时长
+     * @date 2022/8/24
+     **/
+    private Map<String, Double> getWindturbineRuntime(List<String> windturbineIdList, String ztCode, Date startTime, Date endTime) {
+
+
+        return new HashMap<>();
+    }
 
+    public List<EarlyReport> getEarlyReport(String stationId, Date startTime, Date endTime) {
+
+        List<EarlyReport> earlyReport = earlyReportService.getEarlyReport(stationId, startTime, endTime);
+        return earlyReport;
+
+    }
 
     @Transactional(rollbackFor = RuntimeException.class)
-    public boolean saveReport(List<EarlyReport> lst) {
-
-        List<EarlyReportInfo> infoList = new ArrayList<>();
-        lst.forEach(s -> {
-            String reportId = String.valueOf(SnowflakeGenerator.generateId());
-            s.setId(reportId);
-            s.getInfoList().forEach(k -> {
-                k.setReportId(reportId);
-                k.setId(String.valueOf(SnowflakeGenerator.generateId()));
-                infoList.add(k);
-            });
+    public boolean saveReport(EarlyReport report) {
+
+        List<EarlyReportWindturbine> windturbineInfoList = report.getReportWindturbineInfoList();
+
+        List<EarlyReportAlarm> alarmInfoList = new ArrayList<>();
+        windturbineInfoList.stream().forEach(s -> {
+            alarmInfoList.addAll(s.getAlarmInfoList());
         });
-        boolean b1 = earlyReportService.saveEarlyReport(lst);
-        boolean b2 = earlyReportInfoService.saveEarlyReportInfo(infoList);
-        return b1 && b2;
+        boolean saveReport = earlyReportService.save(report);
+        boolean saveReportWindturine = earlyReportWindturbineService.saveBatch(windturbineInfoList);
+        boolean saveReportAlarm = earlyReportAlarmService.saveBatch(alarmInfoList);
+
+        return saveReport && saveReportAlarm && saveReportWindturine;
+
     }
+
+    public static void main(String[] args) {
+        System.out.println(SnowflakeGenerator.generateId());
+        AlarmCount count1 = new AlarmCount();
+        count1.setCount(100);
+        count1.setTime(20.22);
+        count1.setWindturbineId("MG01");
+        AlarmCount count2 = new AlarmCount();
+        count2.setCount(200);
+        count2.setTime(32.22);
+        count2.setWindturbineId("MG01");
+
+        AlarmCount count3 = new AlarmCount();
+        count3.setCount(100);
+        count3.setTime(11.22);
+        count3.setWindturbineId("MG02");
+        AlarmCount count4 = new AlarmCount();
+        count4.setCount(200);
+        count4.setTime(10.22);
+        count4.setWindturbineId("MG03");
+
+        AlarmCount count5 = new AlarmCount();
+        count4.setCount(400);
+        count4.setTime(39.22);
+        count4.setWindturbineId("MG05");
+        List<AlarmCount> alarmCountList = Arrays.asList(count1, count2, count3, count4);
+        EarlyReportBiz earlyReportBiz = new EarlyReportBiz();
+        Map<String, AlarmCount> sumAlarmCountByWindturbine = earlyReportBiz.getSumAlarmCountByWindturbine(alarmCountList, 2);
+        System.out.println("123");
+
+    }
+
 }

+ 260 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/biz/EarlyReportTask.java

@@ -0,0 +1,260 @@
+package com.gyee.wisdom.alarm.schedule.biz;
+
+import com.alibaba.fastjson.JSON;
+import com.gyee.wisdom.alarm.schedule.cache.StationCache;
+import com.gyee.wisdom.alarm.schedule.cache.WindturbineCache;
+import com.gyee.wisdom.alarm.schedule.entity.*;
+import com.gyee.wisdom.alarm.schedule.model.EarlyReportParam;
+import com.gyee.wisdom.alarm.schedule.model.TaskResult;
+import com.gyee.wisdom.alarm.schedule.util.SnowflakeGenerator;
+import com.gyee.wisdom.alarm.schedule.util.SpringContextUtils;
+import com.gyee.wisdom.common.utils.DateUtil;
+import lombok.Data;
+
+import java.util.*;
+import java.util.concurrent.Callable;
+import java.util.stream.Collectors;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-08-24
+ */
+@Data
+public class EarlyReportTask implements Callable<TaskResult> {
+
+    private EarlyReportParam reportParam;
+
+    private EarlyReportBiz earlyReportBiz;
+
+    private WindturbineCache windturbineCache;
+
+    public EarlyReportTask(EarlyReportParam param) {
+        this.reportParam = param;
+        earlyReportBiz = SpringContextUtils.getBean(EarlyReportBiz.class);
+        windturbineCache = SpringContextUtils.getBean(WindturbineCache.class);
+    }
+
+    @Override
+    public TaskResult call() {
+        TaskResult result = new TaskResult();
+
+        long runStartTime = new Date().getTime();
+        //报告时间
+        Date reportDate = DateUtil.today();
+        //获取计算开始时间
+        Date statStartTime = DateUtil.addDays(DateUtil.today(), -reportParam.getInterval());
+        //获取计算结束时间
+        Date statEndTime = DateUtil.today();
+        //风机型号
+        String model = reportParam.getModel();
+        //风场id
+        String stationId = reportParam.getStationId();
+        //风机数量限制
+        int limit = reportParam.getResultLimit();
+
+        EarlyReport report = new EarlyReport()
+                .setId(String.valueOf(SnowflakeGenerator.generateId()))
+                .setReportDate(new Date())
+                .setStationId(stationId)
+                .setStationName(StationCache.getStationName(stationId))
+                .setReportName("")
+                .setStatStartDate(statStartTime)
+                .setStatEndDate(statEndTime)
+                .setReportWindturbineInfoList(new ArrayList<>());
+
+        try {
+            //获取本次报告最差的风机信息集合
+            List<EarlyReportWindturbine> nowWindturbineInfoList = getNowWindturbineInfo(model, report.getId(), statStartTime, statEndTime, limit);
+
+            report.getReportWindturbineInfoList().addAll(nowWindturbineInfoList);
+            // 获取上次报告
+            List<EarlyReport> earlyReport = earlyReportBiz.getEarlyReport(stationId, DateUtil.addDays(statEndTime, -60), statEndTime);
+            List<EarlyReport> collect = earlyReport.stream().sorted(Comparator.comparing(EarlyReport::getId,Comparator.reverseOrder())).collect(Collectors.toList());
+
+            if (collect.size() > 0) {
+                //已经进行了排序,因此获取第一个,即为最近一次报告
+                List<EarlyReportWindturbine> reportWindturbineInfoList = collect.get(0).getReportWindturbineInfoList().stream().filter(s->s.isCompared()==true).collect(Collectors.toList());
+                List<EarlyReportWindturbine> compareWindturbineInfoList = getCompareWindturbineInfo(reportWindturbineInfoList, model, report.getId(), statStartTime, statEndTime);
+                report.getReportWindturbineInfoList().addAll(compareWindturbineInfoList);
+            }
+
+            //执行写入操作
+            boolean b = earlyReportBiz.saveReport(report);
+            result.setSuccess(b);
+            result.setMsg(b ? "生成报告成功" : "报告保存失败");
+        } catch (RuntimeException ex) {
+            result.setSuccess(false).setMsg(ex.getStackTrace());
+        } finally {
+            return result;
+        }
+    }
+
+    /**
+     * @param model         风机型号
+     * @param reportId      报告id
+     * @param statStartTime 统计起始时间
+     * @param statEndTime   统计结束时间
+     * @param limit         结果限制数量
+     * @return com.gyee.wisdom.alarm.schedule.entity.EarlyReportWindturbine
+     * @author Wanghs
+     * @description 获取本次报告风机信息
+     * @date 2022/8/29
+     **/
+    private List<EarlyReportWindturbine> getNowWindturbineInfo(String model, String reportId, Date statStartTime, Date statEndTime, int limit) {
+
+        List<EarlyReportWindturbine> resultList = new ArrayList<>();
+
+        List<AlertRule2> alertRule2List = earlyReportBiz.getAlertRule2(reportParam.getCustomRuleId());
+
+        List<AlarmSnap> customAlarmSnapList = earlyReportBiz.getAlarmSnap(alertRule2List.stream().map(s -> String.valueOf(s.getEdnaValue())).collect(Collectors.toList()), "custom");
+
+        List<AlarmCount> customAlarmCountList = earlyReportBiz.getAlarmCount(customAlarmSnapList.stream().map(s -> s.getId()).collect(Collectors.toList()), statStartTime, statEndTime);
+
+        Map<String, List<AlarmCount>> alarmCountMapByAlertValue = customAlarmCountList.stream().collect(Collectors.groupingBy(AlarmCount::getAlertValue));
+
+        EarlyReportWindturbine avgWindturbineReport = new EarlyReportWindturbine()
+                .setId(String.valueOf(SnowflakeGenerator.generateId()))
+                .setWindturbineId("全场平均")
+                .setWindturbineCode("")
+                .setModel("")
+                .setCompared(false)
+                .setAlarmInfoList(new ArrayList<>())
+                .setReportId(reportId);
+
+        for (Map.Entry<String, List<AlarmCount>> entry :
+                alarmCountMapByAlertValue.entrySet()) {
+            AlarmCount avgAlarmCount = earlyReportBiz.getAvgAlarmCount(entry.getValue());
+            Optional<AlertRule2> first = alertRule2List.stream().filter(s -> String.valueOf(s.getEdnaValue()).equals(entry.getKey())).findFirst();
+            if (first.isPresent()) {
+                EarlyReportAlarm alarmInfo = new EarlyReportAlarm()
+                        .setId(String.valueOf(SnowflakeGenerator.generateId()))
+                        .setRuleId(first.get().getId())
+                        .setAlarmType("custom")
+                        .setRuleName(first.get().getName())
+                        .setRuleDescription(first.get().getDescription())
+                        .setRank(first.get().getRank())
+                        .setCount(avgAlarmCount.getCount())
+                        .setKeepTime((long) avgAlarmCount.getTime().doubleValue())
+                        .setReportWindturbineId(avgWindturbineReport.getId());
+
+                avgWindturbineReport.getAlarmInfoList().add(alarmInfo);
+            }
+        }
+        resultList.add(avgWindturbineReport);
+
+        Map<String, AlarmCount> sumAlarmCountByWindturbine = earlyReportBiz.getSumAlarmCountByWindturbine(customAlarmCountList, limit);
+
+        List<String> windturbineIdList = new ArrayList<String>(sumAlarmCountByWindturbine.keySet());
+
+        Map<String, List<AlarmCount>> windturbineLimitAlarmCountMap = customAlarmCountList.stream().filter(s -> windturbineIdList.contains(s.getWindturbineId())).collect(Collectors.groupingBy(AlarmCount::getWindturbineId));
+
+        for (Map.Entry<String, List<AlarmCount>> entry :
+                windturbineLimitAlarmCountMap.entrySet()) {
+            Map<String, Integer> sumCountByAlertValue = entry.getValue().stream().collect(Collectors.groupingBy(AlarmCount::getAlertValue, Collectors.summingInt(AlarmCount::getCount)));
+            Map<String, Double> sumKeepTimeByAlertValue = entry.getValue().stream().collect(Collectors.groupingBy(AlarmCount::getAlertValue, Collectors.summingDouble(AlarmCount::getTime)));
+
+            EarlyReportWindturbine reportWindturbine = new EarlyReportWindturbine()
+                    .setId(String.valueOf(SnowflakeGenerator.generateId()))
+                    .setWindturbineId(entry.getKey())
+                    .setWindturbineCode(windturbineCache.getWindturbine(entry.getKey()).getCode())
+                    .setModel(model)
+                    .setCompared(false)
+                    .setAlarmInfoList(new ArrayList<>())
+                    .setReportId(reportId);
+
+            for (Map.Entry<String, Integer> sumCountEntry :
+                    sumCountByAlertValue.entrySet()) {
+                Optional<AlertRule2> first = alertRule2List.stream().filter(s -> String.valueOf(s.getEdnaValue()).equals(sumCountEntry.getKey())).findFirst();
+                if (first.isPresent()) {
+                    EarlyReportAlarm alarmInfo = new EarlyReportAlarm()
+                            .setId(String.valueOf(SnowflakeGenerator.generateId()))
+                            .setRuleId(first.get().getId())
+                            .setAlarmType("custom")
+                            .setRuleName(first.get().getName())
+                            .setRuleDescription(first.get().getDescription())
+                            .setRank(first.get().getRank())
+                            .setCount(sumCountEntry.getValue())
+                            .setReportWindturbineId(reportWindturbine.getId());
+                    if (sumKeepTimeByAlertValue.containsKey(sumCountEntry.getKey())) {
+                        alarmInfo.setKeepTime((long) sumKeepTimeByAlertValue.get(sumCountEntry.getKey()).doubleValue());
+                    }
+                    reportWindturbine.getAlarmInfoList().add(alarmInfo);
+                }
+            }
+            resultList.add(reportWindturbine);
+        }
+        return resultList;
+
+    }
+
+    /**
+     * @param
+     * @param windturbineInfoList 需要对比的风机报告信息(上次报告)
+     * @param model               风机型号
+     * @param reportId            本次报告的id
+     * @param startTime           分析起始时间(本次分析)
+     * @param endTime             分析结束时间(本次分析)
+     * @return com.gyee.wisdom.alarm.schedule.entity.EarlyReportWindturbine
+     * @author Wanghs
+     * @description 获取上次报告中的风机与本周报告对比信息
+     * @date 2022/8/29
+     **/
+
+    private List<EarlyReportWindturbine> getCompareWindturbineInfo(List<EarlyReportWindturbine> windturbineInfoList, String model, String reportId, Date startTime, Date endTime) {
+
+        List<EarlyReportWindturbine> resultList = new ArrayList<>();
+        List<String> windturbineIdList = windturbineInfoList.stream().map(s -> s.getWindturbineId()).collect(Collectors.toList());
+        List<EarlyReportAlarm> reportAlarmList = new ArrayList<>();
+        windturbineInfoList.forEach(s -> {
+            reportAlarmList.addAll(s.getAlarmInfoList());
+        });
+        List<AlertRule2> alertRule2List = earlyReportBiz.getAlertRule2(reportAlarmList.stream().map(s -> s.getRuleId()).collect(Collectors.toList()));
+        List<AlarmSnap> customAlarmSnapList = earlyReportBiz.getAlarmSnap(alertRule2List.stream().map(s -> String.valueOf(s.getEdnaValue())).collect(Collectors.toList()), "custom");
+        List<AlarmCount> customAlarmCountList = earlyReportBiz.getAlarmCount(customAlarmSnapList.stream().map(s -> s.getId()).collect(Collectors.toList()), startTime, endTime);
+        Map<String, List<AlarmCount>> windturbineAlarmCountMap = customAlarmCountList.stream().filter(s -> windturbineIdList.contains(s.getWindturbineId())).collect(Collectors.groupingBy(AlarmCount::getWindturbineId));
+
+        for (Map.Entry<String, List<AlarmCount>> entry :
+                windturbineAlarmCountMap.entrySet()) {
+            EarlyReportWindturbine reportWindturbine = new EarlyReportWindturbine()
+                    .setId(String.valueOf(SnowflakeGenerator.generateId()))
+                    .setWindturbineId(entry.getKey())
+                    .setWindturbineCode(windturbineCache.getWindturbine(entry.getKey()).getCode())
+                    .setModel(model)
+                    .setCompared(true)
+                    .setAlarmInfoList(new ArrayList<>())
+                    .setReportId(reportId);
+
+            Optional<EarlyReportWindturbine> oldReportWindturbine = windturbineInfoList.stream().filter(s -> s.getWindturbineId().equals(entry.getKey())).findFirst();
+            if (oldReportWindturbine.isPresent())
+                reportWindturbine.setCompareId(oldReportWindturbine.get().getId());
+
+            Map<String, Integer> sumCountByAlertValue = entry.getValue().stream().collect(Collectors.groupingBy(AlarmCount::getAlertValue, Collectors.summingInt(AlarmCount::getCount)));
+            Map<String, Double> sumKeepTimeByAlertValue = entry.getValue().stream().collect(Collectors.groupingBy(AlarmCount::getAlertValue, Collectors.summingDouble(AlarmCount::getTime)));
+
+            for (Map.Entry<String, Integer> sumCountEntry :
+                    sumCountByAlertValue.entrySet()) {
+                Optional<AlertRule2> first = alertRule2List.stream().filter(s -> String.valueOf(s.getEdnaValue()).equals(sumCountEntry.getKey())).findFirst();
+                if (first.isPresent()) {
+                    EarlyReportAlarm alarmInfo = new EarlyReportAlarm()
+                            .setId(String.valueOf(SnowflakeGenerator.generateId()))
+                            .setRuleId(first.get().getId())
+                            .setAlarmType("custom")
+                            .setRuleName(first.get().getName())
+                            .setRuleDescription(first.get().getDescription())
+                            .setRank(first.get().getRank())
+                            .setCount(sumCountEntry.getValue())
+                            .setReportWindturbineId(reportWindturbine.getReportId());
+                    if (sumKeepTimeByAlertValue.containsKey(sumCountEntry.getKey())) {
+                        alarmInfo.setKeepTime((long) sumKeepTimeByAlertValue.get(sumCountEntry.getKey()).doubleValue());
+                    }
+                    reportWindturbine.getAlarmInfoList().add(alarmInfo);
+                }
+            }
+            resultList.add(reportWindturbine);
+        }
+        return resultList;
+    }
+
+
+}

+ 33 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/cache/StationCache.java

@@ -0,0 +1,33 @@
+package com.gyee.wisdom.alarm.schedule.cache;
+
+import com.gyee.wisdom.alarm.schedule.entity.WindPowerStation;
+import com.gyee.wisdom.alarm.schedule.service.WindpowerstationService;
+import com.gyee.wisdom.alarm.schedule.util.SpringContextUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-04-02
+ */
+public class StationCache {
+
+    static List<WindPowerStation> stationList = new ArrayList<>();
+
+    public static String getStationName(String stationId) {
+        if (stationList.size() <= 0) {
+
+            WindpowerstationService bean = SpringContextUtils.getBean(WindpowerstationService.class);
+            List<WindPowerStation> lst = bean.getAllStation("");
+            stationList = lst;
+        }
+        Optional<WindPowerStation> first = stationList.stream().filter(s -> s.getId().equals(stationId)).findFirst();
+        if (first.isPresent())
+            return first.get().getName();
+        else
+            return null;
+    }
+}

+ 49 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/cache/WindturbineCache.java

@@ -0,0 +1,49 @@
+package com.gyee.wisdom.alarm.schedule.cache;
+
+import com.gyee.wisdom.alarm.schedule.entity.Windturbine;
+import com.gyee.wisdom.alarm.schedule.service.WindturbineService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-03-17
+ */
+@Component
+public class WindturbineCache {
+
+    @Autowired
+    private WindturbineService windturbineService;
+
+    private List<Windturbine> windturbineList=new ArrayList<>();
+
+
+    private void initWindturbineList(){
+        List<Windturbine> windturbines = windturbineService.windturbineList();
+
+        windturbineList=windturbines;
+    }
+
+    public List<Windturbine> getWindturbineList(){
+        if(windturbineList.size()<=0)
+            initWindturbineList();
+        return this.windturbineList;
+    }
+
+    public Windturbine getWindturbine(String windturbineId){
+        if(windturbineList.size()<=0)
+            initWindturbineList();
+
+        Optional<Windturbine> first = windturbineList.stream().filter(s -> s.getId().equals(windturbineId)).findFirst();
+
+        if(first.isPresent())
+            return first.get();
+        else
+            return  null;
+    }
+}

+ 19 - 2
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/controller/EarlyReportController.java

@@ -1,13 +1,18 @@
 package com.gyee.wisdom.alarm.schedule.controller;
 
+import com.gyee.wisdom.alarm.schedule.entity.AlarmCount;
 import com.gyee.wisdom.alarm.schedule.entity.EarlyReport;
+import com.gyee.wisdom.alarm.schedule.mapper.AlarmCountMapper;
 import com.gyee.wisdom.alarm.schedule.mapper.EarlyReportMapper;
+import com.gyee.wisdom.alarm.schedule.service.AlarmCountService;
+import com.gyee.wisdom.alarm.schedule.service.AlarmSnapService;
 import com.gyee.wisdom.common.utils.DateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -23,16 +28,28 @@ public class EarlyReportController {
     @Autowired
     private EarlyReportMapper earlyReportMapper;
 
+    @Autowired
+    private AlarmCountService alarmCountService;
+    @Autowired
+    private AlarmSnapService alarmSnapService;
+
     @GetMapping("/all")
     public List<EarlyReport> getAllReport() {
         Date endDate = new Date();
 
-        Date startDate = DateUtil.addDays(endDate, -1);
+        Date startDate = DateUtil.addDays(endDate, -60);
 
-        List<EarlyReport> earlyReportByDate = earlyReportMapper.findEarlyReportByDate(startDate, endDate);
+        List<EarlyReport> earlyReportByDate = earlyReportMapper.findEarlyReportByDate("BY_FDC",startDate, endDate);
 
         return earlyReportByDate;
 
 
     }
+    @GetMapping("/test")
+    public List<AlarmCount> getAlarmCountTest() {
+        List<String> longs = Arrays.asList("964545037092659206", "697500304987389955");
+        List<AlarmCount> alarmCount = alarmCountService.getAlarmCount(longs, null, null);
+
+        return alarmCount;
+    }
 }

+ 4 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/AlarmCount.java

@@ -20,5 +20,9 @@ public class AlarmCount implements Serializable{
     private int count;
     @TableField("time")
     private Double time;
+    @TableField(exist = false)
+    private String alertValue;
+    @TableField(exist = false)
+    private String windturbineId;
 
 }

+ 2 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/AlarmCountInfo.java

@@ -32,6 +32,8 @@ public class AlarmCountInfo implements Serializable {
     private String project;
     @TableField("rank")
     private String rank;
+    @TableField("ALERTVALUE")
+    private String alertValue;
 
     public double getTime1() {
         try {

+ 78 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/AlertRule2.java

@@ -0,0 +1,78 @@
+package com.gyee.wisdom.alarm.schedule.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.gyee.wisdom.alarm.schedule.util.ChineseDes;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("ALERTRULE2")
+public class AlertRule2 implements Serializable {
+
+    @TableId("id")
+    private String id;
+    @ChineseDes("名称")
+    @TableField("Name")
+    private String name;
+    @JSONField(serialize=false,deserialize = false) //不序列化
+    @ChineseDes("规则描述")
+    @TableField("description")
+    private String description;
+    @JSONField(serialize=false,deserialize = false)//不序列化
+    @ChineseDes("表达式")
+    @TableField("expression")
+    private String expression;
+    @ChineseDes("标签")
+    @TableField("tag")
+    private String tag;
+    @ChineseDes("报警级别")
+    @TableField("rank")
+    private String rank;
+    @ChineseDes("是否启用")
+    @TableField("enabled")
+    private int enabled;
+    @ChineseDes("风机类型")
+    @TableField("modelId")
+    private String modelId;
+    @ChineseDes("ednavlue")
+    @TableField("ednaValue")
+    private int ednaValue;
+    @ChineseDes("类别")
+    @TableField("category")
+    private String category;
+    @ChineseDes("range范围")
+    @TableField("`range`")
+    private String range;
+    @ChineseDes("场站")
+    @TableField("station")
+    private String station;
+    @ChineseDes("风机")
+    @TableField("windturbine")
+    private String windturbine;
+    @ChineseDes("线路")
+    @TableField("line")
+    private String line;
+    @ChineseDes("项目")
+    @TableField("project")
+    private String project;
+    @ChineseDes("电气")
+    @TableField("electrical")
+    private String electrical;
+    @ChineseDes("任务开始事件")
+    @TableField("taskstart")
+    private String taskstart;
+    @TableField("relatedParts")
+    @ChineseDes("关联部件")
+    private String relatedParts;//关联部件
+    @TableField(exist = false)
+    private String userName;//操作人
+    @ChineseDes("操作时间")
+    @TableField("createtime")
+    private Date createtime;//操作时间
+
+}

+ 14 - 12
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/EarlyReport.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 import java.util.Date;
 import java.util.List;
@@ -15,11 +16,16 @@ import java.util.List;
  */
 @Data
 @TableName("EARLYREPORT")
+@Accessors(chain = true)
 public class EarlyReport {
 
     @TableId("ID")
     private String id;
 
+    //报告名称
+    @TableField("REPORTNAME")
+    private String reportName;
+
     //报告日期
     @TableField("REPORTDATE")
     private Date reportDate;
@@ -28,22 +34,18 @@ public class EarlyReport {
     @TableField("STATIONID")
     private String stationId;
 
-    //风机型号
-    @TableField("MODELID")
-    private String modelId;
-
-    //风机编号
-    @TableField("WINDTURBINEID")
-    private String windturbineId;
+    //场站名称
+    @TableField("STATIONNAME")
+    private String stationName;
 
     //分析起始日期
-    @TableField("STARTDATE")
-    private Date startDate;
+    @TableField("STATSTARTDATE")
+    private Date statStartDate;
 
     //分析结束日期
-    @TableField("ENDDATE")
-    private Date endDate;
+    @TableField("STATENDDATE")
+    private Date statEndDate;
 
     @TableField(exist = false)
-    private List<EarlyReportInfo> infoList;
+    private List<EarlyReportWindturbine> reportWindturbineInfoList;
 }

+ 13 - 7
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/EarlyReportInfo.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 /**
  * @description:
@@ -11,8 +12,9 @@ import lombok.Data;
  * @date: 2022-07-25
  */
 @Data
-@TableName("EARLYREPORTINFO")
-public class EarlyReportInfo {
+@TableName("EARLYREPORTALARM")
+@Accessors(chain = true)
+public class EarlyReportAlarm {
 
     @TableId("ID")
     private String id;
@@ -23,11 +25,14 @@ public class EarlyReportInfo {
     @TableField("ALARMTYPE")
     private String alarmType;
 
-    @TableField("ALARMNAME")
-    private String alarmName;
+    @TableField("RULENAME")
+    private String ruleName;
+
+    @TableField("RULEDESCRIPTION")
+    private String ruleDescription;
 
     @TableField("RANK")
-    private int rank;
+    private String rank;
 
     @TableField("ALARMSNAPID")
     private String alarmSnapId;
@@ -38,8 +43,9 @@ public class EarlyReportInfo {
     @TableField("KEEPTIME")
     private long keepTime;
 
-    @TableField("REPORTID")
-    private String reportId;
+    @TableField("REPORTWINDTURBINEID")
+    private String reportWindturbineId;
+
 
 
 }

+ 51 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/entity/EarlyReportWindturbine.java

@@ -0,0 +1,51 @@
+package com.gyee.wisdom.alarm.schedule.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-08-25
+ */
+
+@Data
+@TableName("EARLYREPORTWINDTURBINE")
+@Accessors(chain = true)
+public class EarlyReportWindturbine {
+
+    @TableId("ID")
+    private String id;
+
+    //风机id
+    @TableField("WINDTURBINEID")
+    private String windturbineId;
+
+    //风机编号或名称
+    @TableField("WINDTURBINECODE")
+    private String windturbineCode;
+
+    //风机型号
+    @TableField("model")
+    private String model;
+
+    //是否为对比数据(本周数据与上周数据对比)如果是对比数据,则需要将上次报告的所罗列的风机 针对本周数据进行计算
+    @TableField("COMPARED")
+    private boolean compared;
+
+   // 对比的earlyreportwindturbineid
+    @TableField("COMPAREID")
+    private String compareId;
+
+    //earlyreport表主键
+    @TableField("REPORTID")
+    private String reportId;
+
+    @TableField(exist = false)
+    private List<EarlyReportAlarm> alarmInfoList;
+}

+ 49 - 11
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/job/EarlyReportHandler.java

@@ -1,18 +1,32 @@
 package com.gyee.wisdom.alarm.schedule.job;
 
 import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.gyee.wisdom.alarm.schedule.biz.EarlyReportBiz;
+import com.gyee.wisdom.alarm.schedule.biz.EarlyReportTask;
+import com.gyee.wisdom.alarm.schedule.entity.AlarmSnap;
+import com.gyee.wisdom.alarm.schedule.entity.AlertRule2;
 import com.gyee.wisdom.alarm.schedule.model.EarlyReportParam;
+import com.gyee.wisdom.alarm.schedule.model.TaskResult;
+import com.gyee.wisdom.alarm.schedule.service.AlarmCountService;
+import com.gyee.wisdom.alarm.schedule.service.AlarmSnapService;
+import com.gyee.wisdom.alarm.schedule.service.AlertRule2Service;
 import com.gyee.wisdom.common.utils.DateUtil;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.context.XxlJobHelper;
 import com.xxl.job.core.handler.annotation.XxlJob;
-import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.Arrays;
 import java.util.Date;
-
-import static com.xxl.job.core.biz.model.ReturnT.SUCCESS;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.FutureTask;
 
 /**
  * @description:
@@ -22,7 +36,13 @@ import static com.xxl.job.core.biz.model.ReturnT.SUCCESS;
 @Component
 public class EarlyReportHandler {
 
+    @Autowired
+    private EarlyReportBiz earlyReportBiz;
+
     /**
+     * @param
+     * @return
+     * @return com.xxl.job.core.biz.model.ReturnT<java.lang.String>
      * @author Wanghs
      * @description 生成风机诊断报告方法
      * xxl-job参数为json格式
@@ -33,20 +53,38 @@ public class EarlyReportHandler {
      * resultLimit为所取最终结果数量(风机台属)
      * 备注:注意分析时间区间应与xxl-job调度平台中调度配置一致
      * @date 2022/7/26
-     * @param
-     * @return
-     * @return com.xxl.job.core.biz.model.ReturnT<java.lang.String>
      **/
     @XxlJob("earlyReport")
     public ReturnT<String> alarmCountStat() throws InterruptedException {
 
         String param = XxlJobHelper.getJobParam();
 
-        EarlyReportParam reportParam= JSON.parseObject(param,EarlyReportParam.class);
+        EarlyReportParam reportParam = JSON.parseObject(param, EarlyReportParam.class);
+        ReturnT t = null;
+
+        try {
+            TaskResult result = null;
+            EarlyReportTask task = new EarlyReportTask(reportParam);
+            FutureTask<TaskResult> ft = new FutureTask<>(task);
+            new Thread(ft).start();
+            result = ft.get();
+            if (result.isSuccess()) {
+                t = new ReturnT<String>(ReturnT.SUCCESS_CODE, "执行成功");
+                t.setContent(result);
+            } else {
+                t = new ReturnT<String>(ReturnT.FAIL_CODE, "执行失败");
+                t.setContent(result);
+            }
+        } catch (ExecutionException e) {
+            t = new ReturnT<String>(ReturnT.FAIL_CODE, "执行失败");
+            t.setContent(e.getStackTrace());
+            e.printStackTrace();
+        } finally {
+            XxlJobHelper.log(JSON.toJSONString(t));
+            return t;
+
+        }
 
-        Thread.sleep(10000);
-        System.out.println(DateUtil.toDate(new Date())+"--"+param);
 
-        return new ReturnT(ReturnT.SUCCESS_CODE,"执行成功,生成。。。。。");
     }
 }

+ 2 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/AlarmCountMapper.java

@@ -57,4 +57,6 @@ public interface AlarmCountMapper extends BaseMapper<AlarmCount> {
 
     List<AlarmCountInfo> getAlarmCountInfo(@Param("windturbineid")String wtId,
                                            @Param("currentDate") Date currentDate);
+
+    List<AlarmCount> getAlarmCountBySnapIdList(@Param("snapIdList")List<String> snapIdList, @Param("startTime")Date startTime, @Param("endTime")Date endTime);
 }

+ 13 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/AlertRule2Mapper.java

@@ -0,0 +1,13 @@
+package com.gyee.wisdom.alarm.schedule.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.wisdom.alarm.schedule.entity.AlertRule2;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AlertRule2Mapper extends BaseMapper<AlertRule2> {
+
+
+
+
+}

+ 21 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/EarlyReportAlarmMapper.java

@@ -0,0 +1,21 @@
+package com.gyee.wisdom.alarm.schedule.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.wisdom.alarm.schedule.entity.EarlyReport;
+import com.gyee.wisdom.alarm.schedule.entity.EarlyReportAlarm;
+import org.apache.ibatis.annotations.*;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-08-29
+ */
+@Mapper
+public interface EarlyReportAlarmMapper extends BaseMapper<EarlyReportAlarm> {
+
+    @Select("select * from EARLYREPORTALARM where  REPORTWINDTURBINEID=#{windturbineReportId}")
+    List<EarlyReportAlarm> findByWindturbineReportId(@Param("windturbineReportId") String windturbineReportId);
+}

+ 0 - 21
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/EarlyReportInfoMapper.java

@@ -1,21 +0,0 @@
-package com.gyee.wisdom.alarm.schedule.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.gyee.wisdom.alarm.schedule.entity.EarlyReport;
-import com.gyee.wisdom.alarm.schedule.entity.EarlyReportInfo;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
-
-import java.util.List;
-
-/**
- * @description:
- * @auther: Wanghs
- * @date: 2022-07-25
- */
-@Mapper
-public interface EarlyReportInfoMapper extends BaseMapper<EarlyReportInfo> {
-
-    @Select("select * from EARLYREPORTINFO where REPORTID=#{reportId}")
-    List<EarlyReportInfo> findByReportId(String reportId);
-}

+ 4 - 3
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/EarlyReportMapper.java

@@ -21,10 +21,11 @@ public interface EarlyReportMapper extends BaseMapper<EarlyReport> {
     @Results({
             @Result(id = true, column = "id", property = "id"),
             @Result(
-                    property = "infoList",
+                    property = "reportWindturbineInfoList",
                     column = "id",
                     javaType = List.class,
-                    many = @Many(select = "com.gyee.wisdom.alarm.schedule.mapper.EarlyReportInfoMapper.findByReportId")
+                    many = @Many(select = "com.gyee.wisdom.alarm.schedule.mapper.EarlyReportWindturbineMapper.findByReportId")
+
             )})
-    List<EarlyReport> findEarlyReportByDate(@Param("startTime")Date startTime, @Param("endTime")Date endTime);
+    List<EarlyReport> findEarlyReportByDate( @Param("stationId")String stationId,  @Param("startTime")Date startTime, @Param("endTime")Date endTime);
 }

+ 28 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/mapper/EarlyReportWindturbineMapper.java

@@ -0,0 +1,28 @@
+package com.gyee.wisdom.alarm.schedule.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.wisdom.alarm.schedule.entity.EarlyReportAlarm;
+import com.gyee.wisdom.alarm.schedule.entity.EarlyReportWindturbine;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-07-25
+ */
+@Mapper
+public interface EarlyReportWindturbineMapper extends BaseMapper<EarlyReportWindturbine> {
+
+    @Select("select * from EARLYREPORTWINDTURBINE where REPORTID=#{reportId}")
+    @Results({
+            @Result(id = true, column = "id", property = "id"),
+            @Result(
+                    property = "alarmInfoList",
+                    column = "id",
+                    javaType = List.class,
+                    many = @Many(select = "com.gyee.wisdom.alarm.schedule.mapper.EarlyReportAlarmMapper.findByWindturbineReportId")
+            )})
+    List<EarlyReportWindturbine> findByReportId(String reportId);
+}

+ 6 - 1
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/model/EarlyReportParam.java

@@ -15,11 +15,16 @@ public class EarlyReportParam implements Serializable {
 
     //时间间隔(天),即从当日0点,向前间隔天数,为计算区间
     private  int interval;
-
     //自定义报警规则id
     private List<String> customRuleId;
     //风机报警规则id
     private List<String> windturbineRuleId;
     //结果数量 限制(取前多少个)
     private int resultLimit;
+    //风场id
+    private String stationId;
+    //风机型号
+    private String model;
+    //故障状态统一编码,如果为空则不进行计算,不为空则计算出故障时长和次数
+    private String gzztCode;
 }

+ 23 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/model/TaskResult.java

@@ -0,0 +1,23 @@
+package com.gyee.wisdom.alarm.schedule.model;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @description: 线程返回值包装类
+ * @auther: Wanghs
+ * @date: 2022-08-24
+ */
+@Data
+@Accessors(chain = true)
+public class TaskResult {
+
+    //线程运行时间
+    private long runTime;
+
+    //信息
+    private Object msg;
+
+    //是否成功
+    private boolean success;
+}

+ 39 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/AlarmCountService.java

@@ -3,8 +3,14 @@ package com.gyee.wisdom.alarm.schedule.service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gyee.wisdom.alarm.schedule.entity.AlarmCount;
 import com.gyee.wisdom.alarm.schedule.mapper.AlarmCountMapper;
+import com.gyee.wisdom.common.utils.StringUtil;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
 /**
  * @description:
  * @auther: Wanghs
@@ -12,4 +18,37 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class AlarmCountService extends ServiceImpl<AlarmCountMapper, AlarmCount> {
+
+    public List<AlarmCount> getAlarmCount(List<String> snapIdList, Date startTime, Date endTime) {
+
+        List<AlarmCount> resultList = new ArrayList<>();
+
+        if (snapIdList.size() > 1000) {
+
+            int selectCount = snapIdList.size() / 1000;
+            int remainder = snapIdList.size() % 1000;
+            if (remainder == 0) {
+                for (int i = 0; i < selectCount; i++) {
+                    List<String> subSnapIdList = snapIdList.subList(1000 * i, 1000 * (i + 1));
+                    List<AlarmCount> subList = baseMapper.getAlarmCountBySnapIdList(subSnapIdList, startTime, endTime);
+                    resultList.addAll(subList);
+                }
+            } else {
+
+                for (int i = 0; i < selectCount; i++) {
+                    List<String> subSnapIdList = snapIdList.subList(1000 * i, 1000 * (i + 1));
+                    List<AlarmCount> subList = baseMapper.getAlarmCountBySnapIdList(subSnapIdList, startTime, endTime);
+                    resultList.addAll(subList);
+                }
+                //将数组剩余元素进行查询
+
+                List<String> lastSnapIdList = snapIdList.subList(snapIdList.size() - remainder, snapIdList.size());
+                List<AlarmCount> lastSubList = baseMapper.getAlarmCountBySnapIdList(lastSnapIdList, startTime, endTime);
+                resultList.addAll(lastSubList);
+            }
+        } else {
+            resultList = baseMapper.getAlarmCountBySnapIdList(snapIdList, startTime, endTime);
+        }
+        return resultList;
+    }
 }

+ 14 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/AlarmSnapService.java

@@ -1,5 +1,6 @@
 package com.gyee.wisdom.alarm.schedule.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gyee.wisdom.alarm.schedule.entity.AlarmSnap;
 import com.gyee.wisdom.alarm.schedule.mapper.AlarmSnapMapper;
@@ -44,4 +45,17 @@ public class AlarmSnapService extends ServiceImpl<AlarmSnapMapper, AlarmSnap> {
         return alarmSnapMapper.queryAll(stationId, windturbineId, category1, category2, rank,
                 modelid, isopened, keyword, dtStart, dtEnd);
     }
+
+    List<AlarmSnap> getAlarmSnap(String alertValue, String stationId, String model) {
+
+        QueryWrapper<AlarmSnap> wrapper = new QueryWrapper();
+        wrapper.eq("ALERTVALUE", alertValue);
+        wrapper.eq("STATIONID", stationId);
+        wrapper.eq("MODELID", model);
+
+        List<AlarmSnap> snapList = baseMapper.selectList(wrapper);
+        return snapList;
+
+    }
+
 }

+ 27 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/AlertRule2Service.java

@@ -0,0 +1,27 @@
+package com.gyee.wisdom.alarm.schedule.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.alarm.schedule.entity.AlarmCount;
+import com.gyee.wisdom.alarm.schedule.entity.AlertRule2;
+import com.gyee.wisdom.alarm.schedule.mapper.AlarmCountMapper;
+import com.gyee.wisdom.alarm.schedule.mapper.AlertRule2Mapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-07-26
+ */
+@Service
+public class AlertRule2Service extends ServiceImpl<AlertRule2Mapper, AlertRule2> {
+
+    public List<AlertRule2> getAlertRule(List<String> ruleIdList) {
+
+        List<AlertRule2> ruleList = baseMapper.selectBatchIds(ruleIdList);
+        return ruleList;
+
+    }
+}

+ 18 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/EarlyReportAlarmService.java

@@ -0,0 +1,18 @@
+package com.gyee.wisdom.alarm.schedule.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.alarm.schedule.entity.EarlyReportAlarm;
+import com.gyee.wisdom.alarm.schedule.mapper.EarlyReportAlarmMapper;
+import com.gyee.wisdom.alarm.schedule.mapper.EarlyReportMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-08-29
+ */
+@Service
+@Transactional(rollbackFor = RuntimeException.class)
+public class EarlyReportAlarmService extends ServiceImpl<EarlyReportAlarmMapper, EarlyReportAlarm> {
+}

+ 8 - 4
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/EarlyReportService.java

@@ -2,15 +2,13 @@ package com.gyee.wisdom.alarm.schedule.service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gyee.wisdom.alarm.schedule.entity.EarlyReport;
-import com.gyee.wisdom.alarm.schedule.entity.EarlyReportInfo;
 import com.gyee.wisdom.alarm.schedule.mapper.EarlyReportMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @description:
@@ -22,7 +20,13 @@ import java.util.stream.Collectors;
 public class EarlyReportService extends ServiceImpl<EarlyReportMapper, EarlyReport> {
 
     @Autowired
-    private EarlyReportInfoService earlyReportInfoService;
+    private EarlyReportWindturbineService earlyReportInfoService;
+
+    public List<EarlyReport> getEarlyReport(String stationId,Date startTime, Date endTime) {
+        List<EarlyReport> earlyReportByDate = baseMapper.findEarlyReportByDate( stationId,startTime, endTime);
+
+        return earlyReportByDate;
+    }
 
     public boolean saveEarlyReport(List<EarlyReport> lst) {
 

+ 4 - 5
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/EarlyReportInfoService.java

@@ -1,9 +1,8 @@
 package com.gyee.wisdom.alarm.schedule.service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.gyee.wisdom.alarm.schedule.entity.EarlyReport;
-import com.gyee.wisdom.alarm.schedule.entity.EarlyReportInfo;
-import com.gyee.wisdom.alarm.schedule.mapper.EarlyReportInfoMapper;
+import com.gyee.wisdom.alarm.schedule.entity.EarlyReportWindturbine;
+import com.gyee.wisdom.alarm.schedule.mapper.EarlyReportWindturbineMapper;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -16,9 +15,9 @@ import java.util.List;
  */
 @Service
 @Transactional(rollbackFor = RuntimeException.class)
-public class EarlyReportInfoService extends ServiceImpl<EarlyReportInfoMapper, EarlyReportInfo> {
+public class EarlyReportWindturbineService extends ServiceImpl<EarlyReportWindturbineMapper, EarlyReportWindturbine> {
 
-    public boolean saveEarlyReportInfo(List<EarlyReportInfo> lst) {
+    public boolean saveEarlyReportInfo(List<EarlyReportWindturbine> lst) {
         boolean b = this.saveBatch(lst);
         return b;
     }

+ 19 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/Warning2Service.java

@@ -0,0 +1,19 @@
+package com.gyee.wisdom.alarm.schedule.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.alarm.schedule.entity.Warning2;
+import com.gyee.wisdom.alarm.schedule.mapper.Warning2Mapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-08-22
+ */
+@Service
+public class Warning2Service extends ServiceImpl<Warning2Mapper, Warning2> {
+
+
+}

+ 23 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/WindpowerstationService.java

@@ -0,0 +1,23 @@
+package com.gyee.wisdom.alarm.schedule.service;
+
+import com.gyee.wisdom.alarm.schedule.entity.WindPowerStation;
+import com.gyee.wisdom.alarm.schedule.mapper.WindPowerStationMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class WindpowerstationService {
+    @Autowired
+    private WindPowerStationMapper windPowerStationMapper;
+
+    public WindPowerStation getAllWindPowerStation(String id) {
+        return windPowerStationMapper.getStationByid(id);
+    }
+
+    public List<WindPowerStation> getAllStation(String id){
+        List<WindPowerStation> stationAll = windPowerStationMapper.getStationAll(id);
+        return stationAll;
+    }
+}

+ 62 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/service/WindturbineService.java

@@ -0,0 +1,62 @@
+package com.gyee.wisdom.alarm.schedule.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.wisdom.alarm.schedule.entity.Windturbine;
+import com.gyee.wisdom.alarm.schedule.mapper.WindturbineMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author Wang Jiawen
+ * @purpose
+ * @date 2019-08-30 16:45
+ */
+@Service
+@Slf4j
+public class WindturbineService extends ServiceImpl<WindturbineMapper, Windturbine> {
+    @Autowired
+    private WindturbineMapper windturbineMapper;
+
+    public List<Windturbine> windturbineList() {
+        return windturbineMapper.selectWindturbines();
+    }
+
+    public List<Windturbine> selectWindturbineByStationid(String stationId) {
+        List<Windturbine> lst = windturbineMapper.selectWindturbineByCondition2(stationId);
+        Map<Integer, Windturbine> map = new HashMap<>();
+        if (lst.size() <= 0) {
+            return lst;
+        }
+        for (int i = 0; i < lst.size(); i++) {
+            String s = lst.get(i).getName();
+            String regEx = "[^0-9]";
+            Pattern p = Pattern.compile(regEx);
+            Matcher m = p.matcher(s);
+            String trim = m.replaceAll("").trim();
+            int i1 = Integer.parseInt(trim);
+            map.put(i1, lst.get(i));
+        }
+        List<Map.Entry<Integer, Windturbine>> entryList1 = new ArrayList<Map.Entry<Integer, Windturbine>>(map.entrySet());
+        Collections.sort(entryList1, new Comparator<Map.Entry<Integer, Windturbine>>() {
+            @Override
+            public int compare(Map.Entry<Integer, Windturbine> o1, Map.Entry<Integer, Windturbine> o2) {
+                return o1.getKey().compareTo(o2.getKey()); // 升序排序
+            }
+        });
+        List<Windturbine> list = new ArrayList<>();
+        for (int i = 0; i < entryList1.size(); i++) {
+            Map.Entry<Integer, Windturbine> maps = entryList1.get(i);
+            list.add(maps.getValue());
+        }
+        return list;
+    }
+
+    public Windturbine selectWindturbineByWindturbineid(String windturbineid) {
+        return windturbineMapper.selectById(windturbineid);
+    }
+}

+ 15 - 0
schedule-job/alarm-schedule/src/main/java/com/gyee/wisdom/alarm/schedule/util/ChineseDes.java

@@ -0,0 +1,15 @@
+package com.gyee.wisdom.alarm.schedule.util;
+
+import java.lang.annotation.*;
+
+/**
+ * @description:
+ * @auther: Wanghs
+ * @date: 2022-04-02
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface ChineseDes {
+    String value()default "";
+}

+ 6 - 3
schedule-job/alarm-schedule/src/main/resources/application.yaml

@@ -1,7 +1,10 @@
 server:
   port: 8083
   connection-timeout: 3000
-
+  servlet:
+    encoding:
+      force: true
+      charset: UTF-8
 spring:
   application:
     name: alarm-schedule
@@ -67,7 +70,7 @@ logging:
           alarm:
             sharding:
               mapper: debug
-              service: info
+              service: debug
 
 sharding:
   config:
@@ -103,7 +106,7 @@ knife4j:
 xxl:
   job:
     admin:
-      addresses: http://192.168.2.7:8080/xxl-job-admin
+      addresses: http://localhost:8080/xxl-job-admin
     accessToken:
     executor:
       appname: alarm-schedule

+ 32 - 0
schedule-job/alarm-schedule/src/main/resources/mappers/AlarmCountMapper.xml

@@ -2,6 +2,16 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.AlarmCountMapper">
 
+    <resultMap type="com.gyee.wisdom.alarm.schedule.entity.AlarmCount" id="myAlarmCount">
+        <result property="id" column="id"/>
+        <result property="alarmDate" column="alarmDate"/>
+        <result property="snapId" column="snapId"/>
+        <result property="count" column="count"/>
+        <result property="time" column="time"/>
+        <result property="alertValue" column="alertValue"/>
+        <result property="windturbineId" column="windturbineId"/>
+    </resultMap>
+
     <insert id="singleInsert" >
         insert into alarmcount (id, alarmdate, snapid, count)
         values
@@ -132,4 +142,26 @@
         AND s.windturbineid = #{windturbineid}
     </select>
 
+
+
+    <select id="getAlarmCountBySnapIdList" parameterType="java.util.Map" resultMap="myAlarmCount">
+        SELECT
+        a.id as id, a.alarmdate as alarmDate,a.snapid as snapId,a.count as count, a.time as time, s.alertvalue as alertValue, s.windturbineid as windturbineId
+        FROM
+        alarmcount a
+        LEFT JOIN alarmsnap s ON a.snapid = s.id
+        WHERE
+        1=1
+        <if test="startTime !=null and endTime !=null">
+            and a.alarmdate &gt;= #{startTime,jdbcType=DATE} and a.alarmdate &lt;#{endTime,jdbcType=DATE}
+        </if>
+        <if test="snapIdList !=null and snapIdList.size > 0">
+            and a.snapid in
+            <foreach collection="snapIdList" item="snapId" index="index" open="(" close=")" separator=",">
+                #{snapId}
+            </foreach>
+        </if>
+
+    </select>
+
 </mapper>

+ 5 - 0
schedule-job/alarm-schedule/src/main/resources/mappers/AlertRule2Mapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.AlertRule2Mapper">
+
+</mapper>

+ 1 - 1
schedule-job/alarm-schedule/src/main/resources/mappers/EarlyReportInfoMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.EarlyReportInfoMapper">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.EarlyReportAlarmMapper">
 
 
 

+ 7 - 0
schedule-job/alarm-schedule/src/main/resources/mappers/EarlyReportWindturbineMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gyee.wisdom.alarm.schedule.mapper.EarlyReportWindturbineMapper">
+
+
+
+</mapper>

+ 3 - 0
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/mapper/AlarmHisotryMapper.java

@@ -82,4 +82,7 @@ public interface AlarmHisotryMapper extends BaseMapper<AlarmHistory> {
 
 
     AlarmHistory getlatestAlarmHistory(@Param("tbName") String  tbName,@Param("snapId") Long snapId,@Param("messageType")String messageType,@Param("startTime")Date startTime,@Param("endTime")Date endTime);
+
+    List<AlarmHistory> getAlarmHistoryList(@Param("tbName") String  tbName,@Param("snapIdList") List<Long> snapIdList,@Param("messageType")String messageType,@Param("startTime")Date startTime,@Param("endTime")Date endTime);
+
 }

+ 73 - 57
warning-web/src/main/java/com/gyee/wisdom/alarm/sharding/service/AlarmSnapService.java

@@ -410,77 +410,93 @@ public class AlarmSnapService extends ServiceImpl<AlarmSnapMapper, AlarmSnap> {
             ///region  数据处理 场景描述:对于河北升压站中开关类报警,业主要求首页只展示合位触发,开位触发等流水,不展示合位解除,开位解除等流水
             if (category1.equals("SYZ")) {
                 //如果查询内容为升压站,筛选出报警内容包含字符串"开关",且包含字符串"合位"或"开位" (即筛选出开关类互斥点报警快照),且已经解除了的报警
-                List<AlarmSnap> collect = topNumAlarm.stream().filter(s ->  (s.getAlertText().contains("开位") || s.getAlertText().contains("合位") || s.getAlertText().contains("分位")) && s.getIsOpened() == 0).collect(Collectors.toList());
+                List<AlarmSnap> collect = topNumAlarm.stream().filter(s -> (s.getAlertText().contains("开位") || s.getAlertText().contains("合位") || s.getAlertText().contains("分位")) && s.getIsOpened() == 0).collect(Collectors.toList());
                 if (collect.size() > 0) {
                     List<AlarmHistory> list = new ArrayList<>();
 
                     //以当前时间向前推14天
                     Date dtEnd = new Date();
-                    Date dtStart = DateUtil.addDays(dtEnd, -3);
+                    Date dtStart = DateUtil.addDays(dtEnd, -15);
                     List<String> yearMonthList = tableNameService.getYearAndMonthList(dtStart, dtEnd);
+                    //********************************************************************************************************************************************************//
 
-
-                    for (int i = 0; i < collect.size(); i++) {
-                        if (yearMonthList.size() > 1) {
-                            {
-                                for (int j = 0; j < yearMonthList.size(); j++) {
-                                    //获取表名  alarmhistory_mhs_02
-                                    String tbName = "ALARMHISTORY_" + collect.get(i).getStationId().split("_")[0] + "_" + yearMonthList.get(j);
-                                    //获取触发的历史流水 messageType=1
-                                    AlarmHistory alarmHistory = alarmHisotryMapper.getlatestAlarmHistory(tbName, collect.get(i).getId(), "1", dtStart, dtEnd);
-                                    //如果从当前月已经查到数据,则结束循环查询
-                                    if (alarmHistory != null) {
-                                        list.add(alarmHistory);
-                                        break;
-                                    }
-                                }
-                            }
-
-                        } else {
-                            String tbName = "ALARMHISTORY_" + collect.get(i).getStationId().split("_")[0] + "_" + yearMonthList.get(0);
-                            //获取触发的历史流水 messageType=1
-                            AlarmHistory alarmHistory = alarmHisotryMapper.getlatestAlarmHistory(tbName, collect.get(i).getId(), "1", dtStart, dtEnd);
-                            if (alarmHistory != null) {
-                                list.add(alarmHistory);
-                            }
-                        }
-
-
-                        }
 //
-//                    List<AlarmHistory> historyList=new ArrayList<>();
-//
-//                    Map<String, List<AlarmSnap>> collectMap = collect.stream().collect(Collectors.groupingBy(AlarmSnap::getStationId));
-//                    if(yearMonthList.size()>1){
-//                        for (int j = 0; j < yearMonthList.size(); j++) {
-//                            for (Map.Entry<String,List<AlarmSnap>> entry:
-//                                 collectMap.entrySet()) {
-//                                String tbName = "ALARMHISTORY_" + entry.getValue().get(0).getStationId().split("_")[0] + "_" + yearMonthList.get(j);
-//                                List<Long> snapIdList = entry.getValue().stream().map(s -> s.getId()).collect(Collectors.toList());
-//                                //获取触发的历史流水 messageType=1
-//                                List<AlarmHistory> lst = alarmHisotryMapper.getlatestAlarmHistory(tbName, snapIdList, "1", dtStart, dtEnd);
-//                                list.addAll(lst);
+//                    for (int i = 0; i < collect.size(); i++) {
+//                        if (yearMonthList.size() > 1) {
+//                            {
+//                                for (int j = 0; j < yearMonthList.size(); j++) {
+//                                    //获取表名  alarmhistory_mhs_02
+//                                    String tbName = "ALARMHISTORY_" + collect.get(i).getStationId().split("_")[0] + "_" + yearMonthList.get(j);
+//                                    //获取触发的历史流水 messageType=1
+//                                    AlarmHistory alarmHistory = alarmHisotryMapper.getlatestAlarmHistory(tbName, collect.get(i).getId(), "1", dtStart, dtEnd);
+//                                    //如果从当前月已经查到数据,则结束循环查询
+//                                    if (alarmHistory != null) {
+//                                        list.add(alarmHistory);
+//                                        break;
+//                                    }
+//                                }
 //                            }
 //
-//
+//                        } else {
+//                            String tbName = "ALARMHISTORY_" + collect.get(i).getStationId().split("_")[0] + "_" + yearMonthList.get(0);
+//                            //获取触发的历史流水 messageType=1
+//                            AlarmHistory alarmHistory = alarmHisotryMapper.getlatestAlarmHistory(tbName, collect.get(i).getId(), "1", dtStart, dtEnd);
+//                            if (alarmHistory != null) {
+//                                list.add(alarmHistory);
+//                            }
 //                        }
 //
-//                    }else{
-//                        for (Map.Entry<String,List<AlarmSnap>> entry:
-//                                collectMap.entrySet()) {
-//                            String tbName = "ALARMHISTORY_" + entry.getValue().get(0).getStationId().split("_")[0] + "_" + yearMonthList.get(0);
-//                            List<Long> snapIdList = entry.getValue().stream().map(s -> s.getId()).collect(Collectors.toList());
-//                            //获取触发的历史流水 messageType=1
-//                            List<AlarmHistory> lst = alarmHisotryMapper.getlatestAlarmHistory(tbName, snapIdList, "1", dtStart, dtEnd);
-//                            list.addAll(lst);
+//
+//                    }
+
+//                    for (AlarmHistory history :
+//                            list) {
+//                        Optional<AlarmSnap> first = topNumAlarm.stream().filter(s -> s.getId().equals(history.getSnapId())).findFirst();
+//                        if (first.isPresent()) {
+//                            first.get().setLastUpdateTime(history.getAlertTime());
+//                            first.get().setIsOpened(1);
 //                        }
 //                    }
-                    for (AlarmHistory history :
-                            list) {
-                        Optional<AlarmSnap> first = topNumAlarm.stream().filter(s -> s.getId().equals(history.getSnapId())).findFirst();
-                        if (first.isPresent()) {
-                            first.get().setLastUpdateTime(history.getAlertTime());
-                            first.get().setIsOpened(1);
+                    //********************************************************************************************************************************************************//
+//
+
+                    Map<String, List<AlarmSnap>> collectMap = collect.stream().collect(Collectors.groupingBy(AlarmSnap::getStationId));
+                    if (yearMonthList.size() > 1) {
+                        for (int j = 0; j < yearMonthList.size(); j++) {
+                            for (Map.Entry<String, List<AlarmSnap>> entry :
+                                    collectMap.entrySet()) {
+                                String tbName = "ALARMHISTORY_" + entry.getValue().get(0).getStationId().split("_")[0] + "_" + yearMonthList.get(j);
+                                List<Long> snapIdList = entry.getValue().stream().map(s -> s.getId()).collect(Collectors.toList());
+                                //获取触发的历史流水 messageType=1
+                                List<AlarmHistory> lst = alarmHisotryMapper.getAlarmHistoryList(tbName, snapIdList, "1", dtStart, dtEnd);
+                                list.addAll(lst);
+                            }
+                        }
+
+                    } else {
+                        for (Map.Entry<String, List<AlarmSnap>> entry :
+                                collectMap.entrySet()) {
+                            String tbName = "ALARMHISTORY_" + entry.getValue().get(0).getStationId().split("_")[0] + "_" + yearMonthList.get(0);
+                            List<Long> snapIdList = entry.getValue().stream().map(s -> s.getId()).collect(Collectors.toList());
+                            //获取触发的历史流水 messageType=1
+                            List<AlarmHistory> lst = alarmHisotryMapper.getAlarmHistoryList(tbName, snapIdList, "1", dtStart, dtEnd);
+                            list.addAll(lst);
+                        }
+                    }
+
+                    //********************************************************************************************************************************************************//
+
+                    Map<Long, List<AlarmHistory>> historyMapBySnapId = list.stream().collect(Collectors.groupingBy(AlarmHistory::getSnapId));
+                    for (int i = 0; i < topNumAlarm.size(); i++) {
+                        AlarmSnap alarmSnap = topNumAlarm.get(i);
+                        if (alarmSnap.getCategory1().equals("SYZ")) {
+                            if (historyMapBySnapId.containsKey(alarmSnap.getId())) {
+                                Optional<AlarmHistory> first = historyMapBySnapId.get(alarmSnap.getId()).stream().sorted(Comparator.comparing(AlarmHistory::getAlertTime).reversed()).findFirst();
+                                if (first.isPresent()) {
+                                    alarmSnap.setIsOpened(1);
+                                    alarmSnap.setLastUpdateTime(first.get().getAlertTime());
+                                }
+                            }
                         }
                     }
                 }

+ 17 - 1
warning-web/src/main/resources/mappers-oracle/AlarmHistoryMapper.xml

@@ -271,5 +271,21 @@
 
     </select>
 
-
+    <select id="getAlarmHistoryList" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.model.AlarmHistoryInfo">
+        SELECT * FROM  ${tbName} a
+        <where>
+            <if test="snapIdList !=null and snapIdList.size()>0">
+                 a.SNAPID in
+                <foreach collection="snapIdList" index="index" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="messageType !=null and messageType !=''">
+                and a.MESSAGETYPE=#{messageType}
+            </if>
+            <if test="startTime !=null and endTime !=null">
+                and a.alerttime &gt;= #{startTime,jdbcType=DATE} and a.alerttime &lt;= #{endTime,jdbcType=DATE}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 8 - 1
warning-web/src/main/resources/mappers-oracle/AlarmSnapMapper.xml

@@ -124,7 +124,14 @@
     </select>
 
     <select id="getTopNumAlarm" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
-        select * from ( select * from alarmsnap h order by h.lastupdatetime desc) t
+        select * from ( select * from alarmsnap h
+        <if test="category1!= null and category1!=''">
+            <if test="category1=='SYZ'">
+                where h.lastupdatetime >(select sysdate-14 from dual)
+            </if>
+
+        </if>
+        order by h.lastupdatetime desc) t
         where t.category1 = #{category1}  and rownum &lt;= #{topnum}
     </select>
 

+ 1 - 1
warning-web/src/main/resources/mappers-oracle/Alertrule2Mapper.xml

@@ -59,7 +59,7 @@
             </if>
 <!--            and a.range = 0-->
         </where>
-        order by a.createtime desc
+
     </select>
 
     <select id="getMaxEdnaValue" parameterType="java.util.Map" resultType="java.lang.Integer">

+ 89 - 52
warning-web/src/main/resources/mappers-postgresql/Alertrule2Mapper.xml

@@ -6,47 +6,75 @@
           WARNING - @mbg.generated
           This element is automatically generated by MyBatis Generator, do not modify.
         -->
-        <id column="id" property="id" />
-        <result column="name"  property="name" />
-        <result column="description"  property="description" />
-        <result column="expression"  property="expression" />
-        <result column="rank"  property="rank" />
-        <result column="rank"  property="rank" />
-        <result column="enabled"  property="enabled" />
-        <result column="modelId"  property="modelId" />
-        <result column="ednaValue"  property="ednaValue" />
-        <result column="category"  property="category" />
-        <result column="range"  property="range" />
-        <result column="station"  property="station" />
-        <result column="windturbine"  property="windturbine" />
-        <result column="line"  property="line" />
-        <result column="project"  property="project" />
-        <result column="electrical"  property="electrical" />
-        <result column="taskstart"  property="taskstart" />
-        <result column="relatedParts"  property="relatedParts" />
+        <id column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="description" property="description"/>
+        <result column="expression" property="expression"/>
+        <result column="rank" property="rank"/>
+        <result column="rank" property="rank"/>
+        <result column="enabled" property="enabled"/>
+        <result column="modelId" property="modelId"/>
+        <result column="ednaValue" property="ednaValue"/>
+        <result column="category" property="category"/>
+        <result column="range" property="range"/>
+        <result column="station" property="station"/>
+        <result column="windturbine" property="windturbine"/>
+        <result column="line" property="line"/>
+        <result column="project" property="project"/>
+        <result column="electrical" property="electrical"/>
+        <result column="taskstart" property="taskstart"/>
+        <result column="relatedParts" property="relatedParts"/>
     </resultMap>
     <resultMap type="Alertrule2" id="Alertrule2Result">
-        <result property="id"    column="id"    />
-        <result property="name"    column="name"    />
-        <result property="station"    column="station"    />
-        <result property="relatedParts"    column="relatedParts"    />
-        <association  property="windPowerStation"  column="station"     javaType="WindPowerStation"  select="com.gyee.wisdom.alarm.sharding.mapper.WindPowerStationMapper.selectByid"/>
-        <association  property="datadictionary"  column="relatedParts"     javaType="Datadictionary"  select="com.gyee.wisdom.alarm.sharding.mapper.DatadictionaryMapper.selectBycode"/>
+        <result property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="station" column="station"/>
+        <result property="relatedParts" column="relatedParts"/>
+        <association property="windPowerStation" column="station" javaType="WindPowerStation"
+                     select="com.gyee.wisdom.alarm.sharding.mapper.WindPowerStationMapper.selectByid"/>
+        <association property="datadictionary" column="relatedParts" javaType="Datadictionary"
+                     select="com.gyee.wisdom.alarm.sharding.mapper.DatadictionaryMapper.selectBycode"/>
     </resultMap>
-    <select id="pageQueryAll" parameterType="java.util.Map" resultMap="Alertrule2Result">
-        select a.* from  ALERTRULE2 a
+
+    <resultMap type="com.gyee.wisdom.alarm.sharding.entity.Alertrule2" id="alertRule2ResultToPostgreSql">
+        <result property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="description" column="description"/>
+        <result property="expression" column="expression"/>
+        <result property="tag" column="tag"/>
+        <result property="rank" column="rank"/>
+        <result property="enabled" column="specialenable"/>
+        <result property="modelId" column="modelid"/>
+        <result property="ednaValue" column="ednavalue"/>
+        <result property="category" column="category"/>
+        <result property="range" column="range"/>
+        <result property="station" column="station"/>
+        <result property="windturbine" column="windturbine"/>
+        <result property="line" column="line"/>
+        <result property="project" column="project"/>
+        <result property="electrical" column="electrical"/>
+        <result property="taskstart" column="taskstart"/>
+        <result property="relatedParts" column="relatedParts"/>
+        <association property="windPowerStation" column="station" javaType="WindPowerStation"
+                     select="com.gyee.wisdom.alarm.sharding.mapper.WindPowerStationMapper.selectByid"/>
+        <association property="datadictionary" column="relatedParts" javaType="Datadictionary"
+                     select="com.gyee.wisdom.alarm.sharding.mapper.DatadictionaryMapper.selectBycode"/>
+    </resultMap>
+
+    <select id="pageQueryAll" parameterType="java.util.Map" resultMap="alertRule2ResultToPostgreSql">
+        select a.*, (case a.enabled   WHEN 't' then 1  when 'f' then 0  else 0 end) as specialenable from ALERTRULE2 a
         left join windpowerstation w on w.id = a.station
         <where>
             1=1
 
             <if test="name !=null and name !=''">
-                and a.name like  '%${name}%'
+                and a.name like '%${name}%'
             </if>
             <if test="station !=null and station !=''">
-                and a.station like  '%${station}%'
+                and a.station like '%${station}%'
             </if>
             <if test="modelId !=null and modelId !=''">
-                and a.modelid like  '%${modelId}%'
+                and a.modelid like '%${modelId}%'
             </if>
             <if test="rank !=null and rank !=''">
                 and a.rank = #{rank}
@@ -55,27 +83,34 @@
                 and a.category = #{category}
             </if>
             <if test="enabled !=null and enabled !=''">
-                and a.enabled = #{enabled}
+                <if test="enabled ='1'">
+                    and a.enabled = true
+                </if>
+                <if test="enabled ='0'">
+                    and a.enabled = false
+                </if>
             </if>
-<!--            and a.range = 0-->
+
+            <!--            and a.range = 0-->
         </where>
-        order by a.createtime desc
+
     </select>
 
     <select id="getMaxEdnaValue" parameterType="java.util.Map" resultType="java.lang.Integer">
-        select max(a.ednavalue) from  ALERTRULE2 a
+        select max(a.ednavalue) from ALERTRULE2 a
     </select>
-    <select id="getAllByStationIdAndModelId" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.Alertrule2">
-        select * from  ALERTRULE2 a
+    <select id="getAllByStationIdAndModelId" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.alarm.sharding.entity.Alertrule2">
+        select * from ALERTRULE2 a
         <where>
             1=1
             <if test="idString !=null and idString !=''">
-                and a.id like  '%${idString}%'
+                and a.id like '%${idString}%'
             </if>
         </where>
     </select>
     <select id="getById" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.Alertrule2">
-        select * from  ALERTRULE2 a
+        select * from ALERTRULE2 a
         <where>
             1=1
             <if test="idString !=null and idString !=''">
@@ -84,13 +119,13 @@
         </where>
     </select>
 
-    <select id="quertByrelatedParts"  resultType="java.util.HashMap">
-        select a.name from  ALERTRULE2 a
+    <select id="quertByrelatedParts" resultType="java.util.HashMap">
+        select a.name from ALERTRULE2 a
         where a.relatedparts = #{relatedParts}
         group by a.name
     </select>
 
-    <select id="queryTree" resultMap="Alertrule2Result" >
+    <select id="queryTree" resultMap="Alertrule2Result">
         select distinct a.relatedparts,a.name,d.name from alertrule2 a
         left join DATADICTIONARY d
         on d.code = a.relatedparts
@@ -100,13 +135,14 @@
 
     <select id="queryMap" resultType="com.gyee.wisdom.alarm.sharding.entity.Alertrule2">
         select t.relatedparts,d.name from
-            (select a.relatedparts from alertrule2 a
-             where relatedparts  is not null
-             group by a.relatedparts) t
+        (select a.relatedparts from alertrule2 a
+        where relatedparts is not null
+        group by a.relatedparts) t
         left join DATADICTIONARY d
         on d.code = t.relatedparts
     </select>
-    <insert id="insertAlerture2" parameterType="com.gyee.wisdom.alarm.sharding.entity.Alertrule2" useGeneratedKeys="true" keyProperty="id">
+    <insert id="insertAlerture2" parameterType="com.gyee.wisdom.alarm.sharding.entity.Alertrule2"
+            useGeneratedKeys="true" keyProperty="id">
         insert into alertrule2
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="id != null">id,</if>
@@ -153,7 +189,7 @@
     </insert>
     <update id="updateByAlertrule2Id" parameterType="com.gyee.wisdom.alarm.sharding.entity.Alertrule2">
         update alertrule2 a
-        <set >
+        <set>
             <if test="name != null">a.name = #{name},</if>
             <if test="description != null">a.description = #{description},</if>
             <if test="expression != null">a.expression = #{expression},</if>
@@ -177,13 +213,12 @@
     </update>
 
 
-
     <select id="selectByAlertrule2Id" resultType="com.gyee.wisdom.alarm.sharding.entity.Alertrule2">
-        select * from  alertrule2 a where a.id=#{id}
+        select * from alertrule2 a where a.id=#{id}
     </select>
 
     <select id="selectByNameAndSataionAndModelid" resultType="com.gyee.wisdom.alarm.sharding.entity.Alertrule2">
-        select * from  alertrule2 a
+        select * from alertrule2 a
         <where>
             1=1
             <if test="name !=null and name !=''">
@@ -198,7 +233,8 @@
         </where>
     </select>
 
-    <select id="selectByExample" parameterType="com.gyee.wisdom.alarm.sharding.model.Alertrule2Example" resultMap="BaseResultMap">
+    <select id="selectByExample" parameterType="com.gyee.wisdom.alarm.sharding.model.Alertrule2Example"
+            resultMap="BaseResultMap">
         <!--
           WARNING - @mbg.generated
           This element is automatically generated by MyBatis Generator, do not modify.
@@ -208,10 +244,10 @@
             distinct
         </if>
         *
-<!--        <include refid="Base_Column_List" />-->
+        <!--        <include refid="Base_Column_List" />-->
         from ALERTRULE2
         <if test="_parameter != null">
-            <include refid="Example_Where_Clause" />
+            <include refid="Example_Where_Clause"/>
         </if>
         <if test="orderByClause != null">
             order by ${orderByClause}
@@ -249,7 +285,8 @@
                                 </when>
                                 <when test="criterion.listValue">
                                     and ${criterion.condition}
-                                    <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                                    <foreach close=")" collection="criterion.value" item="listItem" open="("
+                                             separator=",">
                                         #{listItem}
                                     </foreach>
                                 </when>

+ 24 - 3
warning-web/src/main/resources/mappers-postgresql/ScadabjMapper.xml

@@ -2,8 +2,24 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.gyee.wisdom.alarm.sharding.mapper.ScadabjMapper">
 
-    <select id="pageQueryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.Scadabj">
-        select * from  SCADABJ a
+
+    <resultMap type="com.gyee.wisdom.alarm.sharding.entity.Scadabj" id="scadabjResultToPostgreSql">
+        <result property="id" column="id"/>
+        <result property="pointKey" column="pointkey"/>
+        <result property="description" column="description"/>
+        <result property="category1" column="category1"/>
+        <result property="category2" column="category2"/>
+        <result property="category3" column="category3"/>
+        <result property="category4" column="category4"/>
+        <result property="stationId" column="stationid"/>
+        <result property="deviceId" column="deviceid"/>
+        <result property="rank" column="rank"/>
+        <result property="enabled" column="specialenable"/>
+        <result property="alarmType" column="alarmtype"/>
+    </resultMap>
+
+    <select id="pageQueryAll" parameterType="java.util.Map" resultMap="scadabjResultToPostgreSql">
+        select a.*,(case a.enabled   WHEN 't' then 1  when 'f' then 0  else 0 end) as specialenable from  SCADABJ a
         <where>
             1=1
             <if test="pointKey !=null and pointKey !=''">
@@ -13,7 +29,12 @@
                 and a.stationId=#{stationId}
             </if>
             <if test="enable !=null and enable !=''">
-                and a.enabled=#{enable}
+                <if test="enable ='1'">
+                    and a.enabled = true
+                </if>
+                <if test="enable ='0'">
+                    and a.enabled = false
+                </if>
             </if>
             <if test="description !=null and description !=''">
                 and a.description like  '%${description}%'

+ 35 - 25
warning-web/src/main/resources/mappers/AlarmSnapMapper.xml

@@ -3,7 +3,7 @@
 <mapper namespace="com.gyee.wisdom.alarm.sharding.mapper.AlarmSnapMapper">
 
     <select id="queryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
-        select * from  ALARMSNAP a
+        select * from ALARMSNAP a
         <where>
             1=1
             <if test="starttime !=null and endtime !=null">
@@ -34,11 +34,12 @@
                 and a.alerttext like '%${keyword}%'
             </if>
         </where>
-        order by a.lastupdatetime  desc
+        order by a.lastupdatetime desc
     </select>
 
-    <select id="pageQueryAll" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
-        select * from  ALARMSNAP a
+    <select id="pageQueryAll" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
+        select * from ALARMSNAP a
         <where>
             1=1
             <if test="starttime !=null and endtime !=null">
@@ -69,18 +70,20 @@
                 and a.alerttext like '%${keyword}%'
             </if>
         </where>
-        order by a.lastupdatetime  desc
+        order by a.lastupdatetime desc
     </select>
 
     <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false">
-        insert into alarmsnap ( ID, STATIONID, PROJECTID, LINEID, WINDTURBINEID, ALERTVALUE, CATEGORY1, CATEGORY2, CATEGORY3, RANK, ISOPENED, LASTUPDATETIME, STATIONNAME, PROJECTNAME, LINENAME, WINDTURBINENAME, ALERTTEXT, MODELID, TESTINGPOINTKEY, DATAINFO )
-        <foreach collection="list" item="item" index="index" separator="union all" >
+        insert into alarmsnap ( ID, STATIONID, PROJECTID, LINEID, WINDTURBINEID, ALERTVALUE, CATEGORY1, CATEGORY2,
+        CATEGORY3, RANK, ISOPENED, LASTUPDATETIME, STATIONNAME, PROJECTNAME, LINENAME, WINDTURBINENAME, ALERTTEXT,
+        MODELID, TESTINGPOINTKEY, DATAINFO )
+        <foreach collection="list" item="item" index="index" separator="union all">
             ( select
-                #{item.id},#{item.stationId},#{item.projectId},#{item.lineId},#{item.windturbineId},
-                #{item.alertValue},#{item.category1},#{item.category2},#{item.category3},#{item.rank},
-                #{item.isOpened},#{item.lastUpdateTime},#{item.stationName},#{item.projectName},
-                #{item.lineName},#{item.windturbineName},#{item.alertText},#{item.modelId},
-                #{item.testingpointKey},#{item.dataInfo}
+            #{item.id},#{item.stationId},#{item.projectId},#{item.lineId},#{item.windturbineId},
+            #{item.alertValue},#{item.category1},#{item.category2},#{item.category3},#{item.rank},
+            #{item.isOpened},#{item.lastUpdateTime},#{item.stationName},#{item.projectName},
+            #{item.lineName},#{item.windturbineName},#{item.alertText},#{item.modelId},
+            #{item.testingpointKey},#{item.dataInfo}
             from dual )
         </foreach>
     </insert>
@@ -102,33 +105,40 @@
         </foreach>
     </update>
 
-    <select id="findByStationIdAndAlertValue" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
-        select * from  ALARMSNAP a
+    <select id="findByStationIdAndAlertValue" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
+        select * from ALARMSNAP a
         <where>
-            a.stationid=#{stationid} and a.alertvalue = #{alertvalue}  limit 1
+            a.stationid=#{stationid} and a.alertvalue = #{alertvalue} limit 1
         </where>
     </select>
 
-    <select id="findByWindturbineIdAndAlertValue" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
-        select * from  ALARMSNAP a
+    <select id="findByWindturbineIdAndAlertValue" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
+        select * from ALARMSNAP a
         <where>
-            a.windturbineid=#{windturbineid} and a.alertvalue = #{alertvalue}  limit  1
+            a.windturbineid=#{windturbineid} and a.alertvalue = #{alertvalue} limit 1
         </where>
     </select>
 
-    <select id="findByTestingpointkey" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
-        select * from  ALARMSNAP a
+    <select id="findByTestingpointkey" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
+        select * from ALARMSNAP a
         <where>
-            a.testingpointkey=#{testingpointkey}  limit  1
+            a.testingpointkey=#{testingpointkey} limit 1
         </where>
     </select>
 
-    <select id="getTopNumAlarm" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
-        select * from ( select * from alarmsnap h order by h.lastupdatetime desc) t
-        where t.category1 = #{category1}  limit 0,#{topnum}
+    <select id="getTopNumAlarm" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
+        select * from ( select * from alarmsnap h
+
+        order by h.lastupdatetime desc) t
+        where t.category1 = #{category1} limit 0,#{topnum}
     </select>
 
-    <select id="getRecentAlarm" parameterType="java.util.Map" resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
+    <select id="getRecentAlarm" parameterType="java.util.Map"
+            resultType="com.gyee.wisdom.alarm.sharding.entity.AlarmSnap">
         SELECT * FROM alarmsnap
         WHERE category1 = #{category1} and lastupdatetime >= #{lastupdatetime}
         order by lastupdatetime desc

+ 1 - 1
warning-web/src/main/resources/mappers/Alertrule2Mapper.xml

@@ -59,7 +59,7 @@
             </if>
 <!--            and a.range = 0-->
         </where>
-        order by a.createtime desc
+
     </select>
 
     <select id="getMaxEdnaValue" parameterType="java.util.Map" resultType="java.lang.Integer">