From 9b36d0f0fa61f1c77d89473198ac748d1610563f Mon Sep 17 00:00:00 2001 From: bgy Date: Wed, 17 Jun 2026 11:29:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=AE=BE=E5=A4=87=E5=9C=A8?= =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E5=91=8A=E8=AD=A6=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduletask/mapper/TopsailTransmitLogDao.java | 6 ++++ .../scheduletask/pojo/DeviceOnlineInfo.java | 35 ++++++++++++++++++++++ .../scheduletask/pojo/FocusDeviceOnline.java | 4 +++ .../task/CheckRabbitMqScheduleTask.java | 32 ++++++++++++++++---- .../topsail/scheduletask/util/MaiSenderlUtil.java | 14 +++++++++ src/main/resources/application.properties | 2 +- .../mapper/TopsailTransmitLogMapper.xml | 16 +++++++++- 7 files changed, 101 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/topsail/scheduletask/pojo/DeviceOnlineInfo.java diff --git a/src/main/java/com/topsail/scheduletask/mapper/TopsailTransmitLogDao.java b/src/main/java/com/topsail/scheduletask/mapper/TopsailTransmitLogDao.java index 99c88de..44858a7 100644 --- a/src/main/java/com/topsail/scheduletask/mapper/TopsailTransmitLogDao.java +++ b/src/main/java/com/topsail/scheduletask/mapper/TopsailTransmitLogDao.java @@ -1,5 +1,6 @@ package com.topsail.scheduletask.mapper; +import com.topsail.scheduletask.pojo.DeviceOnlineInfo; import com.topsail.scheduletask.pojo.FocusDeviceOnline; import com.topsail.scheduletask.pojo.TopsailTransmitLog; import org.apache.ibatis.annotations.Param; @@ -22,6 +23,7 @@ public interface TopsailTransmitLogDao { /** * 根据 IMEI 查询记录 + * * @param imei 设备号 * @return TopsailTransmitLog 对象 */ @@ -29,6 +31,7 @@ public interface TopsailTransmitLogDao { /** * 新增记录 + * * @param topsailTransmitLog 待新增的对象 * @return 影响行数 */ @@ -36,6 +39,7 @@ public interface TopsailTransmitLogDao { /** * 根据 IMEI 更新记录 + * * @param topsailTransmitLog 待更新的对象 * @return 影响行数 */ @@ -44,4 +48,6 @@ public interface TopsailTransmitLogDao { List getFocusDevice(@Param("isFocus") Integer isFocus); long getOfflineDeviceCount(@Param("imeiList") List imeiList, @Param("projectId") Integer projectId); + + List getOfflineDevice(@Param("imeiList") List imeiList, @Param("projectId") Integer projectId); } diff --git a/src/main/java/com/topsail/scheduletask/pojo/DeviceOnlineInfo.java b/src/main/java/com/topsail/scheduletask/pojo/DeviceOnlineInfo.java new file mode 100644 index 0000000..d828a3e --- /dev/null +++ b/src/main/java/com/topsail/scheduletask/pojo/DeviceOnlineInfo.java @@ -0,0 +1,35 @@ +package com.topsail.scheduletask.pojo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * 通用明文数据转发对象 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class DeviceOnlineInfo { + //1.平台信息 + /** + * 设备imei + */ + private String imei; + /** + * 状态 + */ + private String status; + //2.设备基础信息 + /** + * 数据上报时间 + */ + private String sendTime; + /** + * 预计离线时间 + */ + private String offlineTime; +} diff --git a/src/main/java/com/topsail/scheduletask/pojo/FocusDeviceOnline.java b/src/main/java/com/topsail/scheduletask/pojo/FocusDeviceOnline.java index bca3273..82e2a2a 100644 --- a/src/main/java/com/topsail/scheduletask/pojo/FocusDeviceOnline.java +++ b/src/main/java/com/topsail/scheduletask/pojo/FocusDeviceOnline.java @@ -36,5 +36,9 @@ public class FocusDeviceOnline { * 是否关注1关注0不关注 */ private Integer isFocus; + /** + * 告警接收的邮箱 + */ + private String sendMails; } diff --git a/src/main/java/com/topsail/scheduletask/task/CheckRabbitMqScheduleTask.java b/src/main/java/com/topsail/scheduletask/task/CheckRabbitMqScheduleTask.java index d7ec178..166727f 100644 --- a/src/main/java/com/topsail/scheduletask/task/CheckRabbitMqScheduleTask.java +++ b/src/main/java/com/topsail/scheduletask/task/CheckRabbitMqScheduleTask.java @@ -3,6 +3,7 @@ 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.DeviceOnlineInfo; import com.topsail.scheduletask.pojo.FocusDeviceOnline; import com.topsail.scheduletask.service.AmqpService; import com.topsail.scheduletask.util.MaiSenderlUtil; @@ -16,6 +17,7 @@ import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; @Component @Configuration //1.主要用于标记配置类,兼备Component的效果。 @@ -85,15 +87,33 @@ public class CheckRabbitMqScheduleTask { } } //2.查询设备离线数量 - long count = topsailTransmitLogDao.getOfflineDeviceCount(imeiList, focusDeviceOnline.getProjectId()); - if (count > 0) { - String subject = "紧急--设备离线通知"+"-" + focusDeviceOnline.getUserName(); + List offlineDevices = topsailTransmitLogDao.getOfflineDevice(imeiList, focusDeviceOnline.getProjectId()); + if (offlineDevices != null && offlineDevices.size() > 0) { + //将离线的设备号码转成json字符串 + Map offlineDeviceMap = offlineDevices.stream() + .collect(Collectors.toMap(DeviceOnlineInfo::getImei, DeviceOnlineInfo::getOfflineTime)); + String json = JSON.toJSONString(offlineDeviceMap); + 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); + if (focusDeviceOnline.getSendMails() != null) { + if (focusDeviceOnline.getSendMails().contains(",")) { + String[] mails = focusDeviceOnline.getSendMails().split(","); + for (String mail : mails) { + //验证邮箱格式 + if (!maiSenderlUtil.isEmail(mail)) { + continue; + } + //3.发送邮件 + String content = "客户:" + focusDeviceOnline.getUserName() + ",设备离线数量:" + offlineDevices.size() + "个,"+"报警设备和预离线时间信息:"+json+"。请进入系统查看原因"; + maiSenderlUtil.sendMail(mail, subject, content, true, null, subject); + } + } else { + String content = "客户:" + focusDeviceOnline.getUserName() + ",设备离线数量:" + offlineDevices.size() + "个,"+"报警设备和预离线时间信息:"+json+"。请进入系统查看原因"; + maiSenderlUtil.sendMail(maiSenderlUtil.isEmail(focusDeviceOnline.getSendMails()) ? focusDeviceOnline.getSendMails() : "1129801211@qq.com", subject, content, true, null, subject); + } + } } } } diff --git a/src/main/java/com/topsail/scheduletask/util/MaiSenderlUtil.java b/src/main/java/com/topsail/scheduletask/util/MaiSenderlUtil.java index 64cd12d..21d9e80 100644 --- a/src/main/java/com/topsail/scheduletask/util/MaiSenderlUtil.java +++ b/src/main/java/com/topsail/scheduletask/util/MaiSenderlUtil.java @@ -160,6 +160,20 @@ public class MaiSenderlUtil { } + /** + * 验证邮箱格式 + * @param email 待验证的邮箱地址 + * @return true-邮箱格式正确,false-邮箱格式错误 + */ + public boolean isEmail(String email) { + if (email == null || email.trim().isEmpty()) { + return false; + } + // 邮箱正则表达式:支持常见的邮箱格式 + String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"; + return email.matches(regex); + } + public static void main(String[] args) { String fileUrl = "D:\\test\\report\\2020年按照产品进行异常问题统计.xlsx"; if(fileUrl.contains("\\")){ diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e00facd..1178f0a 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/TopsailTransmitLogMapper.xml b/src/main/resources/com/topsail/scheduletask/mapper/TopsailTransmitLogMapper.xml index a825387..58dac7e 100644 --- a/src/main/resources/com/topsail/scheduletask/mapper/TopsailTransmitLogMapper.xml +++ b/src/main/resources/com/topsail/scheduletask/mapper/TopsailTransmitLogMapper.xml @@ -59,7 +59,8 @@ user_name userName, project_id projectId, focus_imeis focusImeis, - is_focus isFocus + is_focus isFocus, + send_mails sendMails FROM focus_device_online WHERE is_focus = #{isFocus} @@ -75,6 +76,19 @@ + +