From 7f29160d44f849886bc0940569423fe04f817ae4 Mon Sep 17 00:00:00 2001 From: bgy Date: Thu, 11 Jun 2026 17:46:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=82=AE=E4=BB=B6=E5=8F=91?= =?UTF-8?q?=E9=80=81=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=85=B3?= =?UTF-8?q?=E6=B3=A8=E8=AE=BE=E5=A4=87=E5=9C=A8=E7=A6=BB=E7=BA=BF=E7=9B=91?= =?UTF-8?q?=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduletask/mapper/TopsailTransmitLogDao.java | 7 +++ .../scheduletask/pojo/FocusDeviceOnline.java | 40 +++++++++++++++ .../com/topsail/scheduletask/pojo/InformLogVo.java | 39 +++++++-------- .../task/CheckRabbitMqScheduleTask.java | 58 ++++++++++++++++++++-- src/main/resources/application.properties | 2 +- .../scheduletask/mapper/InformLogMapper.xml | 11 ++-- .../mapper/TopsailTransmitLogMapper.xml | 21 ++++++++ 7 files changed, 149 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/topsail/scheduletask/pojo/FocusDeviceOnline.java diff --git a/src/main/java/com/topsail/scheduletask/mapper/TopsailTransmitLogDao.java b/src/main/java/com/topsail/scheduletask/mapper/TopsailTransmitLogDao.java index 01f9b5b..99c88de 100644 --- a/src/main/java/com/topsail/scheduletask/mapper/TopsailTransmitLogDao.java +++ b/src/main/java/com/topsail/scheduletask/mapper/TopsailTransmitLogDao.java @@ -1,9 +1,12 @@ package com.topsail.scheduletask.mapper; +import com.topsail.scheduletask.pojo.FocusDeviceOnline; import com.topsail.scheduletask.pojo.TopsailTransmitLog; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; +import java.util.List; + /** * 信息推送日志表Dao * @@ -37,4 +40,8 @@ public interface TopsailTransmitLogDao { * @return 影响行数 */ int updateTopsailTransmitLogByImei(TopsailTransmitLog topsailTransmitLog); + + List getFocusDevice(@Param("isFocus") Integer isFocus); + + long getOfflineDeviceCount(@Param("imeiList") List imeiList, @Param("projectId") Integer projectId); } diff --git a/src/main/java/com/topsail/scheduletask/pojo/FocusDeviceOnline.java b/src/main/java/com/topsail/scheduletask/pojo/FocusDeviceOnline.java new file mode 100644 index 0000000..bca3273 --- /dev/null +++ b/src/main/java/com/topsail/scheduletask/pojo/FocusDeviceOnline.java @@ -0,0 +1,40 @@ +package com.topsail.scheduletask.pojo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * 通用明文数据转发对象 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class FocusDeviceOnline { + //1.平台信息 + /** + * 用户ID + */ + private Integer userId; + /** + * 用户名称 + */ + private String userName; + //2.设备基础信息 + /** + * 项目ID + */ + private Integer projectId; + /** + * 关注的设备号 + */ + private String focusImeis; + /** + * 是否关注1关注0不关注 + */ + private Integer isFocus; + +} diff --git a/src/main/java/com/topsail/scheduletask/pojo/InformLogVo.java b/src/main/java/com/topsail/scheduletask/pojo/InformLogVo.java index a618ca2..1827149 100644 --- a/src/main/java/com/topsail/scheduletask/pojo/InformLogVo.java +++ b/src/main/java/com/topsail/scheduletask/pojo/InformLogVo.java @@ -8,12 +8,9 @@ import java.util.Date; /** - * * 信息推送日志表实体 * - * @version - * -
+ * @version 
  * Author	Version		Date		Changes
  * Administrator 	1.0  2021年11月24日 Created
  *
@@ -25,38 +22,40 @@ public class InformLogVo implements Serializable {
     private static final long serialVersionUID = 6509367370157091L;
 
     /**
-    *id
-    */
+     * id
+     */
     private Integer id;
     /**
-    *推送方式
-    */
+     * 推送方式
+     */
     private String informType;
     /**
-    *推送地址
-    */
+     * 推送地址
+     */
     private String informAddress;
     /**
-    *推送内容
-    */
+     * 推送内容
+     */
     private String informData;
     /**
-    *推送结果(0失败1成功)
-    */
+     * 推送结果(0失败1成功)
+     */
     private Integer state;
     /**
-    *推送返回值记录
-    */
+     * 推送返回值记录
+     */
     private String resultMsg;
     /**
-    *推送场景
-    */
+     * 推送场景
+     */
     private String sendScenarios;
     /**
-    *创建时间
-    */
+     * 创建时间
+     */
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date belongTimeHour;
 
     /**
      * 开始时间
diff --git a/src/main/java/com/topsail/scheduletask/task/CheckRabbitMqScheduleTask.java b/src/main/java/com/topsail/scheduletask/task/CheckRabbitMqScheduleTask.java
index 40de3e4..d7ec178 100644
--- a/src/main/java/com/topsail/scheduletask/task/CheckRabbitMqScheduleTask.java
+++ b/src/main/java/com/topsail/scheduletask/task/CheckRabbitMqScheduleTask.java
@@ -1,6 +1,9 @@
 package com.topsail.scheduletask.task;
 
 import com.alibaba.fastjson.JSON;
+import com.topsail.scheduletask.mapper.InformLogDao;
+import com.topsail.scheduletask.mapper.TopsailTransmitLogDao;
+import com.topsail.scheduletask.pojo.FocusDeviceOnline;
 import com.topsail.scheduletask.service.AmqpService;
 import com.topsail.scheduletask.util.MaiSenderlUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,9 +14,8 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 @Component
 @Configuration      //1.主要用于标记配置类,兼备Component的效果。
@@ -27,6 +29,10 @@ public class CheckRabbitMqScheduleTask {
     AmqpService amqpService;
     @Value("${ignore.mq.queue}")
     String ignoreQueue;
+    @Autowired
+    TopsailTransmitLogDao topsailTransmitLogDao;
+    @Autowired
+    InformLogDao informLogDao;
 
     //1.每个小时定时检查rabbitmq
 //    @Scheduled(cron = "0 0 0/1 * * ?")
@@ -55,7 +61,51 @@ public class CheckRabbitMqScheduleTask {
             amqpService.SendMessage("mailNotice", json);
         }
     }
-//    @Scheduled(cron = "1/60 * * * * ?")
+
+    /**
+     * 每分钟检查设备是否在线
+     */
+    @Scheduled(cron = "0 * * * * ?")
+//        @Scheduled(cron = "1/60 * * * * ?")
+    //1.每分钟检查设备是否在线
+    //或直接指定时间间隔,例如:5秒
+//    @Scheduled(fixedRate=5000)
+    private void checkDeviceOnline() {
+        try {
+            //1.查询需要监控的设备
+            List focusDeviceOnlineList = topsailTransmitLogDao.getFocusDevice(1);
+            if (focusDeviceOnlineList != null && focusDeviceOnlineList.size() > 0) {
+                for (FocusDeviceOnline focusDeviceOnline : focusDeviceOnlineList) {
+                    String imeis = focusDeviceOnline.getFocusImeis();
+                    List imeiList = new ArrayList<>();
+                    if (imeis != null && imeis.length() > 0) {
+                        String[] imeisArray = imeis.split(",");
+                        for (String imei : imeisArray) {
+                            imeiList.add(imei);
+                        }
+                    }
+                    //2.查询设备离线数量
+                    long count = topsailTransmitLogDao.getOfflineDeviceCount(imeiList, focusDeviceOnline.getProjectId());
+                    if (count > 0) {
+                        String subject = "紧急--设备离线通知"+"-" + focusDeviceOnline.getUserName();
+                        String today = new SimpleDateFormat("yyyy-MM-dd HH:00:00").format(new Date());
+                        Integer logCount = informLogDao.getNewInformLogCount(subject, today);
+                        if (logCount == null || (logCount != null && logCount < 1)) {
+                            //3.发送邮件
+                            String content = "客户:" + focusDeviceOnline.getUserName() + ",设备离线数量:" + count + "个,请进入系统查看原因";
+                            maiSenderlUtil.sendMail("1129801211@qq.com", subject, content, true, null, subject);
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.out.println("发送邮件失败");
+            System.out.println(e.getMessage());
+        }
+    }
+
+    //    @Scheduled(cron = "1/60 * * * * ?")
 //    //或直接指定时间间隔,例如:5秒
 ////    @Scheduled(fixedRate=5000)
 //    private void checkMail() {
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 1178f0a..e00facd 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -21,7 +21,7 @@ spring.datasource.username=yunmei
 spring.datasource.password=yunmei1234
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 # 启用 MyBatis 日志输出
-#mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
 mybatis.type-aliases-package=com.topsail.scheduletask.pojo
 mybatis.mapper-locations=classpath:com/topsail/scheduletask/mapper/*.xml
 compute.schedule=0
diff --git a/src/main/resources/com/topsail/scheduletask/mapper/InformLogMapper.xml b/src/main/resources/com/topsail/scheduletask/mapper/InformLogMapper.xml
index 0cb3359..38f185c 100644
--- a/src/main/resources/com/topsail/scheduletask/mapper/InformLogMapper.xml
+++ b/src/main/resources/com/topsail/scheduletask/mapper/InformLogMapper.xml
@@ -12,6 +12,7 @@
     
     
     
+    
     
 
     
@@ -44,7 +45,8 @@
         state,
         result_msg,
         send_scenarios,
-        create_time
+        create_time,
+        belong_time_hour
         
         
         #{informLog.informType,jdbcType=VARCHAR},
@@ -53,7 +55,8 @@
         #{informLog.state,jdbcType=INTEGER},
         #{informLog.resultMsg,jdbcType=VARCHAR},
         #{informLog.sendScenarios,jdbcType=VARCHAR},
-        #{informLog.createTime,jdbcType=TIMESTAMP}
+        #{informLog.createTime,jdbcType=TIMESTAMP},
+        #{informLog.belongTimeHour,jdbcType=TIMESTAMP}
         
     
 
@@ -177,10 +180,10 @@
     
     
 
\ No newline at end of file
diff --git a/src/main/resources/com/topsail/scheduletask/mapper/TopsailTransmitLogMapper.xml b/src/main/resources/com/topsail/scheduletask/mapper/TopsailTransmitLogMapper.xml
index c8b2d0d..a825387 100644
--- a/src/main/resources/com/topsail/scheduletask/mapper/TopsailTransmitLogMapper.xml
+++ b/src/main/resources/com/topsail/scheduletask/mapper/TopsailTransmitLogMapper.xml
@@ -54,6 +54,27 @@
         FROM topsail_transmit_log
         WHERE imei = #{imei} LIMIT 1
     
+    
+