Browse Source

报警统计功能优化

shilin 1 year ago
parent
commit
f3f176385f
32 changed files with 4195 additions and 83874 deletions
  1. 1 1
      alarm-custom/src/main/java/com/gyee/alarm/service/auto/impl/AlarmTsServiceImpl.java
  2. 42 8
      alarm-custom/src/main/java/com/gyee/alarm/task/thread/AlarmThreadPool.java
  3. 126 0
      alarm-scanner/src/main/java/com/gyee/alarm/mapper/auto/AlarmTsMapper.java
  4. 18 0
      alarm-scanner/src/main/java/com/gyee/alarm/model/auto/AlarmTs.java
  5. 19 0
      alarm-scanner/src/main/java/com/gyee/alarm/model/vo/AlarmSimpleVo.java
  6. 91 3
      alarm-scanner/src/main/java/com/gyee/alarm/model/vo/AlarmTag.java
  7. 16 0
      alarm-scanner/src/main/java/com/gyee/alarm/model/vo/AlarmTsVo.java
  8. 5 3
      alarm-scanner/src/main/java/com/gyee/alarm/service/AlarmScannerService.java
  9. 65 0
      alarm-scanner/src/main/java/com/gyee/alarm/service/auto/IAlarmTsService.java
  10. 179 0
      alarm-scanner/src/main/java/com/gyee/alarm/service/auto/impl/AlarmTsServiceImpl.java
  11. 5 2
      alarm-scanner/src/main/java/com/gyee/alarm/task/thread/AlarmThread.java
  12. 233 139
      alarm-scanner/src/main/java/com/gyee/alarm/task/thread/AlarmThreadPool.java
  13. 2 2
      alarm-scanner/src/main/resources/application-wt.yml
  14. 1 1
      alarm-scanner/src/main/resources/application.yml
  15. 4 1
      alarm-service/src/main/java/com/gyee/alarm/init/CacheContext.java
  16. 1 1
      alarm-service/src/main/java/com/gyee/alarm/mapper/auto/AlarmTsMapper.java
  17. 2 2
      alarm-service/src/main/java/com/gyee/alarm/model/vo/AlarmSimpleVo.java
  18. 16 16
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmBtService.java
  19. 15 12
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmCtService.java
  20. 16 16
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmInService.java
  21. 41 67
      alarm-service/src/main/java/com/gyee/alarm/service/AlarmWtService.java
  22. 1 1
      alarm-service/src/main/java/com/gyee/alarm/service/auto/impl/AlarmTsServiceImpl.java
  23. 6 5
      alarm-service/src/main/java/com/gyee/alarm/websocket/WebSocket.java
  24. 6 6
      alarm-service/src/test/java/com/gyee/AppTest.java
  25. 1 1
      alarm-web/src/main/java/com/gyee/alarm/mapper/auto/ProBasicDeviceFaultModeMapper.java
  26. 1 1
      alarm-web/src/main/java/com/gyee/alarm/model/vo/AlarmVo.java
  27. 3244 83548
      log/ota.log
  28. BIN
      log/ota.log.2023-09-18.0.gz
  29. BIN
      log/ota.log.2023-09-19.0.gz
  30. BIN
      log/ota.log.2023-09-25.7.gz
  31. BIN
      log/ota.log.2023-09-25.8.gz
  32. 38 38
      src/test/java/com/gyee/AppTest.java

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

@@ -166,7 +166,7 @@ public class AlarmTsServiceImpl extends ServiceImpl<AlarmTsMapper, AlarmTs> impl
         if(StringUtils.notEmp(superTableName) && StringUtils.notEmp(tbnames))
         {
             StringBuilder sb= new StringBuilder();
-            sb.append(" select last_row(*),tbname from ")
+            sb.append(" select last_row(ts) as ts, last_row(val) as val, last_row(confirmed) as confirmed, last_row(endts) as endts, last_row(timelong) as timelong,tbname from ")
             .append(superTableName).append(" where tbname in( ");
             sb.append(tbnames)
                     .append(" ) group by tbname");

+ 42 - 8
alarm-custom/src/main/java/com/gyee/alarm/task/thread/AlarmThreadPool.java

@@ -66,20 +66,54 @@ public class AlarmThreadPool implements Callable<Integer>, Serializable {
             List<AlarmTag> saveAlarmTags =   new CopyOnWriteArrayList<>();
             List<AlarmTag> updateAlarmTags  = new CopyOnWriteArrayList<>();
 
+//            StringBuilder sb = new StringBuilder();
+//            Map<String, AlarmSimpleVo> map = new ConcurrentHashMap<>();
+//            for (AlarmCustomTag alarm : alarmVoList) {
+//                sb.append("'").append(alarm.getId().toLowerCase()).append("',");
+//            }
+//            String ids = null;
+//            if (sb.length() > 0) {
+//                ids = sb.substring(0, sb.length() - 1);
+//            }
+//            List<AlarmSimpleVo> alarmls =  new CopyOnWriteArrayList<>();
+//            if (null != ids) {
+//                alarmls = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.CT.getCode(), ids);
+//            }
+//
+//            if (!alarmls.isEmpty()) {
+//                for (AlarmSimpleVo vo : alarmls) {
+//                    map.put(vo.getTbName().toLowerCase(), vo);
+//                }
+//            }
             StringBuilder sb = new StringBuilder();
-            Map<String, AlarmSimpleVo> map = new ConcurrentHashMap<>();
+
+
+            List<AlarmSimpleVo> alarmls = new CopyOnWriteArrayList<>();
+           int times = 0;
             for (AlarmCustomTag alarm : alarmVoList) {
+
                 sb.append("'").append(alarm.getId().toLowerCase()).append("',");
+                times++;
+                if (times == 300) {
+                    String ids =  sb.substring(0, sb.length() - 1);
+                    List<AlarmSimpleVo>  templs=new ArrayList<>();
+                    templs =  alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.CT.getCode(), ids);
+                    alarmls.addAll(templs);
+                    sb.setLength(0);
+                    times = 0;
+                }
             }
-            String ids = null;
-            if (sb.length() > 0) {
-                ids = sb.substring(0, sb.length() - 1);
-            }
-            List<AlarmSimpleVo> alarmls =  new CopyOnWriteArrayList<>();
-            if (null != ids) {
-                alarmls = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.CT.getCode(), ids);
+            if (sb.length()>0) {
+
+                String ids =  sb.substring(0, sb.length() - 1);
+                List<AlarmSimpleVo>  templs=new ArrayList<>();
+                templs =  alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.CT.getCode(), ids);
+                alarmls.addAll(templs);
             }
 
