Prechádzať zdrojové kódy

还是处理短信BUG

wukai 1 rok pred
rodič
commit
17f6512af2

+ 64 - 39
doc-system/src/main/java/com/doc/system/service/impl/SysAlarmServiceImpl.java

@@ -65,6 +65,16 @@ public class SysAlarmServiceImpl implements ISysAlarmService {
         return sysAlarmMapper.selectSysAlarmList(sysAlarm);
     }
 
+    private AlarmVO getConfig() {
+        SysConfig config = sysConfigService.selectConfig("alarm.config");
+        String value = config.getConfigValue();
+        //先解压缩,再SM2解密
+        value = Tools.uncompress(value);
+        value = Sm2Util.decrypt(value);
+        return JSONObject.parseObject(value, AlarmVO.class);
+
+    }
+
     /**
      * 新增系统告警
      *
@@ -74,30 +84,32 @@ public class SysAlarmServiceImpl implements ISysAlarmService {
     @Override
     public int insertSysAlarm(SysAlarm sysAlarm) {
         int r = sysAlarmMapper.insertSysAlarm(sysAlarm);
-        SysConfig config = sysConfigService.selectConfig("alarm.config");
-        try {
-            String value = config.getConfigValue();
-            //先解压缩,再SM2解密
-            value = Tools.uncompress(value);
-            value = Sm2Util.decrypt(value);
-            AlarmVO vo = JSONObject.parseObject(value, AlarmVO.class);
-            String open = "1";
-            //短信开启状态为1
-            if (!open.equals(vo.getStatus())) {
-                return r;
-            }
+        AlarmVO vo = getConfig();
+        //短信开启状态为1
+        String open = "1";
+        if (open.equals(vo.getStatus())) {
+            //如果告警短信开启,则处理后续短信发送相关内容
+            processAndSendSMS(sysAlarm, vo);
+        }
+        return r;
+    }
+
+    /**
+     * 处理短信发送相关
+     *
+     * @param sysAlarm 告警对象
+     * @param config   告警配置
+     */
 
