Browse Source

报警统计功能

shilin 1 year ago
parent
commit
a1e5434638
49 changed files with 2942 additions and 27175 deletions
  1. 18 0
      alarm-custom/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java
  2. 18 0
      alarm-scanner/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java
  3. 1 1
      alarm-scanner/src/main/resources/application-bt.yml
  4. 5 10
      alarm-service/src/main/java/com/gyee/alarm/init/CacheContext.java
  5. 5 4
      alarm-service/src/main/java/com/gyee/alarm/mapper/auto/AlarmTsMapper.java
  6. 18 0
      alarm-service/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java
  7. 16 0
      alarm-service/src/main/java/com/gyee/alarm/model/vo/AlarmTag.java
  8. 20 0
      alarm-service/src/main/java/com/gyee/alarm/model/vo/AlarmVo.java
  9. 60 14
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmBtService.java
  10. 146 12
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmCtService.java
  11. 59 10
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmInService.java
  12. 60 10
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmWtService.java
  13. 2 1
      alarm-service/src/main/java/com/gyee/alarm/service/auto/IAlarmTsService.java
  14. 5 2
      alarm-service/src/main/java/com/gyee/alarm/service/auto/impl/AlarmTsServiceImpl.java
  15. 0 107
      alarm-service/src/main/java/com/gyee/alarm/websocket/WebsocketSchedule.java
  16. 1 1
      alarm-service/src/main/resources/application-jn.yml
  17. 8 8
      alarm-service/src/test/java/com/gyee/AppTest.java
  18. 18 0
      alarm-stat/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java
  19. 1 1
      alarm-stat/src/main/java/com/gyee/alarm/model/auto/ProEconEarlyReportAlarm.java
  20. 494 443
      alarm-stat/src/main/java/com/gyee/alarm/service/EarlyReportService.java
  21. 4 0
      alarm-stat/src/main/java/com/gyee/alarm/service/auto/IProEconEarlyReportConclusioService.java
  22. 2 0
      alarm-stat/src/main/java/com/gyee/alarm/service/auto/IProEconEarlyReportService.java
  23. 18 0
      alarm-stat/src/main/java/com/gyee/alarm/service/auto/impl/ProEconEarlyReportConclusioServiceImpl.java
  24. 36 4
      alarm-stat/src/main/java/com/gyee/alarm/service/auto/impl/ProEconEarlyReportServiceImpl.java
  25. 2 0
      alarm-web/pom.xml
  26. 6 4
      alarm-web/src/main/java/com/gyee/alarm/controller/AlarmHistoryController.java
  27. 12 0
      alarm-web/src/main/java/com/gyee/alarm/controller/AlertRuleController.java
  28. 1 1
      alarm-web/src/main/java/com/gyee/alarm/controller/AuthController.java
  29. 20 0
      alarm-web/src/main/java/com/gyee/alarm/controller/ProEconAlarmSwitchController.java
  30. 60 1
      alarm-web/src/main/java/com/gyee/alarm/init/CacheContext.java
  31. 10 5
      alarm-web/src/main/java/com/gyee/alarm/mapper/auto/AlarmTsMapper.java
  32. 16 0
      alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProEconAlarmSwitchMapper.java
  33. 23 40
      alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java
  34. 13 1
      alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmInfo.java
  35. 47 0
      alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmSwitch.java
  36. 20 0
      alarm-web/src/main/java/com/gyee/alarm/model/vo/AlarmVo.java
  37. 93 0
      alarm-web/src/main/java/com/gyee/alarm/service/AlarmBtService.java
  38. 339 0
      alarm-web/src/main/java/com/gyee/alarm/service/AlarmCtService.java
  39. 136 17
      alarm-web/src/main/java/com/gyee/alarm/service/AlarmHistoryService.java
  40. 169 0
      alarm-web/src/main/java/com/gyee/alarm/service/AlarmInService.java
  41. 178 0
      alarm-web/src/main/java/com/gyee/alarm/service/AlarmWtService.java
  42. 16 0
      alarm-web/src/main/java/com/gyee/alarm/service/auto/IProEconAlarmSwitchService.java
  43. 4 1
      alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/AlarmTsServiceImpl.java
  44. 20 0
      alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/ProEconAlarmSwitchServiceImpl.java
  45. 2 1
      alarm-web/src/main/resources/application-jn.yml
  46. 740 26476
      log/ota.log
  47. BIN
      log/ota.log.2023-08-30.0.gz
  48. BIN
      log/ota.log.2023-09-05.8.gz
  49. BIN
      log/ota.log.2023-09-07.0.gz

+ 18 - 0
alarm-custom/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java

@@ -103,5 +103,23 @@ public class ProEconAlarmConfiguration extends Model {
      */
     private Boolean enable;
 
+    /**
+     * 故障名称
+     */
+    private String name;
+
+    /**
+     *故障码
+     */
+    private String nemCode;
 
+    /**
+     * 故障原因
+     */
+    private String faultCause;
+
+    /**
+     * 排查方法
+     */
+    private String resolvent;
 }

+ 18 - 0
alarm-scanner/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java

@@ -103,5 +103,23 @@ public class ProEconAlarmConfiguration extends Model {
      */
     private Boolean enable;
 
+    /**
+     * 故障名称
+     */
+    private String name;
+
+    /**
+     *故障码
+     */
+    private String nemCode;
 
+    /**
+     * 故障原因
+     */
+    private String faultCause;
+
+    /**
+     * 排查方法
+     */
+    private String resolvent;
 }

+ 1 - 1
alarm-scanner/src/main/resources/application-bt.yml

@@ -168,7 +168,7 @@ frequency:
   #切入切出
   cutinandout: 1
 urls:
-  alarm-service: http://127.0.0.1:6014
+  alarm-service: http://10.81.3.154:6014
 
 #分隔10个线程
 task-count: 10

+ 5 - 10
alarm-service/src/main/java/com/gyee/alarm/init/CacheContext.java

@@ -175,7 +175,7 @@ public class CacheContext implements CommandLineRunner {
 
     public static List<ProBasicStatusPoint> pointdis = new ArrayList<>();
 
-
+    public static List<ProEconAlarmConfiguration> inalarmls = new ArrayList<>();
     public static List<ProEconAlarmConfiguration> btalarmls = new ArrayList<>();
     public static List<ProEconAlarmConfiguration> wtalarmls = new ArrayList<>();
     public static List<ProEconAlarmConfiguration> customalarmls = new ArrayList<>();
@@ -643,6 +643,10 @@ public class CacheContext implements CommandLineRunner {
                     btalarmls.add(alarm);
 
                 }
+                else if (alarm.getAlarmType().equals(AlarmTypeValue.IN.getCode())) {
+                    inalarmls.add(alarm);
+
+                }
             }
         }
 
@@ -666,15 +670,6 @@ public class CacheContext implements CommandLineRunner {
         }
 
 
-        //设备报警初始化标签
-        alarmWtList=alarmWtService.initalAlarmVo();
-        if(!alarmWtList.isEmpty())
-        {
-            for(AlarmVo vo: alarmWtList)
-            {
-                alarmWtMap.put(vo.getTbName(),vo);
-            }
-        }
         //升压站报警初始化标签
         alarmBtList=alarmBtService.initalAlarmVo();
         if(!alarmBtList.isEmpty())

+ 5 - 4
alarm-service/src/main/java/com/gyee/alarm/mapper/auto/AlarmTsMapper.java

@@ -55,7 +55,7 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
             "components NCHAR(50),description NCHAR(500),deviceid NCHAR(50),devicename NCHAR(70)," +
             "devicetype NCHAR(50),enabled BOOL,lineid NCHAR(50),linename NCHAR(70),modelId NCHAR(50),projectid NCHAR(50)," +
             "projectname NCHAR(70),rank INT,resettable BOOL,stationid NCHAR(50),stationname NCHAR(70),subcomponents NCHAR(50)," +
-            "suffix NCHAR(50),tagid NCHAR(100),triggertype INT,uniformcode NCHAR(50));")
+            "suffix NCHAR(50),tagid NCHAR(100),triggertype INT,uniformcode NCHAR(50),name NCHAR(50),nemCode NCHAR(50),faultCause NCHAR(1000),resolvent NCHAR(1000));")
     int createAlarmSuperTable(@Param("superTableName") String superTableName);
 
 
@@ -64,7 +64,7 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
             "#{characteristic}, #{components},  #{description}, #{deviceid}, #{devicename}," +
             "#{devicetype}, #{enabled}, #{lineid}, #{linename}, #{modelId}, #{projectid}," +
             "#{projectname}, #{rank}, #{resettable}, #{stationid}, #{stationname}, #{subcomponents}," +
-            "#{suffix},  #{tagid}, #{triggertype}, #{uniformcode}" +
+            "#{suffix},  #{tagid}, #{triggertype}, #{uniformcode},#{name},  #{nemCode}, #{faultCause}, #{resolvent}" +
             ")")
     int createTable(@Param("tbName") String tbName, @Param("alarmid") String alarmid, @Param("alarmtype") String alarmtype,
                     @Param("characteristic") String characteristic, @Param("components") String components,
@@ -77,9 +77,10 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
                     @Param("resettable") Boolean resettable, @Param("stationid") String stationid,
                     @Param("stationname") String stationname, @Param("subcomponents") String subcomponents,
                     @Param("suffix") String suffix, @Param("tagid") String tagid,
-                    @Param("triggertype") Integer triggertype, @Param("uniformcode") String uniformcode, @Param("superTableName") String superTableName
+                    @Param("triggertype") Integer triggertype, @Param("uniformcode") String uniformcode, @Param("superTableName") String superTableName,
+                    @Param("name") String name, @Param("nemCode") String nemCode, @Param("faultCause") String faultCause, @Param("resolvent") String resolvent
 
-    );
+                    );
 
 
 

+ 18 - 0
alarm-service/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java

@@ -103,5 +103,23 @@ public class ProEconAlarmConfiguration extends Model {
      */
     private Boolean enable;
 
+    /**
+     * 故障名称
+     */
+    private String name;
+
+    /**
+     *故障码
+     */
+    private String nemCode;
 
+    /**
+     * 故障原因
+     */
+    private String faultCause;
+
+    /**
+     * 排查方法
+     */
+    private String resolvent;
 }

+ 16 - 0
alarm-service/src/main/java/com/gyee/alarm/model/vo/AlarmTag.java

@@ -23,6 +23,7 @@ public class AlarmTag {
      */
     private Double val;
 
+    private String code;
     /**
      * 报警类别,0触发,1触发,-1变化触发,大于等于3ai点触发
      */
@@ -62,6 +63,21 @@ public class AlarmTag {
     private String superTalbe;
 
     /**
+     * 故障原因
+     */
+    private String faultCause;
+    /**
+     * 类型
+     */
+    private String characteristic;
+    private String alarmId;
+    private String deviceId;
+    /**
+     * 解决方法
+     */
+    private String resolvent;
+
+    /**
      * 报警类型 /自定义报警 custom,风机 windturbine,场站 station,升压站 booststation
      */
     private String alarmType;

+ 20 - 0
alarm-service/src/main/java/com/gyee/alarm/model/vo/AlarmVo.java

@@ -43,4 +43,24 @@ public class AlarmVo {
 
     private Double timelong;
 
+    /**
+     * 故障名称
+     */
+    private String name;
+
+    /**
+     *故障码
+     */
+    private String nemCode;
+
+    /**
+     * 故障原因
+     */
+    private String faultCause;
+
+    /**
+     * 排查方法
+     */
+    private String resolvent;
+
 }

+ 60 - 14
alarm-service/src/main/java/com/gyee/alarm/service/AlarmBtService.java

@@ -63,7 +63,9 @@ public class AlarmBtService {
                         vo.getResettable(), vo.getStationid(),
                         vo.getStationname(), vo.getSubcomponents(),
                         vo.getSuffix(), vo.getTagid(),
-                        vo.getTriggertype(), vo.getUniformcode(), vo.getSuperTableName());
+                        vo.getTriggertype(), vo.getUniformcode(), vo.getSuperTableName(),
+                        vo.getName(),
+                        vo.getNemCode(),vo.getFaultCause(),vo.getResolvent());
 
 
                 AlarmTag po = new AlarmTag();
@@ -127,6 +129,11 @@ public class AlarmBtService {
                     vo.setSuperTableName(AlarmSuperTalbeType.BT.getCode());
                     vo.setVal(0);
                     vo.setOval(0);
+
+                    vo.setName(alarm.getName());
+                    vo.setNemCode(alarm.getNemCode());
+                    vo.setFaultCause(alarm.getFaultCause());
+                    vo.setResolvent(alarm.getResolvent());
                     alarmVoList.add(vo);
                 }
             }
@@ -210,6 +217,18 @@ public class AlarmBtService {
                         alarm.setDescription(vo.getDescription());
                         alarm.setAlarmType(vo.getAlarmtype());
                         alarm.setDeviceType(vo.getDevicetype());
+
+                        alarm.setCharacteristic(vo.getCharacteristic());
+                        alarm.setFaultCause(vo.getFaultCause());
+                        alarm.setResolvent(vo.getResolvent());
+                        alarm.setIsClose(false);
+                        alarm.setDeviceId(vo.getDeviceid());
+                        alarm.setAlarmId(vo.getAlarmid());
+
+                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                        {
+                            alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
+                        }
                         pushData(alarm);
                         valuels.add(po);
                     }
@@ -254,28 +273,43 @@ public class AlarmBtService {
             StringBuilder sb=new StringBuilder();
             Map<String,AlarmSimpleVo> map=new HashMap<>();
             for (AlarmTag alarm : ls) {
-                sb.append("'").append(alarm.getId()).append("',");
-
+                if (CacheContext.alarmBtMap.containsKey(alarm.getId())) {
+                    AlarmVo vo = CacheContext.alarmBtMap.get(alarm.getId());
+                    if(vo.getAlarmtype().equals(AlarmTypeValue.BT.getCode())  )
+                    {
+                        sb.append("'").append(alarm.getId().toLowerCase()).append("',");
+                    }
+                }
+            }
+            String ids=null;
+            if(sb.length()>0)
+            {
+                ids=sb.substring(0,sb.length()-1);
+            }
+            List<AlarmSimpleVo> alarmls=new ArrayList<>();
+            if( null !=ids)
+            {
+                alarmls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.BT.getCode(),ids);
             }
 
-            String ids=sb.substring(0,sb.length()-1);
-
-            List<AlarmSimpleVo> alarmls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.BT.getCode(),ids);
             if(!alarmls.isEmpty())
             {
                 for(AlarmSimpleVo vo:alarmls)
                 {
-
-                    map.put(vo.getTbName(),vo);
-
+                    map.put(vo.getTbName().toLowerCase(),vo);
                 }
             }