+            Map<String, AlarmSimpleVo> map = new ConcurrentHashMap<>();
+
+
             if (!alarmls.isEmpty()) {
                 for (AlarmSimpleVo vo : alarmls) {
                     map.put(vo.getTbName().toLowerCase(), vo);

+ 126 - 0
alarm-scanner/src/main/java/com/gyee/alarm/mapper/auto/AlarmTsMapper.java

@@ -0,0 +1,126 @@
+package com.gyee.alarm.mapper.auto;
+
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gyee.alarm.model.auto.AlarmTs;
+import com.gyee.alarm.model.vo.AlarmSimpleVo;
+import com.gyee.alarm.model.vo.AlarmTsVo;
+import com.gyee.alarm.model.vo.AlarmVo;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
+
+
+@DS("slave")
+public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
+
+//STABLE 超级表
+// ts TIMESTAMP, 时间戳
+//val INT,触发报警值
+//confirmed BOOL,是否确认
+//endts TIMESTAMP, 报警结束时间戳
+//timeLong DOUBLE 报警时长
+
+//TAGS 标签
+//alarmid NCHAR(100), 报警id
+//alarmtype NCHAR(50), 报警类型
+//characteristic NCHAR(50),停机特性
+//components NCHAR(50),部件
+//description NCHAR(500),报警描述
+//deviceid NCHAR(50),设备id
+//devicename NCHAR(70),设备名称
+//devicetype NCHAR(50),设备类型
+//enabled BOOL,是否启用
+//lineid NCHAR(50),线路id
+//linename NCHAR(70),线路名称
+//modelId NCHAR(50),型号编号
+//projectid NCHAR(50),项目编号
+//projectname NCHAR(70),项目名称
+//rank INT,报警等级
+//resettable BOOL,是否可以复位
+//stationid NCHAR(50),场站编号
+//stationname NCHAR(70),场站名称
+//subcomponents NCHAR(50),子部件
+//suffix NCHAR(50),后缀描述
+//tagid NCHAR(100),报警触发测点
+//triggertype INT,触发条件
+//uniformcode NCHAR(50)统一编码
+
+    @Update("CREATE STABLE if not exists ${superTableName} (ts TIMESTAMP,val INT,confirmed BOOL,endts TIMESTAMP,timeLong DOUBLE) " +
+            "TAGS (alarmid NCHAR(100),alarmtype NCHAR(50),characteristic NCHAR(50)," +
+            "components NCHAR(50),description NCHAR(500),deviceid NCHAR(50),devicename NCHAR(70)," +
+            "devicetype NCHAR(50),enabled BOOL,lineid NCHAR(50),linename NCHAR(70),modelId NCHAR(50),projectid NCHAR(50)," +
+            "projectname NCHAR(70),rank INT,resettable BOOL,stationid NCHAR(50),stationname NCHAR(70),subcomponents NCHAR(50)," +
+            "suffix NCHAR(50),tagid NCHAR(100),triggertype INT,uniformcode NCHAR(50),name NCHAR(100),nemCode NCHAR(50),faultCause NCHAR(1000),resolvent NCHAR(1000));")
+    int createAlarmSuperTable(@Param("superTableName") String superTableName);
+
+
+
+    @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}" +
+            " )")
+    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,
+                    @Param("deviceid") String deviceid, @Param("devicename") String devicename,
+                    @Param("devicetype") String devicetype, @Param("enabled") Boolean enabled,
+                    @Param("lineid") String lineid, @Param("linename") String linename,
+                    @Param("modelId") String modelId, @Param("projectid") String projectid,
+                    @Param("projectname") String projectname, @Param("rank") Integer rank,
+                    @Param("resettable") Boolean resettable, @Param("stationid") String stationid,
+                    @Param("stationname") String stationname, @Param("subcomponents") String subcomponents,
+                    @Param("suffix") String suffix, @Param("tagid") String tagid,
+                    @Param("triggertype") Integer triggertype, @Param("uniformcode") String uniformcode, @Param("superTableName") String superTableName,
+                    @Param("name") String name, @Param("nemCode") String nemCode, @Param("faultCause") String faultCause, @Param("resolvent") String resolvent
+
+                    );
+
+
+
+    @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}" +
+            ")")
+    int createTable(AlarmVo vo);
+
+    @Update("drop table if exists ${superTableName}")
+    void dropSuperTable(@Param("superTableName")String superTableName);
+
+    @Insert("insert into ${tbName} (ts, val,oval,confirmed) values(#{ts}, #{val}, #{oval}, #{confirmed})")
+    int insertOne(AlarmTs one);
+
+
+
+    @Insert("${sql}")
+    int insertList(@Param("sql") String sql);
+
+    @Select("select last_row(*),alarmid,alarmtype,characteristic,components,confirmed,description,deviceid,devicename,devicetype,enabled,lineid,linename," +
+            "modelId,projectid,projectname,rank,resettable,stationid,stationname,subcomponents,suffix,tagid,triggertype,uniformcode from #{stbaleName} group by tbname")
+    List<AlarmVo> findTags(@Param("stbaleName") String stbaleName);
+
+
+    @Select("select deviceid,description,count(*) as val,sum(timeLong) as timeLong from #{superTableName} where ts>=#{begin} and ts<=#{end}  stationid=#{stationid}  group by description,deviceid  ")
+    List<AlarmTsVo> selectByGroup(@Param("superTableName") String superTableName, @Param("stationid") String stationid, @Param("begin")long begin, @Param("end") long end);
+
+
+    @Select("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 from #{tbName}   limit #{limit} offset #{offset} ")
+    List<AlarmVo> selectByTbName(@Param("tbName") String tbName,@Param("limit") long limit,@Param("offset") long offset);
+
+
+//    @Select("select last_row(*),tbname from #{superTableName} where tbname in( #{tbnames} ) group by tbname")
+//List<AlarmSimpleVo> selectLastRowByTbname(@Param("superTableName") String superTableName, @Param("tbnames") String tbnames);
+    @Select("${sql}")
+    List<AlarmSimpleVo> selectLastRowByTbname(@Param("sql") String sql);
+
+}

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

@@ -0,0 +1,18 @@
+package com.gyee.alarm.model.auto;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.sql.Timestamp;
+
+@Data
+@ToString
+public class AlarmTs {
+
+    private Timestamp ts;
+    private Integer val;
+    private Integer oval;
+    private Boolean confirmed;
+    private Timestamp endts;
+    private String tbName;
+}

+ 19 - 0
alarm-scanner/src/main/java/com/gyee/alarm/model/vo/AlarmSimpleVo.java

@@ -0,0 +1,19 @@
+package com.gyee.alarm.model.vo;
+
+
+import lombok.Data;
+
+import java.sql.Timestamp;
+
+@Data
+public class AlarmSimpleVo {
+
+    private  String tbName;
+    private Timestamp ts;
+    private Integer val;
+    private Integer oval;
+    private  Boolean confirmed;
+    private Timestamp endts;
+    private Double timelong;
+
+}

+ 91 - 3
alarm-scanner/src/main/java/com/gyee/alarm/model/vo/AlarmTag.java

