Explorar el Código

系统告警相关功能实现

wukai hace 2 años
padre
commit
b4942d92ce

+ 0 - 0
doc-biz/src/main/java/com/doc/task/BackupTask.java → doc-admin/src/main/java/com/doc/task/BackupTask.java


+ 71 - 0
doc-admin/src/main/java/com/doc/task/MonitorTask.java

@@ -0,0 +1,71 @@
+package com.doc.task;
+
+import com.doc.common.enums.AlarmType;
+import com.doc.common.enums.EventLevel;
+import com.doc.framework.web.domain.Server;
+import com.doc.system.domain.SysAlarm;
+import com.doc.system.service.ISysAlarmService;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * 定时任务调度测试
+ *
+ * @author ruoyi
+ */
+@Component("monitorTask")
+public class MonitorTask {
+    @Resource
+    private ISysAlarmService alarmService;
+
+    public void monitor() {
+        try {
+            Server server = new Server();
+            server.copyTo();
+            double cpuUsed = server.getCpu().getUsed();
+            double hddUsed = server.getHdd().getUsed();
+            double memUsed = server.getMem().getUsed();
+            //cpu
+            SysAlarm alarm = new SysAlarm();
+            alarm.setAlarmLevel(level(cpuUsed).ordinal());
+            alarm.setAlarmType(AlarmType.MONITOR_CPU.ordinal());
+            alarm.setAlarmContent("当前CPU使用率:" + cpuUsed + "%");
+            alarm.setRemark(cpuUsed + "");
+            alarm.setAlarmTime(new Date());
+            alarmService.insertSysAlarm(alarm);
+            //硬盘
+            alarm = new SysAlarm();
+            alarm.setAlarmLevel(level(hddUsed).ordinal());
+            alarm.setAlarmType(AlarmType.MONITOR_HDD.ordinal());
+            alarm.setAlarmContent("硬盘使用已达:" + hddUsed + "%,剩余容量:" + server.getHdd().getFree());
+            alarm.setRemark(hddUsed + "");
+            alarm.setAlarmTime(new Date());
+            alarmService.insertSysAlarm(alarm);
+            //内存
+            alarm = new SysAlarm();
+            alarm.setAlarmLevel(level(memUsed).ordinal());
+            alarm.setAlarmType(AlarmType.MONITOR_MEM.ordinal());
+            alarm.setAlarmContent("当前内存使用率:" + memUsed + "%");
+            alarm.setRemark(memUsed + "");
+            alarm.setAlarmTime(new Date());
+            alarmService.insertSysAlarm(alarm);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    private EventLevel level(double used) {
+        int high = 80;
+        int middle = 60;
+        EventLevel level = EventLevel.LOW;
+        if (used > high) {
+            level = EventLevel.HIGH;
+        } else if (used > middle) {
+            level = EventLevel.MIDDLE;
+        }
+        return level;
+    }
+}

+ 1 - 1
doc-admin/src/main/java/com/doc/web/controller/system/SysAlarmController.java

@@ -12,7 +12,7 @@ import com.doc.system.domain.SysAlarm;
 import com.doc.system.domain.SysConfig;
 import com.doc.system.service.ISysAlarmService;
 import com.doc.system.service.ISysConfigService;
-import com.doc.web.vo.AlarmVO;
+import com.doc.system.domain.vo.AlarmVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;

+ 70 - 0
doc-admin/src/main/java/com/doc/web/service/ISysAlarmSmsService.java

@@ -0,0 +1,70 @@
+package com.doc.web.service;
+
+import com.doc.system.domain.SysAlarmSms;
+
+import java.util.List;
+
+/**
+ * 系统告警短信发送Service接口
+ *
+ * @author wukai
+ * @date 2023-12-12
+ */
+public interface ISysAlarmSmsService {
+    /**
+     * 查询系统告警短信发送
+     *
+     * @param alarmId 系统告警短信发送主键
+     * @return 系统告警短信发送
+     */
+    public SysAlarmSms selectSysAlarmSmsByAlarmId(Long alarmId);
+
+    /**
+     * 查询系统告警短信发送列表
+     *
+     * @param sysAlarmSms 系统告警短信发送
+     * @return 系统告警短信发送集合
+     */
+    public List<SysAlarmSms> selectSysAlarmSmsList(SysAlarmSms sysAlarmSms);
+
+    /**
+     * 新增系统告警短信发送
+     *
+     * @param sysAlarmSms 系统告警短信发送
+     * @return 结果
+     */
+    public int insertSysAlarmSms(SysAlarmSms sysAlarmSms);
+
+    /**
+     * 修改系统告警短信发送
+     *
+     * @param sysAlarmSms 系统告警短信发送
+     * @return 结果
+     */
+    public int updateSysAlarmSms(SysAlarmSms sysAlarmSms);
+
+    /**
+     * 批量删除系统告警短信发送
+     *
+     * @param alarmIds 需要删除的系统告警短信发送主键集合
+     * @return 结果
+     */
+    public int deleteSysAlarmSmsByAlarmIds(Long[] alarmIds);
+
+    /**
+     * 删除系统告警短信发送信息
+     *
+     * @param alarmId 系统告警短信发送主键
+     * @return 结果
+     */
+    public int deleteSysAlarmSmsByAlarmId(Long alarmId);
+
+    /**
+     * 查询是否已经发送
+     *
+     * @param type   类型
+     * @param key 关键字
+     * @return
+     */
+    boolean isSend(int type, String key);
+}

+ 196 - 0
doc-admin/src/main/java/com/doc/web/service/impl/SysAlarmServiceImpl.java

@@ -0,0 +1,196 @@
+package com.doc.web.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.doc.common.enums.AlarmType;
+import com.doc.common.enums.EventLevel;
+import com.doc.common.utils.DateUtils;
+import com.doc.sms.TencentSmsService;
+import com.doc.system.domain.SysAlarm;
+import com.doc.system.domain.SysConfig;
+import com.doc.system.domain.vo.AlarmVO;
+import com.doc.system.mapper.SysAlarmMapper;
+import com.doc.system.service.ISysAlarmService;
+import com.doc.system.service.ISysConfigService;
+import com.doc.web.service.ISysAlarmSmsService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * 系统告警Service业务层处理
+ *
+ * @author wukai
+ * @date 2023-11-24
+ */
+@Service
+public class SysAlarmServiceImpl implements ISysAlarmService {
+    @Resource
+    private SysAlarmMapper sysAlarmMapper;
+    @Resource
+    private ISysConfigService sysConfigService;
+    @Resource
+    private ISysAlarmSmsService alarmSmsService;
+
+
+    /**
+     * 查询系统告警
+     *
+     * @param alarmId 系统告警主键
+     * @return 系统告警
+     */
+    @Override
+    public SysAlarm selectSysAlarmByAlarmId(Long alarmId) {
+        return sysAlarmMapper.selectSysAlarmByAlarmId(alarmId);
+    }
+
+    /**
+     * 查询系统告警列表
+     *
+     * @param sysAlarm 系统告警
+     * @return 系统告警
+     */
+    @Override
+    public List<SysAlarm> selectSysAlarmList(SysAlarm sysAlarm) {
+        return sysAlarmMapper.selectSysAlarmList(sysAlarm);
+    }
+
+    /**
+     * 新增系统告警
+     *
+     * @param sysAlarm 系统告警
+     * @return 结果
+     */
+    @Override
+    public int insertSysAlarm(SysAlarm sysAlarm) {
+        int r = sysAlarmMapper.insertSysAlarm(sysAlarm);
+        SysConfig config = sysConfigService.selectConfig("alarm.config");
+        AlarmVO vo = new AlarmVO();
+        try {
+            vo = JSONObject.parseObject(config.getConfigValue(), AlarmVO.class);
+            String open = "1";
+            //短信开启状态为1
+            if (!open.equals(vo.getStatus())) {
+                return r;
+            }
+
+            //1.先查询是否已经发送过短信
+            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()) {
+                    //发送短信
+                    TencentSmsService.send(TencentSmsService.PERFORMANCE_MONITORING, vo.getPhone(), "硬盘", "空间", sysAlarm.getRemark() + "%");
+                }
+            }
+            SysAlarm search = new SysAlarm();
+            search.setAlarmType(type);
+            search.setAlarmTime(new Date());
+            List<SysAlarm> list;
+            if (type == AlarmType.IP_ILLEGAL.ordinal()) {
+                search.setRemark(sysAlarm.getRemark());
+                list = sysAlarmMapper.selectSysAlarmList(search);
+                if (list.size() > vo.getIp_times()) {
+                    //发送短信
+                    TencentSmsService.send(TencentSmsService.ALARM_ILLEGAL, vo.getPhone(), DateUtils.getTime(), sysAlarm.getRemark(), "非法IP访问");
+                }
+            } else {
+                list = sysAlarmMapper.selectSysAlarmList(search);
+                AlarmVO finalVo = vo;
+                AtomicInteger times = new AtomicInteger();
+                list.forEach(alarm -> {
+                    double d = Double.parseDouble(alarm.getRemark());
+                    if (d > finalVo.getCpu_used()) {
+                        times.getAndIncrement();
+                    }
+                });
+                if (times.intValue() > finalVo.getCpu_times()) {
+                    //发送短信
+                    if (type == AlarmType.MONITOR_CPU.ordinal()) {
+                        TencentSmsService.send(TencentSmsService.PERFORMANCE_MONITORING, vo.getPhone(), "CPU", "当前", sysAlarm.getRemark() + "%");
+                    } else if (type == AlarmType.MONITOR_MEM.ordinal()) {
+                        TencentSmsService.send(TencentSmsService.PERFORMANCE_MONITORING, vo.getPhone(), "内存", "当前", sysAlarm.getRemark() + "%");
+
+                    }
+                }
+
+            }
+            //3.如果满足,则发送短信
+
+        } catch (
+                Exception ignored) {
+        }
+        return r;
+    }
+
+    /**
+     * 修改系统告警
+     *
+     * @param sysAlarm 系统告警
+     * @return 结果
+     */
+    @Override
+    public int updateSysAlarm(SysAlarm sysAlarm) {
+        return sysAlarmMapper.updateSysAlarm(sysAlarm);
+    }
+
+    /**
+     * 批量删除系统告警
+     *
+     * @param alarmIds 需要删除的系统告警主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSysAlarmByAlarmIds(Long[] alarmIds) {
+        return sysAlarmMapper.deleteSysAlarmByAlarmIds(alarmIds);
+    }
+
+    /**
+     * 删除系统告警信息
+     *
+     * @param alarmId 系统告警主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSysAlarmByAlarmId(Long alarmId) {
+        return sysAlarmMapper.deleteSysAlarmByAlarmId(alarmId);
+    }
+
+    /**
+     * 硬件监控
+     */
+    @Override
+    public void monitor() {
+        File[] roots = File.listRoots();
+        BigDecimal total = BigDecimal.ZERO;
+        BigDecimal used = BigDecimal.ZERO;
+        for (File f : roots) {
+            total = total.add(BigDecimal.valueOf(f.getTotalSpace()));
+            used = used.add(BigDecimal.valueOf(f.getUsableSpace()));
+        }
+
+        used = used.multiply(BigDecimal.valueOf(100)).divide(total, 2, RoundingMode.HALF_UP);
+        int high = 80;
+        int middle = 60;
+        EventLevel level = EventLevel.LOW;
+        if (used.intValue() > high) {
+            level = EventLevel.HIGH;
+        } else if (used.intValue() > middle) {
+            level = EventLevel.MIDDLE;
+        }
+        SysAlarm alarm = new SysAlarm();
+        alarm.setAlarmType(level.ordinal());
+        alarm.setAlarmContent("硬盘使用已达:" + used + "%");
+        alarm.setRemark(used.toString());
+        alarm.setAlarmTime(new Date());
+        insertSysAlarm(alarm);
+    }
+}