-
             for (AlarmTag alarm : ls) {
-                if(map.containsKey(alarm.getId()))
+                if(map.containsKey(alarm.getId().toLowerCase()))
                 {
-                    AlarmSimpleVo tag=map.get(alarm.getId());
-                    alarm.setTs(tag.getTs().getTime());
+                    AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
+                    if(StringUtils.notEmp(tag.getTs()))
+                    {
+                        alarm.setTs(tag.getTs().getTime());
+                    }else
+                    {
+                        alarm.setTs(new Date().getTime());
+                    }
 
                     Date begin = new Date(alarm.getEndts());
                     Date end = new Date(alarm.getTs());
@@ -347,7 +381,19 @@ public class AlarmBtService {
                         alarm.setDescription(vo.getDescription());
                         alarm.setAlarmType(vo.getAlarmtype());
                         alarm.setDeviceType(vo.getDevicetype());
-                        alarm.setIsClose(false);
+
+                        alarm.setCharacteristic(vo.getCharacteristic());
+                        alarm.setFaultCause(vo.getFaultCause());
+                        alarm.setResolvent(vo.getResolvent());
+
+                        alarm.setDeviceId(vo.getDeviceid());
+                        alarm.setAlarmId(vo.getAlarmid());
+                        alarm.setIsClose(true);
+
+                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                        {
+                            alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
+                        }
                         pushData(alarm);
                         valuels.add(po);
                     }

+ 146 - 12
alarm-service/src/main/java/com/gyee/alarm/service/AlarmCtService.java

@@ -65,7 +65,9 @@ public class AlarmCtService {
                         vo.getResettable(), vo.getStationid(),
                         vo.getStationname(), vo.getSubcomponents(),
                         vo.getSuffix(), vo.getTagid(),
-                        vo.getTriggertype(), vo.getUniformcode(), vo.getSuperTableName());
+                        vo.getTriggertype(), vo.getUniformcode(),
+                        vo.getSuperTableName(),vo.getName(),
+                        vo.getNemCode(),vo.getFaultCause(),vo.getResolvent());
 
                 AlarmTag po = new AlarmTag();
                 po.setId(vo.getTbName());
@@ -91,6 +93,8 @@ public class AlarmCtService {
 
         //风机自定义报警
         wtCustomAlarm(alarmVoList, alarmRulesMap);
+        //逆变器自定义报警
+        lnCustomAlarm(alarmVoList, alarmRulesMap);
 //        //场站自定义报警
 //        wpCustomAlarm(alarmVoList, alarmRulesMap);
         //升压站自定义报警
@@ -166,6 +170,89 @@ public class AlarmCtService {
                         vo.setUniformcode("");
                         vo.setSuperTableName(AlarmSuperTalbeType.CT.getCode());
                         vo.setVal(0);
+
+                        vo.setCharacteristic("自定义");
+                        vo.setFaultCause(alarm.getDescription());
+                        vo.setResolvent(alarm.getExpression());
+                        alarmVoList.add(vo);
+                    }
+                }
+            }
+        }
+    }
+
+    private void lnCustomAlarm(List<AlarmVo> alarmVoList, Map<String, List<ProEconAlarmRule>> alarmRulesMap) {
+
+        Map<String, List<ProEconAlarmRule>> armap = new HashMap<>();
+
+        if (alarmRulesMap.containsKey(DeviceTypeValue.IN.getCode())) {
+            List<ProEconAlarmRule> arls = alarmRulesMap.get(DeviceTypeValue.IN.getCode());
+            if (!arls.isEmpty()) {
+                for (ProEconAlarmRule ar : arls) {
+                    StringBuilder sb = new StringBuilder();
+                    sb.append(ar.getStationId() + ar.getModelId());
+                    if (armap.containsKey(String.valueOf(sb))) {
+                        List<ProEconAlarmRule> ls = armap.get(String.valueOf(sb));
+                        ls.add(ar);
+                    } else {
+                        List<ProEconAlarmRule> ls = new ArrayList<>();
+                        ls.add(ar);
+                        armap.put(String.valueOf(sb), ls);
+                    }
+                }
+            }
+        }
+        for (ProBasicEquipment wt : CacheContext.wtls) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(wt.getWindpowerstationId() + wt.getModelId());
+
+            if (armap.containsKey(String.valueOf(sb))) {
+                List<ProEconAlarmRule> alarmls = armap.get(String.valueOf(sb));
+
+                if (!alarmls.isEmpty()) {
+                    for (ProEconAlarmRule alarm : alarmls) {
+                        AlarmVo vo = new AlarmVo();
+                        StringBuilder tbName = new StringBuilder();
+                        tbName.append(wt.getId()).append("_").append(alarm.getId());
+                        vo.setTbName(String.valueOf(tbName));
+                        vo.setAlarmid(alarm.getId());
+                        vo.setTagid(alarm.getExpression());
+                        vo.setAlarmtype(AlarmTypeValue.CT.getCode());
+                        vo.setCharacteristic(alarm.getName());
+                        vo.setComponents(alarm.getRelatedParts());
+                        vo.setDescription(alarm.getDescription());
+                        vo.setDeviceid(wt.getId());
+                        vo.setDevicename(wt.getName());
+                        vo.setDevicetype(DeviceTypeValue.IN.getCode());
+                        vo.setEnabled(alarm.getEnable());
+                        vo.setLineid(wt.getLineId());
+                        if (CacheContext.lnmap.containsKey(wt.getLineId())) {
+                            ProBasicLine ln = CacheContext.lnmap.get(wt.getLineId());
+                            vo.setLinename(ln.getName());
+                        }
+                        vo.setModelId(wt.getModelId());
+                        vo.setProjectid(wt.getProjectId());
+                        if (CacheContext.pjmap.containsKey(wt.getProjectId())) {
+                            ProBasicProject pj = CacheContext.pjmap.get(wt.getProjectId());
+                            vo.setProjectname(pj.getName());
+                        }
+                        vo.setRank(alarm.getRank());
+                        vo.setResettable(false);
+                        vo.setStationid(wt.getWindpowerstationId());
+                        if (CacheContext.wpmap.containsKey(wt.getWindpowerstationId())) {
+                            ProBasicPowerstation wp = CacheContext.wpmap.get(wt.getWindpowerstationId());
+                            vo.setStationname(wp.getName());
+                        }
+                        vo.setSubcomponents("");
+                        vo.setSuffix("");
+                        vo.setTriggertype(1);
+                        vo.setUniformcode("");
+                        vo.setSuperTableName(AlarmSuperTalbeType.CT.getCode());
+                        vo.setVal(0);
+
+                        vo.setCharacteristic("自定义");
+                        vo.setFaultCause(alarm.getDescription());
+                        vo.setResolvent(alarm.getExpression());
                         alarmVoList.add(vo);
                     }
                 }
@@ -295,6 +382,10 @@ public class AlarmCtService {
                     vo.setSuperTableName(AlarmSuperTalbeType.CT.getCode());
                     vo.setVal(0);
                     vo.setOval(0);
+
+                    vo.setCharacteristic("自定义");
+                    vo.setFaultCause(alarm.getDescription());
+                    vo.setResolvent(alarm.getExpression());
                     alarmVoList.add(vo);
                 }
             }
@@ -377,6 +468,17 @@ public class AlarmCtService {
                         alarm.setDescription(vo.getDescription());
                         alarm.setAlarmType(vo.getAlarmtype());
                         alarm.setDeviceType(vo.getDevicetype());
+
+                        alarm.setCharacteristic(vo.getCharacteristic());
+                        alarm.setFaultCause(vo.getFaultCause());
+                        alarm.setResolvent(vo.getResolvent());
+                        alarm.setIsClose(false);
+                        alarm.setDeviceId(vo.getDeviceid());
+                        alarm.setAlarmId(vo.getAlarmid());
+                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                        {
+                            alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
+                        }
                         pushData(alarm);
                         valuels.add(po);
                     }
@@ -419,24 +521,45 @@ public class AlarmCtService {
                 StringBuilder sb = new StringBuilder();
                 Map<String, AlarmSimpleVo> map = new HashMap<>();
                 for (AlarmTag alarm : ls) {
-                    sb.append("'").append(alarm.getId()).append("',");
+                    if (CacheContext.alarmCtMap.containsKey(alarm.getId())) {
+                        AlarmVo vo = CacheContext.alarmCtMap.get(alarm.getId());
+                        if(vo.getAlarmtype().equals(AlarmTypeValue.CT.getCode())  )
+                        {
+                            sb.append("'").append(alarm.getId().toLowerCase()).append("',");
+                        }
+                    }
 
                 }
+                String ids=null;
+                if(sb.length()>0)
+                {
+                    ids=sb.substring(0,sb.length()-1);
+                }
+                List<AlarmSimpleVo> alarmls=new ArrayList<>();
+                if( null !=ids)
+                {
+                    alarmls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.CT.getCode(),ids);
+                }
 
-                String ids = sb.substring(0, sb.length() - 1);
-
-                List<AlarmSimpleVo> alarmls = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.CT.getCode(), ids);
-                if (!alarmls.isEmpty()) {
-                    for (AlarmSimpleVo vo : alarmls) {
-                        map.put(vo.getTbName(), vo);
+                if(!alarmls.isEmpty())
+                {
+                    for(AlarmSimpleVo vo:alarmls)
+                    {
+                        map.put(vo.getTbName().toLowerCase(),vo);
                     }
                 }
 
                 for (AlarmTag alarm : ls) {
-                    if(map.containsKey(alarm.getId()))
+                    if(map.containsKey(alarm.getId().toLowerCase()))
                     {
-                        AlarmSimpleVo tag=map.get(alarm.getId());
-                        alarm.setTs(tag.getTs().getTime());
+                        AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
+                        if(StringUtils.notEmp(tag.getTs()))
+                        {
+                            alarm.setTs(tag.getTs().getTime());
+                        }else
+                        {
+                            alarm.setTs(new Date().getTime());
+                        }
 
                         Date begin = new Date(alarm.getEndts());
                         Date end = new Date(alarm.getTs());
@@ -494,7 +617,18 @@ public class AlarmCtService {
                             alarm.setDescription(vo.getDescription());
                             alarm.setAlarmType(vo.getAlarmtype());
                             alarm.setDeviceType(vo.getDevicetype());
-                            alarm.setIsClose(false);
+
+                            alarm.setCharacteristic(vo.getCharacteristic());
+                            alarm.setFaultCause(vo.getFaultCause());
+                            alarm.setResolvent(vo.getResolvent());
+
+                            alarm.setDeviceId(vo.getDeviceid());
+                            alarm.setAlarmId(vo.getAlarmid());
+                            alarm.setIsClose(true);
+                            if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                            {
+                                alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
+                            }
                             pushData(alarm);
                             valuels.add(po);
                         }

+ 59 - 10
alarm-service/src/main/java/com/gyee/alarm/service/AlarmInService.java

@@ -68,7 +68,9 @@ public class AlarmInService {
                         vo.getResettable(), vo.getStationid(),
                         vo.getStationname(), vo.getSubcomponents(),
                         vo.getSuffix(), vo.getTagid(),
-                        vo.getTriggertype(), vo.getUniformcode(),vo.getSuperTableName());
+                        vo.getTriggertype(), vo.getUniformcode(),vo.getSuperTableName(),
+                        vo.getName(),
+                        vo.getNemCode(),vo.getFaultCause(),vo.getResolvent());
 
                 AlarmTag po=new AlarmTag();
                 po.setId(vo.getTbName());
@@ -155,6 +157,12 @@ public class AlarmInService {
                                     vo.setUniformcode(alarm.getUniformCode());
                                     vo.setSuperTableName(AlarmSuperTalbeType.WT.getCode());
                                     vo.setVal(0);
+
+                                    vo.setName(alarm.getName());
+                                    vo.setNemCode(alarm.getNemCode());
+                                    vo.setFaultCause(alarm.getFaultCause());
+                                    vo.setResolvent(alarm.getResolvent());
+
                                     alarmVoList.add(vo);
                                 }
 
@@ -294,6 +302,17 @@ public class AlarmInService {
                         alarm.setDescription(vo.getDescription());
                         alarm.setAlarmType(vo.getAlarmtype());
                         alarm.setDeviceType(vo.getDevicetype());
+
+                        alarm.setCharacteristic(vo.getCharacteristic());
+                        alarm.setFaultCause(vo.getFaultCause());
+                        alarm.setResolvent(vo.getResolvent());
+                        alarm.setIsClose(false);
+                        alarm.setDeviceId(vo.getDeviceid());
+                        alarm.setAlarmId(vo.getAlarmid());
+                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                        {
+                            alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
+                        }
                         pushData(alarm);
 
                         valuels.add(po);
@@ -334,26 +353,45 @@ public class AlarmInService {
             StringBuilder sb=new StringBuilder();
             Map<String, AlarmSimpleVo> map=new HashMap<>();
             for (AlarmTag alarm : ls) {
-                sb.append("'").append(alarm.getId()).append("',");
+                if (CacheContext.alarmInMap.containsKey(alarm.getId())) {
+                    AlarmVo vo = CacheContext.alarmInMap.get(alarm.getId());
+                    if(vo.getAlarmtype().equals(AlarmTypeValue.WT.getCode())  )
+                    {
+                        sb.append("'").append(alarm.getId().toLowerCase()).append("',");
+                    }
+                }
 
             }
+            String ids=null;
+            if(sb.length()>0)
+            {
+                ids=sb.substring(0,sb.length()-1);
+            }
+            List<AlarmSimpleVo> alarmls=new ArrayList<>();
+            if( null !=ids)
+            {
+                alarmls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(),ids);
+            }
 
-            String ids=sb.substring(0,sb.length()-1);
-
-            List<AlarmSimpleVo> alarmls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(),ids);
             if(!alarmls.isEmpty())
             {
                 for(AlarmSimpleVo vo:alarmls)
                 {
-                    map.put(vo.getTbName(),vo);
+                    map.put(vo.getTbName().toLowerCase(),vo);
                 }
             }
 
             for (AlarmTag alarm : ls) {
-                if(map.containsKey(alarm.getId()))
+                if(map.containsKey(alarm.getId().toLowerCase()))
                 {
-                    AlarmSimpleVo tag=map.get(alarm.getId());
-                    alarm.setTs(tag.getTs().getTime());
+                    AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
+                    if(StringUtils.notEmp(tag.getTs()))
+                    {
+                        alarm.setTs(tag.getTs().getTime());
+                    }else
+                    {
+                        alarm.setTs(new Date().getTime());
+                    }
 
                     Date begin = new Date(alarm.getEndts());
                     Date end = new Date(alarm.getTs());
@@ -410,7 +448,18 @@ public class AlarmInService {
                         alarm.setDescription(vo.getDescription());
                         alarm.setAlarmType(vo.getAlarmtype());
                         alarm.setDeviceType(vo.getDevicetype());
-                        alarm.setIsClose(false);
+
+                        alarm.setCharacteristic(vo.getCharacteristic());
+                        alarm.setFaultCause(vo.getFaultCause());
+                        alarm.setResolvent(vo.getResolvent());
+
+                        alarm.setDeviceId(vo.getDeviceid());
+                        alarm.setAlarmId(vo.getAlarmid());
+                        alarm.setIsClose(true);
+                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                        {
+                            alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
+                        }
                         pushData(alarm);
                         valuels.add(po);
                     }

+ 60 - 10
alarm-service/src/main/java/com/gyee/alarm/service/AlarmWtService.java

@@ -71,7 +71,9 @@ public class AlarmWtService {
                         vo.getResettable(), vo.getStationid(),
                         vo.getStationname(), vo.getSubcomponents(),
                         vo.getSuffix(), vo.getTagid(),
-                        vo.getTriggertype(), vo.getUniformcode(),vo.getSuperTableName());
+                        vo.getTriggertype(), vo.getUniformcode(),vo.getSuperTableName(),
+                        vo.getName(),
+                        vo.getNemCode(),vo.getFaultCause(),vo.getResolvent());
 
                 AlarmTag po=new AlarmTag();
                 po.setId(vo.getTbName());
@@ -166,6 +168,11 @@ public class AlarmWtService {
                                     vo.setUniformcode(alarm.getUniformCode());
                                     vo.setSuperTableName(AlarmSuperTalbeType.WT.getCode());
                                     vo.setVal(0);
+
+                                    vo.setName(alarm.getName());
+                                    vo.setNemCode(alarm.getNemCode());
+                                    vo.setFaultCause(alarm.getFaultCause());
+                                    vo.setResolvent(alarm.getResolvent());
                                     alarmVoList.add(vo);
                                 }
 
@@ -309,7 +316,18 @@ public class AlarmWtService {
                         alarm.setDescription(vo.getDescription());
                         alarm.setAlarmType(vo.getAlarmtype());
                         alarm.setDeviceType(vo.getDevicetype());
+
+                        alarm.setCharacteristic(vo.getCharacteristic());
+                        alarm.setFaultCause(vo.getFaultCause());
+                        alarm.setResolvent(vo.getResolvent());
                         alarm.setIsClose(false);
+                        alarm.setDeviceId(vo.getDeviceid());
+                        alarm.setAlarmId(vo.getAlarmid());
+
+                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                        {
+                            alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
+                        }
                         pushData(alarm);
 
                         valuels.add(po);
@@ -350,26 +368,46 @@ public class AlarmWtService {
             StringBuilder sb=new StringBuilder();
             Map<String, AlarmSimpleVo> map=new HashMap<>();
             for (AlarmTag alarm : ls) {
-                sb.append("'").append(alarm.getId().toLowerCase()).append("',");
+                if (CacheContext.alarmWtMap.containsKey(alarm.getId())) {
+                    AlarmVo vo = CacheContext.alarmWtMap.get(alarm.getId());
+                    if(vo.getAlarmtype().equals(AlarmTypeValue.WT.getCode())  )
+                    {
+                        sb.append("'").append(alarm.getId().toLowerCase()).append("',");
+                    }
+                }
 
             }
+            String ids=null;
+            if(sb.length()>0)
+            {
+                ids=sb.substring(0,sb.length()-1);
+            }
+            List<AlarmSimpleVo> alarmls=new ArrayList<>();
+            if( null !=ids)
+            {
+                alarmls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(),ids);
+            }
 
-            String ids=sb.substring(0,sb.length()-1);
-
-            List<AlarmSimpleVo> alarmls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(),ids);
             if(!alarmls.isEmpty())
             {
                 for(AlarmSimpleVo vo:alarmls)
                 {
-                    map.put(vo.getTbName().toUpperCase(),vo);
+                    map.put(vo.getTbName().toLowerCase(),vo);
                 }
             }
 
             for (AlarmTag alarm : ls) {
-                if(map.containsKey(alarm.getId()))
+                if(map.containsKey(alarm.getId().toLowerCase()))
                 {
-                    AlarmSimpleVo tag=map.get(alarm.getId());
-                    alarm.setTs(tag.getTs().getTime());
+                    AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
+                    if(StringUtils.notEmp(tag.getTs()))
+                    {
+                        alarm.setTs(tag.getTs().getTime());
+                    }else
+                    {
+                        alarm.setTs(new Date().getTime());
+                    }
+
 
                     Date begin = new Date(alarm.getEndts());
                     Date end = new Date(alarm.getTs());
@@ -426,7 +464,19 @@ public class AlarmWtService {
                         alarm.setDescription(vo.getDescription());
                         alarm.setAlarmType(vo.getAlarmtype());
                         alarm.setDeviceType(vo.getDevicetype());
-                        alarm.setIsClose(false);
+
+                        alarm.setCharacteristic(vo.getCharacteristic());
+                        alarm.setFaultCause(vo.getFaultCause());
+                        alarm.setResolvent(vo.getResolvent());
+
+                        alarm.setDeviceId(vo.getDeviceid());
+                        alarm.setAlarmId(vo.getAlarmid());
+                        alarm.setIsClose(true);
+                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                        {
+                            alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
+                        }
+
                         pushData(alarm);
 
                         valuels.add(po);

+ 2 - 1
alarm-service/src/main/java/com/gyee/alarm/service/auto/IAlarmTsService.java

@@ -33,7 +33,8 @@ public interface IAlarmTsService extends IService<AlarmTs> {
                            Boolean resettable, String stationid,
                            String stationname, String subcomponents,
                            String suffix, String tagid,
-                           Integer triggertype, String uniformcode,String superTableName
+                           Integer triggertype, String uniformcode,String superTableName,
+                           String name,String nemCode, String faultCause, String resolvent
 
     );
 

+ 5 - 2
alarm-service/src/main/java/com/gyee/alarm/service/auto/impl/AlarmTsServiceImpl.java

@@ -6,6 +6,7 @@ import com.gyee.alarm.model.auto.AlarmTs;
 import com.gyee.alarm.model.vo.*;
 import com.gyee.alarm.service.auto.IAlarmTsService;
 import com.gyee.alarm.util.StringUtils;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -45,7 +46,9 @@ public class AlarmTsServiceImpl extends ServiceImpl<AlarmTsMapper, AlarmTs> impl
                            Boolean resettable, String stationid,
                            String stationname, String subcomponents,
                            String suffix, String tagid,
-                           Integer triggertype, String uniformcode,String superTableName
+                           Integer triggertype, String uniformcode, String superTableName,
+                          String name,String nemCode, String faultCause, String resolvent
+
 
     ) {
         return alarmTsMapper.createTable(tbName, alarmid, alarmtype,
@@ -59,7 +62,7 @@ public class AlarmTsServiceImpl extends ServiceImpl<AlarmTsMapper, AlarmTs> impl
                 resettable, stationid,
                 stationname, subcomponents,
                 suffix, tagid,
-                triggertype, uniformcode,superTableName);
+                triggertype, uniformcode,superTableName,   name, nemCode,  faultCause,  resolvent);
     }
 
 

+ 0 - 107
alarm-service/src/main/java/com/gyee/alarm/websocket/WebsocketSchedule.java

@@ -1,107 +0,0 @@
-package com.gyee.alarm.websocket;
-
-
-import com.gyee.alarm.init.CacheContext;
-import com.gyee.alarm.model.auto.ProEconAlarmInfo;
-import com.gyee.alarm.model.vo.AlarmTag;
-import com.gyee.alarm.model.vo.AlarmTypeValue;
-import com.gyee.alarm.model.vo.AlarmVo;
-import com.gyee.alarm.model.vo.DeviceTypeValue;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
-import javax.websocket.EncodeException;
-import java.io.IOException;
-import java.util.Date;
-import java.util.concurrent.ConcurrentHashMap;
-
-
-/**
- * 功能描述:
- *
- * @description: ws定时推送
- * @Date: 2022/11/30
- */
-@Configuration
-@EnableScheduling
-public class WebsocketSchedule {
-
-    @Autowired
-    private WebSocket webSocket;
-
-    // 第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次 fixedRateString 与 fixedRate 意思相同,只是使用字符串的形式。唯一不同的是支持占位符
-    @Scheduled(initialDelay=1000, fixedRateString = "60")
-    public void pushData() throws EncodeException, IOException, InterruptedException {
-        ConcurrentHashMap<String, WebSocket> webSocketPushMap = WebSocket.webSocketMap;
-        ConcurrentHashMap<String, PushParams> webSocketPushParamsMap = WebSocket.webSocketParamsMap;
-        if(!webSocketPushMap.isEmpty()) {
-            for (String key : webSocketPushMap.keySet()) {
-                // 根据ws连接用户ID获取推送参数
-                PushParams pushParams = webSocketPushParamsMap.get(key);
-
-                AlarmTag alarm = new AlarmTag();
-                alarm.setId("主键标识1");
-                alarm.setTs(new Date().getTime());
-                alarm.setDescription("test1");
-                alarm.setAlarmType(AlarmTypeValue.WT.getCode());
-                alarm.setDeviceType(DeviceTypeValue.WT.getCode());
-                alarm.setRank(3);
-                alarm.setIsClose(false);
-                webSocket.sendMessageByUserId(key, alarm);
-                alarm = new AlarmTag();
-                alarm.setId("主键标识2");
-                alarm.setTs(new Date().getTime());
-                alarm.setDescription("test2");
-                alarm.setAlarmType(AlarmTypeValue.IN.getCode());
-                alarm.setDeviceType(DeviceTypeValue.IN.getCode());
-                alarm.setIsClose(false);
-                alarm.setRank(3);
-                webSocket.sendMessageByUserId(key, alarm);
-
-                alarm = new AlarmTag();
-                alarm.setId("主键标识3");
-                alarm.setTs(new Date().getTime());
-                alarm.setDescription("test3");
-                alarm.setRank(3);
-                alarm.setAlarmType(AlarmTypeValue.BT.getCode());
-                alarm.setDeviceType(DeviceTypeValue.BT.getCode());
-                alarm.setIsClose(false);
-                webSocket.sendMessageByUserId(key, alarm);
-
-                alarm = new AlarmTag();
-                alarm.setId("主键标识4");
-                alarm.setTs(new Date().getTime());
-                alarm.setDescription("test4");
-                alarm.setAlarmType(AlarmTypeValue.BT.getCode());
-                alarm.setDeviceType(DeviceTypeValue.BT.getCode());
-                alarm.setIsClose(true);
-                alarm.setRank(3);
-                webSocket.sendMessageByUserId(key, alarm);
-
-                alarm = new AlarmTag();
-                alarm.setId("主键标识5");
-                alarm.setTs(new Date().getTime());
-                alarm.setDescription("test5");
-                alarm.setAlarmType(AlarmTypeValue.CT.getCode());
-                alarm.setDeviceType(DeviceTypeValue.IN.getCode());
-                alarm.setIsClose(true);
-                alarm.setRank(3);
-                webSocket.sendMessageByUserId(key, alarm);
-
-                alarm = new AlarmTag();
-                alarm.setId("主键标识6");
-                alarm.setTs(new Date().getTime());
-                alarm.setDescription("test6");
-                alarm.setAlarmType(AlarmTypeValue.CT.getCode());
-                alarm.setDeviceType(DeviceTypeValue.WT.getCode());
-                alarm.setIsClose(true);
-                alarm.setRank(3);
-                webSocket.sendMessageByUserId(key, alarm);
-
-                Thread.sleep(30000);
-            }
-
-        }
-    }
-}

+ 1 - 1
alarm-service/src/main/resources/application-jn.yml

@@ -140,7 +140,7 @@ db:
 
 #参与计算的场站
 #runWindpowerstation: SXJ_KGDL_GJY_FDC_STA
-runWindpowerstation: SXJ_KGDL_DJY_FDC_STA,SXJ_KGDL_NJL_FDC_STA,SXJ_KGDL_YF_FDC_STA,SXJ_KGDL_YLZ_FDC_STA,SXJ_KGDL_XWT_FDC_STA,SXJ_KGDL_PTZ_FDC_STA,SXJ_KGDL_GJY_FDC_STA,SXJ_KGDL_BHB_FDC_STA,SXJ_KGDL_HSM_FDC_STA,SXJ_KGDL_YTY_FDC_STA,SXJ_KGDL_BHB3_FDC_STA,SXJ_KGDL_SY_GDC_STA,SXJ_KGDL_PDL_FDC_STA,SXJ_KGDL_ZK_FDC_STA,SXJ_KGDL_JR_GDC_STA,SXJ_KGDL_FS_GDC_STA,SXJ_KGDL_HR_GDC_STA,SXJ_KGDL_YY_GDC_STA,SXJ_KGDL_PL_GDC_STA,SXJ_KGDL_TL_GDC_STA
+runWindpowerstation: SXJ_KGDL_DJY_FDC_STA,SXJ_KGDL_NJL_FDC_STA,SXJ_KGDL_YF_FDC_STA,SXJ_KGDL_YLZ_FDC_STA,SXJ_KGDL_XWT_FDC_STA,SXJ_KGDL_PTZ_FDC_STA,SXJ_KGDL_GJY_FDC_STA,SXJ_KGDL_BHB_FDC_STA,SXJ_KGDL_HSM_FDC_STA,SXJ_KGDL_YTY_FDC_STA,SXJ_KGDL_BHB3_FDC_STA,SXJ_KGDL_SY_GDC_STA,SXJ_KGDL_PDL_FDC_STA,SXJ_KGDL_ZK_FDC_STA,SXJ_KGDL_JR_GDC_STA,SXJ_KGDL_FS_GDC_STA,SXJ_KGDL_HR_GDC_STA,SXJ_KGDL_YY_GDC_STA,SXJ_KGDL_PL_GDC_STA,SXJ_KGDL_YG_GDC_STA,SXJ_KGDL_YX_GDC_STA,SXJ_KGDL_TZ_GDC_STA,SXJ_KGDL_TL_GDC_STA
 #计算状态用ai或者di
 clauStatus:
   ai: GJY03_GC,YLZ01_GC,PTZ02_GC   #配置期次

+ 8 - 8
alarm-service/src/test/java/com/gyee/AppTest.java

@@ -20,14 +20,14 @@ public class AppTest
 
 
 
-//        alarmWtService.createSuperTable();
-//        alarmWtService.initalWtAlarm();
-//
-//        alarmBtService.createSuperTable();
-//        alarmBtService.initalBtAlarm();
-//
-        alarmCtService.createSuperTable();
-        alarmCtService.initalCtAlarm();
+        alarmWtService.createSuperTable();
+        alarmWtService.initalWtAlarm();
+
+        alarmBtService.createSuperTable();
+        alarmBtService.initalBtAlarm();
+
+//        alarmCtService.createSuperTable();
+//        alarmCtService.initalCtAlarm();
 
         System.out.println("完成!");
 

+ 18 - 0
alarm-stat/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java

@@ -103,5 +103,23 @@ public class ProEconAlarmConfiguration extends Model {
      */
     private Boolean enable;
 
+    /**
+     * 故障名称
+     */
+    private String name;
+
+    /**
+     *故障码
+     */
+    private String nemCode;
 
+    /**
+     * 故障原因
+     */
+    private String faultCause;
+
+    /**
+     * 排查方法
+     */
+    private String resolvent;
 }

+ 1 - 1
alarm-stat/src/main/java/com/gyee/alarm/model/auto/ProEconEarlyReportAlarm.java

@@ -52,7 +52,7 @@ public class ProEconEarlyReportAlarm extends Model {
     /**
      * 报警数量
      */
-    private Integer count;
+    private Long count;
 
     /**
      * 报警持续时长

+ 494 - 443
alarm-stat/src/main/java/com/gyee/alarm/service/EarlyReportService.java

@@ -1,445 +1,496 @@
-//package com.gyee.alarm.service;
-//
-//
-//import com.gyee.alarm.init.CacheContext;
-//import com.gyee.alarm.model.auto.*;
-//import com.gyee.alarm.model.vo.AlarmCustomType;
-//import com.gyee.alarm.model.vo.AlarmType;
-//import com.gyee.alarm.model.vo.AlarmTypeValue;
-//import com.gyee.alarm.service.auto.*;
-//import com.gyee.alarm.util.SnowflakeGenerator;
-//import com.gyee.alarm.util.DateUtils;
-//
-//import org.apache.commons.collections.CollectionUtils;
-//import org.springframework.beans.factory.annotation.Value;
-//import org.springframework.stereotype.Service;
-//
-//import javax.annotation.Resource;
-//import java.util.*;
-//import java.util.concurrent.Callable;
-//import java.util.stream.Collectors;
-//
-//@Service
-//public class EarlyReportService  {
-//
-//
-//
-//    @Resource
-//    private  IProEconAlarmInfoService proEconAlarmInfoService;
-//    @Resource
-//    private  IProEconEarlyReportService proEconEarlyReportService;
-//    @Resource
-//    private IProEconEarlyReportWtService proEconEarlyReportWtService;
-//    @Resource
-//    private IProEconEarlyReportAlarmService proEconEarlyReportAlarmService;
-//    @Resource
-//    private IAlarmTsService alarmTsService;
-//
+package com.gyee.alarm.service;
+
+
+import com.gyee.alarm.init.CacheContext;
+import com.gyee.alarm.model.auto.*;
+import com.gyee.alarm.model.vo.AlarmCustomType;
+import com.gyee.alarm.model.vo.AlarmType;
+import com.gyee.alarm.model.vo.AlarmTypeValue;
+import com.gyee.alarm.service.auto.*;
+import com.gyee.alarm.util.SnowflakeGenerator;
+import com.gyee.alarm.util.DateUtils;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.concurrent.Callable;
+import java.util.stream.Collectors;
+
+@Service
+public class EarlyReportService  {
+
+
+
+    @Resource
+    private  IProEconAlarmInfoService proEconAlarmInfoService;
+    @Resource
+    private  IProEconEarlyReportService proEconEarlyReportService;
+    @Resource
+    private IProEconEarlyReportConclusioService proEconEarlyReportConclusioService;
+    @Resource
+    private IAlarmTsService alarmTsService;
+
+    //时间间隔(天),即从当日0点,向前间隔天数,为计算区间
+    @Value("${interval_day}")
+    private  int interval_day;
+    @Value("${limit}")
+    private  int limit;
+
+//
+//    //部件编码  CLX,FDJ等
+//    private String windturbineParts;
+//    //分析名称(部件名称)
+//    private String analysisName;
 //    //时间间隔(天),即从当日0点,向前间隔天数,为计算区间
-//    @Value("${interval_day}")
-//    private  int interval_day;
-//    @Value("${limit}")
-//    private  int limit;
-//
-////
-////    //部件编码  CLX,FDJ等
-////    private String windturbineParts;
-////    //分析名称(部件名称)
-////    private String analysisName;
-////    //时间间隔(天),即从当日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;
-//    public boolean createEarlyReport() {
-//
-//        boolean result=false;
-//        //报告时间
-//        Date reportDate = DateUtils.truncate(new Date());
-//        //获取计算开始时间
-//        Date statStartTime = DateUtils.addDays(DateUtils.today(), -interval_day);
-//        //获取计算结束时间
-//        Date statEndTime = DateUtils.today();
-//        Map<String,List<ProEconAlarmType>> alarmTypeMap=CacheContext.alarmTypeMap;
-//
-//        List<ProEconAlarmType> fjtypels=CacheContext.alarmTypeMap.get(AlarmType.FJBJ.getCode());
-//
-//        List<ProEconAlarmType> gftypels=CacheContext.alarmTypeMap.get(AlarmType.GFBJ.getCode());
-//       for(ProBasicEquipment wt: CacheContext.wtls)
-//       {
-//
-//           ProEconEarlyReport report = new ProEconEarlyReport();
-//           report.setId(String.valueOf(SnowflakeGenerator.generateId()));
-//           report.setReportDate(new Date());
-//           report.setStationId(wt.getWindpowerstationId());
-//          if(CacheContext.wpmap.containsKey(wt.getWindpowerstationId()))
-//          {
-//              report.setStationName(CacheContext.wpmap.get(wt.getWindpowerstationId()).getName());
-//          }
-//          if(wt.getWindpowerstationId().contains("FDC"))
-//          {
-//              for(ProEconAlarmType fjtype:fjtypels)
-//              {
-//                  report.setRelatedParts(fjtype.getNemCode());
-//                  StringBuilder sb=new StringBuilder();
-//                  sb.append(wt.getNemCode()).append(wt.getName()).append(fjtype.getName()).append("诊断报告");
-//                  report.setReportName(String.valueOf(sb));
-//                  report.setStatStartDate(statStartTime);
-//                  report.setStatEndDate(statEndTime);
-//                  report.setProEconEarlyReportWtList(new ArrayList<>());
-//                  report.setReportDate(reportDate);
-//                  report.setStatStartDate(new Date());
-//              }
-//          }else
-//          {
-//              for(ProEconAlarmType gftype:gftypels)
-//              {
-//                  report.setRelatedParts(gftype.getNemCode());
-//                  StringBuilder sb=new StringBuilder();
-//                  sb.append(wt.getNemCode()).append(wt.getName()).append(gftype.getName()).append("诊断报告");
-//                  report.setReportName(String.valueOf(sb));
-//                  report.setStatStartDate(statStartTime);
-//                  report.setStatEndDate(statEndTime);
-//                  report.setProEconEarlyReportWtList(new ArrayList<>());
-//                  report.setReportDate(reportDate);
-//                  report.setStatStartDate(new Date());
-//              }
-//          }
-//
-//
-//           try {
-//               //获取本次报告最差的风机信息集合
-//               List<ProEconEarlyReportWt> nowWindturbineInfoList = getNowWindturbineInfo(wt,wt.getModelId(), report.getId(),report.getRelatedParts(), statStartTime, statEndTime, limit);
-//
-//               report.getProEconEarlyReportWtList().addAll(nowWindturbineInfoList);
-//               // 获取上次报告
-//               List<ProEconEarlyReport> earlyReport = proEconEarlyReportService.findEarlyReportByDate(wt.getId(), DateUtils.addDays(statEndTime, -60), statEndTime);
-//               earlyReport=earlyReport.stream().filter(s->s.getRelatedParts().equals(report.getRelatedParts())).collect(Collectors.toList());
-//               List<ProEconEarlyReport> collect = earlyReport.stream().sorted(Comparator.comparing(ProEconEarlyReport::getId, Comparator.reverseOrder())).collect(Collectors.toList());
-//
-//               if (collect.size() > 0) {
-//                   //已经进行了排序,因此获取第一个,即为最近一次报告
-//                   List<ProEconEarlyReportWt> reportWindturbineInfoList = collect.get(0).getProEconEarlyReportWtList().stream().filter(s -> s.isCompared() == false && !s.getWindturbineId().equals("全场平均")).collect(Collectors.toList());
-//                   List<ProEconEarlyReportWt> compareWindturbineInfoList = getCompareWindturbineInfo(stationId,reportWindturbineInfoList, model, report.getId(), statStartTime, statEndTime);
-//                   report.getProEconEarlyReportWtList().addAll(compareWindturbineInfoList);
-//               }
-//
-//               //执行写入操作
-//               result = proEconEarlyReportService.save(report);
-//
-//           } catch (RuntimeException ex) {
-//
-//           } finally {
-//
-//           }
-//       }
-//        return result;
-//    }
-//
-//    /**
-//     * @param model         风机型号
-//     * @param reportId      报告id
-//     * @param statStartTime 统计起始时间
-//     * @param statEndTime   统计结束时间
-//     * @param limit         结果限制数量
-//     * @return com.gyee.wisdom.alarm.schedule.entity.ProEconEarlyReportWt
-//     **/
-//    private List<ProEconEarlyReportWt> getNowWindturbineInfo(ProBasicEquipment wt,String model, String reportId,String relatedParts, Date statStartTime, Date statEndTime, int limit) {
-//
-//        List<ProEconEarlyReportWt> resultList = new ArrayList<>();
-//
-//        List<ProEconAlarmRule> alertRule2List = new ArrayList<>();
-//        List<String> components= new ArrayList<>();
-//        components.add(relatedParts);
-//        if(wt.getWindpowerstationId().contains("FDC"))
-//        {
-//            List<ProEconAlarmRule> rulels=CacheContext.alarmRulesMap.get(AlarmCustomType.WT.getCode());
-//
-//            if(!rulels.isEmpty())
-//            {
-//                for(ProEconAlarmRule rule:rulels)
-//                {
-//                    if(rule.getRelatedParts().equals(relatedParts) && rule.getStationId().equals(wt.getWindpowerstationId())  && rule.getModelId().equals(model))
-//                    {
-//                        alertRule2List.add(rule);
-//                    }
-//                }
-//            }
-//
-//        }else
-//        {
-//            List<ProEconAlarmRule> rulels=CacheContext.alarmRulesMap.get(AlarmCustomType.IN.getCode());
-//
-//            if(!rulels.isEmpty())
-//            {
-//                for(ProEconAlarmRule rule:rulels)
-//                {
-//                    if(rule.getRelatedParts().equals(relatedParts) && rule.getStationId().equals(wt.getWindpowerstationId())  && rule.getModelId().equals(model))
-//                    {
-//                        alertRule2List.add(rule);
-//                    }
-//                }
-//            }
-//        }
-//
-//
-//        List<ProEconAlarmInfo> customAlarmSnapList = proEconAlarmInfoService. queryAlarmInfo(wt.getId(), AlarmTypeValue.CT.getCode());
-//        List<String> alarmidls=new ArrayList<>();
-//        if(!customAlarmSnapList.isEmpty())
-//        {
-//            for(ProEconAlarmInfo alarmInfo:customAlarmSnapList)
-//            {
-//                alarmidls.add(alarmInfo.getAlarmId());
-//            }
-//        }
-//        List<ProBasicFeatureStat> customAlarmCountList = alarmTsService.findCtFeatureStatCustom( statStartTime.getTime(), statEndTime.getTime(),wt.getWindpowerstationId(), wt.getModelId(), components,alarmidls);
-//
-//        Map<String, List<ProBasicFeatureStat>> alarmCountMapByAlertValue = customAlarmCountList.stream().collect(Collectors.groupingBy(ProBasicFeatureStat::getAlarmid));
-//
-//        ProEconEarlyReportWt avgWindturbineReport = new ProEconEarlyReportWt();
-//        avgWindturbineReport.setId(String.valueOf(SnowflakeGenerator.generateId()));
-//        avgWindturbineReport.setWindturbineId("全场平均");
-//        avgWindturbineReport.setWindturbineCode("");
-//        avgWindturbineReport.setModelId(model);
-//        avgWindturbineReport.setCompared(false);
-//        avgWindturbineReport.setAlarmInfoList(new ArrayList<>());
-//        avgWindturbineReport.setReportId(reportId);
-//
-//        for (Map.Entry<String, List<ProBasicFeatureStat>> entry :
-//                alarmCountMapByAlertValue.entrySet()) {
-//            ProBasicFeatureStat avgAlarmCount = proEconEarlyReportService.getAvgAlarmCount(entry.getValue());
-//            Optional<ProEconAlarmRule> first = alertRule2List.stream().filter(s -> String.valueOf(s.getId()).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);
+//    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;
+    public boolean createEarlyReport() {
+
+        boolean result=false;
+        //报告时间
+        Date reportDate = DateUtils.truncate(new Date());
+        //获取计算开始时间
+        Date statStartTime = DateUtils.addDays(DateUtils.today(), - interval_day);
+        //获取计算结束时间
+        Date statEndTime = DateUtils.today();
+        Map<String,List<ProEconAlarmType>> alarmTypeMap=CacheContext.alarmTypeMap;
+
+        List<ProEconAlarmType> fjtypels=CacheContext.alarmTypeMap.get(AlarmType.FJBJ.getCode());
+
+        List<ProEconAlarmType> gftypels=CacheContext.alarmTypeMap.get(AlarmType.GFBJ.getCode());
+       for(ProBasicEquipment wt: CacheContext.wtls)
+       {
+
+           ProEconEarlyReport report = new ProEconEarlyReport();
+           report.setId(String.valueOf(SnowflakeGenerator.generateId()));
+           report.setReportDate(new Date());
+           report.setStationId(wt.getWindpowerstationId());
+          if(CacheContext.wpmap.containsKey(wt.getWindpowerstationId()))
+          {
+              report.setStationName(CacheContext.wpmap.get(wt.getWindpowerstationId()).getName());
+          }
+          if(wt.getWindpowerstationId().contains("FDC"))
+          {
+              for(ProEconAlarmType fjtype:fjtypels)
+              {
+                  report.setRelatedParts(fjtype.getNemCode());
+                  StringBuilder sb=new StringBuilder();
+                  sb.append(wt.getNemCode()).append(wt.getName()).append(fjtype.getName()).append("诊断报告");
+                  report.setReportName(String.valueOf(sb));
+                  report.setStatStartDate(statStartTime);
+                  report.setStatEndDate(statEndTime);
+                  report.setProEconEarlyReportWtList(new ArrayList<>());
+                  report.setReportDate(reportDate);
+                  report.setStatStartDate(new Date());
+              }
+          }else
+          {
+              for(ProEconAlarmType gftype:gftypels)
+              {
+                  report.setRelatedParts(gftype.getNemCode());
+                  StringBuilder sb=new StringBuilder();
+                  sb.append(wt.getNemCode()).append(wt.getName()).append(gftype.getName()).append("诊断报告");
+                  report.setReportName(String.valueOf(sb));
+                  report.setStatStartDate(statStartTime);
+                  report.setStatEndDate(statEndTime);
+                  report.setProEconEarlyReportWtList(new ArrayList<>());
+                  report.setReportDate(reportDate);
+                  report.setStatStartDate(new Date());
+              }
+          }
+
+
+           try {
+               //获取本次报告最差的风机信息集合
+               List<ProEconEarlyReportWt> nowWindturbineInfoList = getNowWindturbineInfo(wt,wt.getModelId(), report.getId(),report.getRelatedParts(), statStartTime, statEndTime, limit);
+
+               report.getProEconEarlyReportWtList().addAll(nowWindturbineInfoList);
+               // 获取上次报告
+               List<ProEconEarlyReport> earlyReport = proEconEarlyReportService.findEarlyReportByDate(wt.getId(), DateUtils.addDays(statEndTime, -60), statEndTime);
+               earlyReport=earlyReport.stream().filter(s->s.getRelatedParts().equals(report.getRelatedParts())).collect(Collectors.toList());
+               List<ProEconEarlyReport> collect = earlyReport.stream().sorted(Comparator.comparing(ProEconEarlyReport::getId, Comparator.reverseOrder())).collect(Collectors.toList());
+
+               if (collect.size() > 0) {
+                   //已经进行了排序,因此获取第一个,即为最近一次报告
+                   List<ProEconEarlyReportWt> reportWindturbineInfoList = collect.get(0).getProEconEarlyReportWtList().stream().filter(s -> s.getCompared() == false && !s.getWindturbineId().equals("全场平均")).collect(Collectors.toList());
+                   List<ProEconEarlyReportWt> compareWindturbineInfoList = getCompareWindturbineInfo(wt,reportWindturbineInfoList, wt.getModelId(), report.getId(),report.getRelatedParts(), statStartTime, statEndTime);
+                   report.getProEconEarlyReportWtList().addAll(compareWindturbineInfoList);
+               }
+
+               //执行写入操作
+               result = proEconEarlyReportService.save(report);
+
+           } catch (RuntimeException ex) {
+
+           } finally {
+
+           }
+       }
+        return result;
+    }
+
+    /**
+     * @param model         风机型号
+     * @param reportId      报告id
+     * @param statStartTime 统计起始时间
+     * @param statEndTime   统计结束时间
+     * @param limit         结果限制数量
+     * @return com.gyee.wisdom.alarm.schedule.entity.ProEconEarlyReportWt
+     **/
+    private List<ProEconEarlyReportWt> getNowWindturbineInfo(ProBasicEquipment wt,String model, String reportId,String relatedParts, Date statStartTime, Date statEndTime, int limit) {
+
+        List<ProEconEarlyReportWt> resultList = new ArrayList<>();
+
+        List<ProEconAlarmRule> alertRule2List = new ArrayList<>();
+        List<String> components= new ArrayList<>();
+        components.add(relatedParts);
+        if(wt.getWindpowerstationId().contains("FDC"))
+        {
+            List<ProEconAlarmRule> rulels=CacheContext.alarmRulesMap.get(AlarmCustomType.WT.getCode());
+
+            if(!rulels.isEmpty())
+            {
+                for(ProEconAlarmRule rule:rulels)
+                {
+                    if(rule.getRelatedParts().equals(relatedParts) && rule.getStationId().equals(wt.getWindpowerstationId())  && rule.getModelId().equals(model))
+                    {
+                        alertRule2List.add(rule);
+                    }
+                }
+            }
+
+        }else
+        {
+            List<ProEconAlarmRule> rulels=CacheContext.alarmRulesMap.get(AlarmCustomType.IN.getCode());
+
+            if(!rulels.isEmpty())
+            {
+                for(ProEconAlarmRule rule:rulels)
+                {
+                    if(rule.getRelatedParts().equals(relatedParts) && rule.getStationId().equals(wt.getWindpowerstationId())  && rule.getModelId().equals(model))
+                    {
+                        alertRule2List.add(rule);
+                    }
+                }
+            }
+        }
+
+
+        List<ProEconAlarmInfo> customAlarmSnapList = proEconAlarmInfoService. queryAlarmInfo(wt.getId(), AlarmTypeValue.CT.getCode());
+        List<String> alarmidls=new ArrayList<>();
+        if(!customAlarmSnapList.isEmpty())
+        {
+            for(ProEconAlarmInfo alarmInfo:customAlarmSnapList)
+            {
+                alarmidls.add(alarmInfo.getAlarmId());
+            }
+        }
+        List<ProBasicFeatureStat> customAlarmCountList = alarmTsService.findCtFeatureStatCustom( statStartTime.getTime(), statEndTime.getTime(),wt.getWindpowerstationId(), wt.getModelId(), components,alarmidls);
+
+        Map<String, List<ProBasicFeatureStat>> alarmCountMapByAlertValue = customAlarmCountList.stream().collect(Collectors.groupingBy(ProBasicFeatureStat::getAlarmid));
+
+        ProEconEarlyReportWt avgWindturbineReport = new ProEconEarlyReportWt();
+        avgWindturbineReport.setId(String.valueOf(SnowflakeGenerator.generateId()));
+        avgWindturbineReport.setWindturbineId("全场平均");
+        avgWindturbineReport.setWindturbineCode("");
+        avgWindturbineReport.setModelId(model);
+        avgWindturbineReport.setCompared(false);
+        avgWindturbineReport.setAlarmInfoList(new ArrayList<>());
+        avgWindturbineReport.setReportId(reportId);
+
+        for (Map.Entry<String, List<ProBasicFeatureStat>> entry :
+                alarmCountMapByAlertValue.entrySet()) {
+            ProBasicFeatureStat avgAlarmCount = proEconEarlyReportService.getAvgAlarmCount(entry.getValue());
+            Optional<ProEconAlarmRule> first = alertRule2List.stream().filter(s -> String.valueOf(s.getId()).equals(entry.getKey())).findFirst();
+            if (first.isPresent()) {
+                ProEconEarlyReportAlarm alarmInfo = new ProEconEarlyReportAlarm();
+                alarmInfo.setId(String.valueOf(SnowflakeGenerator.generateId()));
+                alarmInfo.setRuleId(first.get().getId());
+                alarmInfo.setAlarmType("custom");
+                alarmInfo.setRuleName(first.get().getName());
+                alarmInfo.setRuleDescription(first.get().getDescription());
+                alarmInfo.setRank(String.valueOf(first.get().getRank()));
+                alarmInfo.setCount(avgAlarmCount.getTotal());
+                alarmInfo.setKeepTime(avgAlarmCount.getTotalSeconds());
+                alarmInfo.setReportWindturbineId(avgWindturbineReport.getId());
+
+                avgWindturbineReport.getAlarmInfoList().add(alarmInfo);
+            }
+        }
+
+        resultList.add(avgWindturbineReport);
+
+        Map<String, ProBasicFeatureStat> sumAlarmCountByWindturbine = proEconEarlyReportService.getSumAlarmCountByWindturbine(customAlarmCountList, limit);
+
+        List<String> windturbineIdList = new ArrayList<>(sumAlarmCountByWindturbine.keySet());
+
+        Map<String, List<ProBasicFeatureStat>> windturbineLimitAlarmCountMap = customAlarmCountList.stream().filter(s -> windturbineIdList.contains(s.getWtId())).collect(Collectors.groupingBy(ProBasicFeatureStat::getWtId));
+
+        for (Map.Entry<String, List<ProBasicFeatureStat>> entry :
+                windturbineLimitAlarmCountMap.entrySet()) {
+            Map<String, Long> sumCountByAlertValue = entry.getValue().stream().collect(Collectors.groupingBy(ProBasicFeatureStat::getAlarmid, Collectors.summingLong(ProBasicFeatureStat::getTotal)));
+            Map<String, Double> sumKeepTimeByAlertValue = entry.getValue().stream().collect(Collectors.groupingBy(ProBasicFeatureStat::getAlarmid, Collectors.summingDouble(ProBasicFeatureStat::getTotalSeconds)));
+
+            ProEconEarlyReportWt reportWindturbine = new ProEconEarlyReportWt();
+            reportWindturbine.setId(String.valueOf(SnowflakeGenerator.generateId()));
+            reportWindturbine.setWindturbineId(entry.getKey());
+            reportWindturbine.setWindturbineCode(wt.getNemCode());
+            reportWindturbine.setModelId(model);
+            reportWindturbine.setCompared(false);
+            reportWindturbine.setAlarmInfoList(new ArrayList<>());
+            reportWindturbine.setReportId(reportId);;
+
+            for (Map.Entry<String, Long> sumCountEntry :
+                    sumCountByAlertValue.entrySet()) {
+                Optional<ProEconAlarmRule> first = alertRule2List.stream().filter(s -> String.valueOf(s.getId()).equals(sumCountEntry.getKey())).findFirst();
+                if (first.isPresent()) {
+                    ProEconEarlyReportAlarm alarmInfo = new ProEconEarlyReportAlarm();
+                    alarmInfo.setId(String.valueOf(SnowflakeGenerator.generateId()));
+                    alarmInfo.setRuleId(first.get().getId());
+                    alarmInfo.setAlarmType("custom");
+                    alarmInfo.setRuleName(first.get().getName());
+                    alarmInfo.setRuleDescription(first.get().getDescription());
+                    alarmInfo.setRank(String.valueOf(first.get().getRank()));
+                    alarmInfo.setCount(sumCountEntry.getValue());
+                    alarmInfo.setReportWindturbineId(reportWindturbine.getId());;
+                    if (sumKeepTimeByAlertValue.containsKey(sumCountEntry.getKey())) {
+                        alarmInfo.setKeepTime(sumKeepTimeByAlertValue.get(sumCountEntry.getKey()).doubleValue());
+                    }
+                    reportWindturbine.getAlarmInfoList().add(alarmInfo);
+                }
+            }
+            resultList.add(reportWindturbine);
+        }
+
+        List<ProEconEarlyReportWt> earlyReportWindturbineList = checkAndFixData(resultList, alertRule2List);
+
+        return getConclusion(alertRule2List, earlyReportWindturbineList);
+
+    }
+
+
+
+    /**
+     * @param
+     * @param windturbineInfoList 需要对比的风机报告信息(上次报告)
+     * @param model               风机型号
+     * @param reportId            本次报告的id
+     * @param startTime           分析起始时间(本次分析)
+     * @param endTime             分析结束时间(本次分析)
+     * @return com.gyee.wisdom.alarm.schedule.entity.ProEconEarlyReportWt
+     * @author Wanghs
+     * @description 获取上次报告中的风机与本周报告对比信息
+     * @date 2022/8/29
+     **/
+
+    private List<ProEconEarlyReportWt> getCompareWindturbineInfo(ProBasicEquipment wt,List<ProEconEarlyReportWt> windturbineInfoList, String model, String reportId,String relatedParts, Date startTime, Date endTime) {
+
+        List<ProEconEarlyReportWt> resultList = new ArrayList<>();
+        List<String> windturbineIdList = windturbineInfoList.stream().map(s -> s.getWindturbineId()).collect(Collectors.toList());
+        List<ProEconEarlyReportAlarm> reportAlarmList = new ArrayList<>();
+        windturbineInfoList.forEach(s -> {
+            reportAlarmList.addAll(s.getAlarmInfoList());
+        });
+//        List<ProEconAlarmRule> alertRule2List = proEconEarlyReportService.getAlertRule2(reportAlarmList.stream().map(s -> s.getRuleId()).collect(Collectors.toList()));
+//        List<AlarmSnap> customAlarmSnapList = proEconEarlyReportService.getAlarmSnap(stationId,alertRule2List.stream().map(s -> s.getEdnaValue()).collect(Collectors.toList()), "custom");
+//        List<ProBasicFeatureStat> customAlarmCountList = proEconEarlyReportService.getAlarmCount(customAlarmSnapList.stream().map(s -> s.getId()).collect(Collectors.toList()), startTime, endTime);
+//        Map<String, List<ProBasicFeatureStat>> windturbineAlarmCountMap = customAlarmCountList.stream().filter(s -> windturbineIdList.contains(s.getWindturbineId())).collect(Collectors.groupingBy(ProBasicFeatureStat::getWindturbineId));
+//
+
+
+        List<ProEconAlarmRule> alertRule2List = new ArrayList<>();
+        List<String> components= new ArrayList<>();
+        components.add(relatedParts);
+        if(wt.getWindpowerstationId().contains("FDC"))
+        {
+            List<ProEconAlarmRule> rulels=CacheContext.alarmRulesMap.get(AlarmCustomType.WT.getCode());
+
+            if(!rulels.isEmpty())
+            {
+                for(ProEconAlarmRule rule:rulels)
+                {
+                    if(rule.getRelatedParts().equals(relatedParts) && rule.getStationId().equals(wt.getWindpowerstationId())  && rule.getModelId().equals(model))
+                    {
+                        alertRule2List.add(rule);
+                    }
+                }
+            }
+
+        }else
+        {
+            List<ProEconAlarmRule> rulels=CacheContext.alarmRulesMap.get(AlarmCustomType.IN.getCode());
+
+            if(!rulels.isEmpty())
+            {
+                for(ProEconAlarmRule rule:rulels)
+                {
+                    if(rule.getRelatedParts().equals(relatedParts) && rule.getStationId().equals(wt.getWindpowerstationId())  && rule.getModelId().equals(model))
+                    {
+                        alertRule2List.add(rule);
+                    }
+                }
+            }
+        }
+
+
+        List<ProEconAlarmInfo> customAlarmSnapList = proEconAlarmInfoService. queryAlarmInfo(wt.getId(), AlarmTypeValue.CT.getCode());
+        List<String> alarmidls=new ArrayList<>();
+        if(!customAlarmSnapList.isEmpty())
+        {
+            for(ProEconAlarmInfo alarmInfo:customAlarmSnapList)
+            {
+                alarmidls.add(alarmInfo.getAlarmId());
+            }
+        }
+        List<ProBasicFeatureStat> customAlarmCountList = alarmTsService.findCtFeatureStatCustom( startTime.getTime(), endTime.getTime(),wt.getWindpowerstationId(), wt.getModelId(), components,alarmidls);
+
+
+       Map<String, List<ProBasicFeatureStat>> windturbineAlarmCountMap = customAlarmCountList.stream().filter(s -> windturbineIdList.contains(s.getWtId())).collect(Collectors.groupingBy(ProBasicFeatureStat::getWtId));
+
+
+        for (Map.Entry<String, List<ProBasicFeatureStat>> entry :
+                windturbineAlarmCountMap.entrySet()) {
+            ProEconEarlyReportWt reportWindturbine = new ProEconEarlyReportWt();
+            reportWindturbine.setId(String.valueOf(SnowflakeGenerator.generateId()));
+            reportWindturbine.setWindturbineId(entry.getKey());
+            reportWindturbine.setWindturbineCode(wt.getNemCode());
+            reportWindturbine.setModelId(model);
+            reportWindturbine.setCompared(true);
+            reportWindturbine.setAlarmInfoList(new ArrayList<>());
+            reportWindturbine.setReportId(reportId);
+
+            Optional<ProEconEarlyReportWt> oldReportWindturbine = windturbineInfoList.stream().filter(s -> s.getWindturbineId().equals(entry.getKey())).findFirst();
+            if (oldReportWindturbine.isPresent())
+                reportWindturbine.setCompareId(oldReportWindturbine.get().getId());
+
+            Map<String, Long> sumCountByAlertValue = entry.getValue().stream().collect(Collectors.groupingBy(ProBasicFeatureStat::getAlarmid, Collectors.summingLong(ProBasicFeatureStat::getTotal)));
+            Map<String, Double> sumKeepTimeByAlertValue = entry.getValue().stream().collect(Collectors.groupingBy(ProBasicFeatureStat::getAlarmid, Collectors.summingDouble(ProBasicFeatureStat::getTotalSeconds)));
+
+            for (Map.Entry<String, Long> sumCountEntry :
+                    sumCountByAlertValue.entrySet()) {
+                Optional<ProEconAlarmRule> first = alertRule2List.stream().filter(s -> String.valueOf(s.getId()).equals(sumCountEntry.getKey())).findFirst();
+                if (first.isPresent()) {
+                    ProEconEarlyReportAlarm alarmInfo = new ProEconEarlyReportAlarm();
+                    alarmInfo.setId(String.valueOf(SnowflakeGenerator.generateId()));
+                    alarmInfo.setRuleId(first.get().getId());
+                    alarmInfo.setAlarmType("custom");
+                    alarmInfo.setRuleName(first.get().getName());
+                    alarmInfo.setRuleDescription(first.get().getDescription());
+                    alarmInfo.setRank(String.valueOf(first.get().getRank()));
+                    alarmInfo.setCount(sumCountEntry.getValue());
+                    alarmInfo.setReportWindturbineId(reportWindturbine.getId());
+                    if (sumKeepTimeByAlertValue.containsKey(sumCountEntry.getKey())) {
+                        alarmInfo.setKeepTime(sumKeepTimeByAlertValue.get(sumCountEntry.getKey()).doubleValue());
+                    }
+                    reportWindturbine.getAlarmInfoList().add(alarmInfo);
+                }
+            }
+            resultList.add(reportWindturbine);
+        }
+
+        List<ProEconEarlyReportWt> earlyReportWindturbineList = checkAndFixData(resultList, alertRule2List);
+        return earlyReportWindturbineList;
+    }
+
+    private List<ProEconEarlyReportWt> getConclusion(List<ProEconAlarmRule> alertRule2List, List<ProEconEarlyReportWt> reportWindturbineList) {
+
+        List<ProEconEarlyReportConclusio> listByPart = proEconEarlyReportConclusioService.getListByPart(alertRule2List.stream().map(s -> s.getRelatedParts()).collect(Collectors.toList()));
+
+        for (ProEconEarlyReportWt windturbineData :
+                reportWindturbineList) {
+            if (!windturbineData.getWindturbineId().equals("全场平均")) {
+                StringBuilder firstStr = new StringBuilder("风机" + windturbineData.getWindturbineCode() + ":发生");
+                for (int i = 0; i < windturbineData.getAlarmInfoList().size(); i++) {
+                    ProEconEarlyReportAlarm earlyReportAlarm = windturbineData.getAlarmInfoList().get(i);
+                    firstStr.append(earlyReportAlarm.getRuleName());
+                    firstStr.append(earlyReportAlarm.getCount());
+                    firstStr.append("次,总持续时长为");
+                    firstStr.append(earlyReportAlarm.getKeepTime() + "分钟;");
+                }
+                StringBuilder secondStr = new StringBuilder("可能存在的隐患:").append("\n");
+                StringBuilder thridStr = new StringBuilder("建议排查:").append("\n");
+
+                for (int i = 0; i < listByPart.size(); i++) {
+                    secondStr.append("\b");
+                    secondStr.append("\b");
+                    secondStr.append("\b");
+                    secondStr.append("-" + listByPart.get(i).getHiddanger());
+                    secondStr.append("\n");
+
+                    thridStr.append("\b");
+                    thridStr.append("\b");
+                    thridStr.append("\b");
+                    thridStr.append("-" + listByPart.get(i).getCheckMatter());
+                    thridStr.append("\n");
+                }
+                StringBuilder resultStr = new StringBuilder();
+
+                resultStr.append(firstStr);
+                resultStr.append("\n");
+                resultStr.append(secondStr);
+                resultStr.append("\n");
+                resultStr.append(thridStr);
+                windturbineData.setConclusion(resultStr.toString());
+            }
+        }
+        return reportWindturbineList;
+
+    }
+
+    //数据校验,避免部分规则没有数据的情况
+    public List<ProEconEarlyReportWt> checkAndFixData(List<ProEconEarlyReportWt> earlyReportWindturbineList,List<ProEconAlarmRule> rule2List){
+
+        List<String> ruleIdList = rule2List.stream().map(s -> s.getId()).collect(Collectors.toList());
+        earlyReportWindturbineList.forEach(s -> {
+//            if (!s.getWindturbineId().equals("全场平均") ) {
+            List<ProEconEarlyReportAlarm> alarmInfoList = s.getAlarmInfoList();
+            if (alarmInfoList.size() < rule2List.size()) {
+
+                Collection subtract = CollectionUtils.subtract(ruleIdList, alarmInfoList.stream().map(k -> k.getRuleId()).collect(Collectors.toList()));
+
+                List<String> arrayList = new ArrayList<String>(subtract);
+
+                if (arrayList.size() > 0) {
+                    arrayList.stream().forEach(l -> {
+
+                        Optional<ProEconAlarmRule> first = rule2List.stream().filter(m -> m.getId().equals(l)).findFirst();
+                        if (first.isPresent()) {
+                            ProEconEarlyReportAlarm alarmInfo = new ProEconEarlyReportAlarm();
+                            alarmInfo.setId(String.valueOf(SnowflakeGenerator.generateId()));
+                            alarmInfo.setRuleId(first.get().getId());
+                            alarmInfo.setAlarmType("custom");
+                            alarmInfo.setRuleName(first.get().getName());
+                            alarmInfo.setRuleDescription(first.get().getDescription());
+                            alarmInfo.setRank(String.valueOf(first.get().getRank()));
+                            alarmInfo.setCount(0l);
+                            alarmInfo.setKeepTime(0.0);
+                            alarmInfo.setReportWindturbineId(s.getId());
+                            alarmInfoList.add(alarmInfo);
+                        }
+
+                    });
+                }
+
+
+            }
 //            }
-//        }
-//        resultList.add(avgWindturbineReport);
-//
-//        Map<String, ProBasicFeatureStat> sumAlarmCountByWindturbine = proEconEarlyReportService.getSumAlarmCountByWindturbine(customAlarmCountList, limit);
-//
-//        List<String> windturbineIdList = new ArrayList<String>(sumAlarmCountByWindturbine.keySet());
-//
-//        Map<String, List<ProBasicFeatureStat>> windturbineLimitAlarmCountMap = customAlarmCountList.stream().filter(s -> windturbineIdList.contains(s.getWindturbineId())).collect(Collectors.groupingBy(ProBasicFeatureStat::getWindturbineId));
-//
-//        for (Map.Entry<String, List<ProBasicFeatureStat>> entry :
-//                windturbineLimitAlarmCountMap.entrySet()) {
-//            Map<String, Integer> sumCountByAlertValue = entry.getValue().stream().collect(Collectors.groupingBy(ProBasicFeatureStat::getAlertValue, Collectors.summingInt(ProBasicFeatureStat::getCount)));
-//            Map<String, Double> sumKeepTimeByAlertValue = entry.getValue().stream().collect(Collectors.groupingBy(ProBasicFeatureStat::getAlertValue, Collectors.summingDouble(ProBasicFeatureStat::getTime)));
-//
-//            ProEconEarlyReportWt reportWindturbine = new ProEconEarlyReportWt()
-//                    .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<ProEconAlarmRule> 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);
-//        }
-//
-//        List<ProEconEarlyReportWt> earlyReportWindturbineList = checkAndFixData(resultList, alertRule2List);
-//
-//        return getConclusion(alertRule2List, earlyReportWindturbineList);
-//
-//    }
-//
-//
-////
-////    /**
-////     * @param
-////     * @param windturbineInfoList 需要对比的风机报告信息(上次报告)
-////     * @param model               风机型号
-////     * @param reportId            本次报告的id
-////     * @param startTime           分析起始时间(本次分析)
-////     * @param endTime             分析结束时间(本次分析)
-////     * @return com.gyee.wisdom.alarm.schedule.entity.ProEconEarlyReportWt
-////     * @author Wanghs
-////     * @description 获取上次报告中的风机与本周报告对比信息
-////     * @date 2022/8/29
-////     **/
-////
-////    private List<ProEconEarlyReportWt> getCompareWindturbineInfo(String stationId,List<ProEconEarlyReportWt> windturbineInfoList, String model, String reportId, Date startTime, Date endTime) {
-////
-////        List<ProEconEarlyReportWt> 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<ProEconAlarmRule> alertRule2List = proEconEarlyReportService.getAlertRule2(reportAlarmList.stream().map(s -> s.getRuleId()).collect(Collectors.toList()));
-////        List<AlarmSnap> customAlarmSnapList = proEconEarlyReportService.getAlarmSnap(stationId,alertRule2List.stream().map(s -> s.getEdnaValue()).collect(Collectors.toList()), "custom");
-////        List<ProBasicFeatureStat> customAlarmCountList = proEconEarlyReportService.getAlarmCount(customAlarmSnapList.stream().map(s -> s.getId()).collect(Collectors.toList()), startTime, endTime);
-////        Map<String, List<ProBasicFeatureStat>> windturbineAlarmCountMap = customAlarmCountList.stream().filter(s -> windturbineIdList.contains(s.getWindturbineId())).collect(Collectors.groupingBy(ProBasicFeatureStat::getWindturbineId));
-////
-////        for (Map.Entry<String, List<ProBasicFeatureStat>> entry :
-////                windturbineAlarmCountMap.entrySet()) {
-////            ProEconEarlyReportWt reportWindturbine = new ProEconEarlyReportWt()
-////                    .setId(String.valueOf(SnowflakeGenerator.generateId()))
-////                    .setWindturbineId(entry.getKey())
-////                    .setWindturbineCode(windturbineCache.getWindturbine(entry.getKey()).getCode())
-////                    .setModel(model)
-////                    .setCompared(true)
-////                    .setAlarmInfoList(new ArrayList<>())
-////                    .setReportId(reportId);
-////
-////            Optional<ProEconEarlyReportWt> 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(ProBasicFeatureStat::getAlertValue, Collectors.summingInt(ProBasicFeatureStat::getCount)));
-////            Map<String, Double> sumKeepTimeByAlertValue = entry.getValue().stream().collect(Collectors.groupingBy(ProBasicFeatureStat::getAlertValue, Collectors.summingDouble(ProBasicFeatureStat::getTime)));
-////
-////            for (Map.Entry<String, Integer> sumCountEntry :
-////                    sumCountByAlertValue.entrySet()) {
-////                Optional<ProEconAlarmRule> 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);
-////        }
-////
-////        List<ProEconEarlyReportWt> earlyReportWindturbineList = checkAndFixData(resultList, alertRule2List);
-////        return earlyReportWindturbineList;
-////    }
-////
-////    private List<ProEconEarlyReportWt> getConclusion(List<ProEconAlarmRule> alertRule2List, List<ProEconEarlyReportWt> reportWindturbineList) {
-////
-////        List<EarlyReportConclusion> listByPart = ConclusionCache.getListByPart(alertRule2List.stream().map(s -> s.getRelatedParts()).collect(Collectors.toList()));
-////
-////        for (ProEconEarlyReportWt windturbineData :
-////                reportWindturbineList) {
-////            if (!windturbineData.getWindturbineId().equals("全场平均")) {
-////                StringBuilder firstStr = new StringBuilder("风机" + windturbineData.getWindturbineCode() + ":发生");
-////                for (int i = 0; i < windturbineData.getAlarmInfoList().size(); i++) {
-////                    EarlyReportAlarm earlyReportAlarm = windturbineData.getAlarmInfoList().get(i);
-////                    firstStr.append(earlyReportAlarm.getRuleName());
-////                    firstStr.append(earlyReportAlarm.getCount());
-////                    firstStr.append("次,总持续时长为");
-////                    firstStr.append(earlyReportAlarm.getKeepTime() + "分钟;");
-////                }
-////                StringBuilder secondStr = new StringBuilder("可能存在的隐患:").append("\n");
-////                StringBuilder thridStr = new StringBuilder("建议排查:").append("\n");
-////
-////                for (int i = 0; i < listByPart.size(); i++) {
-////                    secondStr.append("\b");
-////                    secondStr.append("\b");
-////                    secondStr.append("\b");
-////                    secondStr.append("-" + listByPart.get(i).getHiddanger());
-////                    secondStr.append("\n");
-////
-////                    thridStr.append("\b");
-////                    thridStr.append("\b");
-////                    thridStr.append("\b");
-////                    thridStr.append("-" + listByPart.get(i).getCheckmatter());
-////                    thridStr.append("\n");
-////                }
-////                StringBuilder resultStr = new StringBuilder();
-////
-////                resultStr.append(firstStr);
-////                resultStr.append("\n");
-////                resultStr.append(secondStr);
-////                resultStr.append("\n");
-////                resultStr.append(thridStr);
-////                windturbineData.setConclusion(resultStr.toString());
-////            }
-////        }
-////        return reportWindturbineList;
-////
-////    }
-////
-////    //数据校验,避免部分规则没有数据的情况
-////    public List<ProEconEarlyReportWt> checkAndFixData(List<ProEconEarlyReportWt> earlyReportWindturbineList,List<ProEconAlarmRule> rule2List){
-////
-////        List<String> ruleIdList = rule2List.stream().map(s -> s.getId()).collect(Collectors.toList());
-////        earlyReportWindturbineList.forEach(s -> {
-//////            if (!s.getWindturbineId().equals("全场平均") ) {
-////            List<EarlyReportAlarm> alarmInfoList = s.getAlarmInfoList();
-////            if (alarmInfoList.size() < reportParam.getCustomRuleId().size()) {
-////
-////                Collection subtract = CollectionUtils.subtract(ruleIdList, alarmInfoList.stream().map(k -> k.getRuleId()).collect(Collectors.toList()));
-////
-////                List<String> arrayList = new ArrayList<String>(subtract);
-////
-////                if (arrayList.size() > 0) {
-////                    arrayList.stream().forEach(l -> {
-////
-////                        Optional<ProEconAlarmRule> first = rule2List.stream().filter(m -> m.getId().equals(l)).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(0)
-////                                    .setKeepTime(0)
-////                                    .setReportWindturbineId(s.getId());
-////                            alarmInfoList.add(alarmInfo);
-////                        }
-////
-////                    });
-////                }
-////
-////
-////            }
-//////            }
-////
-////        });
-////
-////        return earlyReportWindturbineList;
-////    }
-//}
+
+        });
+
+        return earlyReportWindturbineList;
+    }
+}

+ 4 - 0
alarm-stat/src/main/java/com/gyee/alarm/service/auto/IProEconEarlyReportConclusioService.java

@@ -3,6 +3,9 @@ package com.gyee.alarm.service.auto;
 import com.gyee.alarm.model.auto.ProEconEarlyReportConclusio;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * 预警报告结论 服务类
@@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IProEconEarlyReportConclusioService extends IService<ProEconEarlyReportConclusio> {
 
+    public  List<ProEconEarlyReportConclusio> getListByPart(List<String> partList) ;
 }

+ 2 - 0
alarm-stat/src/main/java/com/gyee/alarm/service/auto/IProEconEarlyReportService.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -19,4 +20,5 @@ public interface IProEconEarlyReportService extends IService<ProEconEarlyReport>
 
     public List<ProEconEarlyReport> findEarlyReportByDate(String stationId, Date startTime, Date endTime);
     public ProBasicFeatureStat getAvgAlarmCount(List<ProBasicFeatureStat> alarmCountList);
+    public Map<String, ProBasicFeatureStat> getSumAlarmCountByWindturbine(List<ProBasicFeatureStat> lst, int limit);
 }

+ 18 - 0
alarm-stat/src/main/java/com/gyee/alarm/service/auto/impl/ProEconEarlyReportConclusioServiceImpl.java

@@ -1,11 +1,18 @@
 package com.gyee.alarm.service.auto.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.gyee.alarm.model.auto.ProEconEarlyReportConclusio;
 import com.gyee.alarm.mapper.auto.ProEconEarlyReportConclusioMapper;
+import com.gyee.alarm.model.auto.ProEconPowerstationInfoDay2;
 import com.gyee.alarm.service.auto.IProEconEarlyReportConclusioService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * 预警报告结论 服务实现类
@@ -17,4 +24,15 @@ import org.springframework.stereotype.Service;
 @Service
 public class ProEconEarlyReportConclusioServiceImpl extends ServiceImpl<ProEconEarlyReportConclusioMapper, ProEconEarlyReportConclusio> implements IProEconEarlyReportConclusioService {
 
+
+    public List<ProEconEarlyReportConclusio> getListByPart(List<String> partList) {
+        List<ProEconEarlyReportConclusio> collect=new ArrayList<>();
+        if (partList == null || partList.size() <= 0) {
+            QueryWrapper<ProEconEarlyReportConclusio> qw = new QueryWrapper<>();
+            qw.in("part",partList);
+            collect = list(qw);
+        }
+        return collect;
+
+    }
 }

+ 36 - 4
alarm-stat/src/main/java/com/gyee/alarm/service/auto/impl/ProEconEarlyReportServiceImpl.java

@@ -8,14 +8,13 @@ import com.gyee.alarm.model.auto.ProEconEarlyReportAlarm;
 import com.gyee.alarm.service.auto.IProEconEarlyReportService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gyee.alarm.util.StringUtils;
+import com.gyee.alarm.util.realtimesource.StringUtil;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.OptionalDouble;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -52,4 +51,37 @@ public class ProEconEarlyReportServiceImpl extends ServiceImpl<ProEconEarlyRepor
         return alarmCount;
 
     }
+
+    /**
+     * @param lst alarmcount 集合
+     * @return
+     * @return java.util.Map<java.lang.String, com.gyee.wisdom.alarm.schedule.entity.ProBasicFeatureStat>
+     * @author Wanghs
+     * @description 将每一台风机的所有规则报警次数时长求和并根据总持续时间排序,取出最大的几条数据
+     * @date 2022/8/23
+     **/
+    public Map<String, ProBasicFeatureStat> getSumAlarmCountByWindturbine(List<ProBasicFeatureStat> lst, int limit) {
+
+        //根据风机编号分组,并次数求和
+        Map<String, Long> mapCount = lst.stream().filter(s -> StringUtil.isNotBlank(s.getWtId())).collect(Collectors.groupingBy(ProBasicFeatureStat::getWtId, Collectors.summingLong(ProBasicFeatureStat::getTotal)));
+        //根据风机编号分组,并时长求和
+        Map<String, Double> mapTime = lst.stream().filter(s -> StringUtil.isNotBlank(s.getWtId())).collect(Collectors.groupingBy(ProBasicFeatureStat::getWtId, Collectors.summingDouble(ProBasicFeatureStat::getTotalSeconds)));
+
+        List<ProBasicFeatureStat> alarmCountList = new ArrayList<>();
+        for (Map.Entry<String, Double> entry :
+                mapTime.entrySet()) {
+            ProBasicFeatureStat data = new ProBasicFeatureStat();
+            data.setWtId(entry.getKey());
+            data.setTotalSeconds(entry.getValue());
+            if (mapCount.containsKey(entry.getKey())) {
+                data.setTotal(mapCount.get(entry.getKey()));
+            }
+            alarmCountList.add(data);
+        }
+        Map<String, ProBasicFeatureStat> collect = alarmCountList.stream().
+                sorted(Comparator.comparing(ProBasicFeatureStat::getTotalSeconds, Comparator.reverseOrder())).
+                limit(limit).collect(Collectors.toMap(ProBasicFeatureStat::getWtId, s -> s, (key1, key2) -> key2));
+        return collect;
+
+    }
 }

+ 2 - 0
alarm-web/pom.xml

@@ -34,6 +34,8 @@
 
 
     <dependencies>
+
+
         <dependency>
             <groupId>com.opencsv</groupId>
             <artifactId>opencsv</artifactId>

+ 6 - 4
alarm-web/src/main/java/com/gyee/alarm/controller/AlarmHistoryController.java

@@ -36,7 +36,7 @@ public class AlarmHistoryController {
     private AlarmHistoryService alarmHistoryService;
 
 
-    @GetMapping(value = "/history/updateAlarms")
+    @PostMapping(value = "/history/updateAlarms")
     @ApiOperation(value = "确认报警", notes = "确认报警")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "tagLs", value = "需要确认的报警", required = true, dataType = "string", paramType = "query")
@@ -62,18 +62,20 @@ public class AlarmHistoryController {
             @ApiImplicitParam(name = "modelId", value = "型号", required = false, dataType = "string", paramType = "query"),
             @ApiImplicitParam(name = "deviceType", value = "报警类型 booststation:升压站报警,windturbine:设备报警", required = false, dataType = "string", paramType = "query"),
             @ApiImplicitParam(name = "components", value = "部件编号", required = false, dataType = "string", paramType = "query"),
+            @ApiImplicitParam(name = "alarmId", value = "报警编号", required = false, dataType = "string", paramType = "query"),
             @ApiImplicitParam(name = "pageNum", value = "页号", required = true, dataType = "string", paramType = "query"),
             @ApiImplicitParam(name = "pageSize", value = "每页显示行数", required = true, dataType = "string", paramType = "query")})
     public AjaxResult findAlarmlist(
             @RequestParam(value = "begin", required = true) String begin,
             @RequestParam(value = "end", required = true) String end,
-            @RequestParam(value = "alarmType", required = true) String alarmType,
-            @RequestParam(value = "stationid", required = true) String stationid,
+            @RequestParam(value = "alarmType", required = false) String alarmType,
+            @RequestParam(value = "stationid", required = false) String stationid,
             @RequestParam(value = "deviceid", required = false) String deviceid,
             @RequestParam(value = "description", required = false) String description,
             @RequestParam(value = "modelId", required = false) String modelId,
             @RequestParam(value = "deviceType", required = false) String deviceType,
             @RequestParam(value = "components", required = false) String components,
+            @RequestParam(value = "alarmId", required = false) String alarmId,
             @RequestParam(value = "pageNum", required = true) Integer pageNum,
             @RequestParam(value = "pageSize", required = true) Integer pageSize
 
@@ -83,7 +85,7 @@ public class AlarmHistoryController {
         Date beginDate = df.parse(begin);
         Date endDate = df.parse(end);
         pageNum=pageNum-1;
-        Map<String,Object> map = alarmHistoryService.findAlarmlist(modelId,beginDate.getTime(), endDate.getTime(), alarmType, stationid,deviceid, description,deviceType,components, pageNum, pageSize);
+        Map<String,Object> map = alarmHistoryService.findAlarmlist(modelId,beginDate.getTime(), endDate.getTime(), alarmType, stationid,deviceid, description,deviceType,components,alarmId, pageNum, pageSize);
         return AjaxResult.successData(AjaxStatus.success.code, map);
 
     }

+ 12 - 0
alarm-web/src/main/java/com/gyee/alarm/controller/AlertRuleController.java

@@ -60,7 +60,19 @@ public class AlertRuleController {
         }
     }
 
+    @GetMapping(value = "/queryalarmswitchllist")
+    @ApiOperation(value = "查询报警开关", notes = "查询报警开关")
+    public AjaxResult queryAlarmSwitchlList() {
 
+        List<ProEconAlarmSwitch> vos = CacheContext.asls;
+
+        if (StringUtils.notEmp(vos)) {
+
+            return AjaxResult.successData(AjaxStatus.success.code, vos);
+        } else {
+            return AjaxResult.successData(AjaxStatus.loginexpire.code, "error");
+        }
+    }
     @GetMapping(value = "/queryalarmtypellist")
     @ApiOperation(value = "查询报警类型和预警类型", notes = "查询报警类型和预警类型")
     public AjaxResult queryalAarmTypelList() {

+ 1 - 1
alarm-web/src/main/java/com/gyee/alarm/controller/AuthController.java

@@ -47,7 +47,7 @@ public class AuthController {
     @ApiOperation(value = "登出系统")
     @ResponseBody
     public AjaxResult logout(@RequestBody  TokenVo tokenVo) {
-        if (StringUtils.notEmp(tokenVo)) {
+        if (StringUtils.notEmp(tokenVo) && StringUtils.notEmp(tokenVo.getToken())) {
 
             if (tokenService.sessionMap.containsKey(tokenVo.getToken())) {
                 tokenService.sessionMap.remove(tokenVo.getToken());

+ 20 - 0
alarm-web/src/main/java/com/gyee/alarm/controller/ProEconAlarmSwitchController.java

@@ -0,0 +1,20 @@
+package com.gyee.alarm.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 报警开关 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-09-07
+ */
+@RestController
+@RequestMapping("//pro-econ-alarm-switch")
+public class ProEconAlarmSwitchController {
+
+}

+ 60 - 1
alarm-web/src/main/java/com/gyee/alarm/init/CacheContext.java

@@ -6,6 +6,10 @@ import com.alibaba.fastjson.TypeReference;
 import com.gyee.alarm.model.vo.AlarmCustomType;
 import com.gyee.alarm.model.vo.AlarmTypeValue;
 import com.gyee.alarm.model.vo.AlarmVo;
+import com.gyee.alarm.service.AlarmBtService;
+import com.gyee.alarm.service.AlarmCtService;
+import com.gyee.alarm.service.AlarmInService;
+import com.gyee.alarm.service.AlarmWtService;
 import com.gyee.common.model.StringUtils;
 import com.gyee.alarm.model.auto.*;
 import com.gyee.alarm.service.auto.*;
@@ -63,8 +67,16 @@ public class CacheContext implements CommandLineRunner {
     @Resource
     private IProBasicRegionService proBasicRegionService;
 
+    @Resource
+    private AlarmWtService alarmWtService;
+    @Resource
+    private AlarmInService alarmInService;
+    @Resource
+    private AlarmBtService alarmBtService;
 
     @Resource
+    private AlarmCtService alarmCtService;
+    @Resource
     private IProBasicModelPowerRdService proBasicModelPowerRdService;
     @Resource
     private IProBasicWeatherStationService proBasicWeatherStationService;
@@ -80,6 +92,9 @@ public class CacheContext implements CommandLineRunner {
 
     @Resource
     private IProEconAlarmConfigurationService proEconAlarmConfigurationService;
+
+    @Resource
+    private  IProEconAlarmSwitchService proEconAlarmSwitchService;
     @Value("${runWindpowerstation}")
     private String runWindpowerstation;
 
@@ -87,6 +102,8 @@ public class CacheContext implements CommandLineRunner {
     private IProEconAlarmRuleService proEconAlarmRuleService;
     @Resource
     private IProEconAlarmTypeService proEconAlarmTypeService;
+
+    public static List<ProEconAlarmSwitch> asls = new ArrayList<>();
     public static Map<String, Map<String, ProBasicPowerstationPoint>> weatherwppointmap = new HashMap<>();
     public static List<ProBasicWeatherStation> weawpls = new ArrayList<>();
     public static Map<String, Map<String, ProBasicEquipment>> cmwtmap = new HashMap<>();
@@ -189,13 +206,17 @@ public class CacheContext implements CommandLineRunner {
     public static Map<String, ProEconAlarmType> alarmTypeMap = new HashMap<>();
     public static List<ProEconAlarmType> alarmTypeList = new ArrayList<>();
     public static Map<String, Set<ProEconEquipmentmodel>> wpByEmMap = new HashMap<>();
-
+    public static List<AlarmVo> alarmInList=new ArrayList<>();
+    public static Map<String,AlarmVo> alarmInMap=new HashMap<>();
     @Override
 
     public void run(String... args) throws Exception {
         logger.info("缓存开始------------------------------------------------------------");
 
 
+       asls= proEconAlarmSwitchService.list();
+
+
         List<String> runWpids = Arrays.asList(runWindpowerstation.split(","));
         logger.info(runWpids.get(0) + "------------------" + runWpids.size());
         wsls = proBasicWeatherStationService.list().stream().filter(i -> runWpids.contains(i.getWindpowerstationId()) && i.getIsAble() == 1).collect(Collectors.toList());
@@ -718,6 +739,44 @@ public class CacheContext implements CommandLineRunner {
             }
         }
 
+        //风机报警初始化标签
+        alarmWtList=alarmWtService.initalAlarmVo();
+        if(!alarmWtList.isEmpty())
+        {
+            for(AlarmVo vo: alarmWtList)
+            {
+                alarmWtMap.put(vo.getTbName(),vo);
+            }
+        }
+        //逆变器报警初始化标签
+        alarmInList=alarmInService.initalAlarmVo();
+        if(!alarmInList.isEmpty())
+        {
+            for(AlarmVo vo: alarmInList)
+            {
+                alarmInMap.put(vo.getTbName(),vo);
+            }
+        }
+
+
+        //升压站报警初始化标签
+        alarmBtList=alarmBtService.initalAlarmVo();
+        if(!alarmBtList.isEmpty())
+        {
+            for(AlarmVo vo: alarmBtList)
+            {
+                alarmBtMap.put(vo.getTbName(),vo);
+            }
+        }
+        //自定义报警初始化标签
+        alarmCtList=alarmCtService.initalAlarmVo();
+        if(!alarmCtList.isEmpty())
+        {
+            for(AlarmVo vo: alarmCtList)
+            {
+                alarmCtMap.put(vo.getTbName(),vo);
+            }
+        }
 //        inputOrOutPutService.initialInputOrOutputSpeed();
         logger.info("缓存结束------------------------------------------------------------");
     }

+ 10 - 5
alarm-web/src/main/java/com/gyee/alarm/mapper/auto/AlarmTsMapper.java

@@ -116,7 +116,9 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
             "<if test='stationid != null'>",
             "and stationid = #{stationid}",
             "</if>",
-
+            "<if test='alarmid != null'>",
+            "and alarmid = #{alarmid}",
+            "</if>",
             "and ts &gt;= #{begin}",
             "and ts &lt;= #{end}",
 //            " and  confirmed = false ",
@@ -125,7 +127,7 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
             " group by tbname,alarmid,alarmtype,characteristic,components,description,deviceid,devicename,devicetype,enabled,lineid,linename,modelId,projectid,projectname,rank,resettable,stationid,stationname,subcomponents,suffix,tagid,triggertype,uniformcode ",
             " order by ts desc limit #{limit},#{offset} ",
             "</script>"})
-    List<AlarmVo> selectByWtLimit(@Param("begin")long begin,@Param("end")long end,@Param("modelId")String modelId,@Param("superTableName") String superTableName,@Param("alarmType")String alarmType,@Param("stationid")String stationid,@Param("deviceid")String deviceid,@Param("description")String description, @Param("deviceType")String deviceType, @Param("components")String components,@Param("limit")int limit, @Param("offset") int offset);
+    List<AlarmVo> selectByWtLimit(@Param("begin")long begin,@Param("end")long end,@Param("modelId")String modelId,@Param("superTableName") String superTableName,@Param("alarmType")String alarmType,@Param("stationid")String stationid,@Param("deviceid")String deviceid,@Param("description")String description, @Param("deviceType")String deviceType, @Param("components")String components, @Param("alarmid")String alarmid,@Param("limit")int limit, @Param("offset") int offset);
 
     @Select({"<script>",
             "select count(tbname) from #{superTableName} " ,
@@ -148,6 +150,9 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
             "<if test='stationid != null'>",
             "and stationid = #{stationid}",
             "</if>",
+            "<if test='alarmid != null'>",
+            "and alarmid = #{alarmid}",
+            "</if>",
             "and ts &gt;= #{begin}",
             "and ts &lt;= #{end}",
 //            " and  confirmed = false ",
@@ -155,7 +160,7 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
             "</where>",
             " group by tbname,alarmid,alarmtype,characteristic,components,description,deviceid,devicename,devicetype,enabled,lineid,linename,modelId,projectid,projectname,rank,resettable,stationid,stationname,subcomponents,suffix,tagid,triggertype,uniformcode ",
             "</script>"})
-    List<Integer> selectByWtCount(@Param("begin")long begin,@Param("end")long end,@Param("modelId")String modelId,@Param("superTableName") String superTableName,@Param("alarmType")String alarmType,@Param("stationid")String stationid,@Param("deviceid")String deviceid,@Param("description")String description, @Param("deviceType")String deviceType, @Param("components")String components);
+    List<Integer> selectByWtCount(@Param("begin")long begin,@Param("end")long end,@Param("modelId")String modelId,@Param("superTableName") String superTableName,@Param("alarmType")String alarmType,@Param("stationid")String stationid,@Param("deviceid")String deviceid,@Param("description")String description, @Param("deviceType")String deviceType, @Param("components")String components,@Param("alarmid")String alarmid);
 //    @Select("select deviceid as wtId,stationid as stationId,alarmid,description,components as typeCode,max(timeLong) as maxSeconds,min(timeLong) as minSeconds,avg(timeLong) as avgSeconds,sum(timeLong) as totalSeconds,count(*) as total from alarmWt where ts>=#{begin} and ts<=#{end}  and alarmtype='windturbine'  and #{begin} group by deviceid,components,stationid,alarmid,description")
 
     @Select({"<script>",
@@ -204,6 +209,6 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
             "</script>"})
     List<ProBasicFeatureStat> findCtFeatureStat( @Param("begin")long begin, @Param("end") long end, @Param("stationid") String stationid, @Param("modelId")String modelId, @Param("components") List<String> components, @Param("alarmid") List<String> alarmid);
 
-    @Select("select last_row(*),tbname from #{superTableName} where tbname in( #{tbnames} ) group by tbname")
-    List<AlarmSimpleVo> selectLastRowByTbname(@Param("superTableName") String superTableName, @Param("tbnames") String tbnames);
+    @Select("${sql}")
+    List<AlarmSimpleVo> selectLastRowByTbname( @Param("sql") String sql);
 }

+ 16 - 0
alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProEconAlarmSwitchMapper.java

@@ -0,0 +1,16 @@
+package com.gyee.alarm.mapper.auto;
+
+import com.gyee.alarm.model.auto.ProEconAlarmSwitch;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 报警开关 Mapper 接口
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-09-07
+ */
+public interface ProEconAlarmSwitchMapper extends BaseMapper<ProEconAlarmSwitch> {
+
+}

+ 23 - 40
alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java

@@ -1,9 +1,9 @@
 package com.gyee.alarm.model.auto;
 
-import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
-import com.gyee.alarm.util.ChineseDes;
-import lombok.*;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * <p>
@@ -14,11 +14,8 @@ import lombok.*;
  * @since 2023-06-19
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
 @Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@ToString
+@EqualsAndHashCode(callSuper = true)
 public class ProEconAlarmConfiguration extends Model {
 
     private static final long serialVersionUID = 1L;
@@ -31,114 +28,100 @@ public class ProEconAlarmConfiguration extends Model {
     /**
      * 测点(如果根据uniformcode配置此字段可为空)
      */
-    @ChineseDes("测点")
-    @ExcelProperty("测点")
     private String tagId;
 
     /**
      * 报警类别,0触发,1触发,-1变化触发,4ai点触发
      */
-    @ChineseDes("报警触发条件")
-    @ExcelProperty("报警触发条件")
     private Integer triggerType;
 
     /**
      * 设备ID
      */
-    @ChineseDes("设备ID")
-    @ExcelProperty("设备ID")
     private String deviceId;
 
     /**
      * 后缀
      */
-    @ChineseDes("后缀")
-    @ExcelProperty("后缀")
     private String suffix;
 
     /**
      * 报警级别
      */
-    @ChineseDes("报警级别")
-    @ExcelProperty("报警级别")
     private Integer rank;
 
     /**
      * 统一识别码(如果通过uniformCode配置,则设备类型,场站,机型不能为空)
      */
-    @ChineseDes("统一识别码")
-    @ExcelProperty("统一识别码")
     private String uniformCode;
 
     /**
      * 场站ID
      */
-    @ChineseDes("场站ID")
-    @ExcelProperty("场站ID")
     private String stationId;
 
     /**
-     * 机型ID
+     * 机型
      */
-    @ChineseDes("机型ID")
-    @ExcelProperty("机型ID")
     private String modelId;
 
     /**
      * 报警类型 /自定义报警 custom,风机 windturbine,场站 station,升压站 booststation
      */
-    @ChineseDes("报警类型")
-    @ExcelProperty("报警类型")
     private String alarmType;
 
     /**
      * 设备类型,场站 station,风机 windturbine,升压站 booststation
      */
-    @ChineseDes("设备类型")
-    @ExcelProperty("设备类型")
     private String deviceType;
 
     /**
      * 设备部件
      */
-    @ChineseDes("设备部件")
-    @ExcelProperty("设备部件")
     private String components;
 
     /**
      * 设备子部件
      */
-    @ChineseDes("设备子部件")
-    @ExcelProperty("设备子部件")
     private String subcomponents;
 
     /**
      * 报警描述
      */
-    @ChineseDes("报警描述")
-    @ExcelProperty("报警描述")
     private String description;
 
     /**
      * 特性
      */
-    @ChineseDes("特性")
-    @ExcelProperty("特性")
     private String characteristic;
 
     /**
      * 是否可复位
      */
-    @ChineseDes("是否可复位")
-    @ExcelProperty("是否可复位")
     private Boolean resetTable;
 
     /**
      * 是否启用
      */
-    @ChineseDes("是否启用")
-    @ExcelProperty("是否启用")
     private Boolean enable;
 
+    /**
+     * 故障名称
+     */
+    private String name;
+
+    /**
+     *故障码
+     */
+    private String nemCode;
+
+    /**
+     * 故障原因
+     */
+    private String faultCause;
 
+    /**
+     * 排查方法
+     */
+    private String resolvent;
 }

+ 13 - 1
alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmInfo.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.Date;
+
 /**
  * <p>
  * 报警缓存表
@@ -29,7 +31,7 @@ public class ProEconAlarmInfo extends Model {
     /**
      * 最近更新时间戳
      */
-    private Long ts;
+    private Date lastUpdateTime;
 
     /**
      * 值
@@ -165,4 +167,14 @@ public class ProEconAlarmInfo extends Model {
      */
     private Integer isOpen;
 
+    /**
+     * 确认时间
+     */
+    private Date confirmedTime;
+
+    /**
+     * 关闭时间
+     */
+    private Date closeTime;
+
 }

+ 47 - 0
alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmSwitch.java

@@ -0,0 +1,47 @@
+package com.gyee.alarm.model.auto;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 报警开关
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-09-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProEconAlarmSwitch extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编号
+     */
+    private String id;
+
+    /**
+     * 报警级别
+     */
+    private Integer alarmLevel;
+
+    /**
+     * 是否弹窗
+     */
+    private Integer isAlart;
+
+    /**
+     * 是否报警声音
+     */
+    private Integer isAlarmSound;
+
+    /**
+     * 是否持续报警
+     */
+    private Integer isContinuousAlarm;
+
+
+}

+ 20 - 0
alarm-web/src/main/java/com/gyee/alarm/model/vo/AlarmVo.java

@@ -43,4 +43,24 @@ public class AlarmVo {
 
     private Double timelong;
 
+    /**
+     * 故障名称
+     */
+    private String name;
+
+    /**
+     *故障码
+     */
+    private String nemCode;
+
+    /**
+     * 故障原因
+     */
+    private String faultCause;
+
+    /**
+     * 排查方法
+     */
+    private String resolvent;
+
 }

+ 93 - 0
alarm-web/src/main/java/com/gyee/alarm/service/AlarmBtService.java

@@ -0,0 +1,93 @@
+package com.gyee.alarm.service;
+
+import com.gyee.alarm.init.CacheContext;
+import com.gyee.alarm.model.auto.ProBasicSubStation;
+import com.gyee.alarm.model.auto.ProEconAlarmConfiguration;
+import com.gyee.alarm.model.auto.ProEconAlarmInfo;
+import com.gyee.alarm.model.vo.*;
+import com.gyee.alarm.service.auto.IAlarmTsService;
+import com.gyee.alarm.service.auto.IProEconAlarmInfoService;
+import com.gyee.alarm.util.DateUtils;
+import com.gyee.alarm.util.StringUtils;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.websocket.EncodeException;
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Service
+
+public class AlarmBtService {
+    @Resource
+    private IAlarmTsService alarmTsService;
+    @Resource
+    private IProEconAlarmInfoService proEconAlarmInfoService;
+
+
+
+
+
+    public List<AlarmVo> initalAlarmVo() {
+
+        List<ProEconAlarmConfiguration> btalarmls = CacheContext.btalarmls;
+
+
+        List<AlarmVo> alarmVoList = new ArrayList<>();
+        if (!btalarmls.isEmpty()) {
+            for (ProEconAlarmConfiguration alarm : btalarmls) {
+                if (StringUtils.notEmp(alarm.getTagId()) &&
+                        (alarm.getAlarmType().equals(AlarmTypeValue.BT.getCode()) || alarm.getAlarmType().equals(AlarmTypeValue.BTE.getCode()))) {
+                    AlarmVo vo = new AlarmVo();
+                    StringBuilder tbName = new StringBuilder();
+                    tbName.append(alarm.getStationId()).append("_").append(alarm.getId());
+                    vo.setTbName(String.valueOf(tbName));
+                    vo.setAlarmid(alarm.getId());
+                    vo.setTagid(alarm.getTagId());
+                    vo.setAlarmtype(alarm.getAlarmType());
+                    vo.setCharacteristic(alarm.getCharacteristic());
+                    vo.setComponents(alarm.getComponents());
+                    vo.setDescription(alarm.getDescription());
+                    vo.setDeviceid("");
+                    vo.setDevicename("");
+                    vo.setDevicetype(DeviceTypeValue.BT.getCode());
+                    vo.setEnabled(alarm.getEnable());
+                    vo.setLineid("");
+                    vo.setLinename("");
+                    vo.setModelId(alarm.getModelId());
+                    vo.setProjectid("");
+                    vo.setProjectname("");
+                    vo.setRank(alarm.getRank());
+                    vo.setResettable(alarm.getResetTable());
+                    vo.setStationid(alarm.getStationId());
+                    if (CacheContext.subwpmap.containsKey(alarm.getStationId())) {
+                        ProBasicSubStation wp = CacheContext.subwpmap.get(alarm.getStationId());
+                        vo.setStationname(wp.getName());
+                    }
+                    vo.setSubcomponents(alarm.getSubcomponents());
+                    vo.setSuffix(alarm.getSuffix());
+                    vo.setTriggertype(alarm.getTriggerType());
+                    vo.setUniformcode(alarm.getUniformCode());
+                    vo.setSuperTableName(AlarmSuperTalbeType.BT.getCode());
+                    vo.setVal(0);
+                    vo.setOval(0);
+
+                    vo.setName(alarm.getName());
+                    vo.setNemCode(alarm.getNemCode());
+                    vo.setFaultCause(alarm.getFaultCause());
+                    vo.setResolvent(alarm.getResolvent());
+                    alarmVoList.add(vo);
+                }
+            }
+        }
+
+        return alarmVoList;
+    }
+
+
+
+}

+ 339 - 0
alarm-web/src/main/java/com/gyee/alarm/service/AlarmCtService.java

@@ -0,0 +1,339 @@
+package com.gyee.alarm.service;
+
+import com.gyee.alarm.init.CacheContext;
+import com.gyee.alarm.model.auto.*;
+import com.gyee.alarm.model.vo.*;
+import com.gyee.alarm.service.auto.IAlarmTsService;
+import com.gyee.alarm.service.auto.IProEconAlarmInfoService;
+import com.gyee.alarm.util.DateUtils;
+import com.gyee.alarm.util.StringUtils;
+
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.websocket.EncodeException;
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Service
+
+public class AlarmCtService {
+    @Resource
+    private IAlarmTsService alarmTsService;
+
+    @Resource
+    private IProEconAlarmInfoService proEconAlarmInfoService;
+
+
+
+
+    public List<AlarmVo> initalAlarmVo() {
+
+        List<AlarmVo> alarmVoList = new ArrayList<>();
+        Map<String, List<ProEconAlarmRule>> alarmRulesMap = CacheContext.alarmRulesMap;
+
+        //风机自定义报警
+        wtCustomAlarm(alarmVoList, alarmRulesMap);
+        //逆变器自定义报警
+        lnCustomAlarm(alarmVoList, alarmRulesMap);
+//        //场站自定义报警
+//        wpCustomAlarm(alarmVoList, alarmRulesMap);
+        //升压站自定义报警
+        btCustomAlarm(alarmVoList, alarmRulesMap);
+        return alarmVoList;
+    }
+
+    private void wtCustomAlarm(List<AlarmVo> alarmVoList, Map<String, List<ProEconAlarmRule>> alarmRulesMap) {
+
+        Map<String, List<ProEconAlarmRule>> armap = new HashMap<>();
+
+        if (alarmRulesMap.containsKey(DeviceTypeValue.WT.getCode())) {
+            List<ProEconAlarmRule> arls = alarmRulesMap.get(DeviceTypeValue.WT.getCode());
+            if (!arls.isEmpty()) {
+                for (ProEconAlarmRule ar : arls) {
+                    StringBuilder sb = new StringBuilder();
+                    sb.append(ar.getStationId() + ar.getModelId());
+                    if (armap.containsKey(String.valueOf(sb))) {
+                        List<ProEconAlarmRule> ls = armap.get(String.valueOf(sb));
+                        ls.add(ar);
+                    } else {
+                        List<ProEconAlarmRule> ls = new ArrayList<>();
+                        ls.add(ar);
+                        armap.put(String.valueOf(sb), ls);
+                    }
+                }
+            }
+        }
+        for (ProBasicEquipment wt : CacheContext.wtls) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(wt.getWindpowerstationId() + wt.getModelId());
+
+            if (armap.containsKey(String.valueOf(sb))) {
+                List<ProEconAlarmRule> alarmls = armap.get(String.valueOf(sb));
+
+                if (!alarmls.isEmpty()) {
+                    for (ProEconAlarmRule alarm : alarmls) {
+                        AlarmVo vo = new AlarmVo();
+                        StringBuilder tbName = new StringBuilder();
+                        tbName.append(wt.getId()).append("_").append(alarm.getId());
+                        vo.setTbName(String.valueOf(tbName));
+                        vo.setAlarmid(alarm.getId());
+                        vo.setTagid(alarm.getExpression());
+                        vo.setAlarmtype(AlarmTypeValue.CT.getCode());
+                        vo.setCharacteristic(alarm.getName());
+                        vo.setComponents(alarm.getRelatedParts());
+                        vo.setDescription(alarm.getDescription());
+                        vo.setDeviceid(wt.getId());
+                        vo.setDevicename(wt.getName());
+                        vo.setDevicetype(DeviceTypeValue.WT.getCode());
+                        vo.setEnabled(alarm.getEnable());
+                        vo.setLineid(wt.getLineId());
+                        if (CacheContext.lnmap.containsKey(wt.getLineId())) {
+                            ProBasicLine ln = CacheContext.lnmap.get(wt.getLineId());
+                            vo.setLinename(ln.getName());
+                        }
+                        vo.setModelId(wt.getModelId());
+                        vo.setProjectid(wt.getProjectId());
+                        if (CacheContext.pjmap.containsKey(wt.getProjectId())) {
+                            ProBasicProject pj = CacheContext.pjmap.get(wt.getProjectId());
+                            vo.setProjectname(pj.getName());
+                        }
+                        vo.setRank(alarm.getRank());
+                        vo.setResettable(false);
+                        vo.setStationid(wt.getWindpowerstationId());
+                        if (CacheContext.wpmap.containsKey(wt.getWindpowerstationId())) {
+                            ProBasicPowerstation wp = CacheContext.wpmap.get(wt.getWindpowerstationId());
+                            vo.setStationname(wp.getName());
+                        }
+                        vo.setSubcomponents("");
+                        vo.setSuffix("");
+                        vo.setTriggertype(1);
+                        vo.setUniformcode("");
+                        vo.setSuperTableName(AlarmSuperTalbeType.CT.getCode());
+                        vo.setVal(0);
+
+                        vo.setCharacteristic("自定义");
+                        vo.setFaultCause(alarm.getDescription());
+                        vo.setResolvent(alarm.getExpression());
+                        alarmVoList.add(vo);
+                    }
+                }
+            }
+        }
+    }
+
+    private void lnCustomAlarm(List<AlarmVo> alarmVoList, Map<String, List<ProEconAlarmRule>> alarmRulesMap) {
+
+        Map<String, List<ProEconAlarmRule>> armap = new HashMap<>();
+
+        if (alarmRulesMap.containsKey(DeviceTypeValue.IN.getCode())) {
+            List<ProEconAlarmRule> arls = alarmRulesMap.get(DeviceTypeValue.IN.getCode());
+            if (!arls.isEmpty()) {
+                for (ProEconAlarmRule ar : arls) {
+                    StringBuilder sb = new StringBuilder();
+                    sb.append(ar.getStationId() + ar.getModelId());
+                    if (armap.containsKey(String.valueOf(sb))) {
+                        List<ProEconAlarmRule> ls = armap.get(String.valueOf(sb));
+                        ls.add(ar);
+                    } else {
+                        List<ProEconAlarmRule> ls = new ArrayList<>();
+                        ls.add(ar);
+                        armap.put(String.valueOf(sb), ls);
+                    }
+                }
+            }
+        }
+        for (ProBasicEquipment wt : CacheContext.wtls) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(wt.getWindpowerstationId() + wt.getModelId());
+
+            if (armap.containsKey(String.valueOf(sb))) {
+                List<ProEconAlarmRule> alarmls = armap.get(String.valueOf(sb));
+
+                if (!alarmls.isEmpty()) {
+                    for (ProEconAlarmRule alarm : alarmls) {
+                        AlarmVo vo = new AlarmVo();
+                        StringBuilder tbName = new StringBuilder();
+                        tbName.append(wt.getId()).append("_").append(alarm.getId());
+                        vo.setTbName(String.valueOf(tbName));
+                        vo.setAlarmid(alarm.getId());
+                        vo.setTagid(alarm.getExpression());
+                        vo.setAlarmtype(AlarmTypeValue.CT.getCode());
+                        vo.setCharacteristic(alarm.getName());
+                        vo.setComponents(alarm.getRelatedParts());
+                        vo.setDescription(alarm.getDescription());
+                        vo.setDeviceid(wt.getId());
+                        vo.setDevicename(wt.getName());
+                        vo.setDevicetype(DeviceTypeValue.IN.getCode());
+                        vo.setEnabled(alarm.getEnable());
+                        vo.setLineid(wt.getLineId());
+                        if (CacheContext.lnmap.containsKey(wt.getLineId())) {
+                            ProBasicLine ln = CacheContext.lnmap.get(wt.getLineId());
+                            vo.setLinename(ln.getName());
+                        }
+                        vo.setModelId(wt.getModelId());
+                        vo.setProjectid(wt.getProjectId());
+                        if (CacheContext.pjmap.containsKey(wt.getProjectId())) {
+                            ProBasicProject pj = CacheContext.pjmap.get(wt.getProjectId());
+                            vo.setProjectname(pj.getName());
+                        }
+                        vo.setRank(alarm.getRank());
+                        vo.setResettable(false);
+                        vo.setStationid(wt.getWindpowerstationId());
+                        if (CacheContext.wpmap.containsKey(wt.getWindpowerstationId())) {
+                            ProBasicPowerstation wp = CacheContext.wpmap.get(wt.getWindpowerstationId());
+                            vo.setStationname(wp.getName());
+                        }
+                        vo.setSubcomponents("");
+                        vo.setSuffix("");
+                        vo.setTriggertype(1);
+                        vo.setUniformcode("");
+                        vo.setSuperTableName(AlarmSuperTalbeType.CT.getCode());
+                        vo.setVal(0);
+
+                        vo.setCharacteristic("自定义");
+                        vo.setFaultCause(alarm.getDescription());
+                        vo.setResolvent(alarm.getExpression());
+                        alarmVoList.add(vo);
+                    }
+                }
+            }
+        }
+    }
+
+    private void wpCustomAlarm(List<AlarmVo> alarmVoList, Map<String, List<ProEconAlarmRule>> alarmRulesMap) {
+        List<ProEconAlarmRule> alarmls = new ArrayList<>();
+        if (alarmRulesMap.containsKey(DeviceTypeValue.WP.getCode())) {
+            alarmls = alarmRulesMap.get(DeviceTypeValue.WP.getCode());
+
+        }
+
+        for (ProBasicPowerstation wp : CacheContext.wpls) {
+            if (!alarmls.isEmpty()) {
+                for (ProEconAlarmRule alarm : alarmls) {
+                    AlarmVo vo = new AlarmVo();
+                    StringBuilder tbName = new StringBuilder();
+                    tbName.append(wp.getId()).append("_").append(alarm.getId());
+                    vo.setTbName(String.valueOf(tbName));
+                    vo.setAlarmid(alarm.getId());
+                    vo.setTagid(alarm.getExpression());
+                    vo.setAlarmtype(AlarmTypeValue.CT.getCode());
+                    vo.setCharacteristic(alarm.getName());
+                    vo.setComponents(alarm.getRelatedParts());
+                    vo.setDescription(alarm.getDescription());
+                    vo.setDeviceid("");
+                    vo.setDevicename("");
+                    vo.setDevicetype(DeviceTypeValue.WP.getCode());
+                    vo.setEnabled(alarm.getEnable());
+                    vo.setLineid("");
+                    vo.setLinename("");
+                    vo.setModelId("");
+                    vo.setProjectid("");
+                    vo.setProjectname("");
+                    vo.setRank(alarm.getRank());
+                    vo.setResettable(false);
+                    vo.setStationid(wp.getId());
+                    vo.setStationname(wp.getName());
+                    vo.setSubcomponents("");
+                    vo.setSuffix("");
+                    vo.setTriggertype(1);
+                    vo.setUniformcode("");
+                    vo.setSuperTableName(AlarmSuperTalbeType.CT.getCode());
+                    vo.setVal(0);
+                    alarmVoList.add(vo);
+                }
+            }
+        }
+    }
+
+    private void btCustomAlarm(List<AlarmVo> alarmVoList, Map<String, List<ProEconAlarmRule>> alarmRulesMap) {
+
+
+        Map<String,List<ProEconAlarmRule>> alarmMap=new HashMap<>();
+
+        if (alarmRulesMap.containsKey(DeviceTypeValue.BT.getCode())) {
+
+            List<ProEconAlarmRule>  alarmls = alarmRulesMap.get(DeviceTypeValue.BT.getCode());
+
+            if(!alarmls.isEmpty())
+            {
+                for(ProEconAlarmRule alarm:alarmls)
+                {
+                    if (StringUtils.notEmp(alarm) && StringUtils.notEmp(alarm.getElectricalId()))
+                    {
+                        String [] ids=alarm.getElectricalId().split(",");
+                        if(ids.length>0)
+                        {
+                            for(int i=0;i<ids.length;i++)
+                            {
+                                if(alarmMap.containsKey(ids[i]))
+                                {
+                                    List<ProEconAlarmRule> arls=alarmMap.get(ids[i]);
+                                    arls.add(alarm);
+
+                                }else
+                                {
+                                    List<ProEconAlarmRule> arls=new ArrayList<>();
+                                    arls.add(alarm);
+                                    alarmMap.put(ids[i],arls);
+                                }
+
+                            }
+                        }
+                    }
+
+                }
+            }
+        }
+
+        for (ProBasicSubStation wp : CacheContext.subwpls) {
+
+            if (!alarmMap.isEmpty() && alarmMap.containsKey(wp.getId())) {
+
+                List<ProEconAlarmRule> alarmls = alarmMap.get(wp.getId());
+                for (ProEconAlarmRule alarm : alarmls) {
+                    AlarmVo vo = new AlarmVo();
+                    StringBuilder tbName = new StringBuilder();
+
+                    tbName.append(wp.getId()).append("_").append(alarm.getId());
+                    vo.setTbName(String.valueOf(tbName));
+                    vo.setAlarmid(alarm.getId());
+                    vo.setTagid(alarm.getExpression());
+                    vo.setAlarmtype(AlarmTypeValue.CT.getCode());
+                    vo.setCharacteristic(alarm.getName());
+                    vo.setComponents(alarm.getRelatedParts());
+                    vo.setDescription(alarm.getDescription());
+                    vo.setDeviceid("");
+                    vo.setDevicename("");
+                    vo.setDevicetype(DeviceTypeValue.BT.getCode());
+                    vo.setEnabled(alarm.getEnable());
+                    vo.setLineid("");
+                    vo.setLinename("");
+                    vo.setModelId("");
+                    vo.setProjectid("");
+                    vo.setProjectname("");
+                    vo.setRank(alarm.getRank());
+                    vo.setResettable(false);
+                    vo.setStationid(wp.getId());
+                    vo.setStationname(wp.getName());
+                    vo.setSubcomponents("");
+                    vo.setSuffix("");
+                    vo.setTriggertype(1);
+                    vo.setUniformcode("");
+                    vo.setSuperTableName(AlarmSuperTalbeType.CT.getCode());
+                    vo.setVal(0);
+                    vo.setOval(0);
+
+                    vo.setCharacteristic("自定义");
+                    vo.setFaultCause(alarm.getDescription());
+                    vo.setResolvent(alarm.getExpression());
+                    alarmVoList.add(vo);
+                }
+            }
+        }
+    }
+
+
+}

+ 136 - 17
alarm-web/src/main/java/com/gyee/alarm/service/AlarmHistoryService.java

@@ -11,6 +11,7 @@ import com.gyee.alarm.mapper.auto.AlarmTsMapper;
 import com.gyee.alarm.model.auto.*;
 import com.gyee.alarm.model.vo.*;
 import com.gyee.alarm.service.auto.IAlarmTsService;
+import com.gyee.alarm.service.auto.IProEconAlarmInfoService;
 import com.gyee.alarm.util.DateUtils;
 import com.gyee.alarm.util.SnowflakeGenerator;
 import com.gyee.common.model.StringUtils;
@@ -37,27 +38,73 @@ public class AlarmHistoryService   {
     @Resource
     private IAlarmTsService alarmTsService;
 
+    @Resource
+    private IProEconAlarmInfoService proEconAlarmInfoService;
+
     public  void updateAlarms(List<AlarmTag> ls) {
 
         if (com.gyee.alarm.util.StringUtils.notEmp(ls) && !ls.isEmpty()) {
 
-            StringBuilder sb=new StringBuilder();
+            StringBuilder wtsb=new StringBuilder();
+            StringBuilder ctsb=new StringBuilder();
+            StringBuilder btsb=new StringBuilder();
             Map<String, AlarmSimpleVo> map=new HashMap<>();
             for (AlarmTag alarm : ls) {
-                sb.append("'").append(alarm.getId()).append("',");
+
+                if(alarm.getAlarmType().equals(AlarmTypeValue.WT.getCode()) || alarm.getAlarmType().equals(AlarmTypeValue.IN.getCode()) )
+                {
+                    wtsb.append("'").append(alarm.getId().toLowerCase()).append("',");
+                }else    if(alarm.getAlarmType().equals(AlarmTypeValue.BT.getCode()))
+                {
+                    btsb.append("'").append(alarm.getId().toLowerCase()).append("',");
+                }else    if(alarm.getAlarmType().equals(AlarmTypeValue.CT.getCode()))
+                {
+                    ctsb.append("'").append(alarm.getId().toLowerCase()).append("',");
+                }
+
+
 
             }
+            String wtids=null;
+            String ctids=null;
+            String btids=null;
+
+            if(wtsb.length()>0)
+            {
+                wtids=wtsb.substring(0,wtsb.length()-1);
+            }
+            if(ctsb.length()>0)
+            {
+                ctids=ctsb.substring(0,ctsb.length()-1);
+            }
+            if(btsb.length()>0)
+            {
+                 btids=btsb.substring(0,btsb.length()-1);
+            }
+
+            List<AlarmSimpleVo> alarmWtls=new ArrayList<>();
+            List<AlarmSimpleVo> alarmCtls=new ArrayList<>();
+            List<AlarmSimpleVo> alarmBtls=new ArrayList<>();
+
+            if(null !=wtids)
+            {
+                 alarmWtls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(),wtids);
+            }
+            if(null !=ctids)
+            {
+               alarmCtls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.CT.getCode(),ctids);
+            }
+            if(null !=btids)
+            {
+                alarmBtls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.BT.getCode(),btids);
+            }
 
-            String ids=sb.substring(0,sb.length()-1);
 
-            List<AlarmSimpleVo> alarmWtls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(),ids);
-            List<AlarmSimpleVo> alarmCtls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.CT.getCode(),ids);
-            List<AlarmSimpleVo> alarmBtls=alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.BT.getCode(),ids);
             if(!alarmWtls.isEmpty())
             {
                 for(AlarmSimpleVo vo:alarmWtls)
                 {
-                    map.put(vo.getTbName(),vo);
+                    map.put(vo.getTbName().toLowerCase(),vo);
                 }
             }
 
@@ -65,7 +112,7 @@ public class AlarmHistoryService   {
             {
                 for(AlarmSimpleVo vo:alarmCtls)
                 {
-                    map.put(vo.getTbName(),vo);
+                    map.put(vo.getTbName().toLowerCase(),vo);
                 }
             }
 
@@ -73,17 +120,20 @@ public class AlarmHistoryService   {
             {
                 for(AlarmSimpleVo vo:alarmBtls)
                 {
-                    map.put(vo.getTbName(),vo);
+                    map.put(vo.getTbName().toLowerCase(),vo);
                 }
             }
 
             for (AlarmTag alarm : ls) {
 
 
-                if(map.containsKey(alarm.getId()))
+                if(map.containsKey(alarm.getId().toLowerCase()))
                 {
-                    AlarmSimpleVo tag=map.get(alarm.getId());
+                    AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
                     alarm.setTs(tag.getTs().getTime());
+                    alarm.setVal((double)tag.getVal());
+                    alarm.setEndts(null!=tag.getEndts()?tag.getEndts().getTime():null);
+                    alarm.setTimeLong(tag.getTimelong());
 
 //                    Date begin = new Date(alarm.getEndts());
 //                    Date end = new Date(alarm.getTs());
@@ -95,7 +145,71 @@ public class AlarmHistoryService   {
             }
 
             alarmTsService.insertList(ls);
+            if (com.gyee.alarm.util.StringUtils.notEmp(ls) && !ls.isEmpty()) {
+
+                List<ProEconAlarmInfo> valuels = new ArrayList<>();
+                for (AlarmTag alarm : ls) {
+                    if (CacheContext.alarmWtMap.containsKey(alarm.getId())) {
+                        AlarmVo vo = CacheContext.alarmWtMap.get(alarm.getId());
+                        ProEconAlarmInfo po = new ProEconAlarmInfo();
+                        po.setTbname(vo.getTbName());
+                        po.setLastUpdateTime(new Date(alarm.getEndts()));
+                        po.setTagId(alarm.getTagId());
+                        po.setTriggerType(alarm.getTriggerType());
+                        po.setAlarmId(vo.getAlarmid());
+                        po.setDeviceId(vo.getDeviceid());
+                        po.setSubcomponents(vo.getSuffix());
+                        po.setRank(vo.getRank());
+                        po.setConfirmed(alarm.getConfirmed());
+                        po.setUniformCode(vo.getUniformcode());
+                        po.setAlarmType(vo.getAlarmtype());
+                        po.setDeviceType(vo.getDevicetype());
+                        po.setComponents(vo.getComponents());
+                        po.setSubcomponents(vo.getSubcomponents());
+                        po.setDescription(vo.getDescription());
+                        po.setModelId(vo.getModelId());
+                        po.setResetTable(vo.getResettable());
+                        po.setEnable(vo.getEnabled());
+                        po.setCharacteristic(vo.getCharacteristic());
+                        po.setStationId(vo.getStationid());
+                        po.setProjectId(vo.getProjectid());
+                        po.setLineId(vo.getLineid());
+                        po.setStationName(vo.getStationname());
+                        po.setProjectiName(vo.getProjectname());
+                        po.setLineidName(vo.getLinename());
+                        po.setDeviceName(vo.getDevicename());
+                        po.setOval(alarm.getOval().intValue());
+                        po.setCloseTime(new Date(alarm.getEndts()));
+                        po.setIsOpen(0);
+                        po.setVal(alarm.getVal().intValue());
+
+                        valuels.add(po);
+                    }
+                }
+
+                List<String> idls = new ArrayList<>();
+                for (ProEconAlarmInfo vo : valuels) {
+                    idls.add(vo.getTbname());
+                }
+                if (!idls.isEmpty()) {
+
+                    proEconAlarmInfoService.removeByIds(idls);
+                }
 
+                List<ProEconAlarmInfo> templs = new ArrayList<>();
+                for (ProEconAlarmInfo vo : valuels) {
+                    templs.add(vo);
+                    if (templs.size() == 1000) {
+                        proEconAlarmInfoService.saveBatch(templs);
+                        templs = new ArrayList<>();
+                    }
+                }
+
+                if (!templs.isEmpty()) {
+                    proEconAlarmInfoService.saveBatch(templs);
+                }
+
+            }
 
         }
 
@@ -114,7 +228,7 @@ public class AlarmHistoryService   {
      * @param pageSize 每页多少条
      * @return
      */
-    public Map<String,Object> findAlarmlist(String modelId, long begin,long end ,String alarmType,String stationid,String deviceid,String description,String deviceType,String components, int pageNum, int pageSize) {
+    public Map<String,Object> findAlarmlist(String modelId, long begin,long end ,String alarmType,String stationid,String deviceid,String description,String deviceType,String components,String alarmId, int pageNum, int pageSize) {
 
         Map<String,Object> map=new HashMap<>();
 
@@ -136,6 +250,11 @@ public class AlarmHistoryService   {
             {
                 superTableName= AlarmSuperTalbeType.WT.getCode();
 
+            }
+            else if(AlarmTypeValue.IN.getCode().equals(alarmType))
+            {
+                superTableName= AlarmSuperTalbeType.WT.getCode();
+
             }else if(AlarmTypeValue.CT.getCode().equals(alarmType))
             {
                 superTableName= AlarmSuperTalbeType.CT.getCode();
@@ -182,9 +301,9 @@ public class AlarmHistoryService   {
         {
             components=null;
         }
-        vos = alarmTsMapper.selectByWtLimit(begin,end,modelId,superTableName, alarmType, stationid, deviceid, description,deviceType,components, pageNum*pageSize, (pageNum*pageSize+pageSize));
+        vos = alarmTsMapper.selectByWtLimit(begin,end,modelId,superTableName, alarmType, stationid, deviceid, description,deviceType,components, alarmId,pageNum*pageSize, (pageNum*pageSize+pageSize));
         map.put("ls",vos);
-        List<Integer> total=alarmTsMapper.selectByWtCount(begin,end,modelId,superTableName, alarmType, stationid, deviceid, description,deviceType,components);
+        List<Integer> total=alarmTsMapper.selectByWtCount(begin,end,modelId,superTableName, alarmType, stationid, deviceid, description,deviceType,components,alarmId);
         map.put("total",total.size());
         return map;
     }
@@ -204,15 +323,15 @@ public class AlarmHistoryService   {
             Date beginDate = DateUtils.truncate(endDate);
             if(type.equals(AlarmTypeValue.BT.getCode()))
             {
-                vos = alarmTsMapper.selectByWtLimit(beginDate.getTime(),endDate.getTime(),null,AlarmSuperTalbeType.BT.getCode(), AlarmTypeValue.BT.getCode(), null, null, null,null,null, 1, home_pagep_size);
+                vos = alarmTsMapper.selectByWtLimit(beginDate.getTime(),endDate.getTime(),null,AlarmSuperTalbeType.BT.getCode(), AlarmTypeValue.BT.getCode(), null, null, null,null,null, null,1, home_pagep_size);
 
             }else if(type.equals(AlarmTypeValue.WT.getCode()))
             {
-                vos = alarmTsMapper.selectByWtLimit(beginDate.getTime(),endDate.getTime(),null,AlarmSuperTalbeType.WT.getCode(), AlarmTypeValue.WT.getCode(), null, null, null,null, null,1, home_pagep_size);
+                vos = alarmTsMapper.selectByWtLimit(beginDate.getTime(),endDate.getTime(),null,AlarmSuperTalbeType.WT.getCode(), AlarmTypeValue.WT.getCode(), null, null, null,null, null,null,1, home_pagep_size);
 
             }else if(type.equals(AlarmTypeValue.CT.getCode()))
             {
-                vos = alarmTsMapper.selectByWtLimit(beginDate.getTime(),endDate.getTime(),null,AlarmSuperTalbeType.CT.getCode(), AlarmTypeValue.CT.getCode(), null, null, null,null, null,1, home_pagep_size);
+                vos = alarmTsMapper.selectByWtLimit(beginDate.getTime(),endDate.getTime(),null,AlarmSuperTalbeType.CT.getCode(), AlarmTypeValue.CT.getCode(), null, null, null,null, null,null,1, home_pagep_size);
 
             }
 

+ 169 - 0
alarm-web/src/main/java/com/gyee/alarm/service/AlarmInService.java

@@ -0,0 +1,169 @@
+package com.gyee.alarm.service;
+
+import com.gyee.alarm.init.CacheContext;
+import com.gyee.alarm.model.auto.*;
+import com.gyee.alarm.model.vo.*;
+import com.gyee.alarm.service.auto.IAlarmTsService;
+import com.gyee.alarm.service.auto.IProEconAlarmInfoService;
+import com.gyee.alarm.util.DateUtils;
+import com.gyee.alarm.util.StringUtils;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.websocket.EncodeException;
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Service
+
+public class AlarmInService {
+    @Resource
+    private IAlarmTsService alarmTsService;
+    @Resource
+    private IProEconAlarmInfoService proEconAlarmInfoService;
+    @Value("${initialcode}")
+    private String initialcode;
+
+
+
+    public List<AlarmVo> initalAlarmVo() {
+
+        List<AlarmVo> alarmVoList=new ArrayList<>();
+        Map<String, List<ProEconAlarmConfiguration>> wtAlarmMap = CacheContext.wtAlarmMap;
+        Map<String, Map<String, ProBasicEquipmentPoint>> wtpAimap = CacheContext.wtpAimap;
+        for (ProBasicEquipment wt : CacheContext.wtls) {
+
+            if (wtpAimap.containsKey(wt.getId())) {
+                Map<String, ProBasicEquipmentPoint> pointMap = wtpAimap.get(wt.getId());
+
+                StringBuilder sb = new StringBuilder();
+                sb.append(wt.getWindpowerstationId() + wt.getModelId());
+                if (StringUtils.notEmp(pointMap) && wtAlarmMap.containsKey(String.valueOf(sb))) {
+                    List<ProEconAlarmConfiguration> alarmls = wtAlarmMap.get(String.valueOf(sb));
+
+                    if (!alarmls.isEmpty()) {
+                        for (ProEconAlarmConfiguration alarm : alarmls) {
+                            if (pointMap.containsKey(alarm.getUniformCode())) {
+                                ProBasicEquipmentPoint equipmentPoint = pointMap.get(alarm.getUniformCode());
+
+                                if(StringUtils.notEmp(initialcode) &&
+                                        StringUtils.notEmp(equipmentPoint.getNemCode()) &&
+                                        !equipmentPoint.getNemCode().equals(initialcode) &&
+                                        alarm.getAlarmType().equals(AlarmTypeValue.IN.getCode())
+                                )
+                                {
+                                    AlarmVo vo=new AlarmVo();
+                                    StringBuilder tbName = new StringBuilder();
+                                    tbName.append(wt.getId()).append("_").append(alarm.getId());
+                                    vo.setTbName(String.valueOf(tbName));
+                                    vo.setAlarmid(alarm.getId());
+                                    vo.setTagid(equipmentPoint.getNemCode());
+                                    vo.setAlarmtype(alarm.getAlarmType());
+                                    vo.setCharacteristic(alarm.getCharacteristic());
+                                    vo.setComponents(alarm.getComponents());
+                                    vo.setDescription(alarm.getDescription());
+                                    vo.setDeviceid(wt.getId());
+                                    vo.setDevicename(wt.getName());
+                                    vo.setDevicetype(alarm.getDeviceType());
+                                    vo.setEnabled(alarm.getEnable());
+                                    vo.setLineid(wt.getLineId());
+                                    if(CacheContext.lnmap.containsKey(wt.getLineId()))
+                                    {
+                                        ProBasicLine ln=CacheContext.lnmap.get(wt.getLineId());
+                                        vo.setLinename(ln.getName());
+                                    }
+                                    vo.setModelId(wt.getModelId());
+                                    vo.setProjectid(wt.getProjectId());
+                                    if(CacheContext.pjmap.containsKey(wt.getProjectId()))
+                                    {
+                                        ProBasicProject pj=CacheContext.pjmap.get(wt.getProjectId());
+                                        vo.setProjectname(pj.getName());
+                                    }
+                                    vo.setRank(alarm.getRank());
+                                    vo.setResettable(alarm.getResetTable());
+                                    vo.setStationid(wt.getWindpowerstationId());
+                                    if(CacheContext.wpmap.containsKey(wt.getWindpowerstationId()))
+                                    {
+                                        ProBasicPowerstation wp=CacheContext.wpmap.get(wt.getWindpowerstationId());
+                                        vo.setStationname(wp.getName());
+                                    }
+                                    vo.setSubcomponents(alarm.getSubcomponents());
+                                    vo.setSuffix(alarm.getSuffix());
+                                    vo.setTriggertype(alarm.getTriggerType());
+                                    vo.setUniformcode(alarm.getUniformCode());
+                                    vo.setSuperTableName(AlarmSuperTalbeType.WT.getCode());
+                                    vo.setVal(0);
+
+                                    vo.setName(alarm.getName());
+                                    vo.setNemCode(alarm.getNemCode());
+                                    vo.setFaultCause(alarm.getFaultCause());
+                                    vo.setResolvent(alarm.getResolvent());
+
+                                    alarmVoList.add(vo);
+                                }
+
+                            }
+//                            else {
+//
+//                                //临时创建表
+//                                AlarmVo vo=new AlarmVo();
+//                                StringBuilder tbName = new StringBuilder();
+//                                tbName.append(wt.getId()).append("_").append(alarm.getId());
+//                                vo.setTbName(String.valueOf(tbName));
+//                                vo.setAlarmid(alarm.getId());
+//                                vo.setTagid("GF-TZ-SYZ.038200G9911SYB99GI017DB0111PA99RAW01");
+//                                vo.setAlarmtype(alarm.getAlarmType());
+//                                vo.setCharacteristic(alarm.getCharacteristic());
+//                                vo.setComponents(alarm.getComponents());
+//                                vo.setDescription(alarm.getDescription());
+//                                vo.setDeviceid(wt.getId());
+//                                vo.setDevicename(wt.getName());
+//                                vo.setDevicetype(alarm.getDeviceType());
+//                                vo.setEnabled(alarm.getEnable());
+//                                vo.setLineid(wt.getLineId());
+//                                if(CacheContext.lnmap.containsKey(wt.getLineId()))
+//                                {
+//                                    ProBasicLine ln=CacheContext.lnmap.get(wt.getLineId());
+//                                    vo.setLinename(ln.getName());
+//                                }
+//                                vo.setModelId(wt.getModelId());
+//                                vo.setProjectid(wt.getProjectId());
+//                                if(CacheContext.pjmap.containsKey(wt.getProjectId()))
+//                                {
+//                                    ProBasicProject pj=CacheContext.pjmap.get(wt.getProjectId());
+//                                    vo.setProjectname(pj.getName());
+//                                }
+//                                vo.setRank(alarm.getRank());
+//                                vo.setResettable(alarm.getResetTable());
+//                                vo.setStationid(wt.getWindpowerstationId());
+//                                if(CacheContext.wpmap.containsKey(wt.getWindpowerstationId()))
+//                                {
+//                                    ProBasicPowerstation wp=CacheContext.wpmap.get(wt.getWindpowerstationId());
+//                                    vo.setStationname(wp.getName());
+//                                }
+//                                vo.setSubcomponents(alarm.getSubcomponents());
+//                                vo.setSuffix(alarm.getSuffix());
+//                                vo.setTriggertype(alarm.getTriggerType());
+//                                vo.setUniformcode(alarm.getUniformCode());
+//                                vo.setSuperTableName(AlarmSuperTalbeType.WT.getCode());
+//                                vo.setVal(0);
+//                                vo.setOval(0);
+//                                alarmVoList.add(vo);
+//
+//                            }
+                        }
+                    }
+                }
+            }
+
+        }
+        return  alarmVoList;
+    }
+
+
+
+}

+ 178 - 0
alarm-web/src/main/java/com/gyee/alarm/service/AlarmWtService.java

@@ -0,0 +1,178 @@
+package com.gyee.alarm.service;
+
+import com.gyee.alarm.init.CacheContext;
+import com.gyee.alarm.model.auto.*;
+import com.gyee.alarm.model.vo.*;
+import com.gyee.alarm.service.auto.IAlarmTsService;
+import com.gyee.alarm.service.auto.IProEconAlarmInfoService;
+import com.gyee.alarm.util.DateUtils;
+import com.gyee.alarm.util.StringUtils;
+
+import org.java_websocket.WebSocket;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.websocket.EncodeException;
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Service
+
+public class AlarmWtService {
+    @Resource
+    private IAlarmTsService alarmTsService;
+    @Resource
+    private IProEconAlarmInfoService proEconAlarmInfoService;
+    @Value("${initialcode}")
+    private String initialcode;
+
+
+
+
+    public List<AlarmVo> initalAlarmVo() {
+
+        List<AlarmVo> alarmVoList=new ArrayList<>();
+        Map<String, List<ProEconAlarmConfiguration>> wtAlarmMap = CacheContext.wtAlarmMap;
+        Map<String, Map<String, ProBasicEquipmentPoint>> wtpAimap = CacheContext.wtpAimap;
+        for (ProBasicEquipment wt : CacheContext.wtls) {
+
+//            if(wt.getId().contains("SXJ_KGDL_DJY_F_WT_0001_EQ"))
+//            {
+//                System.out.println("");
+//            }
+//            if(wt.getId().contains("SXJ_KGDL_GJY_F_WT_0001_EQ"))
+//            {
+//                System.out.println("");
+//            }
+            if (wtpAimap.containsKey(wt.getId())) {
+                Map<String, ProBasicEquipmentPoint> pointMap = wtpAimap.get(wt.getId());
+
+                StringBuilder sb = new StringBuilder();
+                sb.append(wt.getWindpowerstationId() + wt.getModelId());
+                if (StringUtils.notEmp(pointMap) && wtAlarmMap.containsKey(String.valueOf(sb))) {
+                    List<ProEconAlarmConfiguration> alarmls = wtAlarmMap.get(String.valueOf(sb));
+
+                    if (!alarmls.isEmpty()) {
+                        for (ProEconAlarmConfiguration alarm : alarmls) {
+                            if (pointMap.containsKey(alarm.getUniformCode())) {
+                                ProBasicEquipmentPoint equipmentPoint = pointMap.get(alarm.getUniformCode());
+
+                                if(StringUtils.notEmp(initialcode) &&
+                                        StringUtils.notEmp(equipmentPoint.getNemCode()) &&
+                                        !equipmentPoint.getNemCode().equals(initialcode) &&
+                                        alarm.getAlarmType().equals(AlarmTypeValue.WT.getCode())
+                                )
+                                {
+                                    AlarmVo vo=new AlarmVo();
+                                    StringBuilder tbName = new StringBuilder();
+                                    tbName.append(wt.getId()).append("_").append(alarm.getId());
+                                    vo.setTbName(String.valueOf(tbName));
+                                    vo.setAlarmid(alarm.getId());
+                                    vo.setTagid(equipmentPoint.getNemCode());
+                                    vo.setAlarmtype(alarm.getAlarmType());
+                                    vo.setCharacteristic(alarm.getCharacteristic());
+                                    vo.setComponents(alarm.getComponents());
+                                    vo.setDescription(alarm.getDescription());
+                                    vo.setDeviceid(wt.getId());
+                                    vo.setDevicename(wt.getName());
+                                    vo.setDevicetype(alarm.getDeviceType());
+                                    vo.setEnabled(alarm.getEnable());
+                                    vo.setLineid(wt.getLineId());
+                                    if(CacheContext.lnmap.containsKey(wt.getLineId()))
+                                    {
+                                        ProBasicLine ln=CacheContext.lnmap.get(wt.getLineId());
+                                        vo.setLinename(ln.getName());
+                                    }
+                                    vo.setModelId(wt.getModelId());
+                                    vo.setProjectid(wt.getProjectId());
+                                    if(CacheContext.pjmap.containsKey(wt.getProjectId()))
+                                    {
+                                        ProBasicProject pj=CacheContext.pjmap.get(wt.getProjectId());
+                                        vo.setProjectname(pj.getName());
+                                    }
+                                    vo.setRank(alarm.getRank());
+                                    vo.setResettable(alarm.getResetTable());
+                                    vo.setStationid(wt.getWindpowerstationId());
+                                    if(CacheContext.wpmap.containsKey(wt.getWindpowerstationId()))
+                                    {
+                                        ProBasicPowerstation wp=CacheContext.wpmap.get(wt.getWindpowerstationId());
+                                        vo.setStationname(wp.getName());
+                                    }
+                                    vo.setSubcomponents(alarm.getSubcomponents());
+                                    vo.setSuffix(alarm.getSuffix());
+                                    vo.setTriggertype(alarm.getTriggerType());
+                                    vo.setUniformcode(alarm.getUniformCode());
+                                    vo.setSuperTableName(AlarmSuperTalbeType.WT.getCode());
+                                    vo.setVal(0);
+
+                                    vo.setName(alarm.getName());
+                                    vo.setNemCode(alarm.getNemCode());
+                                    vo.setFaultCause(alarm.getFaultCause());
+                                    vo.setResolvent(alarm.getResolvent());
+                                    alarmVoList.add(vo);
+                                }
+
+                            }
+//                            else {
+//
+//                                //临时创建表
+//                                AlarmVo vo=new AlarmVo();
+//                                StringBuilder tbName = new StringBuilder();
+//                                tbName.append(wt.getId()).append("_").append(alarm.getId());
+//                                vo.setTbName(String.valueOf(tbName));
+//                                vo.setAlarmid(alarm.getId());
+//                                vo.setTagid("GF-TZ-SYZ.038200G9911SYB99GI017DB0111PA99RAW01");
+//                                vo.setAlarmtype(alarm.getAlarmType());
+//                                vo.setCharacteristic(alarm.getCharacteristic());
+//                                vo.setComponents(alarm.getComponents());
+//                                vo.setDescription(alarm.getDescription());
+//                                vo.setDeviceid(wt.getId());
+//                                vo.setDevicename(wt.getName());
+//                                vo.setDevicetype(alarm.getDeviceType());
+//                                vo.setEnabled(alarm.getEnable());
+//                                vo.setLineid(wt.getLineId());
+//                                if(CacheContext.lnmap.containsKey(wt.getLineId()))
+//                                {
+//                                    ProBasicLine ln=CacheContext.lnmap.get(wt.getLineId());
+//                                    vo.setLinename(ln.getName());
+//                                }
+//                                vo.setModelId(wt.getModelId());
+//                                vo.setProjectid(wt.getProjectId());
+//                                if(CacheContext.pjmap.containsKey(wt.getProjectId()))
+//                                {
+//                                    ProBasicProject pj=CacheContext.pjmap.get(wt.getProjectId());
+//                                    vo.setProjectname(pj.getName());
+//                                }
+//                                vo.setRank(alarm.getRank());
+//                                vo.setResettable(alarm.getResetTable());
+//                                vo.setStationid(wt.getWindpowerstationId());
+//                                if(CacheContext.wpmap.containsKey(wt.getWindpowerstationId()))
+//                                {
+//                                    ProBasicPowerstation wp=CacheContext.wpmap.get(wt.getWindpowerstationId());
+//                                    vo.setStationname(wp.getName());
+//                                }
+//                                vo.setSubcomponents(alarm.getSubcomponents());
+//                                vo.setSuffix(alarm.getSuffix());
+//                                vo.setTriggertype(alarm.getTriggerType());
+//                                vo.setUniformcode(alarm.getUniformCode());
+//                                vo.setSuperTableName(AlarmSuperTalbeType.WT.getCode());
+//                                vo.setVal(0);
+//                                vo.setOval(0);
+//                                alarmVoList.add(vo);
+//
+//                            }
+                        }
+                    }
+                }
+            }
+
+        }
+        return  alarmVoList;
+    }
+
+
+
+}

+ 16 - 0
alarm-web/src/main/java/com/gyee/alarm/service/auto/IProEconAlarmSwitchService.java

@@ -0,0 +1,16 @@
+package com.gyee.alarm.service.auto;
+
+import com.gyee.alarm.model.auto.ProEconAlarmSwitch;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 报警开关 服务类
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-09-07
+ */
+public interface IProEconAlarmSwitchService extends IService<ProEconAlarmSwitch> {
+
+}

+ 4 - 1
alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/AlarmTsServiceImpl.java

@@ -156,7 +156,10 @@ public class AlarmTsServiceImpl extends ServiceImpl<AlarmTsMapper, AlarmTs> impl
         List<AlarmSimpleVo> ls=new ArrayList<>();
         if(StringUtils.notEmp(superTableName) && StringUtils.notEmp(tbnames))
         {
-            ls= alarmTsMapper.selectLastRowByTbname(superTableName, tbnames);
+            StringBuilder sb=new StringBuilder();
+            sb.append("select last_row(*),tbname from ").append(superTableName).append(" where tbname in( ").append(tbnames).append(" ) group by tbname");
+
+            ls= alarmTsMapper.selectLastRowByTbname(String.valueOf(sb));
         }
 
         return ls;

+ 20 - 0
alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/ProEconAlarmSwitchServiceImpl.java

@@ -0,0 +1,20 @@
+package com.gyee.alarm.service.auto.impl;
+
+import com.gyee.alarm.model.auto.ProEconAlarmSwitch;
+import com.gyee.alarm.mapper.auto.ProEconAlarmSwitchMapper;
+import com.gyee.alarm.service.auto.IProEconAlarmSwitchService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 报警开关 服务实现类
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-09-07
+ */
+@Service
+public class ProEconAlarmSwitchServiceImpl extends ServiceImpl<ProEconAlarmSwitchMapper, ProEconAlarmSwitch> implements IProEconAlarmSwitchService {
+
+}

+ 2 - 1
alarm-web/src/main/resources/application-jn.yml

@@ -180,7 +180,8 @@ rule_encryption_key: gyee-alarm123456
 rule_authority: true
 #首页展示数据数量
 home_pagep_size: 50
-
+urls:
+  alarm-service: http://10.81.3.154:6014
 
 
 

File diff suppressed because it is too large
+ 740 - 26476
log/ota.log


BIN
log/ota.log.2023-08-30.0.gz


BIN
log/ota.log.2023-09-05.8.gz


BIN
log/ota.log.2023-09-07.0.gz