@@ -50,6 +50,46 @@ public class AlarmTag {
      */
     private Double timeLong;
     /**
+     * 报警描述
+     */
+    private String description;
+
+
+    private  Boolean confirmed;
+
+    private String superTalbe;
+
+    /**
+     * 故障原因
+     */
+    private String faultCause;
+    /**
+     * 类型
+     */
+    private String characteristic;
+    private String alarmId;
+    private String deviceId;
+    /**
+     * 解决方法
+     */
+    private String resolvent;
+
+    /**
+     * 报警类型 /自定义报警 custom,风机 windturbine,场站 station,升压站 booststation
+     */
+    private String alarmType;
+
+    /**
+     * 设备类型,场站 station,风机 windturbine,升压站 booststation
+     */
+    private String deviceType;
+
+    private Boolean isClose;
+
+    private String wpName;
+
+    private String wpId;
+    /**
      * 更新并检测是否触发报警
      */
     public synchronized Boolean updateAndCheck(PointData pointData) {
@@ -93,11 +133,59 @@ public class AlarmTag {
         }else {
             if (oval.intValue() == triggerType) {
                 val=1.0;
-            } else if (oval == 0) {
+            }else {
+                val=2.0;
+            }
+//            else if (oval == 0) {
+//                val=0.0;
+//            }
+//            else {
+//                return false;
+//            }
+        }
+
+        return true;
+    }
+
+
+    public synchronized Boolean updateAndCheckNoInfo(PointData pointData) {
+
+
+        ts = pointData.getPointTime();
+        oval = pointData.getPointValueInDouble();
+        endts= pointData.getPointTime();
+        val=0.0;
+
+        if(triggerType==-1)
+        {
+            val=1.0;
+        }else  if(triggerType==0)
+        {
+            if (oval == 0)
+            {
+                val=1.0;
+            }else
+            {
+                val=0.0;
+
+            }
+        }else  if(triggerType==1)
+        {
+            if (oval == 1)
+            {
+                val=1.0;
+            }else
+            {
                 val=0.0;
-            } else {
-                return false;
+
             }
+        }else {
+            if (oval.intValue() == triggerType) {
+                val=1.0;
+            }else {
+                val=2.0;
+            }
+
         }
 
         return true;

+ 16 - 0
alarm-scanner/src/main/java/com/gyee/alarm/model/vo/AlarmTsVo.java

@@ -0,0 +1,16 @@
+package com.gyee.alarm.model.vo;
+
+
+import lombok.Data;
+
+@Data
+public class AlarmTsVo {
+
+
+    private String description;
+    private String deviceid;
+    private Integer val;
+
+    private Double timeLong;
+
+}

+ 5 - 3
alarm-scanner/src/main/java/com/gyee/alarm/service/AlarmScannerService.java

@@ -5,6 +5,7 @@ import com.gyee.alarm.feigns.IAlarmService;
 
 import com.gyee.alarm.model.vo.AlarmSuperTalbeType;
 import com.gyee.alarm.model.vo.AlarmTag;
+import com.gyee.alarm.service.auto.IAlarmTsService;
 import com.gyee.alarm.task.thread.AlarmThread;
 import com.gyee.alarm.util.realtimesource.IEdosUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -38,7 +39,8 @@ public class AlarmScannerService {
     private IEdosUtil edosUtil;
     @Resource
     private IAlarmService alarmService;
-
+    @Resource
+    private  IAlarmTsService alarmTsService;
     private List<AlarmTag>  alarmTags=new CopyOnWriteArrayList<>();
     @Resource
     @Qualifier(value = "taskExecutor")
@@ -91,14 +93,14 @@ public class AlarmScannerService {
             for (int i = 0; i < alarmTags.size(); i++) {
                 alarmls.add(alarmTags.get(i));
                 if (i != 0 && (i+1) % listNumber == 0) {
-                    new Thread(new AlarmThread(executor, edosUtil, alarmService, alarmls, interval, String.valueOf(len), readRows, alarmType,countDownLatch)).start();
+                    new Thread(new AlarmThread(executor, edosUtil, alarmService, alarmls, interval, String.valueOf(len), readRows, alarmType,countDownLatch,alarmTsService)).start();
                     alarmls = new ArrayList<>();
                     len++;
                 }
             }
 
             if (!alarmls.isEmpty()) {
-                new Thread(new AlarmThread(executor, edosUtil, alarmService, alarmls, interval, String.valueOf(len), readRows, alarmType,countDownLatch)).start();
+                new Thread(new AlarmThread(executor, edosUtil, alarmService, alarmls, interval, String.valueOf(len), readRows, alarmType,countDownLatch,alarmTsService)).start();
 
             }
 

+ 65 - 0
alarm-scanner/src/main/java/com/gyee/alarm/service/auto/IAlarmTsService.java

@@ -0,0 +1,65 @@
+package com.gyee.alarm.service.auto;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gyee.alarm.model.auto.AlarmTs;
+import com.gyee.alarm.model.vo.AlarmSimpleVo;
+import com.gyee.alarm.model.vo.AlarmTag;
+import com.gyee.alarm.model.vo.AlarmTsVo;
+import com.gyee.alarm.model.vo.AlarmVo;
+
+import java.util.List;
+
+
+public interface IAlarmTsService extends IService<AlarmTs> {
+
+    public void createSuperTable(String type);
+
+
+    public void dropSuperTable(String type);
+
+
+    public int createTable(AlarmVo vo) ;
+
+    public int createTable(String tbName, String alarmid, String alarmtype,
+                           String characteristic, String components,
+                           String description,
+                           String deviceid, String devicename,
+                           String devicetype, Boolean enabled,
+                           String lineid, String linename,
+                           String modelId, String projectid,
+                           String projectname, Integer rank,
+                           Boolean resettable, String stationid,
+                           String stationname, String subcomponents,
+                           String suffix, String tagid,
+                           Integer triggertype, String uniformcode,String superTableName,
+                           String name,String nemCode, String faultCause, String resolvent
+
+    );
+
+
+
+    public int insertOne(AlarmTs one);
+
+
+
+
+    public void insertList(List<AlarmTag>  alarmTags ) ;
+
+    public void createSql(List<AlarmTag>  alarmTags )  ;
+
+
+    public List<AlarmVo> findTags(String stbaleName);
+
+    public List<AlarmTsVo> selectByGroup(String superTableName, String stationid, long begin, long end);
+
+
+    public   List<AlarmVo> selectByTbName(String tbName,long limit,long offset);
+
+
+
+    public List<AlarmSimpleVo> selectLastRowByTbname(String superTableName, String tbnames);
+
+
+
+}
+

+ 179 - 0
alarm-scanner/src/main/java/com/gyee/alarm/service/auto/impl/AlarmTsServiceImpl.java

@@ -0,0 +1,179 @@
+package com.gyee.alarm.service.auto.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gyee.alarm.mapper.auto.AlarmTsMapper;
+import com.gyee.alarm.model.auto.AlarmTs;
+import com.gyee.alarm.model.vo.AlarmSimpleVo;
+import com.gyee.alarm.model.vo.AlarmTag;
+import com.gyee.alarm.model.vo.AlarmTsVo;
+import com.gyee.alarm.model.vo.AlarmVo;
+import com.gyee.alarm.service.auto.IAlarmTsService;
+import com.gyee.alarm.util.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Service
+public class AlarmTsServiceImpl extends ServiceImpl<AlarmTsMapper, AlarmTs> implements IAlarmTsService {
+
+    @Resource
+    private AlarmTsMapper alarmTsMapper;
+
+
+
+    public void createSuperTable(String type) {
+
+        alarmTsMapper.createAlarmSuperTable(type);
+
+    }
+
+
+    public void dropSuperTable(String type) {
+
+        alarmTsMapper.dropSuperTable(type);
+
+    }
+
+    public int createTable(String tbName, String alarmid, String alarmtype,
+                           String characteristic, String components,
+                           String description,
+                           String deviceid, String devicename,
+                           String devicetype, Boolean enabled,
+                           String lineid, String linename,
+                           String modelId, String projectid,
+                           String projectname, Integer rank,
+                           Boolean resettable, String stationid,
+                           String stationname, String subcomponents,
+                           String suffix, String tagid,
+                           Integer triggertype, String uniformcode, String superTableName,
+                          String name,String nemCode, String faultCause, String resolvent
+
+
+    ) {
+        return alarmTsMapper.createTable(tbName, alarmid, alarmtype,
+                characteristic, components,
+                description,
+                deviceid, devicename,
+                devicetype, enabled,
+                lineid, linename,
+                modelId, projectid,
+                projectname, rank,
+                resettable, stationid,
+                stationname, subcomponents,
+                suffix, tagid,
+                triggertype, uniformcode,superTableName,   name, nemCode,  faultCause,  resolvent);
+    }
+
+
+    public int createTable(AlarmVo vo) {
+        return alarmTsMapper.createTable(vo);
+    }
+
+
+
+    public int insertOne(AlarmTs one) {
+        return alarmTsMapper.insertOne(one);
+    }
+
+
+
+    public void insertList(List<AlarmTag>  alarmTags )  {
+
+        if(StringUtils.notEmp(alarmTags) && !alarmTags.isEmpty())
+        {
+
+            createSql(alarmTags);
+        }
+
+
+    }
+
+    public void createSql(List<AlarmTag>  alarmTags )   {
+
+        StringBuilder sb = new StringBuilder("INSERT INTO ");
+
+        int i=0;
+        for (AlarmTag tag:alarmTags) {
+
+            String tableName = tag.getId();
+            StringBuilder sub_sb = new StringBuilder(tableName);
+
+            sub_sb.append( " values ");
+            sub_sb.append(" (");
+            sub_sb.append(tag.getTs()).append(",").append(tag.getVal().intValue()).append(",").append(tag.getConfirmed()).append(",")
+                    .append(tag.getEndts()).append(",").append(tag.getTimeLong());
+            sub_sb.append(" ) ");
+            i++;
+            if (i==100) {
+                alarmTsMapper.insertList(String.valueOf(sb));
+                sb = new StringBuilder("INSERT INTO ");
+                i=0;
+            }
+            sb.append(sub_sb);
+
+        }
+
+        if(i!=0)
+        {
+            alarmTsMapper.insertList(String.valueOf(sb));
+        }
+
+    }
+
+
+
+
+
+    public List<AlarmVo> findTags(String stbaleName)
+    {
+        List<AlarmVo> ls=new ArrayList<>();
+        if(StringUtils.notEmp(stbaleName))
+        {
+           ls= alarmTsMapper.findTags(stbaleName);
+        }
+
+        return ls;
+    }
+
+    public List<AlarmTsVo> selectByGroup(String superTableName, String stationid, long begin, long end)
+    {
+        List<AlarmTsVo> ls=new ArrayList<>();
+        if(StringUtils.notEmp(superTableName) && StringUtils.notEmp(stationid) && StringUtils.notEmp(begin) && StringUtils.notEmp(end))
+        {
+            ls= alarmTsMapper.selectByGroup(superTableName, stationid, begin, end);
+        }
+
+        return ls;
+    }
+
+
+    public   List<AlarmVo> selectByTbName(String tbName,long limit,long offset)
+    {
+        List<AlarmVo> ls=new ArrayList<>();
+        if(StringUtils.notEmp(tbName) && StringUtils.notEmp(limit) && StringUtils.notEmp(offset))
+        {
+            ls= alarmTsMapper.selectByTbName(tbName, limit, offset);
+        }
+
+        return ls;
+    }
+
+    public List<AlarmSimpleVo> selectLastRowByTbname(String superTableName, String tbnames){
+        List<AlarmSimpleVo> ls=new ArrayList<>();
+        if(StringUtils.notEmp(superTableName) && StringUtils.notEmp(tbnames))
+        {
+            StringBuilder sb= new StringBuilder();
+            sb.append(" select last_row(ts) as ts, last_row(val) as val, last_row(confirmed) as confirmed, last_row(endts) as endts, last_row(timelong) as timelong,tbname from ")
+            .append(superTableName).append(" where tbname in( ");
+            sb.append(tbnames)
+                    .append(" ) group by tbname");
+
+            ls= alarmTsMapper.selectLastRowByTbname(String.valueOf(sb));
+        }
+
+        return ls;
+    }
+}

+ 5 - 2
alarm-scanner/src/main/java/com/gyee/alarm/task/thread/AlarmThread.java

@@ -3,6 +3,7 @@ package com.gyee.alarm.task.thread;
 import com.gyee.alarm.feigns.IAlarmService;
 import com.gyee.alarm.model.vo.AlarmTag;
 import com.gyee.alarm.model.vo.AlarmVo;
+import com.gyee.alarm.service.auto.IAlarmTsService;
 import com.gyee.alarm.util.realtimesource.IEdosUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,8 +32,9 @@ public class AlarmThread implements Runnable {
     private String alarmType;
     private boolean serverStarted=true;
 
+    private IAlarmTsService alarmTsService;
     private CountDownLatch countDownLatch;
-    public AlarmThread(Executor executor, IEdosUtil edosUtil, IAlarmService alarmService, List<AlarmTag> alarmVoList, Integer interval, String str,Integer readRows,String alarmType,CountDownLatch countDownLatch) {
+    public AlarmThread(Executor executor, IEdosUtil edosUtil, IAlarmService alarmService, List<AlarmTag> alarmVoList, Integer interval, String str,Integer readRows,String alarmType,CountDownLatch countDownLatch,IAlarmTsService alarmTsService) {
         this.executor = executor;
         this.edosUtil = edosUtil;
         this.alarmService = alarmService;
@@ -42,6 +44,7 @@ public class AlarmThread implements Runnable {
         this.readRows = readRows;
         this.alarmType=alarmType;
         this.countDownLatch=countDownLatch;
+        this.alarmTsService = alarmTsService;
     }
 
 
@@ -52,7 +55,7 @@ public class AlarmThread implements Runnable {
         String task = "task@ " + str;
         logger.info("创建任务并提交到线程池中:" + task);
         FutureTask<String> futureTask = new FutureTask<>(new AlarmThreadPool(task,
-				edosUtil, alarmService,  alarmVoList,interval,str,readRows,alarmType));
+				edosUtil, alarmService,  alarmVoList,interval,str,readRows,alarmType,alarmTsService));
 
         executor.execute(futureTask);
 

+ 233 - 139
alarm-scanner/src/main/java/com/gyee/alarm/task/thread/AlarmThreadPool.java

@@ -2,8 +2,8 @@ package com.gyee.alarm.task.thread;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.gyee.alarm.feigns.IAlarmService;
-import com.gyee.alarm.model.vo.AlarmTag;
-import com.gyee.alarm.model.vo.AlarmVo;
+import com.gyee.alarm.model.vo.*;
+import com.gyee.alarm.service.auto.IAlarmTsService;
 import com.gyee.common.contant.ContantXk;
 import com.gyee.common.model.PointData;
 import com.gyee.common.model.StringUtils;
@@ -21,179 +21,273 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicInteger;
 
 public class AlarmThreadPool implements Callable<String>, Serializable {
 
-	private Logger logger = LoggerFactory.getLogger(this.getClass());
+    private Logger logger = LoggerFactory.getLogger(this.getClass());
 
-	private static final long serialVersionUID = 0;
+    private static final long serialVersionUID = 0;
 
-	// 保存任务所需要的数据
+    // 保存任务所需要的数据
 
-	private Object threadPoolTaskData;
+    private Object threadPoolTaskData;
 
-	private IEdosUtil edosUtil;
+    private IEdosUtil edosUtil;
 
-	private IAlarmService alarmService;
+    private IAlarmService alarmService;
 
-	private List<AlarmTag> alarmVoList;
-	private String str;
+    private List<AlarmTag> alarmVoList;
+    private String str;
 
-	private Integer interval;
-	private String alarmType;
-	private Integer readRows;
-	public AlarmThreadPool(Object tasks, IEdosUtil edosUtil, IAlarmService alarmService, List<AlarmTag> alarmVoList,
-						   Integer interval, String str,Integer readRows, String alarmType
-	) {
+    private Integer interval;
+    private String alarmType;
+    private Integer readRows;
+    private IAlarmTsService alarmTsService;
 
-		this.threadPoolTaskData = tasks;
-		this.edosUtil = edosUtil;
-		this.alarmService = alarmService;
-		this.alarmVoList = alarmVoList;
-		this.interval = interval;
-		this.str = str;
-		this.readRows = readRows;
-		this.alarmType=alarmType;
-	}
+    public AlarmThreadPool(Object tasks, IEdosUtil edosUtil, IAlarmService alarmService, List<AlarmTag> alarmVoList,
+                           Integer interval, String str, Integer readRows, String alarmType, IAlarmTsService alarmTsService
+    ) {
 
-	public synchronized String call() throws Exception {
+        this.threadPoolTaskData = tasks;
+        this.edosUtil = edosUtil;
+        this.alarmService = alarmService;
+        this.alarmVoList = alarmVoList;
+        this.interval = interval;
+        this.str = str;
+        this.readRows = readRows;
+        this.alarmType = alarmType;
+        this.alarmTsService = alarmTsService;
+    }
 
-		String result = "";
+    public synchronized String call() throws Exception {
 
-		try {
+        String result = "";
+
+        try {
 
 //			while (true)
 //			{
-				List<String>  ls=new ArrayList<>();
-				List<PointData> values=new ArrayList<>();
-
-
-
-				int times=0;
-				for(AlarmTag 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);
-				}
+            List<String> ls = new ArrayList<>();
+            List<PointData> values = new ArrayList<>();
+
+
+            int times = 0;
+            for (AlarmTag 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);
+            }
+
+            StringBuilder sb = new StringBuilder();
+
+
+            List<AlarmSimpleVo> alarmls = new CopyOnWriteArrayList<>();
+            times = 0;
+            for (AlarmTag alarm : alarmVoList) {
+
+                sb.append("'").append(alarm.getId().toLowerCase()).append("',");
+                times++;
+                if (times == 300) {
+                    String ids =  sb.substring(0, sb.length() - 1);
+                    List<AlarmSimpleVo>  templs=new ArrayList<>();
+                    if(alarm.getAlarmType().equals(AlarmTypeValue.BT.getCode()))
+                    {
+                       templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.BT.getCode(), ids);
+                    }else if(alarm.getAlarmType().equals(AlarmTypeValue.WT.getCode()))
+                    {
+                       templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(), ids);
+                    }else if(alarm.getAlarmType().equals(AlarmTypeValue.IN.getCode()))
+                    {
+                        templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(), ids);
+                    }
+                    alarmls.addAll(templs);
+                    sb.setLength(0);
+                    times = 0;
+                }
+            }
+            if (sb.length()>0) {
+
+                String ids =  sb.substring(0, sb.length() - 1);
+                List<AlarmSimpleVo>  templs=new ArrayList<>();
+                if(alarmVoList.get(0).getAlarmType().equals(AlarmTypeValue.BT.getCode()))
+                {
+                    templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.BT.getCode(), ids);
+                }else if(alarmVoList.get(0).getAlarmType().equals(AlarmTypeValue.WT.getCode()))
+                {
+                    templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(), ids);
+                }else if(alarmVoList.get(0).getAlarmType().equals(AlarmTypeValue.IN.getCode()))
+                {
+                    templs = alarmTsService.selectLastRowByTbname(AlarmSuperTalbeType.WT.getCode(), ids);
+                }
+                alarmls.addAll(templs);
+            }
+
+            Map<String, AlarmSimpleVo> map = new ConcurrentHashMap<>();
+
+
+            if (!alarmls.isEmpty()) {
+                for (AlarmSimpleVo vo : alarmls) {
+                    map.put(vo.getTbName().toLowerCase(), vo);
+                }
+            }
 
 //				System.out.println(values.size()+"____"+ alarmVoList.size());
-				int alarmNumber=0;
-				if(values.size() == alarmVoList.size())
-				{
-					List<AlarmTag>  saveAlarmTags=new ArrayList<>();
+            int alarmNumber = 0;
+            if (values.size() == alarmVoList.size()) {
+                List<AlarmTag> saveAlarmTags = new ArrayList<>();
 
-					List<AlarmTag>  updateAlarmTags=new ArrayList<>();
+                List<AlarmTag> updateAlarmTags = new ArrayList<>();
 
-					for(int i=0;i<alarmVoList.size();i++)
-					{
+                for (int i = 0; i < alarmVoList.size(); i++) {
 
-						AlarmTag vo=alarmVoList.get(i);
+                    AlarmTag vo = alarmVoList.get(i);
 
-						PointData value=values.get(i);
+//                    if(vo.getTagId().equals("FD-DJY-YuanDong.140623F0221MDQ02GS006DB0111SW09RAW00"))
+//                    {
+//                        System.out.println("");
+//                    }
 
-//						if(vo.getTagId().equals("FD-DJY-YuanDong.140623F0221MDQ02GS006DB0111SW09RAW00"))
-//						{
-//							System.out.println("");
-//						}
-						if(vo.updateAndCheck(value))
-						{
-							if(vo.getVal()==1)
-							{
-								AlarmTag po=new AlarmTag();
-
-								po.setId(vo.getId());
-								po.setTs(vo.getTs());
-								po.setEndts(po.getEndts());
-								po.setVal(vo.getVal());
-								po.setOval(vo.getOval());
-								po.setTriggerType(vo.getTriggerType());
-								po.setTagId(vo.getTagId());
-								po.setRank(vo.getRank());
-								po.setTimeLong(0.0);
-								saveAlarmTags.add(po);
-								alarmNumber++;
-							}else
-							{
-								AlarmTag po=new AlarmTag();
-
-								po.setId(vo.getId());
-								po.setTs(vo.getTs());
-								po.setEndts(vo.getEndts());
-								po.setVal(vo.getVal());
-								po.setOval(vo.getOval());
-								po.setTriggerType(vo.getTriggerType());
-								po.setTagId(vo.getTagId());
-								po.setRank(vo.getRank());
-								po.setTimeLong(0.0);
-								updateAlarmTags.add(po);
-							}
-						}
-					}
+                    PointData value = values.get(i);
 
-					switch (alarmType){
-						case "in_alarms":
-							if(!saveAlarmTags.isEmpty())
-							{
-								alarmService.saveInTags(saveAlarmTags);
-							}
-							if(!updateAlarmTags.isEmpty())
-							{
-								alarmService.updateInTags(updateAlarmTags);
-							}
-							break;
-						case "wt_alarms":
-							if(!saveAlarmTags.isEmpty())
-							{
-								alarmService.saveWtTags(saveAlarmTags);
-							}
-							if(!updateAlarmTags.isEmpty())
-							{
-								alarmService.updateWtTags(updateAlarmTags);
-							}
-							break;
-						case "bt_alarms":
-							if(!saveAlarmTags.isEmpty())
-							{
-								alarmService.saveBtTags(saveAlarmTags);
-							}
-							if(!updateAlarmTags.isEmpty())
-							{
-								alarmService.updateBtTags(updateAlarmTags);
-							}
+//                    if (vo.getTagId().equals("FD-PYZK-Taizhong1.140728F0111MDY01GS002DB0111SW01RAW00")) {
+//                        System.out.println("");
+//                    }
+                    if (vo.updateAndCheck(value)) {
+                        if (vo.getVal() == 1) {
+                            AlarmTag po = new AlarmTag();
+
+                            po.setId(vo.getId());
+                            po.setTs(vo.getTs());
+                            po.setEndts(po.getEndts());
+                            po.setVal(vo.getVal());
+                            po.setOval(vo.getOval());
+                            po.setTriggerType(vo.getTriggerType());
+                            po.setTagId(vo.getTagId());
+                            po.setRank(vo.getRank());
+                            po.setTimeLong(0.0);
+                            saveAlarmTags.add(po);
+                            alarmNumber++;
 
-							break;
+                        } else if (vo.getVal() == 2) {
 
-					}
+							if(map.containsKey(vo.getId().toLowerCase()))
+							{
+								AlarmSimpleVo svo=map.get(vo.getId().toLowerCase());
+
+								//有结束时间,创建新的报警
+								if(StringUtils.empty(svo.getEndts()))
+								{
+                                    //没有有结束时间,结束报警
+                                    AlarmTag po = new AlarmTag();
+
+                                    po.setId(vo.getId());
+                                    po.setTs(vo.getTs());
+                                    po.setEndts(vo.getEndts());
+                                    po.setVal(vo.getVal());
+                                    po.setOval(vo.getOval());
+                                    po.setTriggerType(vo.getTriggerType());
+                                    po.setTagId(vo.getTagId());
+                                    po.setRank(vo.getRank());
+                                    po.setTimeLong(0.0);
+                                    updateAlarmTags.add(po);
+								}
 
+							}
 
-					logger.info(String.valueOf(threadPoolTaskData)+"报警数量:" + alarmNumber);
-				}
+                        } else {
+                            AlarmTag po = new AlarmTag();
+
+                            po.setId(vo.getId());
+                            po.setTs(vo.getTs());
+                            po.setEndts(vo.getEndts());
+                            po.setVal(vo.getVal());
+                            po.setOval(vo.getOval());
+                            po.setTriggerType(vo.getTriggerType());
+                            po.setTagId(vo.getTagId());
+                            po.setRank(vo.getRank());
+                            po.setTimeLong(0.0);
+                            updateAlarmTags.add(po);
+                        }
+                    }else  if(!map.containsKey(vo.getId().toLowerCase()))
+                    {
+                        if (vo.updateAndCheckNoInfo(value)) {
+                            if (vo.getVal() == 1) {
+                                AlarmTag po = new AlarmTag();
+
+                                po.setId(vo.getId());
+                                po.setTs(vo.getTs());
+                                po.setEndts(po.getEndts());
+                                po.setVal(vo.getVal());
+                                po.setOval(vo.getOval());
+                                po.setTriggerType(vo.getTriggerType());
+                                po.setTagId(vo.getTagId());
+                                po.setRank(vo.getRank());
+                                po.setTimeLong(0.0);
+                                saveAlarmTags.add(po);
+                                alarmNumber++;
+
+                            }
+                        }
+                    }
+                }
+
+                switch (alarmType) {
+                    case "in_alarms":
+                        if (!saveAlarmTags.isEmpty()) {
+                            alarmService.saveInTags(saveAlarmTags);
+                        }
+                        if (!updateAlarmTags.isEmpty()) {
+                            alarmService.updateInTags(updateAlarmTags);
+                        }
+                        break;
+                    case "wt_alarms":
+                        if (!saveAlarmTags.isEmpty()) {
+                            alarmService.saveWtTags(saveAlarmTags);
+                        }
+                        if (!updateAlarmTags.isEmpty()) {
+                            alarmService.updateWtTags(updateAlarmTags);
+                        }
+                        break;
+                    case "bt_alarms":
+                        if (!saveAlarmTags.isEmpty()) {
+                            alarmService.saveBtTags(saveAlarmTags);
+                        }
+                        if (!updateAlarmTags.isEmpty()) {
+                            alarmService.updateBtTags(updateAlarmTags);
+                        }
+
+                        break;
+
+                }
+
+
+                logger.info(String.valueOf(threadPoolTaskData) + "报警数量:" + alarmNumber);
+            }
 
 
 //			}
 
-		} catch (Exception e) {
+        } catch (Exception e) {
 
-			e.printStackTrace();
-		}
-		threadPoolTaskData = null;
+            e.printStackTrace();
+        }
+        threadPoolTaskData = null;
 
-		return result;
+        return result;
 
-	}
+    }
 
 }

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

