Browse Source

优化设备在离线告警方法

master
bgy 1 month ago
parent
commit
9b36d0f0fa
7 changed files with 101 additions and 8 deletions
  1. +6
    -0
      src/main/java/com/topsail/scheduletask/mapper/TopsailTransmitLogDao.java
  2. +35
    -0
      src/main/java/com/topsail/scheduletask/pojo/DeviceOnlineInfo.java
  3. +4
    -0
      src/main/java/com/topsail/scheduletask/pojo/FocusDeviceOnline.java
  4. +26
    -6
      src/main/java/com/topsail/scheduletask/task/CheckRabbitMqScheduleTask.java
  5. +14
    -0
      src/main/java/com/topsail/scheduletask/util/MaiSenderlUtil.java
  6. +1
    -1
      src/main/resources/application.properties
  7. +15
    -1
      src/main/resources/com/topsail/scheduletask/mapper/TopsailTransmitLogMapper.xml

+ 6
- 0
src/main/java/com/topsail/scheduletask/mapper/TopsailTransmitLogDao.java View File

@ -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<FocusDeviceOnline> getFocusDevice(@Param("isFocus") Integer isFocus);
long getOfflineDeviceCount(@Param("imeiList") List<String> imeiList, @Param("projectId") Integer projectId);
List<DeviceOnlineInfo> getOfflineDevice(@Param("imeiList") List<String> imeiList, @Param("projectId") Integer projectId);
}

+ 35
- 0
src/main/java/com/topsail/scheduletask/pojo/DeviceOnlineInfo.java View File

@ -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;
}

+ 4
- 0
src/main/java/com/topsail/scheduletask/pojo/FocusDeviceOnline.java View File

@ -36,5 +36,9 @@ public class FocusDeviceOnline {
* 是否关注1关注0不关注
*/
private Integer isFocus;
/**
* 告警接收的邮箱
*/
private String sendMails;
}

+ 26
- 6
src/main/java/com/topsail/scheduletask/task/CheckRabbitMqScheduleTask.java View File

@ -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<DeviceOnlineInfo> offlineDevices = topsailTransmitLogDao.getOfflineDevice(imeiList, focusDeviceOnline.getProjectId());
if (offlineDevices != null && offlineDevices.size() > 0) {
//将离线的设备号码转成json字符串
Map<String, String> 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);
}
}
}
}
}


+ 14
- 0
src/main/java/com/topsail/scheduletask/util/MaiSenderlUtil.java View File

@ -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("\\")){


+ 1
- 1
src/main/resources/application.properties View File

@ -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


+ 15
- 1
src/main/resources/com/topsail/scheduletask/mapper/TopsailTransmitLogMapper.xml View File

@ -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}
</select>
@ -75,6 +76,19 @@
</foreach>
</if>
</select>
<select id="getOfflineDevice" resultType="com.topsail.scheduletask.pojo.DeviceOnlineInfo">
SELECT Imei as imei,STATUS as status,sendTime,offlineTime
FROM device_user
WHERE project_id = #{projectId}
AND status = '离线'
<if test="imeiList != null and imeiList.size() > 0">
AND imei IN
<foreach collection="imeiList" item="imei" open="(" separator="," close=")">
#{imei}
</foreach>
</if>
</select>
<!-- 新增记录 -->
<insert id="insertTopsailTransmitLog" parameterType="com.topsail.scheduletask.pojo.TopsailTransmitLog">


Loading…
Cancel
Save