-            //1.先查询是否已经发送过短信
+    private void processAndSendSMS(SysAlarm sysAlarm, AlarmVO config) {
+        try {
             int type = sysAlarm.getAlarmType();
-            if (alarmSmsService.isSend(type, sysAlarm.getRemark())) {
-                return r;
-            }
-            //2.在查询是否满足发送短信的条件
+
+            //查询是否满足发送短信的条件
             if (type == AlarmType.MONITOR_HDD.ordinal()) {
-                if (Double.parseDouble(sysAlarm.getRemark()) > vo.getHdd_used()) {
-                    insertRecord(sysAlarm);
-                    //发送短信
-                    smsService.send(SmsType.PERFORMANCE_MONITORING, vo.getPhone(), "硬盘", "空间", sysAlarm.getRemark() + "%");
+                if (Double.parseDouble(sysAlarm.getRemark()) > config.getHdd_used()) {
+                    String key = "hdd";
+                    sendProcess(type, key, SmsType.PERFORMANCE_MONITORING, config.getPhone(), "硬盘", "空间", sysAlarm.getRemark() + "%");
                 }
             }
             SysAlarm search = new SysAlarm();
@@ -108,10 +120,8 @@ public class SysAlarmServiceImpl implements ISysAlarmService {
                 search.setRemark(sysAlarm.getRemark());
                 list = sysAlarmMapper.selectSysAlarmList(search);
                 String content = sysAlarm.getRemark().replace(".", "-");
-                if (list.size() > vo.getIp_times()) {
-                    insertRecord(sysAlarm);
-                    //发送短信
-                    smsService.send(SmsType.ALARM_ILLEGAL, vo.getPhone(), DateUtils.getTime(), content, "多次非法访问");
+                if (list.size() > config.getIp_times()) {
+                    sendProcess(type, content, SmsType.ALARM_ILLEGAL, config.getPhone(), DateUtils.getTime(), content, "多次非法访问");
                 }
             } else {
                 list = sysAlarmMapper.selectSysAlarmList(search);
@@ -119,13 +129,13 @@ public class SysAlarmServiceImpl implements ISysAlarmService {
                     AtomicInteger times = new AtomicInteger();
                     list.forEach(alarm -> {
                         double d = Double.parseDouble(alarm.getRemark());
-                        if (d > vo.getCpu_used()) {
+                        if (d > config.getCpu_used()) {
                             times.getAndIncrement();
                         }
                     });
-                    if (times.intValue() > vo.getCpu_times()) {
-                        insertRecord(sysAlarm);
-                        smsService.send(SmsType.PERFORMANCE_MONITORING, vo.getPhone(), "CPU", "当前", sysAlarm.getRemark() + "%");
+                    if (times.intValue() > config.getCpu_times()) {
+                        String key = "cpu";
+                        sendProcess(type, key, SmsType.PERFORMANCE_MONITORING, config.getPhone(), "CPU", "当前", sysAlarm.getRemark() + "%");
                     }
                 }
 
@@ -133,31 +143,46 @@ public class SysAlarmServiceImpl implements ISysAlarmService {
                     AtomicInteger times = new AtomicInteger();
                     list.forEach(alarm -> {
                         double d = Double.parseDouble(alarm.getRemark());
-                        if (d > vo.getMem_used()) {
+                        if (d > config.getMem_used()) {
                             times.getAndIncrement();
                         }
                     });
-                    if (times.intValue() > vo.getMem_times()) {
-                        insertRecord(sysAlarm);
-                        smsService.send(SmsType.PERFORMANCE_MONITORING, vo.getPhone(), "内存", "当前", sysAlarm.getRemark() + "%");
+                    if (times.intValue() > config.getMem_times()) {
+                        String key = "mem";
+                        sendProcess(type, key, SmsType.PERFORMANCE_MONITORING, config.getPhone(), "内存", "当前", sysAlarm.getRemark() + "%");
                     }
                 }
 
             }
-            //3.如果满足,则发送短信
-
         } catch (Exception e) {
             e.printStackTrace();
         }
-        return r;
     }
 
-    private void insertRecord(SysAlarm alarm) {
+
+    /**
+     * 短信发送处理
+     *
+     * @param type    类型
+     * @param key     关键字
+     * @param smsType 短信类型
+     * @param phone   电话号码
+     * @param params  参数
+     */
+    private void sendProcess(int type, String key, SmsType smsType, String phone, String... params) {
+        if (alarmSmsService.isSend(type, key)) {
+            //当日已发送过同类型的短信,则不作处理
+            return;
+        }
+//        插入告警短信记录,以保证每天只发送一次
         SysAlarmSms alarmSms = new SysAlarmSms();
         alarmSms.setSendTime(new Date());
-        alarmSms.setAlarmType((long) alarm.getAlarmType());
-        alarmSms.setAlartKey(alarm.getRemark());
+        alarmSms.setAlarmType((long) type);
+        alarmSms.setAlartKey(key);
         alarmSmsService.insertSysAlarmSms(alarmSms);
+
+        smsService.send(smsType, phone, params);
+
     }
 
     /**

+ 3 - 1
doc-system/src/main/java/com/doc/system/service/impl/SysAlarmSmsServiceImpl.java

@@ -97,7 +97,9 @@ public class SysAlarmSmsServiceImpl implements ISysAlarmSmsService {
     public boolean isSend(int type, String key) {
         SysAlarmSms obj = new SysAlarmSms();
         obj.setAlarmType((long) type);
-        obj.setAlartKey(key);
+        if (key != null) {
+            obj.setAlartKey(key);
+        }
         obj.setSendTime(new Date());
         List list = sysAlarmSmsMapper.selectSysAlarmSmsList(obj);
         return list.size() > 0;