@@ -168,8 +168,8 @@ frequency:
   #切入切出
   cutinandout: 1
 urls:
-  alarm-service: http://127.0.0.1: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: bt
+    active: wt

+ 4 - 1
alarm-service/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.AlarmTag;
 import com.gyee.alarm.model.vo.AlarmTypeValue;
@@ -366,7 +367,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 -> i.getIsable() == 1).collect(Collectors.toList());
         logger.info(wtls.size() + "");
         wtls.forEach(wt -> {
             if (modelMap.containsKey(wt.getModelId())) {

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

@@ -56,7 +56,7 @@ public interface AlarmTsMapper extends BaseMapper<AlarmTs> {
             "devicetype NCHAR(50),enabled BOOL,lineid NCHAR(50),linename NCHAR(70),modelId NCHAR(50),projectid NCHAR(50)," +
             "projectname NCHAR(70),rank INT,resettable BOOL,stationid NCHAR(50),stationname NCHAR(70),subcomponents NCHAR(50)," +
             "suffix NCHAR(50),tagid NCHAR(100),triggertype INT,uniformcode NCHAR(50),name NCHAR(100),nemCode NCHAR(50),faultCause NCHAR(500),resolvent NCHAR(500),faultType NCHAR(50),aname NCHAR(50) " +
-            ");")
+            ")")
     int createAlarmSuperTable(@Param("superTableName") String superTableName);
 
 

+ 2 - 2
alarm-service/src/main/java/com/gyee/alarm/model/vo/AlarmSimpleVo.java

@@ -9,11 +9,11 @@ import java.sql.Timestamp;
 public class AlarmSimpleVo {
 
     private  String tbName;
-    private Timestamp ts;
+    private Long ts;
     private Integer val;
     private Integer oval;
     private  Boolean confirmed;
-    private Timestamp endts;
+    private Long endts;
     private Double timelong;
 
 }

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

@@ -165,7 +165,7 @@ public class AlarmBtService {
                     po.setTagId(vo.getTagid());
                     po.setVal(null);
                     po.setRank(vo.getRank());
-
+                    po.setAlarmType(vo.getAlarmtype());
                     ls.add(po);
                 }
             }
@@ -325,35 +325,35 @@ public class AlarmBtService {
                     map.put(vo.getTbName().toLowerCase(),vo);
                 }
             }
