Преглед на файлове

报警统计功能优化

shilin преди 1 година
родител
ревизия
a8656f7b62
променени са 70 файла, в които са добавени 2675 реда и са изтрити 836 реда
  1. 1 1
      alarm-custom/src/main/java/com/gyee/alarm/CalculateServer.java
  2. 1 2
      alarm-custom/src/main/java/com/gyee/alarm/service/AlarmCustomService.java
  3. 1 1
      alarm-custom/src/main/resources/application-jn.yml
  4. 7 2
      alarm-scanner/src/main/java/com/gyee/alarm/model/vo/AlarmTag.java
  5. 7 0
      alarm-scanner/src/main/java/com/gyee/alarm/task/thread/AlarmThreadPool.java
  6. 2 1
      alarm-scanner/src/main/resources/application-bt.yml
  7. 1 1
      alarm-scanner/src/main/resources/application.yml
  8. 22 12
      alarm-service/src/main/java/com/gyee/alarm/init/CacheContext.java
  9. 4 2
      alarm-service/src/main/java/com/gyee/alarm/mapper/auto/AlarmTsMapper.java
  10. 4 0
      alarm-service/src/main/java/com/gyee/alarm/model/vo/AlarmTag.java
  11. 30 23
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmBtService.java
  12. 31 5
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmCtService.java
  13. 74 21
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmInService.java
  14. 84 27
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmWtService.java
  15. 179 19
      alarm-service/src/main/java/com/gyee/alarm/service/PushDataSevice.java
  16. 1 1
      alarm-service/src/main/java/com/gyee/alarm/service/ReloadVoSevice.java
  17. 190 0
      alarm-service/src/main/java/com/gyee/alarm/websocket/WebSocketBt.java
  18. 1 1
      alarm-service/src/main/resources/application-jn.yml
  19. 5 73
      alarm-service/src/test/java/com/gyee/AppTest.java
  20. 29 0
      alarm-stat/src/main/java/com/gyee/alarm/service/EarlyReportParam.java
  21. 4 21
      alarm-stat/src/main/java/com/gyee/alarm/service/EarlyReportService.java
  22. 0 149
      alarm-stat/src/main/java/com/gyee/alarm/service/FeatureStatService.java
  23. 58 59
      alarm-stat/src/main/java/com/gyee/alarm/task/SaticScheduleTask.java
  24. 8 9
      alarm-stat/src/test/java/com/gyee/AalarmStatTest.java
  25. 25 5
      alarm-web/src/main/java/com/gyee/alarm/controller/AlertRuleController.java
  26. 325 0
      alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceController.java
  27. 20 0
      alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceFaultMetricsController.java
  28. 117 0
      alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceFaultModeController.java
  29. 20 0
      alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceMetricsController.java
  30. 20 0
      alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceModelController.java
  31. 20 0
      alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceModelMetricsController.java
  32. 20 0
      alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceStructureController.java
  33. 80 0
      alarm-web/src/main/java/com/gyee/alarm/controller/ProEconShutdownEvent2Controller.java
  34. 19 0
      alarm-web/src/main/java/com/gyee/alarm/controller/ProEconShutdowneventController.java
  35. 18 8
      alarm-web/src/main/java/com/gyee/alarm/init/CacheContext.java
  36. 48 9
      alarm-web/src/main/java/com/gyee/alarm/mapper/auto/AlarmTsMapper.java
  37. 55 0
      alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceFaultModeMapper.java
  38. 5 0
      alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceMapper.java
  39. 70 0
      alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceMetricsMapper.java
  40. 28 0
      alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceModelMapper.java
  41. 15 0
      alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceModelMetricsMapper.java
  42. 44 0
      alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceStructureMapper.java
  43. 29 0
      alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProEconShutdownEvent2Mapper.java
  44. 6 2
      alarm-web/src/main/java/com/gyee/alarm/model/auto/ProBasicDeviceMetrics.java
  45. 10 4
      alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java
  46. 6 0
      alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconRuleUpdateEvent.java
  47. 3 0
      alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconRuleUpdateInfo.java
  48. 10 3
      alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconShutdownEvent2.java
  49. 14 0
      alarm-web/src/main/java/com/gyee/alarm/model/vo/TreeNode.java
  50. 10 7
      alarm-web/src/main/java/com/gyee/alarm/service/AlarmConfigurationService.java
  51. 32 21
      alarm-web/src/main/java/com/gyee/alarm/service/AlarmHistoryService.java
  52. 72 0
      alarm-web/src/main/java/com/gyee/alarm/service/DeviceFaultModeService.java
  53. 256 8
      alarm-web/src/main/java/com/gyee/alarm/service/DeviceService.java
  54. 25 1
      alarm-web/src/main/java/com/gyee/alarm/service/RuleUpdateEventService.java
  55. 12 0
      alarm-web/src/main/java/com/gyee/alarm/service/auto/IProBasicDeviceFaultModeService.java
  56. 8 0
      alarm-web/src/main/java/com/gyee/alarm/service/auto/IProBasicDeviceStructureService.java
  57. 2 1
      alarm-web/src/main/java/com/gyee/alarm/service/auto/IProEconShutdownEvent2Service.java
  58. 1 0
      alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/AlarmTsServiceImpl.java
  59. 61 0
      alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/ProBasicDeviceFaultModeServiceImpl.java
  60. 1 1
      alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/ProBasicDeviceMetricsServiceImpl.java
  61. 42 0
      alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/ProBasicDeviceStructureServiceImpl.java
  62. 39 5
      alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/ProEconShutdownEvent2ServiceImpl.java
  63. 5 0
      alarm-web/src/main/java/com/gyee/alarm/service/auto/initalcache/CacheService.java
  64. 338 331
      log/ota.log
  65. BIN
      log/ota.log.2023-09-07.0.gz
  66. BIN
      log/ota.log.2023-09-11.0.gz
  67. BIN
      log/ota.log.2023-09-13.0.gz
  68. BIN
      log/ota.log.2023-09-14.0.gz
  69. BIN
      log/ota.log.2023-09-15.0.gz
  70. BIN
      log/ota.log.2023-09-17.0.gz

+ 1 - 1
alarm-custom/src/main/java/com/gyee/alarm/CalculateServer.java