+ 0 - 24
doc-admin/src/main/java/com/doc/web/vo/AlarmVO.java

@@ -1,24 +0,0 @@
-package com.doc.web.vo;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * 用户树
- *
- * @author wukai
- * @date 2023/8/30 17:00
- */
-@Data
-@ApiModel(value = "AlarmVO", description = "告警配置")
-public class AlarmVO {
-    @ApiModelProperty("电话")
-    private String phone;
-    @ApiModelProperty("次数")
-    private Integer times;
-    @ApiModelProperty("容量")
-    private Integer used;
-
-
-}

+ 13 - 6
doc-admin/src/test/java/Test.java

@@ -1,4 +1,6 @@
 import java.io.File;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 
 /**
  * Test$
@@ -8,12 +10,17 @@ import java.io.File;
  */
 public class Test {
     public static void main(String[] args) {
-        try {
-            File f = new File("D:\\ruoyi\\uploadPath\\scanner\\user16\\test3.png");
-            System.err.println(f.getName());
-            System.err.println(f.getPath());
-        } catch (Exception e) {
-            e.printStackTrace();
+        long l = 1024 * 1024 * 1024;
+        File[] roots = File.listRoots();
+        BigDecimal total = BigDecimal.ZERO;
+        BigDecimal used = BigDecimal.ZERO;
+        for (File f : roots) {
+            total = total.add(BigDecimal.valueOf(f.getTotalSpace()));
+            used = used.add(BigDecimal.valueOf(f.getUsableSpace()));
         }
+
+//        df.format(use);
+        System.err.println(used + "\t" + total);
+        System.err.println(used.multiply(BigDecimal.valueOf(100)).divide(total, 2, RoundingMode.HALF_UP));
     }
 }

+ 11 - 3
doc-common/src/main/java/com/doc/common/enums/AlarmType.java

@@ -9,10 +9,18 @@ public enum AlarmType {
     /**
      * 非法访问
      */
-    ILLEGAL,
+    IP_ILLEGAL,
 
     /**
-     * 监控信息
+     * CPU监控信息
      */
-    MONITOR
+    MONITOR_CPU,
+    /**
+     * HDD监控信息
+     */
+    MONITOR_HDD,
+    /**
+     * 内存监控信息
+     */
+    MONITOR_MEM
 }

+ 3 - 1
doc-framework/src/main/java/com/doc/framework/interceptor/WhiteListInterceptor.java

@@ -5,6 +5,7 @@ import com.doc.common.enums.EventLevel;
 import com.doc.common.utils.StringUtils;
 import com.doc.common.utils.ip.IpUtils;
 import com.doc.system.domain.SysAlarm;
+import com.doc.system.domain.SysConfig;
 import com.doc.system.service.ISysAlarmService;
 import com.doc.system.service.ISysConfigService;
 import lombok.extern.slf4j.Slf4j;
@@ -43,9 +44,10 @@ public class WhiteListInterceptor implements HandlerInterceptor {
         if (IpUtils.isMatchedIp(whiteList, IpUtils.getIpAddr())) {
             return true;
         } else {
+            SysConfig config = configService.selectConfig("alarm.config");
             SysAlarm alarm = new SysAlarm();
             alarm.setAlarmLevel(EventLevel.HIGH.ordinal());
-            alarm.setAlarmType(AlarmType.ILLEGAL.ordinal());
+            alarm.setAlarmType(AlarmType.IP_ILLEGAL.ordinal());
             alarm.setAlarmContent("发现IP地址:(" + IpUtils.getIpAddr() + ")非法访问!");
             alarm.setAlarmTime(new Date());
             alarm.setRemark(IpUtils.getIpAddr());

+ 38 - 82
doc-framework/src/main/java/com/doc/framework/web/domain/Server.java

@@ -3,6 +3,7 @@ package com.doc.framework.web.domain;
 import com.doc.common.utils.Arith;
 import com.doc.common.utils.ip.IpUtils;
 import com.doc.framework.web.domain.server.*;
+import lombok.Data;
 import oshi.SystemInfo;
 import oshi.hardware.CentralProcessor;
 import oshi.hardware.CentralProcessor.TickType;
@@ -13,6 +14,8 @@ import oshi.software.os.OSFileStore;
 import oshi.software.os.OperatingSystem;
 import oshi.util.Util;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.UnknownHostException;
 import java.util.LinkedList;
 import java.util.List;
@@ -20,17 +23,21 @@ import java.util.Properties;
 
 /**
  * 服务器相关信息
- * 
+ *
  * @author ruoyi
  */
-public class Server
-{
+@Data
+public class Server {
     private static final int OSHI_WAIT_SECOND = 1000;
-    
+
     /**
      * CPU相关信息
      */
     private Cpu cpu = new Cpu();
+    /**
+     * Hdd相关信息
+     */
+    private Hdd hdd = new Hdd();
 
     /**
      * 內存相关信息
@@ -47,63 +54,13 @@ public class Server
      */
     private Sys sys = new Sys();
 
+
     /**
      * 磁盘相关信息
      */
     private List<SysFile> sysFiles = new LinkedList<SysFile>();
 
-    public Cpu getCpu()
-    {
-        return cpu;
-    }
-
-    public void setCpu(Cpu cpu)
-    {
-        this.cpu = cpu;
-    }
-
-    public Mem getMem()
-    {
-        return mem;
-    }
-
-    public void setMem(Mem mem)
-    {
-        this.mem = mem;
-    }
-
-    public Jvm getJvm()
-    {
-        return jvm;
-    }
-
-    public void setJvm(Jvm jvm)
-    {
-        this.jvm = jvm;
-    }
-
-    public Sys getSys()
-    {
-        return sys;
-    }
-
-    public void setSys(Sys sys)
-    {
-        this.sys = sys;
-    }
-
-    public List<SysFile> getSysFiles()
-    {
-        return sysFiles;
-    }
-
-    public void setSysFiles(List<SysFile> sysFiles)
-    {
-        this.sysFiles = sysFiles;
-    }
-
-    public void copyTo() throws Exception
-    {
+    public void copyTo() throws Exception {
         SystemInfo si = new SystemInfo();
         HardwareAbstractionLayer hal = si.getHardware();
 
@@ -121,8 +78,7 @@ public class Server
     /**
      * 设置CPU信息
      */
-    private void setCpuInfo(CentralProcessor processor)
-    {
+    private void setCpuInfo(CentralProcessor processor) {
         // CPU信息
         long[] prevTicks = processor.getSystemCpuLoadTicks();
         Util.sleep(OSHI_WAIT_SECOND);
@@ -147,8 +103,7 @@ public class Server
     /**
      * 设置内存信息
      */
-    private void setMemInfo(GlobalMemory memory)
-    {
+    private void setMemInfo(GlobalMemory memory) {
         mem.setTotal(memory.getTotal());
         mem.setUsed(memory.getTotal() - memory.getAvailable());
         mem.setFree(memory.getAvailable());
@@ -157,8 +112,7 @@ public class Server
     /**
      * 设置服务器信息
      */
-    private void setSysInfo()
-    {
+    private void setSysInfo() {
         Properties props = System.getProperties();
         sys.setComputerName(IpUtils.getHostName());
         sys.setComputerIp(IpUtils.getHostIp());
@@ -170,8 +124,7 @@ public class Server
     /**
      * 设置Java虚拟机
      */
-    private void setJvmInfo() throws UnknownHostException
-    {
+    private void setJvmInfo() throws UnknownHostException {
         Properties props = System.getProperties();
         jvm.setTotal(Runtime.getRuntime().totalMemory());
         jvm.setMax(Runtime.getRuntime().maxMemory());
@@ -183,15 +136,19 @@ public class Server
     /**
      * 设置磁盘信息
      */
-    private void setSysFiles(OperatingSystem os)
-    {
+    private void setSysFiles(OperatingSystem os) {
         FileSystem fileSystem = os.getFileSystem();
         List<OSFileStore> fsArray = fileSystem.getFileStores();
-        for (OSFileStore fs : fsArray)
-        {
+        BigDecimal hddTotal = BigDecimal.ZERO;
+        BigDecimal hddUsed = BigDecimal.ZERO;
+        BigDecimal hddFree = BigDecimal.ZERO;
+        for (OSFileStore fs : fsArray) {
             long free = fs.getUsableSpace();
             long total = fs.getTotalSpace();
             long used = total - free;
+            hddTotal = hddTotal.add(BigDecimal.valueOf(total));
+            hddUsed = hddUsed.add(BigDecimal.valueOf(used));
+            hddFree = hddFree.add(BigDecimal.valueOf(free));
             SysFile sysFile = new SysFile();
             sysFile.setDirName(fs.getMount());
             sysFile.setSysTypeName(fs.getType());
@@ -202,35 +159,34 @@ public class Server
             sysFile.setUsage(Arith.mul(Arith.div(used, total, 4), 100));
             sysFiles.add(sysFile);
         }
+
+        try {
+            hddUsed = hddUsed.multiply(BigDecimal.valueOf(100)).divide(hddTotal, 2, RoundingMode.HALF_UP);
+            hdd.setUsed(hddUsed.doubleValue());
+            hdd.setFree(convertFileSize(hddFree.longValue()));
+        } catch (Exception ignored) {
+        }
     }
 
     /**
      * 字节转换
-     * 
+     *
      * @param size 字节大小
      * @return 转换后值
      */
-    public String convertFileSize(long size)
-    {
+    public String convertFileSize(long size) {
         long kb = 1024;
         long mb = kb * 1024;
         long gb = mb * 1024;
-        if (size >= gb)
-        {
+        if (size >= gb) {
             return String.format("%.1f GB", (float) size / gb);
-        }
-        else if (size >= mb)
-        {
+        } else if (size >= mb) {
             float f = (float) size / mb;
             return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
-        }
-        else if (size >= kb)
-        {
+        } else if (size >= kb) {
             float f = (float) size / kb;
             return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
-        }
-        else
-        {
+        } else {
             return String.format("%d B", size);
         }
     }

+ 29 - 0
doc-framework/src/main/java/com/doc/framework/web/domain/server/Hdd.java

@@ -0,0 +1,29 @@
+package com.doc.framework.web.domain.server;
+
+import lombok.Data;
+
+/**
+ * 硬盘相关信息
+ *
+ * @author wukai
+ */
+@Data
+public class Hdd {
+
+    /**
+     * HDD总容量
+     */
+    private double total;
+
+
+    /**
+     * HDD用户使用率
+     */
+    private double used;
+    /**
+     * HDD剩余容量
+     */
+
+    private String free;
+
+}

+ 93 - 0
doc-system/src/main/java/com/doc/system/domain/SysAlarmSms.java

@@ -0,0 +1,93 @@
+package com.doc.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.doc.common.annotation.Excel;
+import com.doc.common.core.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 系统告警短信发送对象 sys_alarm_sms
+ *
+ * @author wukai
+ * @date 2023-12-12
+ */
+@ApiModel(value = "SysAlarmSms", description = "系统告警短信发送")
+public class SysAlarmSms extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 告警主键 */
+    @ApiModelProperty("告警主键")
+    @TableId
+    private Long alarmId;
+
+    /** 告警关键字 */
+    @ApiModelProperty("告警关键字")
+    @Excel(name = "告警关键字")
+    private String alartKey;
+
+    /** 告警类型 */
+    @ApiModelProperty("告警类型")
+    @Excel(name = "告警类型")
+    private Long alarmType;
+
+    /** 告警时间 */
+    @ApiModelProperty("告警时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "告警时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date sendTime;
+
+    public void setAlarmId(Long alarmId)
+    {
+        this.alarmId = alarmId;
+    }
+
+    public Long getAlarmId()
+    {
+        return alarmId;
+    }
+    public void setAlartKey(String alartKey)
+    {
+        this.alartKey = alartKey;
+    }
+
+    public String getAlartKey()
+    {
+        return alartKey;
+    }
+    public void setAlarmType(Long alarmType)
+    {
+        this.alarmType = alarmType;
+    }
+
+    public Long getAlarmType()
+    {
+        return alarmType;
+    }
+    public void setSendTime(Date sendTime)
+    {
+        this.sendTime = sendTime;
+    }
+
+    public Date getSendTime()
+    {
+        return sendTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("alarmId", getAlarmId())
+            .append("alartKey", getAlartKey())
+            .append("alarmType", getAlarmType())
+            .append("sendTime", getSendTime())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 34 - 0
doc-system/src/main/java/com/doc/system/domain/vo/AlarmVO.java

@@ -0,0 +1,34 @@
+package com.doc.system.domain.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 用户树
+ *
+ * @author wukai
+ * @date 2023/8/30 17:00
+ */
+@Data
+@ApiModel(value = "AlarmVO", description = "告警配置")
+public class AlarmVO {
+    @ApiModelProperty("是否开启短信")
+    private String status;
+    @ApiModelProperty("电话")
+    private String phone;
+    @ApiModelProperty("IP非法访问次数")
+    private Integer ip_times;
+    @ApiModelProperty("硬盘使用率")
+    private Integer hdd_used;
+    @ApiModelProperty("CPU周期数")
+    private Integer cpu_times;
+    @ApiModelProperty("CPU使用率")
+    private Integer cpu_used;
+    @ApiModelProperty("内存周期数")
+    private Integer mem_times;
+    @ApiModelProperty("内存使用率")
+    private Integer mem_used;
+
+
+}

+ 62 - 0
doc-system/src/main/java/com/doc/system/mapper/SysAlarmSmsMapper.java

@@ -0,0 +1,62 @@
+package com.doc.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doc.system.domain.SysAlarmSms;
+
+import java.util.List;
+
+/**
+ * 系统告警短信发送Mapper接口
+ *
+ * @author wukai
+ * @date 2023-12-12
+ */
+public interface SysAlarmSmsMapper extends BaseMapper<SysAlarmSms> {
+    /**
+     * 查询系统告警短信发送
+     *
+     * @param alarmId 系统告警短信发送主键
+     * @return 系统告警短信发送
+     */
+    public SysAlarmSms selectSysAlarmSmsByAlarmId(Long alarmId);
+
+    /**
+     * 查询系统告警短信发送列表
+     *
+     * @param sysAlarmSms 系统告警短信发送
+     * @return 系统告警短信发送集合
+     */
+    public List<SysAlarmSms> selectSysAlarmSmsList(SysAlarmSms sysAlarmSms);
+
+    /**
+     * 新增系统告警短信发送
+     *
+     * @param sysAlarmSms 系统告警短信发送
+     * @return 结果
+     */
+    public int insertSysAlarmSms(SysAlarmSms sysAlarmSms);
+
+    /**
+     * 修改系统告警短信发送
+     *
+     * @param sysAlarmSms 系统告警短信发送
+     * @return 结果
+     */
+    public int updateSysAlarmSms(SysAlarmSms sysAlarmSms);
+
+    /**
+     * 删除系统告警短信发送
+     *
+     * @param alarmId 系统告警短信发送主键
+     * @return 结果
+     */
+    public int deleteSysAlarmSmsByAlarmId(Long alarmId);
+
+    /**
+     * 批量删除系统告警短信发送
+     *
+     * @param alarmIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteSysAlarmSmsByAlarmIds(Long[] alarmIds);
+}

+ 0 - 87
doc-system/src/main/java/com/doc/system/service/impl/SysAlarmServiceImpl.java

@@ -1,87 +0,0 @@
-package com.doc.system.service.impl;
-
-import com.doc.system.domain.SysAlarm;
-import com.doc.system.mapper.SysAlarmMapper;
-import com.doc.system.service.ISysAlarmService;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.List;
-
-/**
- * 系统告警Service业务层处理
- *
- * @author wukai
- * @date 2023-11-24
- */
-@Service
-public class SysAlarmServiceImpl implements ISysAlarmService {
-    @Resource
-    private SysAlarmMapper sysAlarmMapper;
-
-    /**
-     * 查询系统告警
-     *
-     * @param alarmId 系统告警主键
-     * @return 系统告警
-     */
-    @Override
-    public SysAlarm selectSysAlarmByAlarmId(Long alarmId) {
-        return sysAlarmMapper.selectSysAlarmByAlarmId(alarmId);
-    }
-
-    /**
-     * 查询系统告警列表
-     *
-     * @param sysAlarm 系统告警
-     * @return 系统告警
-     */
-    @Override
-    public List<SysAlarm> selectSysAlarmList(SysAlarm sysAlarm) {
-        return sysAlarmMapper.selectSysAlarmList(sysAlarm);
-    }
-
-    /**
-     * 新增系统告警
-     *
-     * @param sysAlarm 系统告警
-     * @return 结果
-     */
-    @Override
-    public int insertSysAlarm(SysAlarm sysAlarm) {
-        return sysAlarmMapper.insertSysAlarm(sysAlarm);
-    }
-
-    /**
-     * 修改系统告警
-     *
-     * @param sysAlarm 系统告警
-     * @return 结果
-     */
-    @Override
-    public int updateSysAlarm(SysAlarm sysAlarm) {
-        return sysAlarmMapper.updateSysAlarm(sysAlarm);
-    }
-
-    /**
-     * 批量删除系统告警
-     *
-     * @param alarmIds 需要删除的系统告警主键
-     * @return 结果
-     */
-    @Override
-    public int deleteSysAlarmByAlarmIds(Long[] alarmIds) {
-        return sysAlarmMapper.deleteSysAlarmByAlarmIds(alarmIds);
-    }
-
-    /**
-     * 删除系统告警信息
-     *
-     * @param alarmId 系统告警主键
-     * @return 结果
-     */
-    @Override
-    public int deleteSysAlarmByAlarmId(Long alarmId) {
-        return sysAlarmMapper.deleteSysAlarmByAlarmId(alarmId);
-    }
-}

+ 105 - 0
doc-system/src/main/java/com/doc/system/service/impl/SysAlarmSmsServiceImpl.java

@@ -0,0 +1,105 @@
+package com.doc.system.service.impl;
+
+import com.doc.system.domain.SysAlarmSms;
+import com.doc.system.mapper.SysAlarmSmsMapper;
+import com.doc.system.service.ISysAlarmSmsService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 系统告警短信发送Service业务层处理
+ *
+ * @author wukai
+ * @date 2023-12-12
+ */
+@Service
+public class SysAlarmSmsServiceImpl implements ISysAlarmSmsService {
+    @Resource
+    private SysAlarmSmsMapper sysAlarmSmsMapper;
+
+    /**
+     * 查询系统告警短信发送
+     *
+     * @param alarmId 系统告警短信发送主键
+     * @return 系统告警短信发送
+     */
+    @Override
+    public SysAlarmSms selectSysAlarmSmsByAlarmId(Long alarmId) {
+        return sysAlarmSmsMapper.selectSysAlarmSmsByAlarmId(alarmId);
+    }
+
+    /**
+     * 查询系统告警短信发送列表
+     *
+     * @param sysAlarmSms 系统告警短信发送
+     * @return 系统告警短信发送
+     */
+    @Override
+    public List<SysAlarmSms> selectSysAlarmSmsList(SysAlarmSms sysAlarmSms) {
+        return sysAlarmSmsMapper.selectSysAlarmSmsList(sysAlarmSms);
+    }
+
+    /**
+     * 新增系统告警短信发送
+     *
+     * @param sysAlarmSms 系统告警短信发送
+     * @return 结果
+     */
+    @Override
+    public int insertSysAlarmSms(SysAlarmSms sysAlarmSms) {
+        return sysAlarmSmsMapper.insertSysAlarmSms(sysAlarmSms);
+    }
+
+    /**
+     * 修改系统告警短信发送
+     *
+     * @param sysAlarmSms 系统告警短信发送
+     * @return 结果
+     */
+    @Override
+    public int updateSysAlarmSms(SysAlarmSms sysAlarmSms) {
+        return sysAlarmSmsMapper.updateSysAlarmSms(sysAlarmSms);
+    }
+
+    /**
+     * 批量删除系统告警短信发送
+     *
+     * @param alarmIds 需要删除的系统告警短信发送主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSysAlarmSmsByAlarmIds(Long[] alarmIds) {
+        return sysAlarmSmsMapper.deleteSysAlarmSmsByAlarmIds(alarmIds);
+    }
+
+    /**
+     * 删除系统告警短信发送信息
+     *
+     * @param alarmId 系统告警短信发送主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSysAlarmSmsByAlarmId(Long alarmId) {
+        return sysAlarmSmsMapper.deleteSysAlarmSmsByAlarmId(alarmId);
+    }
+
+    /**
+     * 查询是否已经发送
+     *
+     * @param type 类型
+     * @param key  关键字
+     * @return
+     */
+    @Override
+    public boolean isSend(int type, String key) {
+        SysAlarmSms obj = new SysAlarmSms();
+        obj.setAlarmType((long) type);
+        obj.setAlartKey(key);
+        obj.setSendTime(new Date());
+        List list = sysAlarmSmsMapper.selectSysAlarmSmsList(obj);
+        return list.size() > 0;
+    }
+}

+ 2 - 1
doc-system/src/main/resources/mapper/system/SysAlarmMapper.xml

@@ -26,8 +26,9 @@
             </if>
             <if test="alarmLevel != null ">and ALARM_LEVEL = #{alarmLevel}</if>
             <if test="alarmType != null ">and ALARM_TYPE = #{alarmType}</if>
-            <if test="alarmTime != null ">and ALARM_TIME = #{alarmTime}</if>
+            <if test="alarmTime != null ">and DATE(ALARM_TIME) = #{alarmTime,jdbcType=DATE}</if>
         </where>
+        order by alarm_time desc
     </select>
 
     <select id="selectSysAlarmByAlarmId" parameterType="Long" resultMap="SysAlarmResult">

+ 74 - 0
doc-system/src/main/resources/mapper/system/SysAlarmSmsMapper.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.doc.system.mapper.SysAlarmSmsMapper">
+
+    <resultMap type="SysAlarmSms" id="SysAlarmSmsResult">
+        <result property="alarmId" column="ALARM_ID"/>
+        <result property="alartKey" column="ALART_KEY"/>
+        <result property="alarmType" column="ALARM_TYPE"/>
+        <result property="sendTime" column="SEND_TIME"/>
+        <result property="remark" column="REMARK"/>
+    </resultMap>
+
+    <sql id="selectSysAlarmSmsVo">
+        select ALARM_ID, ALART_KEY, ALARM_TYPE, SEND_TIME, REMARK
+        from sys_alarm_sms
+    </sql>
+
+    <select id="selectSysAlarmSmsList" parameterType="SysAlarmSms" resultMap="SysAlarmSmsResult">
+        <include refid="selectSysAlarmSmsVo"/>
+        <where>
+            <if test="alartKey != null  and alartKey != ''">and ALART_KEY = #{alartKey}</if>
+            <if test="alarmType != null ">and ALARM_TYPE = #{alarmType}</if>
+            <if test="sendTime != null ">and DATE(SEND_TIME) = #{sendTime,jdbcType=DATE}</if>
+            <if test="remark != null  and remark != ''">and REMARK = #{remark}</if>
+        </where>
+    </select>
+
+    <select id="selectSysAlarmSmsByAlarmId" parameterType="Long" resultMap="SysAlarmSmsResult">
+        <include refid="selectSysAlarmSmsVo"/>
+        where ALARM_ID = #{alarmId}
+    </select>
+
+    <insert id="insertSysAlarmSms" parameterType="SysAlarmSms" useGeneratedKeys="true" keyProperty="alarmId">
+        insert into sys_alarm_sms
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="alartKey != null">ALART_KEY,</if>
+            <if test="alarmType != null">ALARM_TYPE,</if>
+            <if test="sendTime != null">SEND_TIME,</if>
+            <if test="remark != null">REMARK,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="alartKey != null">#{alartKey},</if>
+            <if test="alarmType != null">#{alarmType},</if>
+            <if test="sendTime != null">#{sendTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+    <update id="updateSysAlarmSms" parameterType="SysAlarmSms">
+        update sys_alarm_sms
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="alartKey != null">ALART_KEY = #{alartKey},</if>
+            <if test="alarmType != null">ALARM_TYPE = #{alarmType},</if>
+            <if test="sendTime != null">SEND_TIME = #{sendTime},</if>
+            <if test="remark != null">REMARK = #{remark},</if>
+        </trim>
+        where ALARM_ID = #{alarmId}
+    </update>
+
+    <delete id="deleteSysAlarmSmsByAlarmId" parameterType="Long">
+        delete
+        from sys_alarm_sms
+        where ALARM_ID = #{alarmId}
+    </delete>
+
+    <delete id="deleteSysAlarmSmsByAlarmIds" parameterType="String">
+        delete from sys_alarm_sms where ALARM_ID in
+        <foreach item="alarmId" collection="array" open="(" separator="," close=")">
+            #{alarmId}
+        </foreach>
+    </delete>
+</mapper>