+            List<AlarmTag> alarmTagls=new ArrayList<>();
             for (AlarmTag alarm : ls) {
                 if(map.containsKey(alarm.getId().toLowerCase()))
                 {
                     AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
                     if(StringUtils.notEmp(tag.getTs()))
                     {
-                        alarm.setTs(tag.getTs().getTime());
-                    }else
-                    {
-                        alarm.setTs(new Date().getTime());
+                        alarm.setTs(tag.getTs());
+                        Date begin = new Date(alarm.getEndts());
+                        Date end = new Date(alarm.getTs());
+
+                        double value= DateUtils.secondsDiff(begin,end);
+                        alarm.setTimeLong(value);
+                        alarm.setConfirmed(tag.getConfirmed());
+                        alarm.setSuperTalbe(AlarmSuperTalbeType.BT.getCode());
+                        alarmTagls.add(alarm);
                     }
-
-                    Date begin = new Date(alarm.getEndts());
-                    Date end = new Date(alarm.getTs());
-
-                    double value= DateUtils.secondsDiff(begin,end);
-                    alarm.setTimeLong(value);
-                    alarm.setConfirmed(tag.getConfirmed());
-                    alarm.setSuperTalbe(AlarmSuperTalbeType.BT.getCode());
                 }
             }
 
-            alarmTsService.insertList(ls);
+            if (StringUtils.notEmp(alarmTagls) && !alarmTagls.isEmpty()) {
+                alarmTsService.insertList(alarmTagls);
+            }
 
             Map<String,ProEconAlarmInfo> tempmap=new HashMap<>();