@@ -26,7 +26,7 @@ public class CalculateServer {
             log.warn("自定义报警计算服务启动...... ");
             log.info("开始加载配置及测点数据......");
             alarmCustomService.init();
-
+            runStarted = true;
             alarmCustomService.taskJobs(runStarted);
             serverStarted = true;
         } catch (Exception ex) {

+ 1 - 2
alarm-custom/src/main/java/com/gyee/alarm/service/AlarmCustomService.java

@@ -66,7 +66,7 @@ public class AlarmCustomService {
 
     public void taskJobs(boolean runStarted) throws InterruptedException {
         readTaskJobs(runStarted);
-        Thread.sleep(interval*3);
+//        Thread.sleep(interval);
         calTaskJobs(runStarted);
     }
 
@@ -79,7 +79,6 @@ public class AlarmCustomService {
         while (runStarted)
         {
 
-
         int wtlen = 1;
 
         List<ProBasicEquipmentPoint> wtPointList = CacheContext.wtPointList;// 设备测点集合

+ 1 - 1
alarm-custom/src/main/resources/application-jn.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
 
 task-count: 10
 read-count: 10

+ 7 - 2
alarm-scanner/src/main/java/com/gyee/alarm/model/vo/AlarmTag.java

@@ -20,7 +20,7 @@ public class AlarmTag {
     /**
      * 当前值
      */
-    private Double val=-1.0;
+    private Double val;
 
     /**
      * 报警类别,0触发,1触发,-1变化触发,大于等于3ai点触发
@@ -35,7 +35,7 @@ public class AlarmTag {
     /**
      * 过去值
      */
-    private Double oval=0.0;
+    private Double oval;
 
     /**
      * 报警级别
@@ -54,6 +54,11 @@ public class AlarmTag {
      */
     public Boolean updateAndCheck(PointData pointData) {
 
+        if(null ==oval)
+        {
+            oval=pointData.getPointValueInDouble();
+            return false;
+        }
         if (pointData.getPointValueInDouble() == oval) {
             return false;
         }

+ 7 - 0
alarm-scanner/src/main/java/com/gyee/alarm/task/thread/AlarmThreadPool.java

@@ -68,6 +68,8 @@ public class AlarmThreadPool implements Callable<String>, Serializable {
 				List<String>  ls=new ArrayList<>();
 				List<PointData> values=new ArrayList<>();
 
+
+
 				int times=0;
 				for(AlarmTag vo:alarmVoList)
 				{
@@ -88,6 +90,7 @@ public class AlarmThreadPool implements Callable<String>, Serializable {
 					values.addAll(templs);
 				}
 
+//				System.out.println(values.size()+"____"+ alarmVoList.size());
 				int alarmNumber=0;
 				if(values.size() == alarmVoList.size())
 				{
@@ -102,6 +105,10 @@ public class AlarmThreadPool implements Callable<String>, Serializable {
 
 						PointData value=values.get(i);
 
+//						if(vo.getTagId().equals("FD-DJY-YuanDong.140623F0221MDQ02GS006DB0111SW09RAW00"))
+//						{
+//							System.out.println("");
+//						}
 						if(vo.updateAndCheck(value))
 						{
 							if(vo.getVal()==1)

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

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

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

@@ -1,3 +1,3 @@
 spring:
   profiles:
-    active: wt
+    active: bt

+ 22 - 12
alarm-service/src/main/java/com/gyee/alarm/init/CacheContext.java

@@ -123,7 +123,7 @@ public class CacheContext implements CommandLineRunner {
     public static Map<String, ProBasicCompany> cpmap = new HashMap<>();
 
     public static Map<String, List<ProBasicPowerstation>> cpwpmap = new HashMap<>();
-
+    public static Map<String, List<ProBasicPowerstation>> rgwpmap = new HashMap<>();
     public static Map<String, List<ProBasicCompany>> rgcpmap = new HashMap<>();
     public static Map<String, ProBasicSquare> sqmap = new HashMap<>();
     public static Map<String, ProBasicPowerstation> wpmap = new HashMap<>();
@@ -343,15 +343,8 @@ public class CacheContext implements CommandLineRunner {
             }
         }
 
-        for (ProBasicPowerstation wp : wpls) {
-            if (cpwpmap.containsKey(wp.getCompanyId())) {
-                cpwpmap.get(wp.getCompanyId()).add(wp);
-            } else {
-                List<ProBasicPowerstation> wps = new ArrayList<>();
-                wps.add(wp);
-                cpwpmap.put(wp.getCompanyId(), wps);
-            }
-        }
+
+
 
         wsls.stream().forEach(p -> {
 
@@ -546,7 +539,7 @@ public class CacheContext implements CommandLineRunner {
 
         zwpls = proBasicWindpowerstationService.list().stream().filter(i -> runWpids.contains(i.getId()) && i.getIsAble() == 1).collect(Collectors.toList());
         wpls = proBasicWindpowerstationService.list().stream().filter(i -> runWpids.contains(i.getId()) && i.getIsAble() == 1).collect(Collectors.toList());
-        ;
+
         meterpoints = proBasicMeterPointService.list().stream().filter(i -> runWpids.contains(i.getWindpowerstationId()) && i.getIsAble() == 1).collect(Collectors.toList());
         meterpoints.stream().forEach(meterpoint -> {
             meterpointMap.put(meterpoint.getNemCode(), meterpoint);
@@ -562,7 +555,24 @@ public class CacheContext implements CommandLineRunner {
             wppointmap.put(wp.getId(), stringMapMap);
         });
 
-
+        for (ProBasicPowerstation wp : wpls) {
+            if (cpwpmap.containsKey(wp.getCompanyId())) {
+                cpwpmap.get(wp.getCompanyId()).add(wp);
+            } else {
+                List<ProBasicPowerstation> wps = new ArrayList<>();
+                wps.add(wp);
+                cpwpmap.put(wp.getCompanyId(), wps);
+            }
+        }
+        for (ProBasicPowerstation wp : wpls) {
+            if (rgwpmap.containsKey(wp.getRegionId())) {
+                rgwpmap.get(wp.getRegionId()).add(wp);
+            } else {
+                List<ProBasicPowerstation> wps = new ArrayList<>();
+                wps.add(wp);
+                rgwpmap.put(wp.getRegionId(), wps);
+            }
+        }
 //        String llglString = redisService.get("ZLLGL");
 //        theoreticalPowerMap = JSONObject.parseObject(llglString, new TypeReference<Map<String, Map<Double, ProBasicModelPowerRd>>>() {
 //        });

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

@@ -60,11 +60,13 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
 
 
 
-    @Update("create table if not exists ${tbName} using ${superTableName} tags( #{alarmid}, #{alarmtype}," +
+    @Update("create table if not exists ${tbName} using ${superTableName} TAGS( " +
+            "#{alarmid}, #{alarmtype}," +
             "#{characteristic}, #{components},#{description}, #{deviceid}, #{devicename}," +
             "#{devicetype}, #{enabled}, #{lineid}, #{linename}, #{modelId}, #{projectid}," +
             "#{projectname}, #{rank}, #{resettable}, #{stationid}, #{stationname}, #{subcomponents}," +
-            "#{suffix},  #{tagid}, #{triggertype}, #{uniformcode},#{name}, #{nemCode}, #{faultCause}, #{resolvent}  )")
+            "#{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,
                     @Param("description") String description,

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

@@ -89,6 +89,10 @@ public class AlarmTag {
 
     private Boolean isClose;
 
+    private String wpName;
+
+    private String wpId;
+
     /**
      * 更新并检测是否触发报警
      */

+ 30 - 23
alarm-service/src/main/java/com/gyee/alarm/service/AlarmBtService.java

@@ -7,8 +7,11 @@ 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 com.gyee.alarm.util.realtimesource.IEdosUtil;
 import com.gyee.alarm.websocket.PushParams;
 import com.gyee.alarm.websocket.WebSocket;
+import com.gyee.alarm.websocket.WebSocketBt;
+import com.gyee.common.model.PointData;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.socket.TextMessage;
@@ -35,8 +38,13 @@ public class AlarmBtService {
 
     @Resource
     private WebSocket webSocket;
+
     @Resource
     private PushDataSevice pushDataSevice;
+    @Value("${read-rows}")
+    private Integer readRows;
+    @Resource
+    private IEdosUtil edosUtil;
     public void dropSuperTable() {
         alarmTsService.dropSuperTable(AlarmSuperTalbeType.BT.getCode());
     }
@@ -46,7 +54,7 @@ public class AlarmBtService {
         alarmTsService.createSuperTable(AlarmSuperTalbeType.BT.getCode());
     }
 
-    public void initalBtAlarm() throws SQLException {
+    public void initalBtAlarm() throws Exception {
 
 
         List<AlarmTag> alarmTags = new ArrayList<>();
@@ -71,25 +79,16 @@ public class AlarmBtService {
                         vo.getNemCode(),vo.getFaultCause(),vo.getResolvent());
 
 
-                AlarmTag po = new AlarmTag();
-                po.setId(vo.getTbName());
-                po.setVal(0.0);
-                po.setTriggerType(vo.getTriggertype());
-                po.setTagId(vo.getTagid());
-                po.setOval(0.0);
-                po.setRank(vo.getRank());
-                po.setTs(new Date().getTime());
-                po.setTimeLong(0.0);
-                alarmTags.add(po);
+
             }
         }
 
 
-        alarmTsService.insertList(alarmTags);
+//        alarmTsService.insertList(alarmTags);
     }
 
 
-    public List<AlarmVo> initalAlarmVo() {
+    public List<AlarmVo> initalAlarmVo() throws Exception {
 
         List<ProEconAlarmConfiguration> btalarmls = CacheContext.btalarmls;
 
@@ -130,8 +129,12 @@ public class AlarmBtService {
                     vo.setTriggertype(alarm.getTriggerType());
                     vo.setUniformcode(alarm.getUniformCode());
                     vo.setSuperTableName(AlarmSuperTalbeType.BT.getCode());
-                    vo.setVal(0);
-                    vo.setOval(0);
+                    //                                    PointData temp=edosUtil.getRealData(equipmentPoint.getNemCode());
+//                                    vo.setVal((int)temp.getPointValueInDouble());
+//                                    vo.setOval((int)temp.getPointValueInDouble());
+
+                    vo.setVal(null);
+                    vo.setOval(null);
 
                     vo.setName(alarm.getName());
                     vo.setNemCode(alarm.getNemCode());
@@ -156,10 +159,10 @@ public class AlarmBtService {
                 for (AlarmVo vo : vos) {
                     AlarmTag po=new AlarmTag();
                     po.setId(vo.getTbName());
-                    po.setOval(vo.getVal().doubleValue());
+                    po.setOval(null);
                     po.setTriggerType(vo.getTriggertype());
                     po.setTagId(vo.getTagid());
-                    po.setVal(vo.getVal().doubleValue());
+                    po.setVal(null);
                     po.setRank(vo.getRank());
 
                     ls.add(po);
@@ -228,11 +231,13 @@ public class AlarmBtService {
                         alarm.setDeviceId(vo.getDeviceid());
                         alarm.setAlarmId(vo.getAlarmid());
 
-                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+
+                        if(CacheContext.subwpmap.containsKey(vo.getStationid()))
                         {
-                            alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
+                            alarm.setWpName(CacheContext.subwpmap.get(vo.getStationid()).getName());
                         }
-                        pushDataSevice.pushData(alarm);
+                        alarm.setWpId(vo.getStationid());
+                        pushDataSevice.pushBtData(alarm);
 
                         tempmap.put(po.getTbname(),po);
                     }
@@ -396,11 +401,13 @@ public class AlarmBtService {
                         alarm.setAlarmId(vo.getAlarmid());
                         alarm.setIsClose(true);
 
-                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+
+                        if(CacheContext.subwpmap.containsKey(vo.getStationid()))
                         {
-                            alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
+                            alarm.setWpName(CacheContext.subwpmap.get(vo.getStationid()).getName());
                         }
-                        pushDataSevice.pushData(alarm);
+
+                        pushDataSevice.pushBtData(alarm);
 
                         tempmap.put(po.getTbname(),po);
                     }

+ 31 - 5
alarm-service/src/main/java/com/gyee/alarm/service/AlarmCtService.java

@@ -54,6 +54,8 @@ public class AlarmCtService {
         List<AlarmTag> alarmTags = new ArrayList<>();
 
 
+
+
         if (!alarmVoList.isEmpty()) {
             for (AlarmVo vo : alarmVoList) {
                 alarmTsService.createTable(vo.getTbName(), vo.getAlarmid(), vo.getAlarmtype(),
@@ -411,7 +413,7 @@ public class AlarmCtService {
                     po.setAlarmtype(vo.getAlarmtype());
                     po.setStationid(vo.getStationid());
 
-                    po.setVal(vo.getVal().doubleValue());
+                    po.setVal(null);
 
                     ls.add(po);
                 }
@@ -477,11 +479,23 @@ public class AlarmCtService {
                         alarm.setIsClose(false);
                         alarm.setDeviceId(vo.getDeviceid());
                         alarm.setAlarmId(vo.getAlarmid());
-                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                        if(StringUtils.notEmp(vo.getDeviceid()) && CacheContext.wtmap.containsKey(vo.getDeviceid()))
                         {
                             alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
                         }
-                        pushDataSevice.pushData(alarm);
+                        if(CacheContext.wpmap.containsKey(vo.getStationid()))
+                        {
+                            alarm.setWpName(CacheContext.wpmap.get(vo.getStationid()).getName());
+                        }
+
+                        if(po.getDeviceType().equals(DeviceTypeValue.IN.getCode()) || po.getDeviceType().equals(DeviceTypeValue.WT.getCode()))
+                        {
+                            pushDataSevice.pushWtData(alarm);
+                        }else  if(po.getDeviceType().equals(DeviceTypeValue.BT.getCode()))
+                        {
+                            pushDataSevice.pushBtData(alarm);
+                        }
+
 
                         tempmap.put(po.getTbname(),po);
                     }
@@ -632,11 +646,23 @@ public class AlarmCtService {
                             alarm.setDeviceId(vo.getDeviceid());
                             alarm.setAlarmId(vo.getAlarmid());
                             alarm.setIsClose(true);
-                            if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                            if(StringUtils.notEmp(vo.getDeviceid()) && CacheContext.wtmap.containsKey(vo.getDeviceid()))
                             {
                                 alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
                             }
-                           pushDataSevice.pushData(alarm);
+                            if(CacheContext.wpmap.containsKey(vo.getStationid()))
+                            {
+                                alarm.setWpName(CacheContext.wpmap.get(vo.getStationid()).getName());
+                            }
+
+                            if(po.getDeviceType().equals(DeviceTypeValue.IN.getCode()) || po.getDeviceType().equals(DeviceTypeValue.WT.getCode()))
+                            {
+                                pushDataSevice.pushWtData(alarm);
+                            }else  if(po.getDeviceType().equals(DeviceTypeValue.BT.getCode()))
+                            {
+                                pushDataSevice.pushBtData(alarm);
+                            }
+
 
                             tempmap.put(po.getTbname(),po);
                         }

+ 74 - 21
alarm-service/src/main/java/com/gyee/alarm/service/AlarmInService.java

@@ -7,8 +7,10 @@ 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 com.gyee.alarm.util.realtimesource.IEdosUtil;
 import com.gyee.alarm.websocket.PushParams;
 import com.gyee.alarm.websocket.WebSocket;
+import com.gyee.common.model.PointData;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -35,6 +37,10 @@ public class AlarmInService {
     private WebSocket webSocket;
     @Resource
     private PushDataSevice pushDataSevice;
+    @Value("${read-rows}")
+    private Integer readRows;
+    @Resource
+    private IEdosUtil edosUtil;
     public void dropSuperTable()
     {
         alarmTsService.dropSuperTable(AlarmSuperTalbeType.WT.getCode());
@@ -45,14 +51,41 @@ public class AlarmInService {
         alarmTsService.createSuperTable(AlarmSuperTalbeType.WT.getCode());
     }
 
-    public void initalWtAlarm() throws SQLException {
+    public void initalInAlarm() throws Exception {
 
 
 
-        List<AlarmVo> alarmVoList=CacheContext.alarmWtList;
+        List<AlarmVo> alarmVoList=CacheContext.alarmInList;
         List<AlarmTag>  alarmTags=new ArrayList<>();
 
-
+//        List<String>  ls=new ArrayList<>();
+//        List<PointData> values=new ArrayList<>();
+//        Map<String,PointData> valuemap=new HashMap<>();
+//
+//        int times=0;
+//        for(AlarmVo vo:alarmVoList)
+//        {
+//
+//            ls.add(vo.getTagid());
+//            times++;
+//            if(times==readRows)
+//            {
+//                List<PointData> templs=edosUtil.getRealData(ls);
+//                values.addAll(templs);
+//                ls=new ArrayList<>();
+//                times=0;
+//            }
+//        }
+//        if(!ls.isEmpty())
+//        {
+//            List<PointData> templs=edosUtil.getRealData(ls);
+//            values.addAll(templs);
+//        }
+//
+//        for(PointData po:values)
+//        {
+//            valuemap.put(po.getEdnaId(),po);
+//        }
         if(!alarmVoList.isEmpty())
         {
             for(AlarmVo vo: alarmVoList)
@@ -74,25 +107,29 @@ public class AlarmInService {
                         vo.getName(),
                         vo.getNemCode(),vo.getFaultCause(),vo.getResolvent());
 
-                AlarmTag po=new AlarmTag();
-                po.setId(vo.getTbName());
-                po.setVal(0.0);
-                po.setTriggerType(vo.getTriggertype());
-                po.setTagId(vo.getTagid());
-                po.setOval(0.0);
-                po.setRank(vo.getRank());
-                po.setTimeLong(0.0);
-                po.setTs(new Date().getTime());
-                alarmTags.add(po);
+//                AlarmTag po=new AlarmTag();
+//                po.setId(vo.getTbName());
+//                if(valuemap.containsKey(vo.getTagid()))
+//                {
+//                    PointData pointData=valuemap.get(vo.getTagid());
+//                    po.setVal(pointData.getPointValueInDouble());
+//                    po.setOval(pointData.getPointValueInDouble());
+//                }
+//                po.setTriggerType(vo.getTriggertype());
+//                po.setTagId(vo.getTagid());
+//                po.setRank(vo.getRank());
+//                po.setTimeLong(0.0);
+//                po.setTs(new Date().getTime());
+//                alarmTags.add(po);
             }
         }
 
 
-        alarmTsService.insertList(alarmTags);
+//        alarmTsService.insertList(alarmTags);
     }
 
 
-    public List<AlarmVo> initalAlarmVo() {
+    public List<AlarmVo> initalAlarmVo() throws Exception {
 
         List<AlarmVo> alarmVoList=new ArrayList<>();
         Map<String, List<ProEconAlarmConfiguration>> wtAlarmMap = CacheContext.wtAlarmMap;
@@ -158,7 +195,12 @@ public class AlarmInService {
                                     vo.setTriggertype(alarm.getTriggerType());
                                     vo.setUniformcode(alarm.getUniformCode());
                                     vo.setSuperTableName(AlarmSuperTalbeType.WT.getCode());
-                                    vo.setVal(0);
+//                                    PointData temp=edosUtil.getRealData(equipmentPoint.getNemCode());
+//                                    vo.setVal((int)temp.getPointValueInDouble());
+//                                    vo.setOval((int)temp.getPointValueInDouble());
+
+                                    vo.setVal(null);
+                                    vo.setOval(null);
 
                                     vo.setName(alarm.getName());
                                     vo.setNemCode(alarm.getNemCode());
@@ -242,10 +284,10 @@ public class AlarmInService {
                 {
                     AlarmTag po=new AlarmTag();
                     po.setId(vo.getTbName());
-                    po.setOval(vo.getVal().doubleValue());
+                    po.setOval(null);
                     po.setTriggerType(vo.getTriggertype());
                     po.setTagId(vo.getTagid());
-                    po.setVal(vo.getVal().doubleValue());
+                    po.setVal(null);
                     po.setRank(vo.getRank());
 
                     ls.add(po);
@@ -311,11 +353,18 @@ public class AlarmInService {
                         alarm.setIsClose(false);
                         alarm.setDeviceId(vo.getDeviceid());
                         alarm.setAlarmId(vo.getAlarmid());
-                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                        if(StringUtils.notEmp(vo.getDeviceid()) && CacheContext.wtmap.containsKey(vo.getDeviceid()))
                         {
                             alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
                         }
-                        pushDataSevice.pushData(alarm);
+                        if(CacheContext.wpmap.containsKey(vo.getStationid()))
+                        {
+                            alarm.setWpName(CacheContext.wpmap.get(vo.getStationid()).getName());
+                        }
+
+                        alarm.setWpId(vo.getStationid());
+
+                        pushDataSevice.pushWtData(alarm);
 
 
                         tempmap.put(po.getTbname(),po);
@@ -467,7 +516,11 @@ public class AlarmInService {
                         {
                             alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
                         }
-                        pushDataSevice.pushData(alarm);
+                        if(CacheContext.wpmap.containsKey(vo.getStationid()))
+                        {
+                            alarm.setWpName(CacheContext.wpmap.get(vo.getStationid()).getName());
+                        }
+                        pushDataSevice.pushWtData(alarm);
 
                         tempmap.put(po.getTbname(),po);
                     }

+ 84 - 27
alarm-service/src/main/java/com/gyee/alarm/service/AlarmWtService.java

@@ -8,8 +8,10 @@ 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 com.gyee.alarm.util.realtimesource.IEdosUtil;
 import com.gyee.alarm.websocket.PushParams;
 import com.gyee.alarm.websocket.WebSocket;
+import com.gyee.common.model.PointData;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -38,6 +40,12 @@ public class AlarmWtService {
     private WebSocket webSocket;
     @Resource
     private PushDataSevice pushDataSevice;
+
+    @Value("${read-rows}")
+    private Integer readRows;
+
+    @Resource
+    private IEdosUtil edosUtil;
     public void dropSuperTable()
     {
         alarmTsService.dropSuperTable(AlarmSuperTalbeType.WT.getCode());
@@ -48,7 +56,7 @@ public class AlarmWtService {
         alarmTsService.createSuperTable(AlarmSuperTalbeType.WT.getCode());
     }
 
-    public void initalWtAlarm() throws SQLException {
+    public void initalWtAlarm() throws Exception {
 
 
 
@@ -56,6 +64,35 @@ public class AlarmWtService {
         List<AlarmTag>  alarmTags=new ArrayList<>();
 
 
+//        List<String>  ls=new ArrayList<>();
+//        List<PointData> values=new ArrayList<>();
+//        Map<String,PointData> valuemap=new HashMap<>();
+//
+//        int times=0;
+//        for(AlarmVo vo:alarmVoList)
+//        {
+//
+//            ls.add(vo.getTagid());
+//            times++;
+//            if(times==readRows)
+//            {
+//                List<PointData> templs=edosUtil.getRealData(ls);
+//                values.addAll(templs);
+//                ls=new ArrayList<>();
+//                times=0;
+//            }
+//        }
+//        if(!ls.isEmpty())
+//        {
+//            List<PointData> templs=edosUtil.getRealData(ls);
+//            values.addAll(templs);
+//        }
+//
+//        for(PointData po:values)
+//        {
+//            valuemap.put(po.getEdnaId(),po);
+//        }
+
         if(!alarmVoList.isEmpty())
         {
             for(AlarmVo vo: alarmVoList)
@@ -77,39 +114,40 @@ public class AlarmWtService {
                         vo.getName(),
                         vo.getNemCode(),vo.getFaultCause(),vo.getResolvent());
 
-                AlarmTag po=new AlarmTag();
-                po.setId(vo.getTbName());
-                po.setVal(0.0);
-                po.setTriggerType(vo.getTriggertype());
-                po.setTagId(vo.getTagid());
-                po.setOval(0.0);
-                po.setRank(vo.getRank());
-                po.setTimeLong(0.0);
-                po.setTs(new Date().getTime());
-                alarmTags.add(po);
+//                AlarmTag po=new AlarmTag();
+//                po.setId(vo.getTbName());
+//                if(valuemap.containsKey(vo.getTagid()))
+//                {
+//
+//                    PointData pointData=valuemap.get(vo.getTagid());
+//                    po.setVal(pointData.getPointValueInDouble());
+//                    po.setOval(pointData.getPointValueInDouble());
+//                }
+//
+//
+//                po.setTriggerType(vo.getTriggertype());
+//                po.setTagId(vo.getTagid());
+//
+//                po.setRank(vo.getRank());
+//                po.setTimeLong(0.0);
+//                po.setTs(new Date().getTime());
+//                alarmTags.add(po);
             }
         }
 
 
-        alarmTsService.insertList(alarmTags);
+//        alarmTsService.insertList(alarmTags);
     }
 
 
-    public List<AlarmVo> initalAlarmVo() {
+    public List<AlarmVo> initalAlarmVo() throws Exception {
 
         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());
 
@@ -119,6 +157,7 @@ public class AlarmWtService {
                     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());
@@ -128,6 +167,8 @@ public class AlarmWtService {
                                         !equipmentPoint.getNemCode().equals(initialcode) &&
                                         alarm.getAlarmType().equals(AlarmTypeValue.WT.getCode())
                                 )
+
+
                                 {
                                     AlarmVo vo=new AlarmVo();
                                     StringBuilder tbName = new StringBuilder();
@@ -169,8 +210,13 @@ public class AlarmWtService {
                                     vo.setTriggertype(alarm.getTriggerType());
                                     vo.setUniformcode(alarm.getUniformCode());
                                     vo.setSuperTableName(AlarmSuperTalbeType.WT.getCode());
-                                    vo.setVal(0);
 
+//                                    PointData temp=edosUtil.getRealData(equipmentPoint.getNemCode());
+//                                    vo.setVal((int)temp.getPointValueInDouble());
+//                                    vo.setOval((int)temp.getPointValueInDouble());
+
+                                    vo.setVal(null);
+                                    vo.setOval(null);
                                     vo.setName(alarm.getName());
                                     vo.setNemCode(alarm.getNemCode());
                                     vo.setFaultCause(alarm.getFaultCause());
@@ -252,10 +298,10 @@ public class AlarmWtService {
                 {
                     AlarmTag po=new AlarmTag();
                     po.setId(vo.getTbName());
-                    po.setOval(vo.getVal().doubleValue());
+                    po.setOval(null);
                     po.setTriggerType(vo.getTriggertype());
                     po.setTagId(vo.getTagid());
-                    po.setVal(vo.getVal().doubleValue());
+                    po.setVal(null);
                     po.setRank(vo.getRank());
 
                     ls.add(po);
@@ -326,11 +372,18 @@ public class AlarmWtService {
                         alarm.setDeviceId(vo.getDeviceid());
                         alarm.setAlarmId(vo.getAlarmid());
 
-                        if(CacheContext.wtmap.containsKey(vo.getDeviceid()))
+                        if(StringUtils.notEmp(vo.getDeviceid()) && CacheContext.wtmap.containsKey(vo.getDeviceid()))
                         {
                             alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
                         }
-                        pushDataSevice.pushData(alarm);
+
+                        if(CacheContext.wpmap.containsKey(vo.getStationid()))
+                        {
+                            alarm.setWpName(CacheContext.wpmap.get(vo.getStationid()).getName());
+                        }
+
+                        alarm.setWpId(vo.getStationid());
+                        pushDataSevice.pushWtData(alarm);
 
 
                         tempmap.put(po.getTbname(),po);
@@ -484,7 +537,11 @@ public class AlarmWtService {
                             alarm.setCode(CacheContext.wtmap.get(vo.getDeviceid()).getNemCode());
                         }
 
-                        pushDataSevice.pushData(alarm);
+                        if(CacheContext.wpmap.containsKey(vo.getStationid()))
+                        {
+                            alarm.setWpName(CacheContext.wpmap.get(vo.getStationid()).getName());
+                        }
+                        pushDataSevice.pushWtData(alarm);
 
 
                         tempmap.put(po.getTbname(),po);

+ 179 - 19
alarm-service/src/main/java/com/gyee/alarm/service/PushDataSevice.java

@@ -2,11 +2,14 @@ package com.gyee.alarm.service;
 
 import com.gyee.alarm.init.CacheContext;
 import com.gyee.alarm.model.auto.ProBasicEquipment;
+import com.gyee.alarm.model.auto.ProBasicPowerstation;
+import com.gyee.alarm.model.auto.ProBasicSubStation;
 import com.gyee.alarm.model.vo.AlarmTag;
 import com.gyee.alarm.service.auto.ISysUserService;
 import com.gyee.alarm.util.DateUtils;
 import com.gyee.alarm.websocket.PushParams;
 import com.gyee.alarm.websocket.WebSocket;
+import com.gyee.alarm.websocket.WebSocketBt;
 import com.gyee.common.model.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -29,41 +32,132 @@ public class PushDataSevice {
     private Double pushinterval;
     @Resource
     private WebSocket webSocket;
-    public  void pushData(AlarmTag po) throws EncodeException, IOException {
+
+    @Resource
+    private WebSocketBt webSocketBt;
+    public  void pushWtData(AlarmTag po) throws EncodeException, IOException {
         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);
 
 
                 synchronized(po.getId())
                 {
-                    if(webSocketPushParamsMap.contains(po.getId()))
+//                    if(webSocketPushParamsMap.contains(po.getId()))
+//                    {
+//                        PushParams pp=webSocketPushParamsMap.get(po.getId());
+//
+//                        double hours= DateUtils.hoursDiff(pp.getStartTime(),new Date());
+//                        if(hours>pushinterval)
+//                        {
+//                            if(checkWtId(key,po.getDeviceId()))
+//                            {
+//                                webSocket.sendMessageByUserId(key,po);
+//                                pp.setStartTime(new Date(po.getTs()));
+//                            }
+//                        }
+//                    }else
+//                    {
+//                        if(checkWtId(key,po.getDeviceId()))
+//                        {
+//                            webSocket.sendMessageByUserId(key,po);
+//                            PushParams pp=new PushParams();
+//                            pp.setStartTime(new Date());
+//                            webSocketPushParamsMap.put(po.getId(),pp);
+//
+//
+//                        }
+//
+//                    }
+
+                    if(checkWtId(key,po.getDeviceId()))
                     {
-                        PushParams pp=webSocketPushParamsMap.get(po.getId());
+                        webSocket.sendMessageByUserId(key,po);
+
+
+                    }
+                }
+
+            }
+        }
+
+    }
+
+    public  void pushBtData(AlarmTag po) throws EncodeException, IOException {
+        ConcurrentHashMap<String, WebSocket> webSocketPushMap = WebSocket.webSocketMap;
+        ConcurrentHashMap<String, PushParams> webSocketPushParamsMap = WebSocket.webSocketParamsMap;
+
+        ConcurrentHashMap<String, List<String>> btParamsMap = WebSocketBt.btParamsMap;
 
-                        double hours= DateUtils.hoursDiff(pp.getStartTime(),new Date());
-                        if(hours>pushinterval)
+        if(!webSocketPushMap.isEmpty()){
+            for(String key : webSocketPushMap.keySet()){
+                // 根据ws连接用户ID获取推送参数
+//                PushParams pushParams = webSocketPushParamsMap.get(key);
+
+
+                synchronized(po.getId())
+                {
+//                    if(webSocketPushParamsMap.contains(po.getId()))
+//                    {
+//                        PushParams pp=webSocketPushParamsMap.get(po.getId());
+//
+//                        double hours= DateUtils.hoursDiff(pp.getStartTime(),new Date());
+//                        if(hours>pushinterval)
+//                        {
+//                            if(checkBtId(key,po.getWpId()))
+//                            {
+//                                webSocket.sendMessageByUserId(key,po);
+//                                pp.setStartTime(new Date(po.getTs()));
+//                            }
+//                        }
+//                    }else
+//                    {
+//                        if(checkBtId(key,po.getWpId()))
+//                        {
+//                            webSocket.sendMessageByUserId(key,po);
+//                            PushParams pp=new PushParams();
+//                            pp.setStartTime(new Date());
+//                            webSocketPushParamsMap.put(po.getId(),pp);
+//
+//                        }
+//
+//                    }
+
+                    if(checkBtId(key,po.getWpId()))
+                    {
+                        webSocket.sendMessageByUserId(key,po);
+
+                        if(po.getRank()>3)
                         {
-                            if(checkWtId(key,po.getDeviceId()))
+                            if(btParamsMap.contains(po.getWpId()))
                             {
-                                webSocket.sendMessageByUserId(key,po);
-                                pp.setStartTime(new Date(po.getTs()));
+                                List<String> btls=btParamsMap.get(po.getWpId());
+
+                                if(btls.contains(po.getAlarmId()) )
+                                {
+                                    btls.remove(po.getAlarmId());
+                                }else
+                                {
+                                    btls.add(po.getAlarmId());
+                                }
+                                if(btls.isEmpty())
+                                {
+                                    webSocketBt.sendMessageByUserId(key,false);
+                                }
+                            }else
+                            {
+                                List<String> btls=new ArrayList<>();
+
+                                btls.add(po.getAlarmId());
+                                btParamsMap.put(po.getWpId(),btls);
+                                webSocketBt.sendMessageByUserId(key,true);
                             }
                         }
-                    }else
-                    {
-                        if(checkWtId(key,po.getDeviceId()))
-                        {
-                            webSocket.sendMessageByUserId(key,po);
-                            PushParams pp=new PushParams();
-                            pp.setStartTime(new Date());
-                            webSocketPushParamsMap.put(po.getId(),pp);
-                        }
-
                     }
+
                 }
 
             }
@@ -135,4 +229,70 @@ public class PushDataSevice {
 
         return result;
     }
+
+
+    private boolean checkBtId(String userId,String btId) {
+
+
+        boolean result=false;
+        List<String> depls = sysUserService.getUserByuserId(Long.valueOf(userId));
+        if (!depls.isEmpty()) {
+            String depId = depls.get(0);
+
+            if (CacheContext.wpmap.containsKey(depId)) {
+
+                ProBasicPowerstation wp=CacheContext.wpmap.get(depId);
+
+                if(CacheContext.subwpmap.containsKey(btId))
+                {
+                    ProBasicSubStation sub= CacheContext.subwpmap.get(btId);
+                    if(sub.getWindpowerstationId().equals(wp.getId()))
+                    {
+                        result=true;
+                    }
+                }
+
+            } else if (CacheContext.cpwpmap.containsKey(depId)) {
+
+                List<ProBasicPowerstation> wpls=CacheContext.cpwpmap.get(depId);
+                for(ProBasicPowerstation wp:wpls)
+                {
+                    if(CacheContext.subwpmap.containsKey(btId))
+                    {
+                        ProBasicSubStation sub= CacheContext.subwpmap.get(btId);
+                        if(sub.getWindpowerstationId().equals(wp.getId()))
+                        {
+                            result=true;
+                            break;
+                        }
+                    }
+
+                }
+
+            } else if (CacheContext.rgwpmap.containsKey(depId)) {
+
+                List<ProBasicPowerstation> wpls=CacheContext.rgwpmap.get(depId);
+                for(ProBasicPowerstation wp:wpls)
+                {
+                    if(CacheContext.subwpmap.containsKey(btId))
+                    {
+                        ProBasicSubStation sub= CacheContext.subwpmap.get(btId);
+                        if(sub.getWindpowerstationId().equals(wp.getId()))
+                        {
+                            result=true;
+                            break;
+                        }
+                    }
+
+                }
+
+            }else  if(depId.equals("0"))
+            {
+                result=true;
+
+            }
+        }
+
+        return result;
+    }
 }

+ 1 - 1
alarm-service/src/main/java/com/gyee/alarm/service/ReloadVoSevice.java

@@ -40,7 +40,7 @@ public class ReloadVoSevice {
     private AlarmCtService alarmCtService;
     @Resource
     private IProEconAlarmConfigurationService proEconAlarmConfigurationService;
-    public synchronized void reload() throws EncodeException, IOException {
+    public synchronized void reload() throws Exception {
 
 
         Map<String, List<ProEconAlarmRule>> alarmRulesMap = new HashMap<>();

+ 190 - 0
alarm-service/src/main/java/com/gyee/alarm/websocket/WebSocketBt.java

@@ -0,0 +1,190 @@
+package com.gyee.alarm.websocket;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 功能描述:
+ * WebSocketServer服务端
+ * @Date: 2022-12-01 09:41:32
+ * @since: 1.0.0
+ */
+// @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端。注解的值将被用于监听用户连接的终端访问URL地址
+// encoders = WebSocketCustomEncoding.class 是为了使用ws自己的推送Object消息对象(sendObject())时进行解码,通过Encoder 自定义规则(转换为JSON字符串)
+@ServerEndpoint(value = "/websocketBt/{userId}",encoders = WebSocketCustomEncoding.class)
+@Component
+public class WebSocketBt {
+    private final static Logger logger = LogManager.getLogger(WebSocketBt.class);
+
+    /**
+     * 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的
+     */
+
+    private static int onlineCount = 0;
+
+    /**
+     * concurrent包的线程安全Map,用来存放每个客户端对应的MyWebSocket对象
+     */
+    public static ConcurrentHashMap<String, WebSocketBt> webSocketBtMap = new ConcurrentHashMap<>();
+
+    /***
+     * 功能描述:
+     * concurrent包的线程安全Map,用来存放每个客户端对应的MyWebSocket对象的参数体
+     */
+    public static ConcurrentHashMap<String, PushParams> webSocketParamsBtMap = new ConcurrentHashMap<>();
+
+    public static ConcurrentHashMap<String, List<String>> btParamsMap = new ConcurrentHashMap<>();
+    /**
+     * 与某个客户端的连接会话,需要通过它来给客户端发送数据
+     */
+
+    private Session session;
+    private String userId;
+
+
+    /**
+     * 连接建立成功调用的方法
+     * onOpen 和 onClose 方法分别被@OnOpen和@OnClose 所注解。他们定义了当一个新用户连接和断开的时候所调用的方法。
+     */
+    @OnOpen
+    public void onOpen(Session session, @PathParam("userId") String userId) {
+        this.session = session;
+        this.userId = userId;
+        //加入map
+        webSocketBtMap.put(userId, this);
+        addOnlineCount();           //在线数加1
+        logger.info("Bt用户{}连接成功,当前在线人数为{}", userId, getOnlineCount());
+        try {
+            sendMessage(String.valueOf(this.session.getQueryString()));
+        } catch (IOException e) {
+            logger.error("BtIO异常");
+        }
+    }
+
+
+    /**
+     * 连接关闭调用的方法
+     */
+    @OnClose
+    public void onClose() {
+        //从map中删除
+        webSocketBtMap.remove(userId);
+        subOnlineCount();           //在线数减1
+        logger.info("Bt用户{}关闭连接!当前在线人数为{}", userId, getOnlineCount());
+    }
+
+    /**
+     * 收到客户端消息后调用的方法
+     * onMessage 方法被@OnMessage所注解。这个注解定义了当服务器接收到客户端发送的消息时所调用的方法。
+     * @param message 客户端发送过来的消息
+     */
+    @OnMessage
+    public void onMessage(String message, Session session) {
+        logger.info("Bt来自客户端用户:{} 消息:{}",userId, message);
+
+        //群发消息
+        /*for (String item : webSocketBtMap.keySet()) {
+            try {
+                webSocketBtMap.get(item).sendMessage(message);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }*/
+    }
+
+    /**
+     * 发生错误时调用
+     *
+     * @OnError
+     */
+    @OnError
+    public void onError(Session session, Throwable error) {
+        logger.error("Bt用户错误:" + this.userId + ",原因:" + error.getMessage());
+        error.printStackTrace();
+    }
+
+    /**
+     * 向客户端发送消息
+     */
+    public void sendMessage(String message) throws IOException {
+        this.session.getBasicRemote().sendText(message);
+        //this.session.getAsyncRemote().sendText(message);
+    }
+
+    /**
+     * 向客户端发送消息
+     */
+    public void sendMessage(Object message) throws IOException, EncodeException {
+        this.session.getBasicRemote().sendObject(message);
+        //this.session.getAsyncRemote().sendText(message);
+    }
+
+    /**
+     * 通过userId向客户端发送消息
+     */
+    public void sendMessageByUserId(String userId, String message) throws IOException {
+        logger.info("Bt服务端发送消息到{},消息:{}",userId,message);
+
+        if(StringUtils.isNotBlank(userId)&&webSocketBtMap.containsKey(userId)){
+            webSocketBtMap.get(userId).sendMessage(message);
+        }else{
+            logger.error("Bt用户{}不在线",userId);
+        }
+
+    }
+
+    /**
+     * 通过userId向客户端发送消息
+     */
+    public void sendMessageByUserId(String userId, Object message) throws IOException, EncodeException {
+        logger.info("Bt服务端发送消息到{},消息:{}",userId,message);
+        if(StringUtils.isNotBlank(userId)&&webSocketBtMap.containsKey(userId)){
+            webSocketBtMap.get(userId).sendMessage(message);
+        }else{
+            logger.error("Bt用户{}不在线",userId);
+        }
+    }
+
+    /**
+     * 通过userId更新缓存的参数
+     */
+    public void changeParamsByUserId(String userId, PushParams pushParams) throws IOException, EncodeException {
+        logger.info("wsBt用户{}请求参数更新,参数:{}",userId,pushParams.toString());
+        webSocketParamsBtMap.put(userId,pushParams);
+    }
+
+    /**
+     * 群发自定义消息
+     */
+    public static void sendInfo(String message) throws IOException {
+        for (String item : webSocketBtMap.keySet()) {
+            try {
+                webSocketBtMap.get(item).sendMessage(message);
+            } catch (IOException e) {
+                continue;
+            }
+        }
+    }
+
+    public static synchronized int getOnlineCount() {
+        return onlineCount;
+    }
+
+    public static synchronized void addOnlineCount() {
+        WebSocketBt.onlineCount++;
+    }
+
+    public static synchronized void subOnlineCount() {
+        WebSocketBt.onlineCount--;
+    }
+
+}

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

@@ -173,7 +173,7 @@ task-count: 10
 interval: 1
 #报警websockt重复报警推送间隔
 pushinterval: 1
-
+read-rows: 1000
 
 
 

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

@@ -4,6 +4,7 @@ package com.gyee;
 import com.gyee.alarm.AlarmMain;
 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.alarm.util.SpringUtils;
@@ -17,90 +18,21 @@ public class AppTest
         AlarmBtService alarmBtService= SpringUtils.getBean("alarmBtService");
         AlarmWtService alarmWtService= SpringUtils.getBean("alarmWtService");
         AlarmCtService alarmCtService= SpringUtils.getBean("alarmCtService");
-
+        AlarmInService alarmInService= SpringUtils.getBean("alarmInService");
 
 
         alarmWtService.createSuperTable();
         alarmWtService.initalWtAlarm();
+        alarmInService.initalInAlarm();
 
         alarmBtService.createSuperTable();
         alarmBtService.initalBtAlarm();
 
-//        alarmCtService.createSuperTable();
-//        alarmCtService.initalCtAlarm();
+        alarmCtService.createSuperTable();
+        alarmCtService.initalCtAlarm();
 
         System.out.println("完成!");
 
-//
-//        alarmService.createTable("test1", "alarmid01", "windturbine",
-//               "紧急停机","bj",
-//                false, "桨叶1的91度限位开关故障",
-//                "SXJ_KGDL_HSM_F_WT_0001_EQ", "红石峁01号风机",
-//                "windturbine", true,
-//               "SXJ_KGDL_HSMF01_LN", "红石峁一号集电线路",
-//                "UP77", "SXJ_KGDL_HSMF01_EG",
-//                "红石峁一期项目", 3,
-//                true, "SXJ_KGDL_HSM_FDC_STA",
-//                "平鲁红石峁风电场", "",
-//                "", "",
-//                0, "DI0001");
-//
-//        Alarm test1=new Alarm();
-//        test1.setTbName("test1");
-//        test1.setTs(new Timestamp(new java.util.Date().getTime()));
-//        test1.setOval(0);
-//        test1.setVal(1);
-//        alarmService.insertOne(test1);
-//
-//        alarmService.createTable("test2", "alarmid02", "windturbine",
-//               "紧急停机","bj",
-//                false, "桨叶1的91度限位开关故障",
-//                "SXJ_KGDL_HSM_F_WT_0002_EQ", "红石峁02号风机",
-//                "windturbine", true,
-//               "SXJ_KGDL_HSMF01_LN", "红石峁一号集电线路",
-//                "UP77", "SXJ_KGDL_HSMF01_EG",
-//                "红石峁一期项目", 3,
-//                true, "SXJ_KGDL_HSM_FDC_STA",
-//                "平鲁红石峁风电场", "",
-//                "", "tagid2",
-//                0, "DI0001","");
-//
-//
-//        alarmService.createTable("test3", "alarmid03", "windturbine",
-//                "紧急停机","bj",
-//                false, "桨叶1的91度限位开关故障",
-//                "SXJ_KGDL_HSM_F_WT_0003_EQ", "红石峁03号风机",
-//                "windturbine", true,
-//                "SXJ_KGDL_HSMF01_LN", "红石峁一号集电线路",
-//                "UP77", "SXJ_KGDL_HSMF01_EG",
-//                "红石峁一期项目", 3,
-//                true, "SXJ_KGDL_HSM_FDC_STA",
-//                "平鲁红石峁风电场", "",
-//                "", "tagid3",
-//                0, "DI0001","");
-//
-//
-//
-//        alarmService.createTable("test4", "alarmid04", "windturbine",
-//                "紧急停机","bj",
-//                false, "桨叶1的91度限位开关故障",
-//                "SXJ_KGDL_HSM_F_WT_0004_EQ", "红石峁04号风机",
-//                "windturbine", true,
-//                "SXJ_KGDL_HSMF01_LN", "红石峁一号集电线路",
-//                "UP77", "SXJ_KGDL_HSMF01_EG",
-//                "红石峁一期项目", 3,
-//                true, "SXJ_KGDL_HSM_FDC_STA",
-//                "平鲁红石峁风电场", "",
-//                "", "tagid4",
-//                0, "DI0001","");
-//
-//
 
-//        List<Alarm> ls=alarmService.selectByName("test1");
-//
-//        if(ls.isEmpty())
-//        {
-//            System.out.println(ls.get(0).toString());
-//        }
     }
 }

+ 29 - 0
alarm-stat/src/main/java/com/gyee/alarm/service/EarlyReportParam.java

@@ -0,0 +1,29 @@
+package com.gyee.alarm.service;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class EarlyReportParam implements Serializable {
+
+    //部件编码  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;
+}

+ 4 - 21
alarm-stat/src/main/java/com/gyee/alarm/service/EarlyReportService.java

@@ -23,7 +23,6 @@ import java.util.stream.Collectors;
 public class EarlyReportService  {
 
 
-
     @Resource
     private  IProEconAlarmInfoService proEconAlarmInfoService;
     @Resource
@@ -33,31 +32,14 @@ public class EarlyReportService  {
     @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点,向前间隔天数,为计算区间
-//    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;
@@ -67,11 +49,12 @@ public class EarlyReportService  {
         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)
        {
 

+ 0 - 149
alarm-stat/src/main/java/com/gyee/alarm/service/FeatureStatService.java

@@ -1,149 +0,0 @@
-//package com.gyee.alarm.service;
-//
-//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-//import com.gyee.alarm.init.CacheContext;
-//import com.gyee.alarm.model.auto.*;
-//import cn.hutool.core.bean.BeanUtil;
-//import com.gyee.alarm.model.auto.ProBasicFeatureStat;
-//import com.gyee.alarm.model.vo.AlarmType;
-//import com.gyee.alarm.service.auto.IAlarmTsService;
-//import com.gyee.alarm.service.auto.IProBasicFeatureStatService;
-//import com.gyee.alarm.util.DateUtils;
-//import com.gyee.alarm.util.SnowflakeGenerator;
-//import com.gyee.alarm.util.StringUtils;
-//
-//
-//import javafx.scene.chart.CategoryAxis;
-//import org.springframework.stereotype.Service;
-//
-//import javax.annotation.Resource;
-//import java.sql.Timestamp;
-//import java.util.*;
-//import java.util.stream.Collectors;
-//
-//@Service
-//public class FeatureStatService {
-//    @Resource
-//    private IAlarmTsService alarmTsService;
-//
-//    @Resource
-//    private IProBasicFeatureStatService proBasicFeatureStatService;
-//
-//    public void findFeatureStatList(Date recordDate) {
-//
-//
-//        Calendar c = Calendar.getInstance();
-//        c.setTime(recordDate);
-//        Date begin = DateUtils.truncate(c.getTime());
-//        Date end = DateUtils.addDays(begin, 1);
-//
-//        Date statDate=DateUtils.truncate(recordDate);
-//
-//        QueryWrapper<ProBasicFeatureStat> queryWrapper = new QueryWrapper<>();
-//        queryWrapper.eq("stat_date", statDate);
-//        //判断是否有重复记录,先删除重复记录
-//        List<String> idls = proBasicFeatureStatService.list(queryWrapper).stream()
-//                .map(ProBasicFeatureStat::getId)
-//                .collect(Collectors.toList());
-//
-//        if (idls.size() > 0) {
-//
-//            List<String> templs = new ArrayList<>();
-//            for (String vo : idls) {
-//                templs.add(vo);
-//                if (templs.size() == 100) {
-//                    proBasicFeatureStatService.removeByIds(templs);
-//                    templs = new ArrayList<>();
-//                }
-//
-//            }
-//
-//            if (!templs.isEmpty()) {
-//                proBasicFeatureStatService.removeByIds(templs);
-//            }
-//
-//        }
-//
-//        List<ProBasicFeatureStat> fsls = alarmTsService.findFeatureStatList(begin.getTime(), end.getTime());
-//
-//        Map<String, ProBasicFeatureStat> map = new HashMap<>();
-//
-//
-//        if (!fsls.isEmpty()) {
-//            for (ProBasicFeatureStat fs : fsls) {
-//                if (StringUtils.notEmp(fs.getTypeCode()) && CacheContext.alarmTypeMap.containsKey(fs.getTypeCode())) {
-//                    ProEconAlarmType at = CacheContext.alarmTypeMap.get(fs.getTypeCode());
-//                    fs.setTypeName(at.getName());
-//                }
-//                fs.setStatDate(new Timestamp(statDate.getTime()));
-//                fs.setId(String.valueOf(SnowflakeGenerator.generateId()));
-//                StringBuilder sb = new StringBuilder();
-//                sb.append(fs.getWtId()).append("_").append(fs.getAlarmid());
-//                map.put(String.valueOf(sb), fs);
-//            }
-//        }
-//        List<ProBasicFeatureStat> vos = new ArrayList<>();
-//        for (ProBasicEquipment wt : CacheContext.wtls) {
-//
-//            StringBuilder sb=new StringBuilder();
-//            sb.append(wt.getWindpowerstationId()).append(wt.getModelId());
-//            if(CacheContext.wtAlarmMap.containsKey(String.valueOf(sb))) {
-//                List<ProEconAlarmConfiguration> ls = CacheContext.wtAlarmMap.get(String.valueOf(sb));
-//                for (ProEconAlarmConfiguration at : ls) {
-//
-//                    setValues(statDate, map, vos, wt, at);
-//                }
-//            }
-//
-//        }
-//
-//        List<ProBasicFeatureStat> templs = new ArrayList<>();
-//        for (ProBasicFeatureStat vo : vos) {
-//            templs.add(vo);
-//            if (templs.size() == 100) {
-//                proBasicFeatureStatService.saveBatch(templs);
-//                templs = new ArrayList<>();
-//            }
-//
-//        }
-//
-//        if (!templs.isEmpty()) {
-//            proBasicFeatureStatService.saveBatch(templs);
-//        }
-//
-//
-//    }
-//
-//    private  static void setValues(Date statDate,Map<String, ProBasicFeatureStat> map, List<ProBasicFeatureStat> vos, ProBasicEquipment wt, ProEconAlarmConfiguration at) {
-//
-//        ProBasicFeatureStat fs = new ProBasicFeatureStat();
-//
-//        StringBuilder sb = new StringBuilder();
-//        sb.append(fs.getWtId()).append("_").append(at.getId());
-//        if (map.containsKey(String.valueOf(sb))) {
-//            ProBasicFeatureStat old = map.get(String.valueOf(sb));
-//            BeanUtil.copyProperties(old, fs);
-//        } else {
-//            fs.setStatDate(new Timestamp(statDate.getTime()));
-//            fs.setId(String.valueOf(SnowflakeGenerator.generateId()));
-//            fs.setWtId(wt.getId());
-//            fs.setStationId(wt.getWindpowerstationId());
-//            fs.setTypeCode(at.getComponents());
-//            if(CacheContext.alarmTypeMap.containsKey(at.getComponents()))
-//            {
-//                fs.setTypeName(CacheContext.alarmTypeMap.get(at.getComponents()).getName());
-//            }
-//            fs.setAlarmid(at.getId());
-//            fs.setDescription(at.getDescription());
-//            fs.setTotal(0l);
-//            fs.setAvgSeconds(0.0);
-//            fs.setMaxSeconds(0.0);
-//            fs.setMinSeconds(0.0);
-//            fs.setTotalSeconds(0.0);
-//
-//        }
-//        vos.add(fs);
-//    }
-//
-//
-//}

+ 58 - 59
alarm-stat/src/main/java/com/gyee/alarm/task/SaticScheduleTask.java

@@ -1,63 +1,62 @@
-//package com.gyee.alarm.task;
-//
-//
-//import com.gyee.alarm.service.FeatureStatService;
-//import com.gyee.alarm.util.DateUtils;
-//
-//import com.xxl.job.core.context.XxlJobHelper;
-//import com.xxl.job.core.handler.annotation.XxlJob;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.stereotype.Component;
-//
-//import javax.annotation.Resource;
-//import java.util.Calendar;
-//import java.util.Date;
-//import java.util.List;
-//import java.util.concurrent.Executor;
-//
-///**
-// * @ClassName : SaticScheduleTask
-// * @Description : 调度
-// */
-//
-//
-//@Component
-//public class SaticScheduleTask {
-//
-//    private static Logger logger = LoggerFactory.getLogger(SaticScheduleTask.class);
-//    @Resource
-//    private FeatureStatService featureStatService;
-//
-//
-//    //3.添加定时任务
-//
-//    /**
-//     * 健康状态判定
-//     */
-////    @Scheduled(cron = "0 0/1 * * * ?")
-//    //或直接指定时间间隔,例如:5秒
-//    //@Scheduled(fixedRate=5000)
-//    @XxlJob("alarmStat_findFeatureStatList")
-//    public void alarmStat_findFeatureStatList() {
-//
-//
-//        XxlJobHelper.log("报警按模块统计调度程序执行开始!........");
-//
-//        try {
+package com.gyee.alarm.task;
+
+
+import com.gyee.alarm.service.EarlyReportParam;
+import com.gyee.alarm.service.EarlyReportService;
+
+
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.Executor;
+
+/**
+ * @ClassName : SaticScheduleTask
+ * @Description : 调度
+ */
+
+
+@Component
+public class SaticScheduleTask {
+
+    private static Logger logger = LoggerFactory.getLogger(SaticScheduleTask.class);
+    @Resource
+    private EarlyReportService earlyReportService;
+
+
+    /**
+     * 判定
+     */
+//    @Scheduled(cron = "0 0/1 * * * ?")
+    //或直接指定时间间隔,例如:5秒
+    //@Scheduled(fixedRate=5000)
+    @XxlJob("alarmStat_earlyReport")
+    public void alarmStat_earlyReport() {
+
+
+        XxlJobHelper.log("报警按模块统计调度程序执行开始!........");
+
+        try {
 //            Calendar c = Calendar.getInstance();
 //
 ////            Date begin = DateUtils.truncate(c.getTime());
 ////            Date end = DateUtils.addDays(begin, 1);
-//
-//            featureStatService.findFeatureStatList(c.getTime());
-//        } catch (Exception e) {
-//
-//            e.printStackTrace();
-//        }
-//
-//        XxlJobHelper.log("报警按模块统计调度任务处理完成!........");
-//    }
-//
-//
-//}
+//            EarlyReportParam reportParam=new EarlyReportParam();
+            earlyReportService.createEarlyReport();
+        } catch (Exception e) {
+
+            e.printStackTrace();
+        }
+
+        XxlJobHelper.log("报警按模块统计调度任务处理完成!........");
+    }
+
+
+}

+ 8 - 9
alarm-stat/src/test/java/com/gyee/AalarmStatTest.java

@@ -2,7 +2,6 @@ package com.gyee;
 
 
 import com.gyee.alarm.AlarmMain;
-import com.gyee.alarm.service.FeatureStatService;
 
 import com.gyee.alarm.util.SpringUtils;
 import org.springframework.boot.SpringApplication;
@@ -14,14 +13,14 @@ public class AalarmStatTest
     public static void main(String[] args) throws Exception {
         SpringApplication.run(AlarmMain.class, args);
 
-        FeatureStatService featureStatService= SpringUtils.getBean("featureStatService");
-
-
-        Calendar c = Calendar.getInstance();
-
-
-        featureStatService.findFeatureStatList(c.getTime());
-
+//        FeatureStatService featureStatService= SpringUtils.getBean("featureStatService");
+//
+//
+//        Calendar c = Calendar.getInstance();
+//
+//
+//        featureStatService.findFeatureStatList(c.getTime());
+//
 
 
         System.out.println("完成!");

+ 25 - 5
alarm-web/src/main/java/com/gyee/alarm/controller/AlertRuleController.java

@@ -155,14 +155,34 @@ public class AlertRuleController {
 
     @GetMapping(value = "/querywpllist")
     @ApiOperation(value = "查询场站列表", notes = "查询场站列表")
-    public AjaxResult queryWplList() {
+    public AjaxResult queryWplList(String types) {
 
         HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();
         List<ProBasicPowerstation> wpls = tokenService.getWpls(request);
+        List<ProBasicPowerstation> vos = new ArrayList<>();
+        if(!wpls.isEmpty())
+        {
+            for(ProBasicPowerstation wp:wpls)
+            {
+                if(StringUtils.notEmp(types))
+                {
+                    if(types.equals(AlarmTypeValue.WT.getCode())  && wp.getId().contains("FDC"))
+                    {
+                        vos.add(wp);
+                    }else if(types.equals(AlarmTypeValue.IN.getCode())  && wp.getId().contains("GDC"))
+                    {
+                        vos.add(wp);
+                    }else if(types.equals(AlarmTypeValue.BT.getCode()))
+                    {
+                        List<ProBasicSubStation> subwpls = tokenService.getSubwpls(request);
+                        return AjaxResult.successData(AjaxStatus.success.code, subwpls);
+                    }
+                }
+            }
+        }
+        if (StringUtils.notEmp(vos)) {
 
-        if (StringUtils.notEmp(wpls)) {
-
-            return AjaxResult.successData(AjaxStatus.success.code, wpls);
+            return AjaxResult.successData(AjaxStatus.success.code, vos);
         } else {
             return AjaxResult.successData(AjaxStatus.loginexpire.code, "error");
         }
@@ -174,7 +194,7 @@ public class AlertRuleController {
             @ApiImplicitParam(name = "wpId", value = "风场编号", required = true, dataType = "string", paramType = "query")})
     public AjaxResult queryWtList(String wpId) {
         List<ProBasicEquipment> wtls = new ArrayList<>();
-        Map<String, List<ProBasicEquipmentPoint>> map = new HashMap<>();
+
         if (StringUtils.notEmp(wpId) && CacheContext.wpwtmap.containsKey(wpId)) {
             wtls = CacheContext.wpwtmap.get(wpId);
         }

+ 325 - 0
alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceController.java

@@ -0,0 +1,325 @@
+package com.gyee.alarm.controller;
+
+
+import cn.hutool.poi.excel.ExcelUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gyee.alarm.model.auto.*;
+import com.gyee.alarm.model.vo.AjaxResult;
+import com.gyee.alarm.model.vo.TreeNode;
+import com.gyee.alarm.service.DeviceService;
+import com.gyee.alarm.service.auto.IProBasicDeviceModelService;
+import com.gyee.alarm.service.auto.IProBasicDeviceService;
+import com.gyee.alarm.service.auto.IProBasicDeviceStructureService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import org.springframework.web.bind.annotation.*;
+
+
+import javax.annotation.Resource;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 设备模型 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-09-14
+ */
+@RestController
+@RequestMapping("///device")
+@Api(value = "设备信息接口")
+public class ProBasicDeviceController {
+
+    Logger logger = LogManager.getLogger(ProBasicDeviceController.class);
+
+    @Resource
+    private DeviceService deviceService;
+    @Resource
+    private IProBasicDeviceService proBasicDeviceService;
+    @Resource
+    private IProBasicDeviceStructureService proBasicDeviceStructureService;
+    @Resource
+    private IProBasicDeviceModelService proBasicDeviceModelService;
+
+
+
+    @GetMapping(value = "/list")
+    public List<ProBasicDevice> getAllDevice() {
+        return proBasicDeviceService.list();
+    }
+
+    @GetMapping(value = "/structure/all")
+    public List<ProBasicDeviceStructure> getAllDeviceStructure() {
+        return proBasicDeviceStructureService.list();
+    }
+
+    @GetMapping(value = "/structure/{deviceId}")
+    public List<ProBasicDeviceStructure> getDeviceStructureByDeviceId(@PathVariable("deviceId")  String deviceId) {
+        return proBasicDeviceStructureService.getDeviceStructureByDeviceId(deviceId);
+    }
+
+    @GetMapping(value = "/structure/{deviceId}/{nodeCode}")
+    public List<ProBasicDeviceStructure> getAllDeviceStructure(@PathVariable("deviceId")  String deviceId,
+                                                       @PathVariable("nodeCode")  String nodeCode) {
+        return proBasicDeviceStructureService.getDeviceStructureChildNode(deviceId, nodeCode);
+    }
+
+    @GetMapping(value = "/structure/single/{deviceId}/{nodeCode}")
+    public ProBasicDeviceStructure getDeviceStructureByCode(@PathVariable("deviceId")  String deviceId,
+                                                    @PathVariable("nodeCode")  String nodeCode) {
+        return proBasicDeviceStructureService.getDeviceStructureByCode(deviceId, nodeCode);
+    }
+
+    @GetMapping(value = "/structure/tree/{deviceId}/{nodeCode}")
+    public TreeNode<ProBasicDeviceStructure> getDeviceStructureTree(@PathVariable("deviceId")  String deviceId,
+                                                            @PathVariable("nodeCode")  String nodeCode) {
+        return deviceService.getDeviceStructureTree(deviceId, nodeCode);
+    }
+
+    @GetMapping(value = "/structure/tree/{deviceId}")
+    public TreeNode<ProBasicDeviceStructure> getDeviceStructureTree(@PathVariable("deviceId")  String deviceId) {
+        return deviceService.getDeviceStructureTree(deviceId);
+    }
+
+    @DeleteMapping(value = "/structure/delete/{dsId}")
+    public int deleteDeviceStructure(@PathVariable("dsId") long dsId) {
+        return deviceService.deleteDeviceStructure(dsId);
+    }
+
+    //@UserLoginToken
+    @PostMapping(value = "/structure")
+    @ResponseBody
+    public AjaxResult  saveDeviceStructure(@RequestBody ProBasicDeviceStructure ds) {
+
+        deviceService.saveOrUpdateDeviceStructure(ds);
+
+        AjaxResult  wrapper = dataCheck(ds);
+        return wrapper;
+
+    }
+
+    public AjaxResult  dataCheck(ProBasicDeviceStructure ds) {
+
+        AjaxResult  wrapper = null;
+        String msg = "";
+        boolean result = true;
+
+        if (ds.getCode() == null || ds.getCode().equals("")) {
+            msg = "结构编码不能为空";
+            result = false;
+        } else if (ds.getParentCode() == null || ds.getParentCode().equals("")) {
+            msg = "父节点不能为空";
+            result = false;
+        } else if (ds.getDeviceId() == null || ds.getDeviceId().equals("")) {
+            msg = "设备ID不能为空";
+            result = false;
+        } else if (ds.getName() == null || ds.getName().equals("")) {
+            msg = "名称不能为空";
+            result = false;
+        }
+
+        if (result) {
+            wrapper = AjaxResult.success(msg);
+        } else {
+            wrapper = AjaxResult.error(msg);
+        }
+
+        return wrapper;
+    }
+
+    @GetMapping(value = "/metrics/{deviceId}")
+    public List<ProBasicDeviceMetrics> getDeviceMetricsByDeviceId(@PathVariable("deviceId")  String deviceId) {
+        return deviceService.getDeviceMetricsByDeviceId(deviceId);
+    }
+
+    @GetMapping(value = "/metrics/{deviceId}/{structureCode}")
+    public List<ProBasicDeviceMetrics> getDeviceMetricsBySturctureCode(@PathVariable("deviceId")  String deviceId,
+                                                               @PathVariable("structureCode")  String structureCode) {
+        return deviceService.getDeviceMetricsByStructureCode(deviceId, structureCode);
+    }
+    @GetMapping(value = "/metrics/page")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pagenum", value = "当前页", required = true, dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "pagesize", value = "分页大小", required = true, dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "deviceId", value = "设备类型", required = true, dataType = "string", paramType = "query"),
+            @ApiImplicitParam(name = "structureCode", value = "结构码", required = true, dataType = "string", paramType = "query")})
+    @ApiOperation(value = "分页查询标准测点")
+    public IPage<ProBasicDeviceMetrics> queryByPage(Integer pageNum,Integer pageSize,String categorydata,String  keyword,String  model,String deviceId,String structureCode
+    ){
+        Page<ProBasicDeviceMetrics> page =new Page(pageNum,pageSize);
+
+        try {
+            return  deviceService.pageQueryAll(page,deviceId,structureCode);
+        } catch (Exception e) {
+            logger.error("操作失败",e);
+            return null;
+        }
+
+    }
+
+
+    @GetMapping(value = "/metrics/single/{deviceId}/{metricCode}")
+    public ProBasicDeviceMetrics getDeviceMetricsByCode(@PathVariable("deviceId")  String deviceId,
+                                                @PathVariable("metricCode")  String metricCode) {
+        return deviceService.getDeviceMetricsByCode(deviceId, metricCode);
+    }
+
+
+    @DeleteMapping(value = "/metrics/single/delete/{metricId}")
+    public int deleteDeviceMetric(@PathVariable("metricId") long metricId) {
+        return deviceService.deleteDeviceMetric(metricId);
+    }
+
+    //@UserLoginToken
+    @PostMapping(value = "/metrics/single")
+    @ResponseBody
+    public AjaxResult saveDeviceMetrics(@RequestBody ProBasicDeviceMetrics ds) {
+
+        List<ProBasicDeviceModelMetrics> deviceModelMetrics =ds.getDeviceModelMetrics();
+        int result = deviceService.saveOrUpdateDeviceMetric(ds,deviceModelMetrics);
+
+        AjaxResult wrapper = dataCheck(ds);
+
+        return wrapper;
+
+    }
+
+    private AjaxResult dataCheck(ProBasicDeviceMetrics ds) {
+
+        AjaxResult wrapper = null;
+        String msg = "";
+        boolean result = true;
+
+        if (ds.getMetricCode() == null || ds.getMetricCode().equals("")) {
+            msg = "指标编码不能为空";
+            result = false;
+        } else if (ds.getStructureCode() == null || ds.getStructureCode().equals("")) {
+            msg = "设备结构编码不能为空";
+            result = false;
+        } else if (ds.getDeviceId() == null || ds.getDeviceId().equals("")) {
+            msg = "设备ID不能为空";
+            result = false;
+        } else if (ds.getName() == null || ds.getName().equals("")) {
+            msg = "名称不能为空";
+            result = false;
+        }
+
+        /*if (deviceService.getDeviceMetricsByCode(ds.getDeviceId(), ds.getMetricCode()) != null) {
+            msg = "指标编码重复!!";
+            result = false;
+        }*/
+
+        if (result) {
+            wrapper = AjaxResult.success(msg);
+        } else {
+            wrapper = AjaxResult.error(msg);
+        }
+
+        return wrapper;
+    }
+
+    @GetMapping(value = "/model/list")
+    public List<ProBasicDeviceModel> getDeviceModelList() {
+        return proBasicDeviceModelService.list();
+    }
+
+     @ApiOperation(value = "风机型号分页查询")
+    @GetMapping(value = "/model/page")
+     @ApiImplicitParams({
+             @ApiImplicitParam(name = "pagenum", value = "当前页", required = true, dataType = "Integer", paramType = "query"),
+             @ApiImplicitParam(name = "pagesize", value = "分页大小", required = true, dataType = "Integer", paramType = "query"),
+             @ApiImplicitParam(name = "code", value = "风机型号", required = true, dataType = "string", paramType = "query"),
+             @ApiImplicitParam(name = "stationname", value = "场站名称", required = true, dataType = "string", paramType = "query")})
+    public AjaxResult queryByPage(Integer pageNum,Integer pageSize, String code, String stationname) {
+        Page<ProBasicDeviceModel> page = new Page(pageNum, pageSize);
+        IPage<ProBasicDeviceModel> pageResult = deviceService.pageQueryDeviceModel(page, code,stationname);
+        return AjaxResult.success("请求成功");
+    }
+
+    @GetMapping(value = "/model/{id}")
+    public List<ProBasicDeviceModel> getDeviceModelsById(@PathVariable("id")  String id) {
+        return deviceService.getDeviceModelsById(id);
+    }
+
+
+    @DeleteMapping(value = "/model/delete/{id}")
+    public int deleteDeviceModel(@PathVariable("id") int id) {
+        return deviceService.deleteDeviceModel(id);
+    }
+
+    @PostMapping(value = "/model")
+    @ResponseBody
+    public AjaxResult saveDeviceModel(@RequestBody ProBasicDeviceModel ds) {
+
+        int result = deviceService.saveOrUpdateDeviceModel(ds);
+        AjaxResult wrapper = dataCheck2(ds);
+
+        return wrapper;
+    }
+    public AjaxResult dataCheck2(ProBasicDeviceModel ds) {
+
+        AjaxResult wrapper = null;
+        String msg = "";
+        boolean result = true;
+
+        if (ds.getCode() == null || ds.getCode().equals("")) {
+            msg = "设备编码不能为空";
+            result = false;
+        }  else if (ds.getDeviceId() == null || ds.getDeviceId().equals("")) {
+            msg = "设备ID不能为空";
+            result = false;
+        } else if (ds.getName() == null || ds.getName().equals("")) {
+            msg = "名称不能为空";
+            result = false;
+        }
+
+        if (deviceService.getDeviceModelByCode(ds.getDeviceId(), ds.getCode()) != null) {
+            msg = "指标编码重复!!";
+            result = false;
+        }
+
+        if (result) {
+            wrapper = AjaxResult.success(msg);
+        } else {
+            wrapper = AjaxResult.error(msg);
+        }
+
+        return wrapper;
+    }
+
+
+
+
+    public AjaxResult dataCheck3(ProBasicDeviceMetrics ds) {
+
+        AjaxResult wrapper = null;
+        String msg = "";
+        boolean result = true;
+
+        if (ds.getMetricCode() == null || ds.getMetricCode().equals("")) {
+            msg = "指标编码不能为空";
+            result = false;
+        } else if (ds.getStructureCode() == null || ds.getStructureCode().equals("")) {
+            msg = "设备结构编码不能为空";
+            result = false;
+        }  else if (ds.getName() == null || ds.getName().equals("")) {
+            msg = "名称不能为空";
+            result = false;
+        }
+        if (result) {
+            wrapper = AjaxResult.success(msg);
+        } else {
+            wrapper = AjaxResult.error(msg);
+        }
+
+        return wrapper;
+    }
+}

+ 20 - 0
alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceFaultMetricsController.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-14
+ */
+@RestController
+@RequestMapping("//pro-basic-device-fault-metrics")
+public class ProBasicDeviceFaultMetricsController {
+
+}

+ 117 - 0
alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceFaultModeController.java

@@ -0,0 +1,117 @@
+package com.gyee.alarm.controller;
+
+
+import cn.hutool.poi.excel.ExcelUtil;
+import com.gyee.alarm.model.auto.ProBasicDeviceFaultMode;
+import com.gyee.alarm.model.vo.AjaxResult;
+import com.gyee.alarm.service.DeviceFaultModeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 设备故障模型 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2023-09-14
+ */
+@RestController
+@RequestMapping("//device/faultmode")
+public class ProBasicDeviceFaultModeController {
+
+
+    @Autowired
+    private DeviceFaultModeService deviceFaultModeService;
+
+
+    @GetMapping(value = "/{deviceId}")
+    public List<ProBasicDeviceFaultMode> getDeviceFaultModeByDeviceId(@PathVariable("deviceId")  String deviceId) {
+        return deviceFaultModeService.getDeviceFaultModeByDeviceId(deviceId);
+    }
+
+    @GetMapping(value = "/{deviceId}/{structurecode}")
+    public List<ProBasicDeviceFaultMode> getDeviceFaultModeBySturctureCode(@PathVariable("deviceId")  String deviceId,
+                                                                   @PathVariable("structurecode")  String structurecode) {
+        return deviceFaultModeService.getDeviceFaultModeByStructureCode(deviceId, structurecode);
+    }
+
+
+    @GetMapping(value = "/single/{code}")
+    public ProBasicDeviceFaultMode getDeviceFaultModeByCode(@PathVariable("code")  String code) {
+        return deviceFaultModeService.getDeviceFaultModeByCode(code);
+    }
+
+
+    @DeleteMapping(value = "/delete/{id}")
+    public boolean deleteDeviceFaultMode(@PathVariable("id") String id) {
+        boolean result = deviceFaultModeService.deleteDeviceFaultMode(id);
+        return result;
+    }
+
+    @PostMapping()
+    @ResponseBody
+    public AjaxResult saveDeviceFaultMode(@RequestBody ProBasicDeviceFaultMode ds) {
+
+
+         deviceFaultModeService.saveorUpdateDeviceFaultMode(ds);
+
+        AjaxResult  wrapper = dataCheck(ds);
+
+        return wrapper;
+    }
+
+    private AjaxResult  dataCheck(ProBasicDeviceFaultMode ds) {
+
+        AjaxResult  wrapper = null;
+        String msg = "";
+        boolean result = true;
+
+        if (ds.getCode() == null || ds.getCode().equals("")) {
+            msg = "结构编码不能为空";
+            result = false;
+        } else if (ds.getDeviceid() == null || ds.getDeviceid().equals("")) {
+            msg = "设备ID不能为空";
+            result = false;
+        } else if (ds.getName() == null || ds.getName().equals("")) {
+            msg = "名称不能为空";
+            result = false;
+        }
+        if (result) {
+            wrapper = AjaxResult.success(msg);
+        } else {
+            wrapper = AjaxResult.error(msg);
+        }
+        return wrapper;
+    }
+
+
+
+    private AjaxResult  dataCheck2(ProBasicDeviceFaultMode ds) {
+
+        AjaxResult  wrapper = null;
+        String msg = "";
+        boolean result = true;
+
+        if (ds.getCode() == null || ds.getCode().equals("")) {
+            msg = "结构编码不能为空";
+            result = false;
+        }  else if (ds.getName() == null || ds.getName().equals("")) {
+            msg = "名称不能为空";
+            result = false;
+        }
+        if (result) {
+            wrapper = AjaxResult.success(msg);
+        } else {
+            wrapper = AjaxResult.error(msg);
+        }
+        return wrapper;
+    }
+}

+ 20 - 0
alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceMetricsController.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-14
+ */
+@RestController
+@RequestMapping("//pro-basic-device-metrics")
+public class ProBasicDeviceMetricsController {
+
+}

+ 20 - 0
alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceModelController.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-14
+ */
+@RestController
+@RequestMapping("//pro-basic-device-model")
+public class ProBasicDeviceModelController {
+
+}

+ 20 - 0
alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceModelMetricsController.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-14
+ */
+@RestController
+@RequestMapping("//pro-basic-device-model-metrics")
+public class ProBasicDeviceModelMetricsController {
+
+}

+ 20 - 0
alarm-web/src/main/java/com/gyee/alarm/controller/ProBasicDeviceStructureController.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-14
+ */
+@RestController
+@RequestMapping("//pro-basic-device-structure")
+public class ProBasicDeviceStructureController {
+
+}

+ 80 - 0
alarm-web/src/main/java/com/gyee/alarm/controller/ProEconShutdownEvent2Controller.java

@@ -0,0 +1,80 @@
+package com.gyee.alarm.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gyee.alarm.init.CacheContext;
+import com.gyee.alarm.model.auto.ProBasicEquipment;
+import com.gyee.alarm.model.auto.ProBasicEquipmentPoint;
+import com.gyee.alarm.model.auto.ProEconShutdownEvent2;
+import com.gyee.alarm.model.vo.AjaxResult;
+import com.gyee.alarm.model.vo.AjaxStatus;
+import com.gyee.alarm.service.auto.IProEconShutdownEvent2Service;
+import com.gyee.alarm.util.StringUtils;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 停机事件2 前端控制器
+ * </p>
+ *
+ * @author shilin
+ * @since 2022-10-21
+ */
+@RestController
+@RequestMapping("//shutdownevent2")
+public class ProEconShutdownEvent2Controller {
+    @Resource
+    private IProEconShutdownEvent2Service proEconShutdownEvent2Service;
+
+    @GetMapping(value = "/queryshutdowneventlist")
+    @ApiOperation(value = "查询停机事件记录", notes = "查询停机事件记录")
+    @ApiImplicitParams({
+
+            @ApiImplicitParam(name = "wpId", value = "风场编号", required = true, dataType = "string", paramType = "query"),
+            @ApiImplicitParam(name = "wtId", value = "设备编号", required = false, dataType = "string", paramType = "query"),
+            @ApiImplicitParam(name = "description", value = "故障描述 模糊查询", required = false, dataType = "string", paramType = "query"),
+            @ApiImplicitParam(name = "begin", value = "开始时间", required = true, dataType = "string", paramType = "query"),
+            @ApiImplicitParam(name = "end", value = "结束时间", required = true, dataType = "string", paramType = "query"),
+            @ApiImplicitParam(name = "pageNum", value = "当前页号", required = true, dataType = "string", paramType = "query"),
+            @ApiImplicitParam(name = "pageSize", value = "每页显示数量", required = true, dataType = "string", paramType = "query"),
+            @ApiImplicitParam(name = "type", value = "类型(gz 故障、wh 维护)", required = true, dataType = "string", paramType = "query")
+
+    })
+    public AjaxResult queryshutdowneventlist(String wpId, String wtId,String description,String begin,String end,Integer pageNum, Integer pageSize,String type) {
+
+        IPage<ProEconShutdownEvent2> vos=new Page<>();
+
+
+        if (StringUtils.notEmp(begin) && StringUtils.notEmp(end) && StringUtils.notEmp(pageNum) && StringUtils.notEmp(pageSize) && StringUtils.notEmp(type)) {
+
+            vos=proEconShutdownEvent2Service.queryShutdownEvent2(wpId, wtId, description, begin, end, pageNum, pageSize,type);
+        }
+
+        for(ProEconShutdownEvent2 vo:vos.getRecords())
+        {
+            if(StringUtils.notEmp(vo.getWindturbineId()) && CacheContext.wtmap.containsKey(vo.getWindturbineId()))
+            {
+                vo.setCode(CacheContext.wtmap.get(vo.getWindturbineId()).getNemCode());
+            }
+        }
+        if (StringUtils.notEmp(vos)) {
+
+            return AjaxResult.successData(AjaxStatus.success.code, vos);
+        } else {
+            return AjaxResult.successData(AjaxStatus.loginexpire.code, "error");
+        }
+    }
+
+}

+ 19 - 0
alarm-web/src/main/java/com/gyee/alarm/controller/ProEconShutdowneventController.java

@@ -0,0 +1,19 @@
+package com.gyee.alarm.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 停机事件 前端控制器
+ * </p>
+ *
+ * @author 石林
+ * @since 2022-10-13
+ */
+@RestController
+@RequestMapping("//pro-econ-shutdownevent")
+public class ProEconShutdowneventController {
+
+}

+ 18 - 8
alarm-web/src/main/java/com/gyee/alarm/init/CacheContext.java

@@ -3,6 +3,7 @@ package com.gyee.alarm.init;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.gyee.alarm.model.vo.AlarmCustomType;
 import com.gyee.alarm.model.vo.AlarmTypeValue;
 import com.gyee.alarm.model.vo.AlarmVo;
@@ -368,7 +369,9 @@ public class CacheContext implements CommandLineRunner {
 //            });
 //        }
 
-        wtls = proBasicEquipmentService.list().stream().filter(i -> runWpids.contains(i.getWindpowerstationId()) && i.getIsable() == 1).collect(Collectors.toList());
+        QueryWrapper<ProBasicEquipment> queryWtWrapper = new QueryWrapper<>();
+        queryWtWrapper.orderByAsc("order_num");
+        wtls = proBasicEquipmentService.list(queryWtWrapper).stream().filter(i -> runWpids.contains(i.getWindpowerstationId()) && i.getIsable() == 1).collect(Collectors.toList());
         logger.info(wtls.size() + "");
         wtls.forEach(wt -> {
             if (modelMap.containsKey(wt.getModelId())) {
@@ -475,8 +478,9 @@ public class CacheContext implements CommandLineRunner {
             }
         }
 
-
-        pjls = proBasicProjectService.list().stream().filter(i -> runWpids.contains(i.getWindpowerstationId()) && i.getIsAble() == 1).collect(Collectors.toList());
+        QueryWrapper<ProBasicProject> queryPjWrapper = new QueryWrapper<>();
+        queryPjWrapper.orderByAsc("order_num");
+        pjls = proBasicProjectService.list(queryPjWrapper).stream().filter(i -> runWpids.contains(i.getWindpowerstationId()) && i.getIsAble() == 1).collect(Collectors.toList());
         pjls.stream().forEach(p -> {
             pjmap.put(p.getId(), p);
             if (wppromap.containsKey(p.getWindpowerstationId())) {
@@ -493,7 +497,9 @@ public class CacheContext implements CommandLineRunner {
 
         });
 
-        subwpls = proBasicSubStationService.list().stream().filter(i -> runWpids.contains(i.getWindpowerstationId()) && i.getIsAble() == 1).collect(Collectors.toList());
+        QueryWrapper<ProBasicSubStation> querySubWrapper = new QueryWrapper<>();
+        querySubWrapper.orderByAsc("order_num");
+        subwpls = proBasicSubStationService.list(querySubWrapper).stream().filter(i -> runWpids.contains(i.getWindpowerstationId()) && i.getIsAble() == 1).collect(Collectors.toList());
         subwpls.stream().forEach(sub -> {
 
             subwpmap.put(sub.getId(), sub);
@@ -530,8 +536,9 @@ public class CacheContext implements CommandLineRunner {
                 aistateMap.put(ai.getModelid(), stateMap);
             }
         });
-
-        lnls = proBasicLineService.list().stream().filter(i -> StringUtils.isNotNull(pjmap.get(i.getProjectId())) && runWpids.contains(pjmap.get(i.getProjectId()).getWindpowerstationId()) && i.getIsAble() == 1).collect(Collectors.toList());
+        QueryWrapper<ProBasicLine> queryLnWrapper = new QueryWrapper<>();
+        queryLnWrapper.orderByAsc("order_num");
+        lnls = proBasicLineService.list(queryLnWrapper).stream().filter(i -> StringUtils.isNotNull(pjmap.get(i.getProjectId())) && runWpids.contains(pjmap.get(i.getProjectId()).getWindpowerstationId()) && i.getIsAble() == 1).collect(Collectors.toList());
         lnls.stream().forEach(l -> {
             lnmap.put(l.getId(), l);
             if (prolinemap.containsKey(l.getProjectId())) {
@@ -549,8 +556,11 @@ public class CacheContext implements CommandLineRunner {
 
 
         zwpls = proBasicWindpowerstationService.list().stream().filter(i -> runWpids.contains(i.getId()) && i.getIsAble() == 1).collect(Collectors.toList());
-        wpls = proBasicWindpowerstationService.list().stream().filter(i -> runWpids.contains(i.getId()) && i.getIsAble() == 1).collect(Collectors.toList());
-        ;
+
+        QueryWrapper<ProBasicPowerstation> queryWpWrapper = new QueryWrapper<>();
+        queryWpWrapper.orderByAsc("order_num");
+        wpls = proBasicWindpowerstationService.list(queryWpWrapper).stream().filter(i -> runWpids.contains(i.getId()) && i.getIsAble() == 1).collect(Collectors.toList());
+
         meterpoints = proBasicMeterPointService.list().stream().filter(i -> runWpids.contains(i.getWindpowerstationId()) && i.getIsAble() == 1).collect(Collectors.toList());
         meterpoints.stream().forEach(meterpoint -> {
             meterpointMap.put(meterpoint.getNemCode(), meterpoint);

+ 48 - 9
alarm-web/src/main/java/com/gyee/alarm/mapper/auto/AlarmTsMapper.java

@@ -93,11 +93,47 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
 //            "modelId,projectid,projectname,rank,resettable,stationid,stationname,subcomponents,suffix,tagid,triggertype,uniformcode from #{superTableName}  " +
 //            "#{whereSql}  order by ts desc limit #{limit} offset #{offset} ")
 
+//    @Select({"<script>",
+//            "select  last_row(ts) as lastts,ts,val,alarmid,alarmtype,characteristic,components,confirmed,description,deviceid,devicename,devicetype,enabled,lineid,linename," +
+//                    "modelId,projectid,projectname,rank,resettable,stationid,stationname,subcomponents,suffix,tagid,triggertype,uniformcode,nemCode ,faultCause,resolvent from #{superTableName} " ,
+//            "<where>" ,
+//
+//            "<if test='modelId != null'>",
+//            "and modelId= #{modelId}",
+//            "</if>",
+//            "<if test='description != null'>",
+//            "and description like #{description}",
+//            "</if>",
+//            "<if test='deviceid != null'>",
+//            "and deviceid = #{deviceid}",
+//            "</if>",
+//            "<if test='deviceType != null'>",
+//            "and deviceType = #{deviceType}",
+//            "</if>",
+//            "<if test='components != null'>",
+//            "and components = #{components}",
+//            "</if>",
+//            "<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 ",
+//            " and  enabled = true ",
+//            "</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,nemCode ,faultCause,resolvent ",
+//            " order by ts desc limit #{limit},#{offset} ",
+//            "</script>"})
+
     @Select({"<script>",
-            "select  last_row(ts) as lastts,ts,val,alarmid,alarmtype,characteristic,components,confirmed,description,deviceid,devicename,devicetype,enabled,lineid,linename," +
+            "select  ts ,val ,confirmed ,endts ,timeLong,alarmid,alarmtype,characteristic,components,confirmed,description,deviceid,devicename,devicetype,enabled,lineid,linename," +
                     "modelId,projectid,projectname,rank,resettable,stationid,stationname,subcomponents,suffix,tagid,triggertype,uniformcode,nemCode ,faultCause,resolvent from #{superTableName} " ,
             "<where>" ,
-
+            " ts &gt;= #{begin}",
+            "and ts &lt;= #{end}",
             "<if test='modelId != null'>",
             "and modelId= #{modelId}",
             "</if>",
@@ -110,6 +146,9 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
             "<if test='deviceType != null'>",
             "and deviceType = #{deviceType}",
             "</if>",
+            "<if test='alarmType != null'>",
+            "and alarmType = #{alarmType}",
+            "</if>",
             "<if test='components != null'>",
             "and components = #{components}",
             "</if>",
@@ -119,12 +158,10 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
             "<if test='alarmid != null'>",
             "and alarmid = #{alarmid}",
             "</if>",
-            "and ts &gt;= #{begin}",
-            "and ts &lt;= #{end}",
-//            " and  confirmed = false ",
+
+
             " and  enabled = true ",
             "</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,nemCode ,faultCause,resolvent ",
             " 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("alarmid")String alarmid,@Param("limit")int limit, @Param("offset") int offset);
@@ -132,6 +169,8 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
     @Select({"<script>",
             "select count(tbname) from #{superTableName} " ,
             "<where>" ,
+            " ts &gt;= #{begin}",
+            "and ts &lt;= #{end}",
             "<if test='modelId != null'>",
             "and modelId= #{modelId}",
             "</if>",
@@ -153,12 +192,12 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
             "<if test='alarmid != null'>",
             "and alarmid = #{alarmid}",
             "</if>",
-            "and ts &gt;= #{begin}",
-            "and ts &lt;= #{end}",
+            "<if test='alarmType != null'>",
+            "and alarmType = #{alarmType}",
+            "</if>",
 //            " and  confirmed = false ",
             " and  enabled = true ",
             "</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,@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")

+ 55 - 0
alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceFaultModeMapper.java

@@ -2,6 +2,10 @@ package com.gyee.alarm.mapper.auto;
 
 import com.gyee.alarm.model.auto.ProBasicDeviceFaultMode;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,55 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ProBasicDeviceFaultModeMapper extends BaseMapper<ProBasicDeviceFaultMode> {
 
+    @Select({"<script>",
+            "select * from pro_basic_device_fault_mode a ",
+            "<where>",
+            "<if test='code !=null' >",
+            "and a.code=#{code}",
+            "</if>",
+            "</where>",
+
+            "</script>"})
+    ProBasicDeviceFaultMode getDeviceFaultModeByCode(@Param("code")String code);
+
+    @Select({"<script>",
+            "select * from pro_basic_device_fault_mode a ",
+            "<where>",
+            "<if test='deviceId !=null' >",
+            "and a.deviceid=#{deviceId}",
+            "</if>",
+            "</where>",
+
+            "</script>"})
+    List<ProBasicDeviceFaultMode> getDeviceFaultModeByDeviceId(@Param("deviceId")String deviceId);
+
+    @Select({"<script>",
+            "select * from pro_basic_device_fault_mode a ",
+            "<where>",
+            "<if test='deviceId !=null' >",
+            "and a.deviceId=#{deviceId}",
+            "</if>",
+            "<if test='structureCode !=null' >",
+            "and   a.structurecode like '${structureCode}%'",
+            "</if>",
+            "</where>",
+
+            "</script>"})
+    List<ProBasicDeviceFaultMode> getDeviceFaultModeByStructureCode(@Param("deviceId")String deviceId,
+                                                            @Param("structureCode")String structureCode);
+
+    @Select({"<script>",
+            "select * from pro_basic_device_fault_mode a ",
+            "<where>",
+            "<if test='deviceId !=null' >",
+            "and a.deviceId=#{deviceId}",
+            "</if>",
+            "<if test='nodeCode !=null' >",
+            "and a.code=#{nodeCode}",
+            "</if>",
+            "</where>",
+
+            "</script>"})
+    ProBasicDeviceFaultMode getDeviceFaultModeTree(@Param("deviceId")String deviceId,
+                                           @Param("nodeCode")String nodeCode);
 }

+ 5 - 0
alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceMapper.java

@@ -2,6 +2,10 @@ package com.gyee.alarm.mapper.auto;
 
 import com.gyee.alarm.model.auto.ProBasicDevice;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ProBasicDeviceMapper extends BaseMapper<ProBasicDevice> {
 
+
 }

+ 70 - 0
alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceMetricsMapper.java

@@ -1,7 +1,14 @@
 package com.gyee.alarm.mapper.auto;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gyee.alarm.model.auto.ProBasicDevice;
 import com.gyee.alarm.model.auto.ProBasicDeviceMetrics;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +20,67 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ProBasicDeviceMetricsMapper extends BaseMapper<ProBasicDeviceMetrics> {
 
+
+    @Select({"<script>",
+            "select * from pro_basic_device_metrics a ",
+            "<where>",
+            "<if test='deviceId !=null' >",
+            "and a.device_id=#{deviceId}",
+            "</if>",
+            "<if test='metricCode !=null '>",
+            "and a.metric_code=#{metricCode}",
+            "</if>",
+            "</where>",
+
+            "</script>"})
+    ProBasicDeviceMetrics getDeviceMetricsByCode(@Param("deviceId")String deviceId,
+                                         @Param("metricCode")String metricCode);
+    @Select({"<script>",
+            "select * from pro_basic_device_metrics ",
+            "<where>",
+            "<if test='deviceId !=null' >",
+            "and a.device_id=#{deviceId}",
+            "</if>",
+            "</where>",
+            "order by metric_code ",
+            "</script>"})
+    List<ProBasicDeviceMetrics> getDeviceMetricsByDeviceId(@Param("deviceId")String deviceId);
+    @Select({"<script>",
+            "select * from pro_basic_device_metrics a ",
+            "<where>",
+            "<if test='deviceId !=null' >",
+            "and a.device_id=#{deviceId}",
+            "</if>",
+            "<if test='structureCode !=null '>",
+            " and a.structure_code like '${structureCode}%'",
+            "</if>",
+            "</where>",
+
+            "</script>"})
+    List<ProBasicDeviceMetrics> getDeviceMetricsByStructureCode(@Param("deviceId")String deviceId,
+                                                        @Param("structureCode")String structureCode);
+    @Select({"<script>",
+            "select * from pro_basic_device_metrics a ",
+            "<where>",
+            "<if test='deviceId !=null' >",
+            "and a.device_id=#{deviceId}",
+            "</if>",
+            "<if test='structureCode !=null '>",
+            "and a.structure_code=#{structureCode}",
+            "</if>",
+            "</where>",
+            "order by metric_code ",
+            "</script>"})
+    IPage<ProBasicDeviceMetrics> pageQueryAll(Page page, @Param("deviceId")String deviceId, @Param("structureCode")String structureCode);
+    @Select({"<script>",
+            "select * from pro_basic_device_metrics a ",
+            "<where>",
+            "<if test='metricCode !=null '>",
+            "and a.metric_code=#{metricCode}",
+            "</if>",
+            "</where>",
+
+            "</script>"})
+    ProBasicDeviceMetrics selectByMetriccode(@Param("metriccode")String metriccode);
+
 }

+ 28 - 0
alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceModelMapper.java

@@ -2,6 +2,10 @@ package com.gyee.alarm.mapper.auto;
 
 import com.gyee.alarm.model.auto.ProBasicDeviceModel;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,28 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ProBasicDeviceModelMapper extends BaseMapper<ProBasicDeviceModel> {
 
+    @Select({"<script>",
+            "select * from pro_basic_device_model a ",
+            "<where>",
+            "<if test='orderno !=null '>",
+            "and a.orderno=#{orderno}",
+            "</if>",
+            "</where>",
+
+            "</script>"})
+    List<ProBasicDeviceModel> getDeviceModelsById(@Param("orderno")String orderno);
+    @Select({"<script>",
+            "select * from pro_basic_device_model a ",
+            "<where>",
+            "<if test='deviceId !=null' >",
+            "and a.device_id=#{deviceId}",
+            "</if>",
+            "<if test='code !=null '>",
+            "and a.code=#{code}",
+            "</if>",
+            "</where>",
+
+            "</script>"})
+    ProBasicDeviceModel getDeviceModelByCode(@Param("deviceid")String deviceid,
+                                     @Param("code")String code);
 }

+ 15 - 0
alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceModelMetricsMapper.java

@@ -2,6 +2,10 @@ package com.gyee.alarm.mapper.auto;
 
 import com.gyee.alarm.model.auto.ProBasicDeviceModelMetrics;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +16,16 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2023-08-01
  */
 public interface ProBasicDeviceModelMetricsMapper extends BaseMapper<ProBasicDeviceModelMetrics> {
+    @Select({"<script>",
+            "select * from pro_basic_device_model_metrics a ",
+            "<where>",
+
+            "<if test='nodeCode !=null '>",
+            "and a.metric_code=#{metriccode}",
+            "</if>",
+            "</where>",
+
+            "</script>"})
 
+    List<ProBasicDeviceModelMetrics> getDeviceModelMetricsById(@Param("metriccode")String metriccode);
 }

+ 44 - 0
alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceStructureMapper.java

@@ -2,6 +2,10 @@ package com.gyee.alarm.mapper.auto;
 
 import com.gyee.alarm.model.auto.ProBasicDeviceStructure;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,44 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ProBasicDeviceStructureMapper extends BaseMapper<ProBasicDeviceStructure> {
 
+    @Select({"<script>",
+            "select * from pro_basic_device_structure a ",
+            "<where>",
+            "<if test='deviceId !=null' >",
+            "and a.device_id=#{deviceId}",
+            "</if>",
+            "<if test='nodeCode !=null '>",
+            "and a.code=#{nodeCode}",
+            "</if>",
+            "</where>",
+
+            "</script>"})
+    ProBasicDeviceStructure getDeviceStructureByCode(@Param("deviceId")String deviceId,
+                                             @Param("nodeCode")String nodeCode);
+
+    @Select({"<script>",
+            "select * from pro_basic_device_structure a ",
+            "<where>",
+            "<if test='deviceId !=null' >",
+            "and a.device_id=#{deviceId}",
+            "</if>",
+
+            "</where>",
+
+            "</script>"})
+    List<ProBasicDeviceStructure> getDeviceStructureByDeviceId(@Param("deviceId")String deviceId);
+    @Select({"<script>",
+            "select * from pro_basic_device_structure a ",
+            "<where>",
+            "<if test='deviceId !=null' >",
+            "and a.device_id=#{deviceId}",
+            "</if>",
+            "<if test='nodeCode !=null '>",
+            "and a.parent_code=#{nodeCode}",
+            "</if>",
+            "</where>",
+
+            "</script>"})
+    List<ProBasicDeviceStructure> getDeviceStructureChildNode(@Param("deviceId")String deviceId,
+                                                      @Param("nodeCode")String nodeCode);
 }

+ 29 - 0
alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProEconShutdownEvent2Mapper.java

@@ -1,11 +1,18 @@
 package com.gyee.alarm.mapper.auto;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.gyee.alarm.model.auto.ProEconShutdownEvent2;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.alarm.model.vo.AlarmTsVo;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -20,4 +27,26 @@ public interface ProEconShutdownEvent2Mapper extends BaseMapper<ProEconShutdownE
     @Update("update pro_econ_shutdown_event2   set start_time=#{start_time},loss_power=#{loss_power},stop_hours=#{stop_hours}  where id=#{id}")
     public int  updateShutdownevent2(@Param(value = "start_time") Date start_time, @Param(value = "loss_power")Double loss_power,
                                     @Param(value = "stop_hours")Double stop_hours, @Param(value = "id")String id);
+    @Select({"<script>",
+            "select * from pro_econ_shutdown_event2  " ,
+            "<where>" ,
+
+            "<if test='wpId != null'>",
+            "and winpowerstation_id= #{wpId}",
+            "</if>",
+            "<if test='description != null'>",
+            "and fault_view like #{description}",
+            "</if>",
+            "<if test='wtId != null'>",
+            "and windturbine_id = #{wtId}",
+            "</if>",
+            "and ts &gt;= #{begin}",
+            "and ts &lt;= #{end}",
+
+            "</where>",
+            " order by stop_time desc",
+            "</script>"})
+    List<ProEconShutdownEvent2> queryShutdownEvent2(@Param("wpId") String wpId, @Param("wtId") String wtId, @Param("description") String description, @Param("begin")Date begin, @Param("end") Date end);
+
+
 }

+ 6 - 2
alarm-web/src/main/java/com/gyee/alarm/model/auto/ProBasicDeviceMetrics.java

@@ -1,9 +1,12 @@
 package com.gyee.alarm.model.auto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.List;
+
 /**
  * <p>
  * 设备指标
@@ -26,7 +29,7 @@ public class ProBasicDeviceMetrics extends Model {
     /**
      * 设备
      */
-    private String deviceiD;
+    private String deviceId;
 
     /**
      * 结构编码
@@ -103,5 +106,6 @@ public class ProBasicDeviceMetrics extends Model {
      */
     private String description;
 
-
+    @TableField(exist = false)
+    private List<ProBasicDeviceModelMetrics> deviceModelMetrics;
 }

+ 10 - 4
alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconAlarmConfiguration.java

@@ -1,11 +1,12 @@
 package com.gyee.alarm.model.auto;
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
+import lombok.*;
+import lombok.experimental.Accessors;
 
 /**
  * <p>
@@ -16,8 +17,12 @@ import lombok.EqualsAndHashCode;
  * @since 2023-06-19
  */
 @Data
-@Builder
 @EqualsAndHashCode(callSuper = true)
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
 public class ProEconAlarmConfiguration extends Model {
 
     private static final long serialVersionUID = 1L;
@@ -26,6 +31,7 @@ public class ProEconAlarmConfiguration extends Model {
      * 编号
      */
     @ExcelProperty("编号")
+    @TableId(value = "ID",type = IdType.INPUT)
     private String id;
 
     /**

+ 6 - 0
alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconRuleUpdateEvent.java

@@ -1,6 +1,8 @@
 package com.gyee.alarm.model.auto;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import java.time.LocalDateTime;
 import java.util.Date;
@@ -26,6 +28,7 @@ public class ProEconRuleUpdateEvent extends Model {
     /**
      * 编号
      */
+    @TableId(value = "ID",type = IdType.INPUT)
     private String id;
 
     /**
@@ -70,4 +73,7 @@ public class ProEconRuleUpdateEvent extends Model {
 
     @TableField(exist = false)
     private List<ProEconRuleUpdateInfo> infoList;
+
+    @TableField(exist = false)
+    private String stationName;
 }

+ 3 - 0
alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconRuleUpdateInfo.java

@@ -1,5 +1,7 @@
 package com.gyee.alarm.model.auto;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -21,6 +23,7 @@ public class ProEconRuleUpdateInfo extends Model {
     /**
      * 编号
      */
+    @TableId(value = "ID",type = IdType.INPUT)
     private String id;
 
     /**

+ 10 - 3
alarm-web/src/main/java/com/gyee/alarm/model/auto/ProEconShutdownEvent2.java

@@ -2,9 +2,13 @@ package com.gyee.alarm.model.auto;
 
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import java.util.Date;
+
+import groovy.transform.Field;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -17,7 +21,6 @@ import lombok.EqualsAndHashCode;
  * @since 2022-10-21
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
 public class ProEconShutdownEvent2 extends Model {
 
     private static final long serialVersionUID = 1L;
@@ -25,7 +28,7 @@ public class ProEconShutdownEvent2 extends Model {
     /**
      * 编号
      */
-    @TableId(value = "ID",type = IdType.ASSIGN_ID)
+
     private String id;
 
     /**
@@ -81,11 +84,13 @@ public class ProEconShutdownEvent2 extends Model {
     /**
      * 处理方式
      */
+
     private String handleWay;
 
     /**
      * 故障现象
      */
+
     private String faultView;
 
     /**
@@ -111,6 +116,7 @@ public class ProEconShutdownEvent2 extends Model {
     /**
      * 故障消缺及时
      */
+
     private String failRate;
 
     /**
@@ -118,5 +124,6 @@ public class ProEconShutdownEvent2 extends Model {
      */
     private Integer warningRecordsId;
 
-
+    @TableField(exist = false)
+    private String code;
 }

+ 14 - 0
alarm-web/src/main/java/com/gyee/alarm/model/vo/TreeNode.java

@@ -0,0 +1,14 @@
+package com.gyee.alarm.model.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TreeNode<T> {
+
+    private T node;
+
+    private List<TreeNode> children;
+
+}

+ 10 - 7
alarm-web/src/main/java/com/gyee/alarm/service/AlarmConfigurationService.java

@@ -51,9 +51,17 @@ public class AlarmConfigurationService {
         boolean result =false;
 
         if (StringUtils.notEmp(alarmRule)) {
+            List<ProEconAlarmConfiguration>  oldRulels =null;
+            if(!alarmRule.getAlarmType().equals(AlarmTypeValue.BT.getCode()))
+            {
+                oldRulels = proEconAlarmConfigurationMapper.queryObject(alarmRule.getDescription(),alarmRule.getStationId(),alarmRule.getModelId());
+
+            }else
+            {
+               oldRulels = proEconAlarmConfigurationMapper.queryObject(alarmRule.getDescription(),alarmRule.getStationId(),null);
 
-            List<ProEconAlarmConfiguration>  oldRulels = proEconAlarmConfigurationMapper.queryObject(alarmRule.getDescription(),alarmRule.getStationId(),alarmRule.getModelId());
-            if (!oldRulels.isEmpty()) {
+            }
+            if (StringUtils.notEmp(oldRulels) && !oldRulels.isEmpty()) {
                 ProEconAlarmConfiguration oldRule2=oldRulels.get(0);
                 alarmRule.setId(oldRule2.getId());
                 result = proEconAlarmConfigurationService.updateById(alarmRule);
@@ -65,11 +73,6 @@ public class AlarmConfigurationService {
                 result = saveAlertrule(alarmRule);
             }
 
-        }else
-        {
-            alarmRule.setId(String.valueOf(SnowflakeGenerator.generateId()));
-            ruleUpdateEventService.saveEventWarning(alarmRule,null);
-            result = saveAlertrule(alarmRule);
         }
 
         return result;

+ 32 - 21
alarm-web/src/main/java/com/gyee/alarm/service/AlarmHistoryService.java

@@ -130,16 +130,23 @@ public class AlarmHistoryService   {
                 if(map.containsKey(alarm.getId().toLowerCase()))
                 {
                     AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
-                    alarm.setTs(null!=tag.getTs()?tag.getTs().getTime():null);
-                    alarm.setVal(null!=tag.getVal()?(double)tag.getVal():null);
+                    if(StringUtils.notEmp(tag.getTs()))
+                    {
+                        alarm.setTs(tag.getTs().getTime());
+                    }else
+                    {
+                        alarm.setTs(new Date().getTime());
+                    }
+                    if(StringUtils.notEmp(tag.getVal()))
+                    {
+                        alarm.setVal(tag.getVal().doubleValue());
+                    }else
+                    {
+                        alarm.setVal(1.0);
+                    }
+
                     alarm.setEndts(null!=tag.getEndts()?tag.getEndts().getTime():null);
                     alarm.setTimeLong(null!=tag.getTimelong()?tag.getTimelong():null);
-
-//                    Date begin = new Date(alarm.getEndts());
-//                    Date end = new Date(alarm.getTs());
-//
-//                    double value= DateUtils.secondsDiff(begin,end);
-//                    alarm.setTimeLong(value);
                     alarm.setConfirmed(true);
                 }
             }
@@ -271,16 +278,7 @@ public class AlarmHistoryService   {
             }
         }
 
-//        if(StringUtils.notEmp(stationid)  )
-//        {
-//            whereSql.append(" and stationid=CONCAT('',").append(stationid).append(",'')");
-//
-//        }
-//        if(StringUtils.notEmp(deviceid)  )
-//        {
-//            whereSql.append(" and deviceid= CONCAT('',").append(deviceid).append(",'')");
-//
-//        }
+
 //
         if(StringUtils.notEmp(description)  )
         {
@@ -292,11 +290,14 @@ public class AlarmHistoryService   {
             deviceid=null;
         }
 
+        if(StringUtils.empty(stationid)  )
+        {
+            stationid=null;
+        }
         if(StringUtils.empty(modelId)  )
         {
             modelId=null;
         }
-
         if(StringUtils.empty(description)  )
         {
             description=null;
@@ -310,10 +311,20 @@ public class AlarmHistoryService   {
         {
             components=null;
         }
-        vos = alarmTsMapper.selectByWtLimit(begin,end,modelId,superTableName, alarmType, stationid, deviceid, description,deviceType,components, alarmId,pageNum*pageSize, (pageNum*pageSize+pageSize));
+        if(StringUtils.empty(alarmId)  )
+        {
+            alarmId=null;
+        }
+        vos = alarmTsMapper.selectByWtLimit(begin,end,modelId,superTableName, alarmType, stationid, deviceid, description,deviceType,components, alarmId,pageNum*pageSize, pageSize);
         map.put("ls",vos);
         List<Integer> total=alarmTsMapper.selectByWtCount(begin,end,modelId,superTableName, alarmType, stationid, deviceid, description,deviceType,components,alarmId);
-        map.put("total",total.size());
+
+        if(!total.isEmpty())
+        {
+            Integer all= total.get(0);
+            map.put("total",all);
+        }
+
         return map;
     }
 

+ 72 - 0
alarm-web/src/main/java/com/gyee/alarm/service/DeviceFaultModeService.java

@@ -0,0 +1,72 @@
+package com.gyee.alarm.service;
+
+import com.gyee.alarm.model.auto.ProBasicDeviceFaultMode;
+import com.gyee.alarm.service.auto.IProBasicDeviceFaultModeService;
+import com.gyee.alarm.util.SnowflakeGenerator;
+import com.gyee.alarm.util.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+@Slf4j
+public class DeviceFaultModeService {
+    @Resource
+    private IProBasicDeviceFaultModeService proBasicDeviceFaultModeService;
+
+
+
+    public boolean saveorUpdateDeviceFaultMode(ProBasicDeviceFaultMode deviceFaultMode) {
+        boolean result = false;
+        if (StringUtils.notEmp(deviceFaultMode.getId())) {
+            //如果id为空,则通过雪花算法 生成一个id
+            deviceFaultMode.setId(String.valueOf(SnowflakeGenerator.generateId()));
+            result = proBasicDeviceFaultModeService.save(deviceFaultMode);
+        } else {
+            ProBasicDeviceFaultMode oldData = proBasicDeviceFaultModeService.getById(deviceFaultMode.getId());
+            if (oldData != null) {
+                result = proBasicDeviceFaultModeService.updateById(deviceFaultMode);
+            } else {
+                result = proBasicDeviceFaultModeService.save(deviceFaultMode);
+            }
+        }
+
+        return result;
+    }
+
+    public boolean deleteDeviceFaultMode(String id) {
+        return proBasicDeviceFaultModeService.removeById(id);
+    }
+
+
+    public List<ProBasicDeviceFaultMode> getDeviceFaultModeByDeviceId(String deviceId) {
+        return proBasicDeviceFaultModeService.getDeviceFaultModeByDeviceId(deviceId);
+    }
+
+    public List<ProBasicDeviceFaultMode> getDeviceFaultModeByStructureCode(String deviceId, String structurecode) {
+        return proBasicDeviceFaultModeService.getDeviceFaultModeByStructureCode(deviceId, structurecode);
+    }
+
+    public ProBasicDeviceFaultMode getDeviceFaultModeByCode(String code) {
+        return proBasicDeviceFaultModeService.getDeviceFaultModeByCode(code);
+    }
+
+    public boolean insertOrUpdate(List<ProBasicDeviceFaultMode> bindingList) {
+        boolean s = false;
+        for (ProBasicDeviceFaultMode deviceFaultMode : bindingList){
+            ProBasicDeviceFaultMode deviceMetrics2 =  proBasicDeviceFaultModeService.getDeviceFaultModeByCode(deviceFaultMode.getCode());
+            if (deviceMetrics2!=null){
+                deviceFaultMode.setId(deviceMetrics2.getId());
+                s =  proBasicDeviceFaultModeService.updateById(deviceFaultMode);
+            }else {
+                deviceFaultMode.setDeviceid("windturbine");
+                s = proBasicDeviceFaultModeService.save(deviceFaultMode);
+            }
+        }
+        return s;
+    }
+
+}

+ 256 - 8
alarm-web/src/main/java/com/gyee/alarm/service/DeviceService.java

@@ -1,22 +1,28 @@
 package com.gyee.alarm.service;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
 import com.gyee.alarm.init.Cache.PointUnitCache;
 import com.gyee.alarm.init.Cache.WindturbineCache;
-import com.gyee.alarm.model.auto.ProBasicDeviceMetrics;
-import com.gyee.alarm.model.auto.ProBasicDeviceModelMetrics;
-import com.gyee.alarm.model.auto.ProBasicEquipment;
-import com.gyee.alarm.model.auto.ProBasicEquipmentPoint;
+import com.gyee.alarm.mapper.auto.*;
+import com.gyee.alarm.model.auto.*;
+import com.gyee.alarm.model.vo.TreeNode;
 import com.gyee.alarm.service.auto.impl.ProBasicDeviceMetricsServiceImpl;
 import com.gyee.alarm.service.auto.impl.ProBasicDeviceModelMetricsServiceImpl;
 import com.gyee.alarm.service.auto.impl.ProBasicEquipmentPointServiceImpl;
+import com.gyee.alarm.service.auto.initalcache.CacheService;
+import com.gyee.alarm.util.SnowflakeGenerator;
+import com.gyee.alarm.util.StringUtils;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
+
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -32,16 +38,27 @@ public class DeviceService {
 
     @Resource
     private ProBasicDeviceMetricsServiceImpl proBasicDeviceMetricsService;
-
     @Resource
     private ProBasicDeviceModelMetricsServiceImpl proBasicDeviceModelMetricsService;
-
     @Resource
     private ProBasicEquipmentPointServiceImpl proBasicEquipmentPointService;
-
     @Resource
     private PointUnitCache pointUnitCache;
 
+    @Resource
+    private ProBasicDeviceMapper proBasicDeviceMapper;
+
+    @Resource
+    private ProBasicDeviceStructureMapper proBasicDeviceStructureMapper;
+
+    @Resource
+    private ProBasicDeviceMetricsMapper proBasicDeviceMetricsMapper;
+
+    @Resource
+    private ProBasicDeviceModelMapper proBasicDeviceModelMapper;
+
+    @Resource
+    private ProBasicDeviceModelMetricsMapper roBasicDeviceModelMetricsMapper;
     public JSONObject getTestingPointByStructCode(String deviceId, String structCode, String windturbineId, int pageSize, int pageNum) {
         JSONObject resultObject = new JSONObject();
         List<JSONObject> jsonArrayList = new ArrayList<>();
@@ -229,4 +246,235 @@ public class DeviceService {
 
     }
 
+
+    public List<ProBasicDevice> getAllDevice() {
+        QueryWrapper<ProBasicDevice> queryWrapper = new QueryWrapper<>();
+        return proBasicDeviceMapper.selectList(queryWrapper);
+    }
+
+    public List<ProBasicDeviceStructure> getAllDeviceStructure() {
+        QueryWrapper<ProBasicDeviceStructure> queryWrapper = new QueryWrapper<>();
+        return proBasicDeviceStructureMapper.selectList(queryWrapper);
+    }
+
+
+    public List<ProBasicDeviceStructure> getDeviceStructureByDeviceId(String deviceId) {
+        return proBasicDeviceStructureMapper.getDeviceStructureByDeviceId(deviceId);
+    }
+
+    public List<ProBasicDeviceStructure> getDeviceStructureChildNode(String deviceId, String nodeCode) {
+        return proBasicDeviceStructureMapper.getDeviceStructureChildNode(deviceId, nodeCode);
+    }
+
+    public ProBasicDeviceStructure getDeviceStructureByCode(String deviceId, String nodeCode) {
+        return proBasicDeviceStructureMapper.getDeviceStructureByCode(deviceId, nodeCode);
+    }
+
+    public TreeNode<ProBasicDeviceStructure> getDeviceStructureTree(String deviceId) {
+
+        if (CacheService.deviceStructureMap == null) {
+            CacheService.deviceStructureMap = new HashMap<>();
+        }
+
+        if (CacheService.deviceStructureMap.containsKey(deviceId))
+            return CacheService.deviceStructureMap.get(deviceId);
+
+        List<ProBasicDeviceStructure> lst = proBasicDeviceStructureMapper.getDeviceStructureChildNode(deviceId, "0");
+        if (lst != null && lst.size() > 0) {
+            ProBasicDeviceStructure ds = lst.get(0);
+            TreeNode<ProBasicDeviceStructure> treeNode = getSubDeviceStructureTreeNode(ds);
+            CacheService.deviceStructureMap.put(ds.getDeviceId(), treeNode);
+            return treeNode;
+        }
+
+        return null;
+    }
+
+    public TreeNode<ProBasicDeviceStructure> getDeviceStructureTree(String deviceId, String nodeCode) {
+
+        ProBasicDeviceStructure ds = proBasicDeviceStructureMapper.getDeviceStructureByCode(deviceId, nodeCode);
+        return getSubDeviceStructureTreeNode(ds);
+    }
+
+    private TreeNode<ProBasicDeviceStructure> getSubDeviceStructureTreeNode(ProBasicDeviceStructure ds) {
+
+        TreeNode<ProBasicDeviceStructure> rootNode = new TreeNode<>();
+        if (ds == null)
+            return rootNode;
+        rootNode.setNode(ds);
+
+        List<ProBasicDeviceStructure> dsList = proBasicDeviceStructureMapper.getDeviceStructureChildNode(ds.getDeviceId(), ds.getCode());
+        if (dsList != null && dsList.size() > 0) {
+            List<TreeNode> children = new ArrayList<>();
+            for (ProBasicDeviceStructure ds1 : dsList) {
+                children.add(getSubDeviceStructureTreeNode(ds1));
+            }
+            rootNode.setChildren(children);
+        }
+
+        return rootNode;
+
+    }
+
+    public int deleteDeviceStructure(long dsId) {
+        int code = proBasicDeviceStructureMapper.deleteById(dsId);
+        if (code >= 1) {
+            //树结构变化清空树结构缓存
+            CacheService.deviceStructureMap.clear();
+        }
+        return code;
+    }
+
+    public int saveOrUpdateDeviceStructure(ProBasicDeviceStructure ds) {
+        int result = 0;
+        if (StringUtils.notEmp(ds.getId())) {
+            //如果id为空,则通过雪花算法 生成一个id
+            ds.setId(String.valueOf(SnowflakeGenerator.generateId()));
+            result = proBasicDeviceStructureMapper.insert(ds);
+        } else {
+            ProBasicDeviceStructure oldData = proBasicDeviceStructureMapper.selectById(ds.getId());
+            if (oldData != null) {
+                result = proBasicDeviceStructureMapper.updateById(ds);
+            } else {
+                result = proBasicDeviceStructureMapper.insert(ds);
+            }
+        }
+        //树结构变化清空树结构缓存
+        CacheService.deviceStructureMap.clear();
+        return result;
+
+    }
+
+    public List<ProBasicDeviceMetrics> getDeviceMetricsByDeviceId(String deviceId) {
+        return proBasicDeviceMetricsMapper.getDeviceMetricsByDeviceId(deviceId);
+    }
+
+    public List<ProBasicDeviceMetrics> getDeviceMetricsByStructureCode(String deviceId, String structureCode) {
+        return proBasicDeviceMetricsMapper.getDeviceMetricsByStructureCode(deviceId, structureCode);
+    }
+
+    public ProBasicDeviceMetrics getDeviceMetricsByCode(String deviceId, String metricCode) {
+        return proBasicDeviceMetricsMapper.getDeviceMetricsByCode(deviceId, metricCode);
+    }
+
+    public int deleteDeviceMetric(long metricId) {
+        return proBasicDeviceMetricsMapper.deleteById(metricId);
+    }
+
+    public int saveOrUpdateDeviceMetric(ProBasicDeviceMetrics metrics, List<ProBasicDeviceModelMetrics> deviceModelMetrics) {
+
+        int result = 0;
+        if ( StringUtils.notEmp(metrics.getId())) {
+            //如果id为空,则通过雪花算法 生成一个id
+            metrics.setId(String.valueOf(SnowflakeGenerator.generateId()));
+            result = proBasicDeviceMetricsMapper.insert(metrics);
+        } else {
+            ProBasicDeviceMetrics oldData = proBasicDeviceMetricsMapper.selectById(metrics.getId());
+            if (oldData != null) {
+                result = proBasicDeviceMetricsMapper.updateById(metrics);
+            } else {
+                result = proBasicDeviceMetricsMapper.insert(metrics);
+            }
+        }
+        if (deviceModelMetrics != null && deviceModelMetrics.size() > 0) {
+            for (ProBasicDeviceModelMetrics deviceModelMetrics1 : deviceModelMetrics) {
+                if (StringUtils.notEmp(deviceModelMetrics1.getId())) {
+                    //如果id为空,则通过雪花算法 生成一个id
+                    deviceModelMetrics1.setId(String.valueOf(SnowflakeGenerator.generateId()));
+                    result = roBasicDeviceModelMetricsMapper.insert(deviceModelMetrics1);
+                } else {
+                    ProBasicDeviceModelMetrics deviceModelMetrics2 = roBasicDeviceModelMetricsMapper.selectById(deviceModelMetrics1.getId());
+                    if (deviceModelMetrics2 != null) {
+                        result = roBasicDeviceModelMetricsMapper.updateById(deviceModelMetrics1);
+                    } else {
+                        result = roBasicDeviceModelMetricsMapper.insert(deviceModelMetrics1);
+                    }
+                }
+            }
+        }
+
+        return result;
+
+    }
+
+
+    public List<ProBasicDeviceModel> getDeviceModelsById(String id) {
+        return proBasicDeviceModelMapper.getDeviceModelsById(id);
+    }
+
+    public int deleteDeviceModel(int id) {
+        return proBasicDeviceModelMapper.deleteById(id);
+    }
+
+    public ProBasicDeviceModel getDeviceModelByCode(String deviceid, String code) {
+        return proBasicDeviceModelMapper.getDeviceModelByCode(deviceid, code);
+    }
+
+    public int saveOrUpdateDeviceModel(ProBasicDeviceModel deviceModel) {
+        int result = 0;
+        if (StringUtils.notEmp(deviceModel.getId())) {
+            //如果id为空,则通过雪花算法 生成一个id
+            deviceModel.setId(String.valueOf(SnowflakeGenerator.generateId()));
+            result = proBasicDeviceModelMapper.insert(deviceModel);
+        } else {
+            ProBasicDeviceModel oldData = proBasicDeviceModelMapper.selectById(deviceModel.getId());
+            if (oldData != null) {
+                result = proBasicDeviceModelMapper.updateById(deviceModel);
+            } else {
+                result = proBasicDeviceModelMapper.insert(deviceModel);
+            }
+        }
+
+        return result;
+    }
+
+    public List<ProBasicDeviceModel> getDeviceModelList() {
+        QueryWrapper<ProBasicDeviceModel> queryWrapper = new QueryWrapper<>();
+        return proBasicDeviceModelMapper.selectList(queryWrapper);
+    }
+
+    public List<ProBasicDeviceModelMetrics> getDeviceModelMetricsList() {
+        QueryWrapper<ProBasicDeviceModelMetrics> queryWrapper = new QueryWrapper<>();
+        return roBasicDeviceModelMetricsMapper.selectList(queryWrapper);
+    }
+
+    public IPage<ProBasicDeviceMetrics> pageQueryAll(Page page, String deviceId, String structureCode) {
+
+        if(StringUtils.empty(deviceId))
+        {
+            deviceId=null;
+        }
+        if(StringUtils.empty(structureCode))
+        {
+            structureCode=null;
+        }
+        return proBasicDeviceMetricsMapper.pageQueryAll(page, deviceId, structureCode);
+    }
+
+    public int insertOrUpdate(List<ProBasicDeviceMetrics> deviceMetrics) {
+        int s = 0;
+        for (ProBasicDeviceMetrics deviceMetrics1 : deviceMetrics) {
+            ProBasicDeviceMetrics deviceMetrics2 = proBasicDeviceMetricsMapper.selectByMetriccode(deviceMetrics1.getMetricCode());
+            if (deviceMetrics2 != null) {
+                deviceMetrics1.setId(deviceMetrics2.getId());
+                s = proBasicDeviceMetricsMapper.updateById(deviceMetrics1);
+            } else {
+                deviceMetrics1.setDeviceId("windturbine");
+                deviceMetrics1.setId(String.valueOf(SnowflakeGenerator.generateId()));
+                s = proBasicDeviceMetricsMapper.insert(deviceMetrics1);
+            }
+        }
+        return s;
+    }
+
+   
+
+    public IPage<ProBasicDeviceModel> pageQueryDeviceModel(Page<ProBasicDeviceModel> page, String code, String stationname) {
+        QueryWrapper<ProBasicDeviceModel> wrapper = new QueryWrapper<>();
+        if (StringUtils.isNotBlank(code))
+            wrapper.like("code", code);
+        if (StringUtils.isNotBlank(stationname))
+            wrapper.like("station_name", stationname);
+        return proBasicDeviceModelMapper.selectPage(page, wrapper);
+    }
 }

+ 25 - 1
alarm-web/src/main/java/com/gyee/alarm/service/RuleUpdateEventService.java

@@ -4,6 +4,7 @@ package com.gyee.alarm.service;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gyee.alarm.init.CacheContext;
 import com.gyee.alarm.model.auto.*;
 import com.gyee.alarm.model.vo.AlarmType;
 import com.gyee.alarm.model.vo.AlarmTypeValue;
@@ -170,15 +171,26 @@ public class RuleUpdateEventService {
                 if(newWarning.getAlarmType().equals(AlarmTypeValue.WT.getCode()))
                 {
                     event.setRuleType("风机报警");
+                }else  if(newWarning.getAlarmType().equals(AlarmTypeValue.IN.getCode()))
+                {
+                    event.setRuleType("逆变器报警");
                 }else  if(newWarning.getAlarmType().equals(AlarmTypeValue.BT.getCode()))
                 {
                     event.setRuleType("升压站报警");
                 }
-
+                event.setId(String.valueOf(SnowflakeGenerator.generateId()));
                 event.setUpdateType("新增");
                 event.setUpdateTime(new Date());
                 event.setUpdateUser(userId);
                 event.setModelId(newWarning.getModelId());
+                event.setStationId(newWarning.getStationId());
+                if(CacheContext.wpmap.containsKey(newWarning.getStationId()))
+                {
+                    event.setStationName(CacheContext.wpmap.get(newWarning.getStationId()).getName());
+                }else  if(CacheContext.subwpmap.containsKey(newWarning.getStationId()))
+                {
+                    event.setStationName(CacheContext.subwpmap.get(newWarning.getStationId()).getName());
+                }
                 proEconRuleUpdateEventService.save(event);
                 return 0;
 
@@ -191,6 +203,9 @@ public class RuleUpdateEventService {
                 if(newWarning.getAlarmType().equals(AlarmTypeValue.WT.getCode()))
                 {
                     event.setRuleType("风机报警");
+                }else  if(newWarning.getAlarmType().equals(AlarmTypeValue.IN.getCode()))
+                {
+                    event.setRuleType("逆变器报警");
                 }else  if(newWarning.getAlarmType().equals(AlarmTypeValue.BT.getCode()))
                 {
                     event.setRuleType("升压站报警");
@@ -199,6 +214,15 @@ public class RuleUpdateEventService {
                 event.setUpdateTime(new Date());
                 event.setUpdateUser(userId);
                 event.setModelId(newWarning.getModelId());
+
+                event.setStationId(newWarning.getStationId());
+                if(CacheContext.wpmap.containsKey(newWarning.getStationId()))
+                {
+                    event.setStationName(CacheContext.wpmap.get(newWarning.getStationId()).getName());
+                }else  if(CacheContext.subwpmap.containsKey(newWarning.getStationId()))
+                {
+                    event.setStationName(CacheContext.subwpmap.get(newWarning.getStationId()).getName());
+                }
                 List<ProEconRuleUpdateInfo> infoList = new ArrayList<>();
 
                 Field[] declaredFieldOld = oldWarning.getClass().getDeclaredFields();

+ 12 - 0
alarm-web/src/main/java/com/gyee/alarm/service/auto/IProBasicDeviceFaultModeService.java

@@ -2,6 +2,10 @@ package com.gyee.alarm.service.auto;
 
 import com.gyee.alarm.model.auto.ProBasicDeviceFaultMode;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IProBasicDeviceFaultModeService extends IService<ProBasicDeviceFaultMode> {
 
+
+    ProBasicDeviceFaultMode getDeviceFaultModeByCode(String code);
+
+    List<ProBasicDeviceFaultMode> getDeviceFaultModeByDeviceId(String deviceId);
+
+    List<ProBasicDeviceFaultMode> getDeviceFaultModeByStructureCode(String deviceId,String structureCode);
+
+    ProBasicDeviceFaultMode getDeviceFaultModeTree(String deviceId,String nodeCode);
 }

+ 8 - 0
alarm-web/src/main/java/com/gyee/alarm/service/auto/IProBasicDeviceStructureService.java

@@ -2,6 +2,9 @@ package com.gyee.alarm.service.auto;
 
 import com.gyee.alarm.model.auto.ProBasicDeviceStructure;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IProBasicDeviceStructureService extends IService<ProBasicDeviceStructure> {
 
+    ProBasicDeviceStructure getDeviceStructureByCode(String deviceId, String nodeCode);
+
+    List<ProBasicDeviceStructure> getDeviceStructureByDeviceId(String deviceId);
+
+    List<ProBasicDeviceStructure> getDeviceStructureChildNode(String deviceId, String nodeCode);
 }

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

@@ -1,5 +1,6 @@
 package com.gyee.alarm.service.auto;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.gyee.alarm.model.auto.ProEconShutdownEvent2;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -15,5 +16,5 @@ import java.util.Date;
  */
 public interface IProEconShutdownEvent2Service extends IService<ProEconShutdownEvent2> {
 
-    public int  updateShutdownevent2(Date start_time, Double loss_power, Double stop_hours, String id);
+    public IPage<ProEconShutdownEvent2> queryShutdownEvent2(String wpId, String wtId, String description, String begin, String end, Integer pageNum, Integer pageSize,String type) ;
 }

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

@@ -93,6 +93,7 @@ public class AlarmTsServiceImpl extends ServiceImpl<AlarmTsMapper, AlarmTs> impl
         int i=0;
         for (AlarmTag tag:alarmTags) {
 
+
             String tableName = tag.getId();
             StringBuilder sub_sb = new StringBuilder(tableName);
 

+ 61 - 0
alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/ProBasicDeviceFaultModeServiceImpl.java

@@ -4,8 +4,13 @@ import com.gyee.alarm.model.auto.ProBasicDeviceFaultMode;
 import com.gyee.alarm.mapper.auto.ProBasicDeviceFaultModeMapper;
 import com.gyee.alarm.service.auto.IProBasicDeviceFaultModeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.alarm.util.StringUtils;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * <p>
  * 设备故障模型 服务实现类
@@ -17,4 +22,60 @@ import org.springframework.stereotype.Service;
 @Service
 public class ProBasicDeviceFaultModeServiceImpl extends ServiceImpl<ProBasicDeviceFaultModeMapper, ProBasicDeviceFaultMode> implements IProBasicDeviceFaultModeService {
 
+    @Resource
+    private  ProBasicDeviceFaultModeMapper proBasicDeviceFaultModeMapper;
+
+    public ProBasicDeviceFaultMode getDeviceFaultModeByCode(String code)
+    {
+        ProBasicDeviceFaultMode vo=new ProBasicDeviceFaultMode();
+        if(StringUtils.notEmp(code))
+        {
+            vo=  proBasicDeviceFaultModeMapper.getDeviceFaultModeByCode(code);
+        }
+
+        return vo;
+    }
+
+    public List<ProBasicDeviceFaultMode> getDeviceFaultModeByDeviceId(String deviceId)
+    {
+        List<ProBasicDeviceFaultMode> vos=new ArrayList<>();
+
+        if(StringUtils.notEmp(deviceId))
+        {
+            vos=proBasicDeviceFaultModeMapper.getDeviceFaultModeByDeviceId(deviceId);
+        }
+        return vos;
+    }
+
+    public List<ProBasicDeviceFaultMode> getDeviceFaultModeByStructureCode(String deviceId,String structureCode)
+    {
+        List<ProBasicDeviceFaultMode> vos=new ArrayList<>();
+        if(StringUtils.empty(deviceId))
+        {
+            deviceId=null;
+        }
+        if(StringUtils.empty(structureCode))
+        {
+            structureCode=null;
+        }
+        vos=proBasicDeviceFaultModeMapper.getDeviceFaultModeByStructureCode(deviceId,structureCode);
+
+        return vos;
+    }
+
+    public ProBasicDeviceFaultMode getDeviceFaultModeTree(String deviceId,String nodeCode)
+    {
+        ProBasicDeviceFaultMode vo=new ProBasicDeviceFaultMode();
+        if(StringUtils.empty(deviceId))
+        {
+            deviceId=null;
+        }
+        if(StringUtils.empty(nodeCode))
+        {
+            nodeCode=null;
+        }
+        vo=  proBasicDeviceFaultModeMapper.getDeviceFaultModeTree(deviceId,nodeCode);
+
+        return vo;
+    }
 }

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

@@ -28,7 +28,7 @@ public class ProBasicDeviceMetricsServiceImpl extends ServiceImpl<ProBasicDevice
 
 
         if (StringUtils.isNotEmpty(deviceId)) {
-            qw.like("devicei_d", deviceId);
+            qw.like("device_id", deviceId);
         }
         if (StringUtils.isNotEmpty(structCode)) {
             qw.like("structure_code", structCode);

+ 42 - 0
alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/ProBasicDeviceStructureServiceImpl.java

@@ -4,8 +4,15 @@ import com.gyee.alarm.model.auto.ProBasicDeviceStructure;
 import com.gyee.alarm.mapper.auto.ProBasicDeviceStructureMapper;
 import com.gyee.alarm.service.auto.IProBasicDeviceStructureService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.alarm.util.StringUtils;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * <p>
  * 设备结构 服务实现类
@@ -17,4 +24,39 @@ import org.springframework.stereotype.Service;
 @Service
 public class ProBasicDeviceStructureServiceImpl extends ServiceImpl<ProBasicDeviceStructureMapper, ProBasicDeviceStructure> implements IProBasicDeviceStructureService {
 
+
+    @Resource
+    private ProBasicDeviceStructureMapper proBasicDeviceStructureMapper;
+   public ProBasicDeviceStructure getDeviceStructureByCode(String deviceId, String nodeCode)
+   {
+       ProBasicDeviceStructure vo=new ProBasicDeviceStructure();
+
+       if(StringUtils.notEmp(deviceId) && StringUtils.notEmp(nodeCode))
+       {
+           vo=proBasicDeviceStructureMapper.getDeviceStructureByCode(deviceId,nodeCode);
+       }
+       return vo;
+   }
+
+    public List<ProBasicDeviceStructure> getDeviceStructureByDeviceId(String deviceId)
+    {
+        List<ProBasicDeviceStructure> vos=new ArrayList<>();
+
+        if(StringUtils.notEmp(deviceId) )
+        {
+            vos=proBasicDeviceStructureMapper.getDeviceStructureByDeviceId(deviceId);
+        }
+        return vos;
+    }
+
+    public List<ProBasicDeviceStructure> getDeviceStructureChildNode(String deviceId, String nodeCode)
+    {
+        List<ProBasicDeviceStructure> vos=new ArrayList<>();
+
+        if(StringUtils.notEmp(deviceId) && StringUtils.notEmp(nodeCode))
+        {
+            vos=proBasicDeviceStructureMapper.getDeviceStructureChildNode(deviceId,nodeCode);
+        }
+        return vos;
+    }
 }

+ 39 - 5
alarm-web/src/main/java/com/gyee/alarm/service/auto/impl/ProEconShutdownEvent2ServiceImpl.java

@@ -1,12 +1,18 @@
 package com.gyee.alarm.service.auto.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gyee.alarm.mapper.auto.ProEconShutdownEvent2Mapper;
 import com.gyee.alarm.model.auto.ProEconShutdownEvent2;
 import com.gyee.alarm.service.auto.IProEconShutdownEvent2Service;
+import com.gyee.common.model.StringUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 
 /**
@@ -22,10 +28,38 @@ public class ProEconShutdownEvent2ServiceImpl extends ServiceImpl<ProEconShutdow
 
     @Resource
     private ProEconShutdownEvent2Mapper proEconShutdownEvent2Mapper;
-    public int  updateShutdownevent2(Date start_time, Double loss_power, Double stop_hours, String id)
-    {
-        int i=0;
-        i=proEconShutdownEvent2Mapper.updateShutdownevent2( start_time,loss_power, stop_hours, id);
-        return i;
+    public IPage<ProEconShutdownEvent2> queryShutdownEvent2(String wpId, String wtId,String description, String begin,String end, Integer pageNum, Integer pageSize,String type) {
+        QueryWrapper<ProEconShutdownEvent2> qw = new QueryWrapper<>();
+
+        if (StringUtils.notEmp(wpId)) {
+            qw.eq("winpowerstation_id", wpId);
+        }
+
+        if (StringUtils.notEmp(wtId)) {
+            qw.eq("windturbine_id", wtId);
+        }
+
+        if (StringUtils.notEmp(description)) {
+            qw.like("fault_view", "%"+description+"%");
+        }
+
+        if (StringUtils.notEmp(begin) && StringUtils.notEmp(end)) {
+            try {
+                Date beginDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(begin);
+                Date endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(end);
+                qw.ge("stop_time", beginDate);
+                qw.le("stop_time", endDate);
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+        }
+        qw.eq("stop_type_id", type);
+        qw.orderByDesc("stop_time");
+
+
+        Page<ProEconShutdownEvent2> page = new Page<>(pageNum, pageSize);
+        IPage<ProEconShutdownEvent2> InputPage = getBaseMapper().selectPage(page, qw);
+
+        return InputPage;
     }
 }

+ 5 - 0
alarm-web/src/main/java/com/gyee/alarm/service/auto/initalcache/CacheService.java

@@ -6,6 +6,7 @@ package com.gyee.alarm.service.auto.initalcache;/*
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.gyee.alarm.model.auto.*;
+import com.gyee.alarm.model.vo.TreeNode;
 import com.gyee.alarm.service.auto.*;
 import com.gyee.alarm.init.redis.RedisService;
 import lombok.extern.slf4j.Slf4j;
@@ -56,7 +57,11 @@ public class CacheService {
     @Resource
     private IProBasicEnergyGroupService energyGroupService;
 
+    public static HashMap<String, TreeNode> deviceStructureMap;
 
+    public static void clear() {
+        deviceStructureMap.clear();
+    }
     public void initRedisCache(){
         log.info("--------------------------redisWT");
         List<ProBasicEquipment> windturbineList = windturbineService.list().stream().filter(i->i.getIsable().equals(1)).collect(Collectors.toList());

+ 338 - 331
log/ota.log

@@ -1,355 +1,362 @@
-2023-09-13 09:51:37.900  INFO 28108 --- [main] com.gyee.alarm.AlarmWeb                  : Starting AlarmWeb on sltc with PID 28108 (E:\idea_workspace\alarmNew\alarm-web\target\classes started by shilin in E:\idea_workspace\alarmNew)
-2023-09-13 09:51:37.913  INFO 28108 --- [main] com.gyee.alarm.AlarmWeb                  : The following profiles are active: jn
-2023-09-13 09:51:39.237  INFO 28108 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
-2023-09-13 09:51:39.240  INFO 28108 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2023-09-13 09:51:39.328  INFO 28108 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 71ms. Found 0 Redis repository interfaces.
-2023-09-13 09:51:39.686  INFO 28108 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 09:51:39.691  INFO 28108 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$6834b87c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 09:51:39.707  INFO 28108 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 09:51:39.949  INFO 28108 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 6015 (http)
-2023-09-13 09:51:39.956  INFO 28108 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
-2023-09-13 09:51:39.956  INFO 28108 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
-2023-09-13 09:51:40.067  INFO 28108 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
-2023-09-13 09:51:40.067  INFO 28108 --- [main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1950 ms
-2023-09-13 09:51:40.343  INFO 28108 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,master} inited
-2023-09-13 09:51:40.344 ERROR 28108 --- [main] com.alibaba.druid.pool.DruidDataSource   : testWhileIdle is true, validationQuery not set
-2023-09-13 09:51:40.345  INFO 28108 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,slave} inited
-2023-09-13 09:51:40.345  INFO 28108 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [slave] success
-2023-09-13 09:51:40.345  INFO 28108 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [master] success
-2023-09-13 09:51:40.345  INFO 28108 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource initial loaded [2] datasource,primary datasource named [master]
-2023-09-13 09:51:41.880 ERROR 28108 --- [main] c.b.m.core.MybatisConfiguration          : mapper[com.gyee.alarm.mapper.auto.AlarmTsMapper.createTable] is ignored, because it exists, maybe from xml file
-2023-09-13 09:51:44.677  INFO 28108 --- [main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
-2023-09-13 09:51:44.726  INFO 28108 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
-2023-09-13 09:51:44.819  INFO 28108 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
-2023-09-13 09:51:45.406  INFO 28108 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
-2023-09-13 09:51:45.418  INFO 28108 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
-2023-09-13 09:51:45.450  INFO 28108 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
-2023-09-13 09:51:45.614  INFO 28108 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_1
-2023-09-13 09:51:45.618  INFO 28108 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_1
-2023-09-13 09:51:45.622  INFO 28108 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_2
-2023-09-13 09:51:45.627  INFO 28108 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importExcelUsingPOST_1
-2023-09-13 09:51:45.629  INFO 28108 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importTemplateUsingGET_1
-2023-09-13 09:51:45.635  INFO 28108 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_1
-2023-09-13 09:51:45.653  INFO 28108 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_2
-2023-09-13 09:51:45.696  INFO 28108 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findListUsingGET_1
-2023-09-13 09:51:45.737  INFO 28108 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 6015 (http) with context path ''
-2023-09-13 09:51:45.740  INFO 28108 --- [main] com.gyee.alarm.AlarmWeb                  : Started AlarmWeb in 8.218 seconds (JVM running for 9.461)
-2023-09-13 09:51:45.744  INFO 28108 --- [main] com.gyee.alarm.init.CacheContext         : 缓存开始------------------------------------------------------------
-2023-09-13 09:51:45.956  INFO 28108 --- [main] com.gyee.alarm.init.CacheContext         : SXJ_KGDL_DJY_FDC_STA------------------20
-2023-09-13 09:51:47.098  INFO 28108 --- [main] io.lettuce.core.EpollProvider            : Starting without optional epoll library
-2023-09-13 09:51:47.101  INFO 28108 --- [main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
-2023-09-13 09:51:48.856  INFO 28108 --- [main] com.gyee.alarm.init.CacheContext         : 3227
-2023-09-13 09:52:18.490  INFO 28108 --- [http-nio-6015-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
-2023-09-13 09:52:18.490  INFO 28108 --- [http-nio-6015-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
-2023-09-13 09:52:18.498  INFO 28108 --- [http-nio-6015-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 8 ms
-2023-09-13 09:52:21.040  INFO 28108 --- [main] com.gyee.alarm.init.CacheContext         : 缓存结束------------------------------------------------------------
-2023-09-13 09:52:21.043  INFO 28108 --- [main] com.gyee.alarm.AlarmWeb                  : 
+2023-09-19 08:49:42.204  INFO 5680 --- [main] com.gyee.alarm.AlarmWeb                  : Starting AlarmWeb on sltc with PID 5680 (E:\idea_workspace\alarmNew\alarm-web\target\classes started by shilin in E:\idea_workspace\alarmNew)
+2023-09-19 08:49:42.217  INFO 5680 --- [main] com.gyee.alarm.AlarmWeb                  : The following profiles are active: jn
+2023-09-19 08:49:43.427  INFO 5680 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
+2023-09-19 08:49:43.429  INFO 5680 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2023-09-19 08:49:43.497  INFO 5680 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 57ms. Found 0 Redis repository interfaces.
+2023-09-19 08:49:43.832  INFO 5680 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 08:49:43.837  INFO 5680 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$6834b87c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 08:49:43.855  INFO 5680 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 08:49:44.087  INFO 5680 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 6015 (http)
+2023-09-19 08:49:44.095  INFO 5680 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2023-09-19 08:49:44.095  INFO 5680 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
+2023-09-19 08:49:44.196  INFO 5680 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2023-09-19 08:49:44.196  INFO 5680 --- [main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1805 ms
+2023-09-19 08:49:44.468  INFO 5680 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,master} inited
+2023-09-19 08:49:44.469 ERROR 5680 --- [main] com.alibaba.druid.pool.DruidDataSource   : testWhileIdle is true, validationQuery not set
+2023-09-19 08:49:44.470  INFO 5680 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,slave} inited
+2023-09-19 08:49:44.470  INFO 5680 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [slave] success
+2023-09-19 08:49:44.470  INFO 5680 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [master] success
+2023-09-19 08:49:44.470  INFO 5680 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource initial loaded [2] datasource,primary datasource named [master]
+2023-09-19 08:49:46.204 ERROR 5680 --- [main] c.b.m.core.MybatisConfiguration          : mapper[com.gyee.alarm.mapper.auto.AlarmTsMapper.createTable] is ignored, because it exists, maybe from xml file
+2023-09-19 08:49:49.590  INFO 5680 --- [main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
+2023-09-19 08:49:49.655  INFO 5680 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2023-09-19 08:49:49.775  INFO 5680 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2023-09-19 08:49:50.490  INFO 5680 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2023-09-19 08:49:50.503  INFO 5680 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2023-09-19 08:49:50.540  INFO 5680 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
+2023-09-19 08:49:50.751  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_1
+2023-09-19 08:49:50.755  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_1
+2023-09-19 08:49:50.759  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_2
+2023-09-19 08:49:50.762  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importExcelUsingPOST_1
+2023-09-19 08:49:50.764  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importTemplateUsingGET_1
+2023-09-19 08:49:50.770  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_1
+2023-09-19 08:49:50.788  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_2
+2023-09-19 08:49:50.865  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findListUsingGET_1
+2023-09-19 08:49:50.881  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAllDeviceStructureUsingGET_1
+2023-09-19 08:49:50.896  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getDeviceStructureTreeUsingGET_1
+2023-09-19 08:49:50.899  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_2
+2023-09-19 08:49:50.902  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_3
+2023-09-19 08:49:50.932  INFO 5680 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryWtPointlListUsingGET_1
+2023-09-19 08:49:50.981  INFO 5680 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 6015 (http) with context path ''
+2023-09-19 08:49:50.984  INFO 5680 --- [main] com.gyee.alarm.AlarmWeb                  : Started AlarmWeb in 9.103 seconds (JVM running for 10.706)
+2023-09-19 08:49:50.990  INFO 5680 --- [main] com.gyee.alarm.init.CacheContext         : 缓存开始------------------------------------------------------------
+2023-09-19 08:49:51.247  INFO 5680 --- [main] com.gyee.alarm.init.CacheContext         : SXJ_KGDL_DJY_FDC_STA------------------20
+2023-09-19 08:49:52.116  INFO 5680 --- [main] io.lettuce.core.EpollProvider            : Starting without optional epoll library
+2023-09-19 08:49:52.118  INFO 5680 --- [main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
+2023-09-19 08:49:53.890  INFO 5680 --- [main] com.gyee.alarm.init.CacheContext         : 3227
+2023-09-19 08:50:20.363  INFO 5680 --- [main] com.gyee.alarm.init.CacheContext         : 缓存结束------------------------------------------------------------
+2023-09-19 08:50:20.365  INFO 5680 --- [main] com.gyee.alarm.AlarmWeb                  : 
 -------------------------------------------------------------------
 	智能报警系统启动成功,访问路径如下:
 	本地路径: 		http://localhost:6015/
 	网络地址: 		http://192.168.56.1:6015/
 	API文档: 		http://192.168.56.1:6015//swagger-ui.html
 -----------------------------------------------------------------------
-2023-09-13 10:54:04.981  INFO 28108 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
-2023-09-13 10:54:05.237  INFO 28108 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource start closing ....
-2023-09-13 10:54:05.247  INFO 28108 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2} closed
-2023-09-13 10:54:05.254  INFO 28108 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
-2023-09-13 10:54:05.254  INFO 28108 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource all closed success,bye
-2023-09-13 10:54:11.307  INFO 19728 --- [main] com.gyee.alarm.AlarmWeb                  : Starting AlarmWeb on sltc with PID 19728 (E:\idea_workspace\alarmNew\alarm-web\target\classes started by shilin in E:\idea_workspace\alarmNew)
-2023-09-13 10:54:11.310  INFO 19728 --- [main] com.gyee.alarm.AlarmWeb                  : The following profiles are active: jn
-2023-09-13 10:54:12.721  INFO 19728 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
-2023-09-13 10:54:12.723  INFO 19728 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2023-09-13 10:54:12.809  INFO 19728 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 73ms. Found 0 Redis repository interfaces.
-2023-09-13 10:54:13.126  INFO 19728 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 10:54:13.131  INFO 19728 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$f979c8d8] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 10:54:13.146  INFO 19728 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 10:54:13.385  INFO 19728 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 6015 (http)
-2023-09-13 10:54:13.392  INFO 19728 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
-2023-09-13 10:54:13.392  INFO 19728 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
-2023-09-13 10:54:13.497  INFO 19728 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
-2023-09-13 10:54:13.498  INFO 19728 --- [main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2007 ms
-2023-09-13 10:54:13.739  INFO 19728 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,master} inited
-2023-09-13 10:54:13.741 ERROR 19728 --- [main] com.alibaba.druid.pool.DruidDataSource   : testWhileIdle is true, validationQuery not set
-2023-09-13 10:54:13.741  INFO 19728 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,slave} inited
-2023-09-13 10:54:13.741  INFO 19728 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [slave] success
-2023-09-13 10:54:13.742  INFO 19728 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [master] success
-2023-09-13 10:54:13.742  INFO 19728 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource initial loaded [2] datasource,primary datasource named [master]
-2023-09-13 10:54:15.244 ERROR 19728 --- [main] c.b.m.core.MybatisConfiguration          : mapper[com.gyee.alarm.mapper.auto.AlarmTsMapper.createTable] is ignored, because it exists, maybe from xml file
-2023-09-13 10:54:18.223  INFO 19728 --- [main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
-2023-09-13 10:54:18.286  INFO 19728 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
-2023-09-13 10:54:18.394  INFO 19728 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
-2023-09-13 10:54:18.958  INFO 19728 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
-2023-09-13 10:54:18.970  INFO 19728 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
-2023-09-13 10:54:19.032  INFO 19728 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
-2023-09-13 10:54:19.338  INFO 19728 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_1
-2023-09-13 10:54:19.345  INFO 19728 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_1
-2023-09-13 10:54:19.350  INFO 19728 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_2
-2023-09-13 10:54:19.356  INFO 19728 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importExcelUsingPOST_1
-2023-09-13 10:54:19.357  INFO 19728 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importTemplateUsingGET_1
-2023-09-13 10:54:19.365  INFO 19728 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_1
-2023-09-13 10:54:19.392  INFO 19728 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_2
-2023-09-13 10:54:19.463  INFO 19728 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findListUsingGET_1
-2023-09-13 10:54:19.514  INFO 19728 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 6015 (http) with context path ''
-2023-09-13 10:54:19.518  INFO 19728 --- [main] com.gyee.alarm.AlarmWeb                  : Started AlarmWeb in 8.534 seconds (JVM running for 9.692)
-2023-09-13 10:54:19.523  INFO 19728 --- [main] com.gyee.alarm.init.CacheContext         : 缓存开始------------------------------------------------------------
-2023-09-13 10:54:19.736  INFO 19728 --- [main] com.gyee.alarm.init.CacheContext         : SXJ_KGDL_DJY_FDC_STA------------------20
-2023-09-13 10:54:20.512  INFO 19728 --- [main] io.lettuce.core.EpollProvider            : Starting without optional epoll library
-2023-09-13 10:54:20.514  INFO 19728 --- [main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
-2023-09-13 10:54:22.235  INFO 19728 --- [main] com.gyee.alarm.init.CacheContext         : 3227
-2023-09-13 10:54:52.904  INFO 19728 --- [main] com.gyee.alarm.init.CacheContext         : 缓存结束------------------------------------------------------------
-2023-09-13 10:54:52.906  INFO 19728 --- [main] com.gyee.alarm.AlarmWeb                  : 
+2023-09-19 08:50:21.334  INFO 5680 --- [RMI TCP Connection(2)-192.168.56.1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2023-09-19 08:50:21.335  INFO 5680 --- [RMI TCP Connection(2)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2023-09-19 08:50:21.342  INFO 5680 --- [RMI TCP Connection(2)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 7 ms
+2023-09-19 08:59:41.108  INFO 5680 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
+2023-09-19 08:59:41.234  INFO 5680 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource start closing ....
+2023-09-19 08:59:41.237  INFO 5680 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2} closed
+2023-09-19 08:59:41.238  INFO 5680 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
+2023-09-19 08:59:41.238  INFO 5680 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource all closed success,bye
+2023-09-19 08:59:46.545  INFO 23528 --- [main] com.gyee.alarm.AlarmWeb                  : Starting AlarmWeb on sltc with PID 23528 (E:\idea_workspace\alarmNew\alarm-web\target\classes started by shilin in E:\idea_workspace\alarmNew)
+2023-09-19 08:59:46.548  INFO 23528 --- [main] com.gyee.alarm.AlarmWeb                  : The following profiles are active: jn
+2023-09-19 08:59:47.733  INFO 23528 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
+2023-09-19 08:59:47.735  INFO 23528 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2023-09-19 08:59:47.821  INFO 23528 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 71ms. Found 0 Redis repository interfaces.
+2023-09-19 08:59:48.132  INFO 23528 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 08:59:48.136  INFO 23528 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$383cd0c4] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 08:59:48.155  INFO 23528 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 08:59:48.391  INFO 23528 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 6015 (http)
+2023-09-19 08:59:48.398  INFO 23528 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2023-09-19 08:59:48.399  INFO 23528 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
+2023-09-19 08:59:48.512  INFO 23528 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2023-09-19 08:59:48.512  INFO 23528 --- [main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1786 ms
+2023-09-19 08:59:48.753  INFO 23528 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,master} inited
+2023-09-19 08:59:48.755 ERROR 23528 --- [main] com.alibaba.druid.pool.DruidDataSource   : testWhileIdle is true, validationQuery not set
+2023-09-19 08:59:48.755  INFO 23528 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,slave} inited
+2023-09-19 08:59:48.755  INFO 23528 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [slave] success
+2023-09-19 08:59:48.755  INFO 23528 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [master] success
+2023-09-19 08:59:48.756  INFO 23528 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource initial loaded [2] datasource,primary datasource named [master]
+2023-09-19 08:59:50.201 ERROR 23528 --- [main] c.b.m.core.MybatisConfiguration          : mapper[com.gyee.alarm.mapper.auto.AlarmTsMapper.createTable] is ignored, because it exists, maybe from xml file
+2023-09-19 08:59:52.911  INFO 23528 --- [main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
+2023-09-19 08:59:52.965  INFO 23528 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2023-09-19 08:59:53.055  INFO 23528 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2023-09-19 08:59:53.608  INFO 23528 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2023-09-19 08:59:53.618  INFO 23528 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2023-09-19 08:59:53.644  INFO 23528 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
+2023-09-19 08:59:53.775  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_1
+2023-09-19 08:59:53.778  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_1
+2023-09-19 08:59:53.781  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_2
+2023-09-19 08:59:53.784  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importExcelUsingPOST_1
+2023-09-19 08:59:53.784  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importTemplateUsingGET_1
+2023-09-19 08:59:53.789  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_1
+2023-09-19 08:59:53.802  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_2
+2023-09-19 08:59:53.879  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findListUsingGET_1
+2023-09-19 08:59:53.893  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAllDeviceStructureUsingGET_1
+2023-09-19 08:59:53.908  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getDeviceStructureTreeUsingGET_1
+2023-09-19 08:59:53.911  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_2
+2023-09-19 08:59:53.913  INFO 23528 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_3
+2023-09-19 08:59:53.971  INFO 23528 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 6015 (http) with context path ''
+2023-09-19 08:59:53.973  INFO 23528 --- [main] com.gyee.alarm.AlarmWeb                  : Started AlarmWeb in 7.839 seconds (JVM running for 8.988)
+2023-09-19 08:59:53.977  INFO 23528 --- [main] com.gyee.alarm.init.CacheContext         : 缓存开始------------------------------------------------------------
+2023-09-19 08:59:54.151  INFO 23528 --- [main] com.gyee.alarm.init.CacheContext         : SXJ_KGDL_DJY_FDC_STA------------------20
+2023-09-19 08:59:54.996  INFO 23528 --- [main] io.lettuce.core.EpollProvider            : Starting without optional epoll library
+2023-09-19 08:59:54.999  INFO 23528 --- [main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
+2023-09-19 08:59:56.813  INFO 23528 --- [main] com.gyee.alarm.init.CacheContext         : 3227
+2023-09-19 09:00:25.680  INFO 23528 --- [main] com.gyee.alarm.init.CacheContext         : 缓存结束------------------------------------------------------------
+2023-09-19 09:00:25.682  INFO 23528 --- [main] com.gyee.alarm.AlarmWeb                  : 
 -------------------------------------------------------------------
 	智能报警系统启动成功,访问路径如下:
 	本地路径: 		http://localhost:6015/
 	网络地址: 		http://192.168.56.1:6015/
 	API文档: 		http://192.168.56.1:6015//swagger-ui.html
 -----------------------------------------------------------------------
-2023-09-13 10:54:54.005  INFO 19728 --- [RMI TCP Connection(9)-192.168.56.1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
-2023-09-13 10:54:54.005  INFO 19728 --- [RMI TCP Connection(9)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
-2023-09-13 10:54:54.017  INFO 19728 --- [RMI TCP Connection(9)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 11 ms
-2023-09-13 11:11:53.602  INFO 19728 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
-2023-09-13 11:11:53.792  INFO 19728 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource start closing ....
-2023-09-13 11:11:53.795  INFO 19728 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2} closed
-2023-09-13 11:11:53.797  INFO 19728 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
-2023-09-13 11:11:53.798  INFO 19728 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource all closed success,bye
-2023-09-13 11:12:00.687  INFO 932 --- [main] com.gyee.alarm.AlarmWeb                  : Starting AlarmWeb on sltc with PID 932 (E:\idea_workspace\alarmNew\alarm-web\target\classes started by shilin in E:\idea_workspace\alarmNew)
-2023-09-13 11:12:00.689  INFO 932 --- [main] com.gyee.alarm.AlarmWeb                  : The following profiles are active: jn
-2023-09-13 11:12:02.267  INFO 932 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
-2023-09-13 11:12:02.269  INFO 932 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2023-09-13 11:12:02.363  INFO 932 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 79ms. Found 0 Redis repository interfaces.
-2023-09-13 11:12:02.707  INFO 932 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 11:12:02.712  INFO 932 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$b93ddb24] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 11:12:02.727  INFO 932 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 11:12:02.939  INFO 932 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 6015 (http)
-2023-09-13 11:12:02.946  INFO 932 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
-2023-09-13 11:12:02.947  INFO 932 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
-2023-09-13 11:12:03.046  INFO 932 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
-2023-09-13 11:12:03.046  INFO 932 --- [main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2194 ms
-2023-09-13 11:12:03.274  INFO 932 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,master} inited
-2023-09-13 11:12:03.275 ERROR 932 --- [main] com.alibaba.druid.pool.DruidDataSource   : testWhileIdle is true, validationQuery not set
-2023-09-13 11:12:03.276  INFO 932 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,slave} inited
-2023-09-13 11:12:03.276  INFO 932 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [slave] success
-2023-09-13 11:12:03.276  INFO 932 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [master] success
-2023-09-13 11:12:03.276  INFO 932 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource initial loaded [2] datasource,primary datasource named [master]
-2023-09-13 11:12:04.707 ERROR 932 --- [main] c.b.m.core.MybatisConfiguration          : mapper[com.gyee.alarm.mapper.auto.AlarmTsMapper.createTable] is ignored, because it exists, maybe from xml file
-2023-09-13 11:12:07.360  INFO 932 --- [main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
-2023-09-13 11:12:07.408  INFO 932 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
-2023-09-13 11:12:07.498  INFO 932 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
-2023-09-13 11:12:08.042  INFO 932 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
-2023-09-13 11:12:08.053  INFO 932 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
-2023-09-13 11:12:08.080  INFO 932 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
-2023-09-13 11:12:08.211  INFO 932 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_1
-2023-09-13 11:12:08.214  INFO 932 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_1
-2023-09-13 11:12:08.217  INFO 932 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_2
-2023-09-13 11:12:08.220  INFO 932 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importExcelUsingPOST_1
-2023-09-13 11:12:08.220  INFO 932 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importTemplateUsingGET_1
-2023-09-13 11:12:08.224  INFO 932 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_1
-2023-09-13 11:12:08.239  INFO 932 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_2
-2023-09-13 11:12:08.289  INFO 932 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findListUsingGET_1
-2023-09-13 11:12:08.339  INFO 932 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 6015 (http) with context path ''
-2023-09-13 11:12:08.341  INFO 932 --- [main] com.gyee.alarm.AlarmWeb                  : Started AlarmWeb in 7.945 seconds (JVM running for 9.093)
-2023-09-13 11:12:08.345  INFO 932 --- [main] com.gyee.alarm.init.CacheContext         : 缓存开始------------------------------------------------------------
-2023-09-13 11:12:08.512  INFO 932 --- [main] com.gyee.alarm.init.CacheContext         : SXJ_KGDL_DJY_FDC_STA------------------20
-2023-09-13 11:12:09.496  INFO 932 --- [main] io.lettuce.core.EpollProvider            : Starting without optional epoll library
-2023-09-13 11:12:09.498  INFO 932 --- [main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
-2023-09-13 11:12:11.202  INFO 932 --- [main] com.gyee.alarm.init.CacheContext         : 3227
-2023-09-13 11:12:21.775  INFO 932 --- [http-nio-6015-exec-3] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
-2023-09-13 11:12:21.775  INFO 932 --- [http-nio-6015-exec-3] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
-2023-09-13 11:12:21.780  INFO 932 --- [http-nio-6015-exec-3] o.s.web.servlet.DispatcherServlet        : Completed initialization in 5 ms
-2023-09-13 11:12:21.896 ERROR 932 --- [http-nio-6015-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
-
-java.lang.NullPointerException: null
-	at com.gyee.alarm.service.TokenService.getSubwpls(TokenService.java:235) ~[classes/:na]
-	at com.gyee.alarm.controller.AlertRuleController.querySublList(AlertRuleController.java:232) ~[classes/:na]
-	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_351]
-	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_351]
-	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_351]
-	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_351]
-	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) ~[druid-1.1.10.jar:1.1.10]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:108) ~[spring-boot-actuator-2.2.2.RELEASE.jar:2.2.2.RELEASE]
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_351]
-	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_351]
-	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at java.lang.Thread.run(Thread.java:750) [na:1.8.0_351]
-
-2023-09-13 11:12:26.546 ERROR 932 --- [http-nio-6015-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
-
-java.lang.NullPointerException: null
-	at com.gyee.alarm.service.TokenService.getSubwpls(TokenService.java:235) ~[classes/:na]
-	at com.gyee.alarm.controller.AlertRuleController.querySublList(AlertRuleController.java:232) ~[classes/:na]
-	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_351]
-	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_351]
-	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_351]
-	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_351]
-	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) ~[druid-1.1.10.jar:1.1.10]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:108) ~[spring-boot-actuator-2.2.2.RELEASE.jar:2.2.2.RELEASE]
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.2.RELEASE.jar:5.2.2.RELEASE]
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_351]
-	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_351]
-	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.29.jar:9.0.29]
-	at java.lang.Thread.run(Thread.java:750) [na:1.8.0_351]
-
-2023-09-13 11:12:40.175  INFO 932 --- [main] com.gyee.alarm.init.CacheContext         : 缓存结束------------------------------------------------------------
-2023-09-13 11:12:40.177  INFO 932 --- [main] com.gyee.alarm.AlarmWeb                  : 
+2023-09-19 09:00:25.908  INFO 23528 --- [RMI TCP Connection(5)-192.168.56.1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2023-09-19 09:00:25.908  INFO 23528 --- [RMI TCP Connection(5)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2023-09-19 09:00:25.915  INFO 23528 --- [RMI TCP Connection(5)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 7 ms
+2023-09-19 09:02:52.813  INFO 23528 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
+2023-09-19 09:02:53.049  INFO 23528 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource start closing ....
+2023-09-19 09:02:53.051  INFO 23528 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2} closed
+2023-09-19 09:02:53.053  INFO 23528 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
+2023-09-19 09:02:53.053  INFO 23528 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource all closed success,bye
+2023-09-19 09:02:56.492  INFO 20588 --- [main] com.gyee.alarm.AlarmWeb                  : Starting AlarmWeb on sltc with PID 20588 (E:\idea_workspace\alarmNew\alarm-web\target\classes started by shilin in E:\idea_workspace\alarmNew)
+2023-09-19 09:02:56.494  INFO 20588 --- [main] com.gyee.alarm.AlarmWeb                  : The following profiles are active: jn
+2023-09-19 09:02:57.642  INFO 20588 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
+2023-09-19 09:02:57.643  INFO 20588 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2023-09-19 09:02:57.724  INFO 20588 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 68ms. Found 0 Redis repository interfaces.
+2023-09-19 09:02:58.017  INFO 20588 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:02:58.022  INFO 20588 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$5636fd88] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:02:58.035  INFO 20588 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:02:58.240  INFO 20588 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 6015 (http)
+2023-09-19 09:02:58.249  INFO 20588 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2023-09-19 09:02:58.249  INFO 20588 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
+2023-09-19 09:02:58.349  INFO 20588 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2023-09-19 09:02:58.349  INFO 20588 --- [main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1689 ms
+2023-09-19 09:02:58.573  INFO 20588 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,master} inited
+2023-09-19 09:02:58.575 ERROR 20588 --- [main] com.alibaba.druid.pool.DruidDataSource   : testWhileIdle is true, validationQuery not set
+2023-09-19 09:02:58.575  INFO 20588 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,slave} inited
+2023-09-19 09:02:58.575  INFO 20588 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [slave] success
+2023-09-19 09:02:58.575  INFO 20588 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [master] success
+2023-09-19 09:02:58.575  INFO 20588 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource initial loaded [2] datasource,primary datasource named [master]
+2023-09-19 09:02:59.961 ERROR 20588 --- [main] c.b.m.core.MybatisConfiguration          : mapper[com.gyee.alarm.mapper.auto.AlarmTsMapper.createTable] is ignored, because it exists, maybe from xml file
+2023-09-19 09:03:02.735  INFO 20588 --- [main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
+2023-09-19 09:03:02.785  INFO 20588 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2023-09-19 09:03:02.884  INFO 20588 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2023-09-19 09:03:03.426  INFO 20588 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2023-09-19 09:03:03.436  INFO 20588 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2023-09-19 09:03:03.462  INFO 20588 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
+2023-09-19 09:03:03.633  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_1
+2023-09-19 09:03:03.638  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_1
+2023-09-19 09:03:03.643  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_2
+2023-09-19 09:03:03.647  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importExcelUsingPOST_1
+2023-09-19 09:03:03.649  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importTemplateUsingGET_1
+2023-09-19 09:03:03.655  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_1
+2023-09-19 09:03:03.671  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_2
+2023-09-19 09:03:03.755  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findListUsingGET_1
+2023-09-19 09:03:03.774  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAllDeviceStructureUsingGET_1
+2023-09-19 09:03:03.797  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getDeviceStructureTreeUsingGET_1
+2023-09-19 09:03:03.802  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_2
+2023-09-19 09:03:03.804  INFO 20588 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_3
+2023-09-19 09:03:03.881  INFO 20588 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 6015 (http) with context path ''
+2023-09-19 09:03:03.883  INFO 20588 --- [main] com.gyee.alarm.AlarmWeb                  : Started AlarmWeb in 7.707 seconds (JVM running for 8.864)
+2023-09-19 09:03:03.888  INFO 20588 --- [main] com.gyee.alarm.init.CacheContext         : 缓存开始------------------------------------------------------------
+2023-09-19 09:03:04.073  INFO 20588 --- [main] com.gyee.alarm.init.CacheContext         : SXJ_KGDL_DJY_FDC_STA------------------20
+2023-09-19 09:03:04.910  INFO 20588 --- [main] io.lettuce.core.EpollProvider            : Starting without optional epoll library
+2023-09-19 09:03:04.912  INFO 20588 --- [main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
+2023-09-19 09:03:06.629  INFO 20588 --- [main] com.gyee.alarm.init.CacheContext         : 3227
+2023-09-19 09:03:38.617  INFO 20588 --- [main] com.gyee.alarm.init.CacheContext         : 缓存结束------------------------------------------------------------
+2023-09-19 09:03:38.620  INFO 20588 --- [main] com.gyee.alarm.AlarmWeb                  : 
 -------------------------------------------------------------------
 	智能报警系统启动成功,访问路径如下:
 	本地路径: 		http://localhost:6015/
 	网络地址: 		http://192.168.56.1:6015/
 	API文档: 		http://192.168.56.1:6015//swagger-ui.html
 -----------------------------------------------------------------------
-2023-09-13 11:13:02.927  WARN 932 --- [http-nio-6015-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
-2023-09-13 11:13:38.257  WARN 932 --- [http-nio-6015-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
-2023-09-13 11:19:48.585  INFO 932 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
-2023-09-13 11:19:48.719  INFO 932 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource start closing ....
-2023-09-13 11:19:48.722  INFO 932 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2} closed
-2023-09-13 11:19:48.725  INFO 932 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
-2023-09-13 11:19:48.725  INFO 932 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource all closed success,bye
-2023-09-13 11:19:54.448  INFO 19736 --- [main] com.gyee.alarm.AlarmWeb                  : Starting AlarmWeb on sltc with PID 19736 (E:\idea_workspace\alarmNew\alarm-web\target\classes started by shilin in E:\idea_workspace\alarmNew)
-2023-09-13 11:19:54.450  INFO 19736 --- [main] com.gyee.alarm.AlarmWeb                  : The following profiles are active: jn
-2023-09-13 11:19:55.555  INFO 19736 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
-2023-09-13 11:19:55.557  INFO 19736 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2023-09-13 11:19:55.627  INFO 19736 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 60ms. Found 0 Redis repository interfaces.
-2023-09-13 11:19:55.927  INFO 19736 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 11:19:55.932  INFO 19736 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$7a8a2a5d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 11:19:55.946  INFO 19736 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-09-13 11:19:56.155  INFO 19736 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 6015 (http)
-2023-09-13 11:19:56.162  INFO 19736 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
-2023-09-13 11:19:56.162  INFO 19736 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
-2023-09-13 11:19:56.261  INFO 19736 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
-2023-09-13 11:19:56.261  INFO 19736 --- [main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1654 ms
-2023-09-13 11:19:56.484  INFO 19736 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,master} inited
-2023-09-13 11:19:56.485 ERROR 19736 --- [main] com.alibaba.druid.pool.DruidDataSource   : testWhileIdle is true, validationQuery not set
-2023-09-13 11:19:56.486  INFO 19736 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,slave} inited
-2023-09-13 11:19:56.486  INFO 19736 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [slave] success
-2023-09-13 11:19:56.486  INFO 19736 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [master] success
-2023-09-13 11:19:56.486  INFO 19736 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource initial loaded [2] datasource,primary datasource named [master]
-2023-09-13 11:19:57.894 ERROR 19736 --- [main] c.b.m.core.MybatisConfiguration          : mapper[com.gyee.alarm.mapper.auto.AlarmTsMapper.createTable] is ignored, because it exists, maybe from xml file
-2023-09-13 11:20:00.479  INFO 19736 --- [main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
-2023-09-13 11:20:00.526  INFO 19736 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
-2023-09-13 11:20:00.612  INFO 19736 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
-2023-09-13 11:20:01.135  INFO 19736 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
-2023-09-13 11:20:01.145  INFO 19736 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
-2023-09-13 11:20:01.170  INFO 19736 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
-2023-09-13 11:20:01.297  INFO 19736 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_1
-2023-09-13 11:20:01.300  INFO 19736 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_1
-2023-09-13 11:20:01.303  INFO 19736 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_2
-2023-09-13 11:20:01.306  INFO 19736 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importExcelUsingPOST_1
-2023-09-13 11:20:01.307  INFO 19736 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importTemplateUsingGET_1
-2023-09-13 11:20:01.311  INFO 19736 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_1
-2023-09-13 11:20:01.325  INFO 19736 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_2
-2023-09-13 11:20:01.371  INFO 19736 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findListUsingGET_1
-2023-09-13 11:20:01.420  INFO 19736 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 6015 (http) with context path ''
-2023-09-13 11:20:01.423  INFO 19736 --- [main] com.gyee.alarm.AlarmWeb                  : Started AlarmWeb in 7.26 seconds (JVM running for 8.344)
-2023-09-13 11:20:01.428  INFO 19736 --- [main] com.gyee.alarm.init.CacheContext         : 缓存开始------------------------------------------------------------
-2023-09-13 11:20:01.580  INFO 19736 --- [main] com.gyee.alarm.init.CacheContext         : SXJ_KGDL_DJY_FDC_STA------------------20
-2023-09-13 11:20:02.358  INFO 19736 --- [main] io.lettuce.core.EpollProvider            : Starting without optional epoll library
-2023-09-13 11:20:02.360  INFO 19736 --- [main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
-2023-09-13 11:20:03.947  INFO 19736 --- [main] com.gyee.alarm.init.CacheContext         : 3227
-2023-09-13 11:20:34.080  INFO 19736 --- [main] com.gyee.alarm.init.CacheContext         : 缓存结束------------------------------------------------------------
-2023-09-13 11:20:34.083  INFO 19736 --- [main] com.gyee.alarm.AlarmWeb                  : 
+2023-09-19 09:03:39.438  INFO 20588 --- [RMI TCP Connection(3)-192.168.56.1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2023-09-19 09:03:39.438  INFO 20588 --- [RMI TCP Connection(3)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2023-09-19 09:03:39.446  INFO 20588 --- [RMI TCP Connection(3)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 8 ms
+2023-09-19 09:04:00.145  INFO 20588 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
+2023-09-19 09:04:00.287  INFO 20588 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource start closing ....
+2023-09-19 09:04:00.289  INFO 20588 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2} closed
+2023-09-19 09:04:00.291  INFO 20588 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
+2023-09-19 09:04:00.291  INFO 20588 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource all closed success,bye
+2023-09-19 09:04:05.228  INFO 12560 --- [main] com.gyee.alarm.AlarmWeb                  : Starting AlarmWeb on sltc with PID 12560 (E:\idea_workspace\alarmNew\alarm-web\target\classes started by shilin in E:\idea_workspace\alarmNew)
+2023-09-19 09:04:05.230  INFO 12560 --- [main] com.gyee.alarm.AlarmWeb                  : The following profiles are active: jn
+2023-09-19 09:04:06.397  INFO 12560 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
+2023-09-19 09:04:06.399  INFO 12560 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2023-09-19 09:04:06.479  INFO 12560 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 66ms. Found 0 Redis repository interfaces.
+2023-09-19 09:04:06.776  INFO 12560 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:04:06.781  INFO 12560 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$788ba1b8] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:04:06.794  INFO 12560 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:04:06.996  INFO 12560 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 6015 (http)
+2023-09-19 09:04:07.005  INFO 12560 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2023-09-19 09:04:07.005  INFO 12560 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
+2023-09-19 09:04:07.100  INFO 12560 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2023-09-19 09:04:07.100  INFO 12560 --- [main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1694 ms
+2023-09-19 09:04:07.322  INFO 12560 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,master} inited
+2023-09-19 09:04:07.323 ERROR 12560 --- [main] com.alibaba.druid.pool.DruidDataSource   : testWhileIdle is true, validationQuery not set
+2023-09-19 09:04:07.323  INFO 12560 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,slave} inited
+2023-09-19 09:04:07.324  INFO 12560 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [slave] success
+2023-09-19 09:04:07.324  INFO 12560 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [master] success
+2023-09-19 09:04:07.324  INFO 12560 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource initial loaded [2] datasource,primary datasource named [master]
+2023-09-19 09:04:08.692 ERROR 12560 --- [main] c.b.m.core.MybatisConfiguration          : mapper[com.gyee.alarm.mapper.auto.AlarmTsMapper.createTable] is ignored, because it exists, maybe from xml file
+2023-09-19 09:04:11.404  INFO 12560 --- [main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
+2023-09-19 09:04:11.454  INFO 12560 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2023-09-19 09:04:11.543  INFO 12560 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2023-09-19 09:04:12.072  INFO 12560 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2023-09-19 09:04:12.082  INFO 12560 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2023-09-19 09:04:12.108  INFO 12560 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
+2023-09-19 09:04:12.239  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_1
+2023-09-19 09:04:12.242  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_1
+2023-09-19 09:04:12.246  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_2
+2023-09-19 09:04:12.248  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importExcelUsingPOST_1
+2023-09-19 09:04:12.249  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importTemplateUsingGET_1
+2023-09-19 09:04:12.253  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_1
+2023-09-19 09:04:12.267  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_2
+2023-09-19 09:04:12.344  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findListUsingGET_1
+2023-09-19 09:04:12.356  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAllDeviceStructureUsingGET_1
+2023-09-19 09:04:12.370  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getDeviceStructureTreeUsingGET_1
+2023-09-19 09:04:12.373  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_2
+2023-09-19 09:04:12.375  INFO 12560 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_3
+2023-09-19 09:04:12.432  INFO 12560 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 6015 (http) with context path ''
+2023-09-19 09:04:12.435  INFO 12560 --- [main] com.gyee.alarm.AlarmWeb                  : Started AlarmWeb in 7.549 seconds (JVM running for 8.678)
+2023-09-19 09:04:12.439  INFO 12560 --- [main] com.gyee.alarm.init.CacheContext         : 缓存开始------------------------------------------------------------
+2023-09-19 09:04:12.619  INFO 12560 --- [main] com.gyee.alarm.init.CacheContext         : SXJ_KGDL_DJY_FDC_STA------------------20
+2023-09-19 09:04:13.393  INFO 12560 --- [main] io.lettuce.core.EpollProvider            : Starting without optional epoll library
+2023-09-19 09:04:13.395  INFO 12560 --- [main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
+2023-09-19 09:04:15.049  INFO 12560 --- [main] com.gyee.alarm.init.CacheContext         : 3227
+2023-09-19 09:04:43.253  INFO 12560 --- [http-nio-6015-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2023-09-19 09:04:43.253  INFO 12560 --- [http-nio-6015-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2023-09-19 09:04:43.262  INFO 12560 --- [http-nio-6015-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 9 ms
+2023-09-19 09:04:43.782  INFO 12560 --- [main] com.gyee.alarm.init.CacheContext         : 缓存结束------------------------------------------------------------
+2023-09-19 09:04:43.786  INFO 12560 --- [main] com.gyee.alarm.AlarmWeb                  : 
 -------------------------------------------------------------------
 	智能报警系统启动成功,访问路径如下:
 	本地路径: 		http://localhost:6015/
 	网络地址: 		http://192.168.56.1:6015/
 	API文档: 		http://192.168.56.1:6015//swagger-ui.html
 -----------------------------------------------------------------------
-2023-09-13 11:20:35.106  INFO 19736 --- [RMI TCP Connection(2)-192.168.56.1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
-2023-09-13 11:20:35.107  INFO 19736 --- [RMI TCP Connection(2)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
-2023-09-13 11:20:35.116  INFO 19736 --- [RMI TCP Connection(2)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 9 ms
-2023-09-13 14:34:26.453  WARN 19736 --- [http-nio-6015-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
-2023-09-13 14:35:28.290  WARN 19736 --- [http-nio-6015-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
-2023-09-13 14:36:55.001  WARN 19736 --- [http-nio-6015-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
-2023-09-13 14:37:06.093  WARN 19736 --- [http-nio-6015-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
+2023-09-19 09:15:34.862  INFO 12560 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
+2023-09-19 09:15:35.017  INFO 12560 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource start closing ....
+2023-09-19 09:15:35.020  INFO 12560 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2} closed
+2023-09-19 09:15:35.022  INFO 12560 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
+2023-09-19 09:15:35.022  INFO 12560 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource all closed success,bye
+2023-09-19 09:15:57.140  INFO 4316 --- [main] com.gyee.alarm.AlarmWeb                  : Starting AlarmWeb on sltc with PID 4316 (E:\idea_workspace\alarmNew\alarm-web\target\classes started by shilin in E:\idea_workspace\alarmNew)
+2023-09-19 09:15:57.143  INFO 4316 --- [main] com.gyee.alarm.AlarmWeb                  : The following profiles are active: jn
+2023-09-19 09:15:58.264  INFO 4316 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
+2023-09-19 09:15:58.266  INFO 4316 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2023-09-19 09:15:58.345  INFO 4316 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 65ms. Found 0 Redis repository interfaces.
+2023-09-19 09:15:58.646  INFO 4316 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:15:58.650  INFO 4316 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$5f26ad75] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:15:58.665  INFO 4316 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:15:58.872  INFO 4316 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 6015 (http)
+2023-09-19 09:15:58.881  INFO 4316 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2023-09-19 09:15:58.882  INFO 4316 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
+2023-09-19 09:15:58.981  INFO 4316 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2023-09-19 09:15:58.981  INFO 4316 --- [main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1677 ms
+2023-09-19 09:15:59.211  INFO 4316 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,master} inited
+2023-09-19 09:15:59.213 ERROR 4316 --- [main] com.alibaba.druid.pool.DruidDataSource   : testWhileIdle is true, validationQuery not set
+2023-09-19 09:15:59.213  INFO 4316 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,slave} inited
+2023-09-19 09:15:59.213  INFO 4316 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [slave] success
+2023-09-19 09:15:59.213  INFO 4316 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [master] success
+2023-09-19 09:15:59.213  INFO 4316 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource initial loaded [2] datasource,primary datasource named [master]
+2023-09-19 09:16:00.603 ERROR 4316 --- [main] c.b.m.core.MybatisConfiguration          : mapper[com.gyee.alarm.mapper.auto.AlarmTsMapper.createTable] is ignored, because it exists, maybe from xml file
+2023-09-19 09:16:03.297  INFO 4316 --- [main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
+2023-09-19 09:16:03.347  INFO 4316 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2023-09-19 09:16:03.435  INFO 4316 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2023-09-19 09:16:03.969  INFO 4316 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2023-09-19 09:16:03.979  INFO 4316 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2023-09-19 09:16:04.005  INFO 4316 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
+2023-09-19 09:16:04.133  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_1
+2023-09-19 09:16:04.136  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_1
+2023-09-19 09:16:04.139  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_2
+2023-09-19 09:16:04.141  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importExcelUsingPOST_1
+2023-09-19 09:16:04.142  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importTemplateUsingGET_1
+2023-09-19 09:16:04.146  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_1
+2023-09-19 09:16:04.159  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_2
+2023-09-19 09:16:04.231  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findListUsingGET_1
+2023-09-19 09:16:04.243  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAllDeviceStructureUsingGET_1
+2023-09-19 09:16:04.257  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getDeviceStructureTreeUsingGET_1
+2023-09-19 09:16:04.261  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_2
+2023-09-19 09:16:04.262  INFO 4316 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_3
+2023-09-19 09:16:04.319  INFO 4316 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 6015 (http) with context path ''
+2023-09-19 09:16:04.321  INFO 4316 --- [main] com.gyee.alarm.AlarmWeb                  : Started AlarmWeb in 7.521 seconds (JVM running for 8.686)
+2023-09-19 09:16:04.324  INFO 4316 --- [main] com.gyee.alarm.init.CacheContext         : 缓存开始------------------------------------------------------------
+2023-09-19 09:16:04.534  INFO 4316 --- [main] com.gyee.alarm.init.CacheContext         : SXJ_KGDL_DJY_FDC_STA------------------20
+2023-09-19 09:16:05.766  INFO 4316 --- [main] io.lettuce.core.EpollProvider            : Starting without optional epoll library
+2023-09-19 09:16:05.769  INFO 4316 --- [main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
+2023-09-19 09:16:07.770  INFO 4316 --- [main] com.gyee.alarm.init.CacheContext         : 3227
+2023-09-19 09:16:43.922  INFO 4316 --- [main] com.gyee.alarm.init.CacheContext         : 缓存结束------------------------------------------------------------
+2023-09-19 09:16:43.924  INFO 4316 --- [main] com.gyee.alarm.AlarmWeb                  : 
+-------------------------------------------------------------------
+	智能报警系统启动成功,访问路径如下:
+	本地路径: 		http://localhost:6015/
+	网络地址: 		http://192.168.56.1:6015/
+	API文档: 		http://192.168.56.1:6015//swagger-ui.html
+-----------------------------------------------------------------------
+2023-09-19 09:16:45.022  INFO 4316 --- [RMI TCP Connection(5)-192.168.56.1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2023-09-19 09:16:45.023  INFO 4316 --- [RMI TCP Connection(5)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2023-09-19 09:16:45.033  INFO 4316 --- [RMI TCP Connection(5)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 10 ms
+2023-09-19 09:19:34.296  INFO 4316 --- [SpringContextShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
+2023-09-19 09:19:34.434  INFO 4316 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource start closing ....
+2023-09-19 09:19:34.437  INFO 4316 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2} closed
+2023-09-19 09:19:34.438  INFO 4316 --- [SpringContextShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
+2023-09-19 09:19:34.438  INFO 4316 --- [SpringContextShutdownHook] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource all closed success,bye
+2023-09-19 09:19:58.322  INFO 4476 --- [main] com.gyee.alarm.AlarmWeb                  : Starting AlarmWeb on sltc with PID 4476 (E:\idea_workspace\alarmNew\alarm-web\target\classes started by shilin in E:\idea_workspace\alarmNew)
+2023-09-19 09:19:58.324  INFO 4476 --- [main] com.gyee.alarm.AlarmWeb                  : The following profiles are active: jn
+2023-09-19 09:19:59.448  INFO 4476 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
+2023-09-19 09:19:59.450  INFO 4476 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2023-09-19 09:19:59.529  INFO 4476 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 67ms. Found 0 Redis repository interfaces.
+2023-09-19 09:19:59.823  INFO 4476 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:19:59.827  INFO 4476 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$f377f60b] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:19:59.841  INFO 4476 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2023-09-19 09:20:00.046  INFO 4476 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 6015 (http)
+2023-09-19 09:20:00.054  INFO 4476 --- [main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
+2023-09-19 09:20:00.055  INFO 4476 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.29]
+2023-09-19 09:20:00.150  INFO 4476 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
+2023-09-19 09:20:00.150  INFO 4476 --- [main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1666 ms
+2023-09-19 09:20:00.372  INFO 4476 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1,master} inited
+2023-09-19 09:20:00.373 ERROR 4476 --- [main] com.alibaba.druid.pool.DruidDataSource   : testWhileIdle is true, validationQuery not set
+2023-09-19 09:20:00.373  INFO 4476 --- [main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2,slave} inited
+2023-09-19 09:20:00.374  INFO 4476 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [slave] success
+2023-09-19 09:20:00.374  INFO 4476 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource - add a datasource named [master] success
+2023-09-19 09:20:00.374  INFO 4476 --- [main] c.b.d.d.DynamicRoutingDataSource         : dynamic-datasource initial loaded [2] datasource,primary datasource named [master]
+2023-09-19 09:20:01.748 ERROR 4476 --- [main] c.b.m.core.MybatisConfiguration          : mapper[com.gyee.alarm.mapper.auto.AlarmTsMapper.createTable] is ignored, because it exists, maybe from xml file
+2023-09-19 09:20:04.472  INFO 4476 --- [main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
+2023-09-19 09:20:04.521  INFO 4476 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
+2023-09-19 09:20:04.611  INFO 4476 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
+2023-09-19 09:20:05.133  INFO 4476 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
+2023-09-19 09:20:05.143  INFO 4476 --- [main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
+2023-09-19 09:20:05.170  INFO 4476 --- [main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references
+2023-09-19 09:20:05.301  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_1
+2023-09-19 09:20:05.304  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_1
+2023-09-19 09:20:05.307  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: deleteAlertruleUsingDELETE_2
+2023-09-19 09:20:05.310  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importExcelUsingPOST_1
+2023-09-19 09:20:05.310  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: importTemplateUsingGET_1
+2023-09-19 09:20:05.314  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_1
+2023-09-19 09:20:05.328  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: saveAndUpdateAlertruleUsingPOST_2
+2023-09-19 09:20:05.399  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: findListUsingGET_1
+2023-09-19 09:20:05.411  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getAllDeviceStructureUsingGET_1
+2023-09-19 09:20:05.427  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: getDeviceStructureTreeUsingGET_1
+2023-09-19 09:20:05.431  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_2
+2023-09-19 09:20:05.433  INFO 4476 --- [main] .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named: queryByPageUsingGET_3
+2023-09-19 09:20:05.491  INFO 4476 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 6015 (http) with context path ''
+2023-09-19 09:20:05.493  INFO 4476 --- [main] com.gyee.alarm.AlarmWeb                  : Started AlarmWeb in 7.478 seconds (JVM running for 8.618)
+2023-09-19 09:20:05.496  INFO 4476 --- [main] com.gyee.alarm.init.CacheContext         : 缓存开始------------------------------------------------------------
+2023-09-19 09:20:05.776  INFO 4476 --- [main] com.gyee.alarm.init.CacheContext         : SXJ_KGDL_DJY_FDC_STA------------------20
+2023-09-19 09:20:06.704  INFO 4476 --- [main] io.lettuce.core.EpollProvider            : Starting without optional epoll library
+2023-09-19 09:20:06.706  INFO 4476 --- [main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library
+2023-09-19 09:20:08.324  INFO 4476 --- [main] com.gyee.alarm.init.CacheContext         : 3227
+2023-09-19 09:20:38.305  INFO 4476 --- [main] com.gyee.alarm.init.CacheContext         : 缓存结束------------------------------------------------------------
+2023-09-19 09:20:38.308  INFO 4476 --- [main] com.gyee.alarm.AlarmWeb                  : 
+-------------------------------------------------------------------
+	智能报警系统启动成功,访问路径如下:
+	本地路径: 		http://localhost:6015/
+	网络地址: 		http://192.168.56.1:6015/
+	API文档: 		http://192.168.56.1:6015//swagger-ui.html
+-----------------------------------------------------------------------
+2023-09-19 09:20:38.549  INFO 4476 --- [RMI TCP Connection(1)-192.168.56.1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
+2023-09-19 09:20:38.550  INFO 4476 --- [RMI TCP Connection(1)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
+2023-09-19 09:20:38.561  INFO 4476 --- [RMI TCP Connection(1)-192.168.56.1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 11 ms

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


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


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


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


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


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