-            if (StringUtils.notEmp(ls) && !ls.isEmpty()) {
+            if (StringUtils.notEmp(alarmTagls) && !alarmTagls.isEmpty()) {
 
                 List<ProEconAlarmInfo> valuels = new ArrayList<>();
-                for (AlarmTag alarm : ls) {
+                for (AlarmTag alarm : alarmTagls) {
                     if (CacheContext.alarmBtMap.containsKey(alarm.getId())) {
                         AlarmVo vo = CacheContext.alarmBtMap.get(alarm.getId());
                         ProEconAlarmInfo po = new ProEconAlarmInfo();

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

@@ -570,33 +570,36 @@ public class AlarmCtService {
                         map.put(vo.getTbName().toLowerCase(),vo);
                     }
                 }
-
+                List<AlarmTag> alarmTagls=new ArrayList<>();
                 for (AlarmTag alarm : ls) {
                     if(map.containsKey(alarm.getId().toLowerCase()))
                     {
                         AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
                         if(StringUtils.notEmp(tag.getTs()))
                         {
-                            alarm.setTs(tag.getTs().getTime());
-                        }
+                            alarm.setTs(tag.getTs());
+                            Date begin = new Date(alarm.getEndts());
+                            Date end = new Date(alarm.getTs());
 
-                        Date begin = new Date(alarm.getEndts());
-                        Date end = new Date(alarm.getTs());
+                            double value= DateUtils.secondsDiff(begin,end);
+                            alarm.setTimeLong(value);
+                            alarm.setConfirmed(tag.getConfirmed());
+                            alarm.setSuperTalbe(AlarmSuperTalbeType.CT.getCode());
 
-                        double value= DateUtils.secondsDiff(begin,end);
-                        alarm.setTimeLong(value);
-                        alarm.setConfirmed(tag.getConfirmed());
-                        alarm.setSuperTalbe(AlarmSuperTalbeType.CT.getCode());
+                            alarmTagls.add(alarm);
+                        }
                     }
                 }
+                if (StringUtils.notEmp(alarmTagls) && !alarmTagls.isEmpty()) {
+                    alarmTsService.insertList(alarmTagls);
+                }
 
-                alarmTsService.insertList(ls);
                 Map<String,ProEconAlarmInfo> tempmap=new HashMap<>();
 
-                if (StringUtils.notEmp(ls) && !ls.isEmpty()) {
+                if (StringUtils.notEmp(alarmTagls) && !alarmTagls.isEmpty()) {
 
                     List<ProEconAlarmInfo> valuels = new ArrayList<>();
-                    for (AlarmTag alarm : ls) {
+                    for (AlarmTag alarm : alarmTagls) {
                         if (CacheContext.alarmCtMap.containsKey(alarm.getId())) {
                             AlarmVo vo = CacheContext.alarmCtMap.get(alarm.getId());
                             ProEconAlarmInfo po = new ProEconAlarmInfo();

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

@@ -290,7 +290,7 @@ public class AlarmInService {
                     po.setTagId(vo.getTagid());
                     po.setVal(null);
                     po.setRank(vo.getRank());
-
+                    po.setAlarmType(vo.getAlarmtype());
                     ls.add(po);
                 }
             }
@@ -437,36 +437,36 @@ public class AlarmInService {
                     map.put(vo.getTbName().toLowerCase(),vo);
                 }
             }
-
+            List<AlarmTag> alarmTagls=new ArrayList<>();
             for (AlarmTag alarm : ls) {
                 if(map.containsKey(alarm.getId().toLowerCase()))
                 {
                     AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
                     if(StringUtils.notEmp(tag.getTs()))
                     {
-                        alarm.setTs(tag.getTs().getTime());
-                    }else
-                    {
-                        alarm.setTs(new Date().getTime());
-                    }
+                        alarm.setTs(tag.getTs());
+                        Date begin = new Date(alarm.getEndts());
+                        Date end = new Date(alarm.getTs());
 
-                    Date begin = new Date(alarm.getEndts());
-                    Date end = new Date(alarm.getTs());
+                        double value= DateUtils.secondsDiff(begin,end);
+                        alarm.setTimeLong(value);
+                        alarm.setConfirmed(tag.getConfirmed());
+                        alarm.setSuperTalbe(AlarmSuperTalbeType.WT.getCode());
 
-                    double value= DateUtils.secondsDiff(begin,end);
-                    alarm.setTimeLong(value);
-                    alarm.setConfirmed(tag.getConfirmed());
-                    alarm.setSuperTalbe(AlarmSuperTalbeType.WT.getCode());
+                        alarmTagls.add(alarm);
+                    }
                 }
             }
 
-            alarmTsService.insertList(ls);
+            if (StringUtils.notEmp(alarmTagls) && !alarmTagls.isEmpty()) {
+                alarmTsService.insertList(alarmTagls);
+            }
             Map<String,ProEconAlarmInfo> tempmap=new HashMap<>();
 
-            if (StringUtils.notEmp(ls) && !ls.isEmpty()) {
+            if (StringUtils.notEmp(alarmTagls) && !alarmTagls.isEmpty()) {
 
                 List<ProEconAlarmInfo> valuels = new ArrayList<>();
-                for (AlarmTag alarm : ls) {
+                for (AlarmTag alarm : alarmTagls) {
                     if (CacheContext.alarmWtMap.containsKey(alarm.getId())) {
                         AlarmVo vo = CacheContext.alarmWtMap.get(alarm.getId());
                         ProEconAlarmInfo po = new ProEconAlarmInfo();

+ 41 - 67
alarm-service/src/main/java/com/gyee/alarm/service/AlarmWtService.java

@@ -12,6 +12,9 @@ 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 groovy.util.logging.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -46,6 +49,8 @@ public class AlarmWtService {
 
     @Resource
     private IEdosUtil edosUtil;
+
+    private static Logger logger = LoggerFactory.getLogger(AlarmWtService.class);
     public void dropSuperTable()
     {
         alarmTsService.dropSuperTable(AlarmSuperTalbeType.WT.getCode());
@@ -147,17 +152,25 @@ public class AlarmWtService {
         Map<String, Map<String, ProBasicEquipmentPoint>> wtpAimap = CacheContext.wtpAimap;
         for (ProBasicEquipment wt : CacheContext.wtls) {
 
-
+//            if(wt.getId().contains("_G_"))
+//            {
+//                continue;
+//            }
             if (wtpAimap.containsKey(wt.getId())) {
                 Map<String, ProBasicEquipmentPoint> pointMap = wtpAimap.get(wt.getId());
 
                 StringBuilder sb = new StringBuilder();
                 sb.append(wt.getWindpowerstationId() + wt.getModelId());
+
+//                if(wt.getId().equals("SXJ_KGDL_XWT_F_WT_0007_EQ"))
+//                {
+//                    System.out.println("");
+//                }
                 if (StringUtils.notEmp(pointMap) && wtAlarmMap.containsKey(String.valueOf(sb))) {
                     List<ProEconAlarmConfiguration> alarmls = wtAlarmMap.get(String.valueOf(sb));
 
                     if (!alarmls.isEmpty()) {
-
+//                        System.out.println(wt.getId());
                         for (ProEconAlarmConfiguration alarm : alarmls) {
                             if (pointMap.containsKey(alarm.getUniformCode())) {
                                 ProBasicEquipmentPoint equipmentPoint = pointMap.get(alarm.getUniformCode());
@@ -170,6 +183,8 @@ public class AlarmWtService {
 
 
                                 {
+
+//                                    System.out.println("ok");
                                     AlarmVo vo=new AlarmVo();
                                     StringBuilder tbName = new StringBuilder();
                                     tbName.append(wt.getId()).append("_").append(alarm.getId());
@@ -226,54 +241,7 @@ public class AlarmWtService {
                                 }
 
                             }
-//                            else {
-//
-//                                //临时创建表
-//                                AlarmVo vo=new AlarmVo();
-//                                StringBuilder tbName = new StringBuilder();
-//                                tbName.append(wt.getId()).append("_").append(alarm.getId());
-//                                vo.setTbName(String.valueOf(tbName));
-//                                vo.setAlarmid(alarm.getId());
-//                                vo.setTagid("GF-TZ-SYZ.038200G9911SYB99GI017DB0111PA99RAW01");
-//                                vo.setAlarmtype(alarm.getAlarmType());
-//                                vo.setCharacteristic(alarm.getCharacteristic());
-//                                vo.setComponents(alarm.getComponents());
-//                                vo.setDescription(alarm.getDescription());
-//                                vo.setDeviceid(wt.getId());
-//                                vo.setDevicename(wt.getName());
-//                                vo.setDevicetype(alarm.getDeviceType());
-//                                vo.setEnabled(alarm.getEnable());
-//                                vo.setLineid(wt.getLineId());
-//                                if(CacheContext.lnmap.containsKey(wt.getLineId()))
-//                                {
-//                                    ProBasicLine ln=CacheContext.lnmap.get(wt.getLineId());
-//                                    vo.setLinename(ln.getName());
-//                                }
-//                                vo.setModelId(wt.getModelId());
-//                                vo.setProjectid(wt.getProjectId());
-//                                if(CacheContext.pjmap.containsKey(wt.getProjectId()))
-//                                {
-//                                    ProBasicProject pj=CacheContext.pjmap.get(wt.getProjectId());
-//                                    vo.setProjectname(pj.getName());
-//                                }
-//                                vo.setRank(alarm.getRank());
-//                                vo.setResettable(alarm.getResetTable());
-//                                vo.setStationid(wt.getWindpowerstationId());
-//                                if(CacheContext.wpmap.containsKey(wt.getWindpowerstationId()))
-//                                {
-//                                    ProBasicPowerstation wp=CacheContext.wpmap.get(wt.getWindpowerstationId());
-//                                    vo.setStationname(wp.getName());
-//                                }
-//                                vo.setSubcomponents(alarm.getSubcomponents());
-//                                vo.setSuffix(alarm.getSuffix());
-//                                vo.setTriggertype(alarm.getTriggerType());
-//                                vo.setUniformcode(alarm.getUniformCode());
-//                                vo.setSuperTableName(AlarmSuperTalbeType.WT.getCode());
-//                                vo.setVal(0);
-//                                vo.setOval(0);
-//                                alarmVoList.add(vo);
-//
-//                            }
+
                         }
                     }
                 }
@@ -304,7 +272,7 @@ public class AlarmWtService {
                     po.setTagId(vo.getTagid());
                     po.setVal(null);
                     po.setRank(vo.getRank());
-
+                    po.setAlarmType(vo.getAlarmtype());
                     ls.add(po);
                 }
             }
@@ -456,39 +424,44 @@ public class AlarmWtService {
                     map.put(vo.getTbName().toLowerCase(),vo);
                 }
             }
-
+            List<AlarmTag> alarmTagls=new ArrayList<>();
             for (AlarmTag alarm : ls) {
+
+
                 if(map.containsKey(alarm.getId().toLowerCase()))
                 {
                     AlarmSimpleVo tag=map.get(alarm.getId().toLowerCase());
-                    if(StringUtils.notEmp(tag.getTs()))
-                    {
-                        alarm.setTs(tag.getTs().getTime());
-                    }else
+
+                    if(null !=tag.getTs())
                     {
-                        alarm.setTs(new Date().getTime());
-                    }
+                        alarm.setTs(tag.getTs());
+                        Date begin = new Date(alarm.getEndts());
+                        Date end = new Date(alarm.getTs());
+
+                        double value= DateUtils.secondsDiff(begin,end);
+                        alarm.setTimeLong(value);
+                        alarm.setConfirmed(tag.getConfirmed());
+                        alarm.setSuperTalbe(AlarmSuperTalbeType.WT.getCode());
 
+                        alarmTagls.add(alarm);
 
-                    Date begin = new Date(alarm.getEndts());
-                    Date end = new Date(alarm.getTs());
 
-                    double value= DateUtils.secondsDiff(begin,end);
-                    alarm.setTimeLong(value);
-                    alarm.setConfirmed(tag.getConfirmed());
-                    alarm.setSuperTalbe(AlarmSuperTalbeType.WT.getCode());
+                    }
                 }
             }
 
-            alarmTsService.insertList(ls);
+            if (StringUtils.notEmp(alarmTagls) && !alarmTagls.isEmpty()) {
+                alarmTsService.insertList(alarmTagls);
+            }
 
             Map<String,ProEconAlarmInfo> tempmap=new HashMap<>();
-            if (StringUtils.notEmp(ls) && !ls.isEmpty()) {
+            if (StringUtils.notEmp(alarmTagls) && !alarmTagls.isEmpty()) {
 
                 List<ProEconAlarmInfo> valuels = new ArrayList<>();
-                for (AlarmTag alarm : ls) {
+                for (AlarmTag alarm : alarmTagls) {
                     if (CacheContext.alarmWtMap.containsKey(alarm.getId())) {
                         AlarmVo vo = CacheContext.alarmWtMap.get(alarm.getId());
+                        logger.info("test2");
                         ProEconAlarmInfo po = new ProEconAlarmInfo();
                         po.setTbname(vo.getTbName());
                         po.setLastUpdateTime(new Date(alarm.getEndts()));
@@ -542,6 +515,7 @@ public class AlarmWtService {
                         {
                             alarm.setWpName(CacheContext.wpmap.get(vo.getStationid()).getName());
                         }
+
                         pushDataSevice.pushWtData(alarm);
 
 

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

@@ -164,7 +164,7 @@ public class AlarmTsServiceImpl extends ServiceImpl<AlarmTsMapper, AlarmTs> impl
         if(StringUtils.notEmp(superTableName) && StringUtils.notEmp(tbnames))
         {
             StringBuilder sb= new StringBuilder();
-            sb.append(" select last_row(*),tbname from ")
+            sb.append(" select last_row(ts) as ts, last_row(val) as val, last_row(confirmed) as confirmed, last_row(endts) as endts, last_row(timelong) as timelong,tbname from ")
             .append(superTableName).append(" where tbname in( ");
             sb.append(tbnames)
                     .append(" ) group by tbname");

+ 6 - 5
alarm-service/src/main/java/com/gyee/alarm/websocket/WebSocket.java

@@ -125,7 +125,11 @@ public class WebSocket {
         if(StringUtils.notEmp(this.session))
         {
             synchronized (this.session) {
-                this.session.getBasicRemote().sendObject(message);
+                if(this.session.isOpen())
+                {
+                    this.session.getBasicRemote().sendObject(message);
+                }
+
             }
         }
 
@@ -152,10 +156,7 @@ public class WebSocket {
     public void sendMessageByUserId(String userId, Object message) throws IOException, EncodeException {
         logger.info("服务端发送消息到{},消息:{}",userId,message);
         if(StringUtils.isNotBlank(userId)&&webSocketMap.containsKey(userId)){
-            synchronized (userId) {
-                webSocketMap.get(userId).sendMessage(message);
-            }
-
+            webSocketMap.get(userId).sendMessage(message);
         }else{
             logger.error("用户{}不在线",userId);
         }

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

@@ -21,15 +21,15 @@ public class AppTest
         AlarmInService alarmInService= SpringUtils.getBean("alarmInService");
 
 
-        alarmWtService.createSuperTable();
-        alarmWtService.initalWtAlarm();
-        alarmInService.initalInAlarm();
+//        alarmWtService.createSuperTable();
+//        alarmWtService.initalWtAlarm();
+//        alarmInService.initalInAlarm();
 
-        alarmBtService.createSuperTable();
+//        alarmBtService.createSuperTable();
         alarmBtService.initalBtAlarm();
 
-        alarmCtService.createSuperTable();
-        alarmCtService.initalCtAlarm();
+//        alarmCtService.createSuperTable();
+//        alarmCtService.initalCtAlarm();
 
         System.out.println("完成!");
 

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

@@ -46,7 +46,7 @@ public interface ProBasicDeviceFaultModeMapper extends BaseMapper<ProBasicDevice
             "and a.deviceId=#{deviceId}",
             "</if>",
             "<if test='structureCode !=null' >",
-            "and   a.structurecode like '${structureCode}%'",
+            "and   a.structure_code like '${structureCode}%'",
             "</if>",
             "</where>",
 

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

@@ -39,7 +39,7 @@ public class AlarmVo {
     private Integer val;
     private Integer oval;
 
-    private Timestamp endts;
+    private long endts;
 
     private Double timelong;
 

File diff suppressed because it is too large
+ 3244 - 83548
log/ota.log


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


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


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


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


+ 38 - 38
src/test/java/com/gyee/AppTest.java

@@ -1,38 +1,38 @@
-package com.gyee;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Unit test for simple App.
- */
-public class AppTest 
-    extends TestCase
-{
-    /**
-     * Create the test case
-     *
-     * @param testName name of the test case
-     */
-    public AppTest( String testName )
-    {
-        super( testName );
-    }
-
-    /**
-     * @return the suite of tests being tested
-     */
-    public static Test suite()
-    {
-        return new TestSuite( AppTest.class );
-    }
-
-    /**
-     * Rigourous Test :-)
-     */
-    public void testApp()
-    {
-        assertTrue( true );
-    }
-}
+//package com.gyee;
+//
+//import junit.framework.Test;
+//import junit.framework.TestCase;
+//import junit.framework.TestSuite;
+//
+///**
+// * Unit test for simple App.
+// */
+//public class AppTest
+//    extends TestCase
+//{
+//    /**
+//     * Create the test case
+//     *
+//     * @param testName name of the test case
+//     */
+//    public AppTest( String testName )
+//    {
+//        super( testName );
+//    }
+//
+//    /**
+//     * @return the suite of tests being tested
+//     */
+//    public static Test suite()
+//    {
+//        return new TestSuite( AppTest.class );
+//    }
+//
+//    /**
+//     * Rigourous Test :-)
+//     */
+//    public void testApp()
+//    {
+//        assertTrue( true );
+//    }
+//}