Quellcode durchsuchen

Merge branch 'master' of http://124.70.58.209:3000/ytrd-project-management/VehicleMonitor

hexiao vor 2 Jahren
Ursprung
Commit
91d69626da
21 geänderte Dateien mit 598 neuen und 199 gelöschten Zeilen
  1. 14 30
      business-service/src/main/java/com/ozs/entity/MsgAlarm.java
  2. 20 10
      business-service/src/main/java/com/ozs/entity/MsgAlarmFrequency.java
  3. 12 24
      business-service/src/main/java/com/ozs/entity/vo/AlarmStatisticDto.java
  4. 16 20
      business-service/src/main/java/com/ozs/entity/vo/AlarmStatisticVo.java
  5. 1 1
      business-service/src/main/java/com/ozs/entity/vo/BaseCameraManagementHomeVo.java
  6. 1 1
      business-service/src/main/java/com/ozs/entity/vo/HistoricalAlarmVo.java
  7. 2 17
      business-service/src/main/java/com/ozs/entity/vo/MsgAlarmResp.java
  8. 2 5
      business-service/src/main/java/com/ozs/entity/vo/MsgAlarmVo.java
  9. 1 4
      business-service/src/main/java/com/ozs/entity/vo/MsgAppPushVo.java
  10. 2 2
      business-service/src/main/java/com/ozs/service/impl/BaseCameraManagementServiceImpl.java
  11. 17 22
      business-service/src/main/resources/mapper/MsgAlarmMapper.xml
  12. 0 3
      business-service/src/main/resources/mapper/MsgAppPushMapper.xml
  13. 2 2
      business-service/src/main/resources/mapper/MsgWebPushMapper.xml
  14. 15 18
      vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java
  15. 21 40
      vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java
  16. 111 0
      vehicle-admin/src/main/java/com/ozs/web/controller/monitor/CacheController.java
  17. 27 0
      vehicle-admin/src/main/java/com/ozs/web/controller/monitor/ServerController.java
  18. 122 0
      vehicle-admin/src/main/java/com/ozs/web/controller/monitor/SysLoginInfoController.java
  19. 116 0
      vehicle-admin/src/main/java/com/ozs/web/controller/monitor/SysOperlogController.java
  20. 89 0
      vehicle-admin/src/main/java/com/ozs/web/controller/monitor/SysUserOnlineController.java
  21. 7 0
      vehicle-admin/src/main/resources/mybatis/mybatis-config.xml

+ 14 - 30
business-service/src/main/java/com/ozs/entity/MsgAlarm.java

@@ -69,6 +69,12 @@ public class MsgAlarm extends BaseEntity implements Serializable {
     @Excel(name = "报警内容")
     private String content;
 
+    /**
+     * 报警级别
+     */
+    @Excel(name = "报警级别")
+    private Integer alarmLevel;
+
     /**
      * 报警置信度(百分比)
      */
@@ -80,21 +86,11 @@ public class MsgAlarm extends BaseEntity implements Serializable {
     private Integer lineDir;
 
     /**
-     * 报警病害类型(目前只有1泥石流,后续可扩展使用
+     * 报警病害类型(1泥石流2异物侵线 3断轨监测
      */
     private Integer alarmType;
-
-    /**
-     * 报警病害属性(可以给出泥石流的框定范围)
-     */
-    @Excel(name = "报警病害属性")
-    private String alarmAttr;
-
-    /**
-     * 报警图片地址
-     */
-    @Excel(name = "报警图片地址")
-    private String imageUrl;
+    
+    
 
     /**
      * 解除人
@@ -111,7 +107,7 @@ public class MsgAlarm extends BaseEntity implements Serializable {
     /**
      * 报警是否解除 1已解除2未解除
      */
-    private Integer isLock;
+    private Integer isRelease;
 
     /**
      * 创建人
@@ -142,22 +138,10 @@ public class MsgAlarm extends BaseEntity implements Serializable {
     private String remark;
 
     /**
-     * 解除报警类型1真实报警2误报警
-     */
-    private Integer releasedType;
-
-    /**
-     * 解除原因
+     * 解除内容
      */
-    @Excel(name = "解除原因")
-    private String releasedReason;
-
-    /**
-     * 解除报警类型名称   1真实报警2误报警
-     */
-    @TableField(exist = false)
-    @Excel(name = "解除报警类型")
-    private String releasedTypeName;
+    @Excel(name = "解除内容")
+    private String releaseContent;
 
     /**
      * 线路名称
@@ -235,5 +219,5 @@ public class MsgAlarm extends BaseEntity implements Serializable {
      */
     @Excel(name = "报警是否解除")
     @TableField(exist = false)
-    private String  isLockName;
+    private String  isReleaseName;
 }

+ 20 - 10
business-service/src/main/java/com/ozs/entity/MsgAlarmFrequency.java

@@ -46,29 +46,39 @@ public class MsgAlarmFrequency extends BaseEntity implements Serializable {
     private Date alarmTime;
 
     /**
-     * 报警内容
+     * 报警线路
      */
-    private String content;
+    private String railwayCode;
 
     /**
-     * 报警置信度(百分比)
+     * 报警行别 : 1上行2下行 line_dir
      */
-    private Integer alarmConfidence;
+    private Integer lineDir;
 
     /**
-     * 报警病害类型(目前只有1泥石流,后续可扩展使用)
+     * 报警里程位置alarm_mile
      */
-    private Integer alarmType;
+    private Integer alarmMile;
+
+    /**
+     * 报警内容
+     */
+    private String content;
+
+    /**
+     * 报警级别alarm_level
+     */
+    private Integer alarmLevel;
 
     /**
-     * 报警病害属性(可以给出泥石流的框定范围)
+     * 报警置信度(百分比
      */
-    private String alarmAttr;
+    private Integer alarmConfidence;
 
     /**
-     * 报警图片地址
+     * 报警病害类型(1泥石流2异物侵线 3断轨监测)
      */
-    private String imageUrl;
+    private Integer alarmType;
 
     /**
      * 创建人

+ 12 - 24
business-service/src/main/java/com/ozs/entity/vo/AlarmStatisticDto.java

@@ -71,11 +71,7 @@ public class AlarmStatisticDto {
     @Excel(name = "报警类型")
     private String alarmTypeValue;
 
-    /**
-     * 报警病害属性(可以给出泥石流的框定范围)
-     */
-    @Excel(name = "报警病害属性")
-    private String alarmAttr;
+    
 
     /**
      * 报警图片地址
@@ -101,23 +97,6 @@ public class AlarmStatisticDto {
     @Excel(name = "解除时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date releasedTime;
 
-    /**
-     * 解除原因
-     */
-    @Excel(name = "解除原因")
-    private String releasedReason;
-
-    /**
-     * 解除报警类型1真实报警2误报警
-     */
-    private Integer releasedType;
-
-    /**
-     * 解除报警类型名称   1真实报警2误报警
-     */
-    @Excel(name = "解除报警类型")
-    private String releasedTypeName;
-
     /**
      * 线路名称
      */
@@ -135,17 +114,26 @@ public class AlarmStatisticDto {
     /**
      * 报警是否解除 1已解除2未解除
      */
-    private Integer isLock;
+    private Integer isRelease;
 
     /**
      * 报警是否解除 1已解除2未解除
      */
     @Excel(name = "报警是否解除")
-    private String isLockName;
+    private String isReleaseName;
 
     /**
      * 备注
      */
     @Excel(name = "备注")
     private String remark;
+
+    /**
+     * 报警级别
+     */
+    private Integer alarmLevel;
+    /**
+     * 解除内容
+     */
+    private String releaseContent;
 }

+ 16 - 20
business-service/src/main/java/com/ozs/entity/vo/AlarmStatisticVo.java

@@ -1,6 +1,7 @@
 package com.ozs.entity.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.common.annotation.Excel;
 import lombok.Data;
 
 import java.util.Date;
@@ -42,21 +43,10 @@ public class AlarmStatisticVo {
      * 备注
      */
     private String remark;
+    
 
-    /**
-     * 解除原因
-     */
-    private String releasedReason;
-
-    /**
-     * 解除报警类型1真实报警2误报警
-     */
-    private Integer releasedType;
-
-    /**
-     * 解除报警类型名称   1真实报警2误报警
-     */
-    private String releasedTypeName;
+  
+   
 
     /**
      * 报警里程位置
@@ -92,10 +82,7 @@ public class AlarmStatisticVo {
      */
     private String alarmTypeName;
 
-    /**
-     * 报警病害属性(可以给出泥石流的框定范围)
-     */
-    private String alarmAttr;
+    
 
     /**
      * 报警图片地址
@@ -120,10 +107,19 @@ public class AlarmStatisticVo {
     /**
      * 报警是否解除 1已解除2未解除
      */
-    private Integer isLock;
+    private Integer isRelease;
 
     /**
      * 报警是否解除 1已解除2未解除
      */
-    private String isLockName;
+    private String isReleaseName;
+    /**
+     * 报警级别
+     */
+    private Integer alarmLevel;
+
+    /**
+     * 解除内容
+     */
+    private String releaseContent;
 }

+ 1 - 1
business-service/src/main/java/com/ozs/entity/vo/BaseCameraManagementHomeVo.java

@@ -148,5 +148,5 @@ public class BaseCameraManagementHomeVo extends BaseEntity implements Serializab
     /**
      * 报警是否解除 1已解除2未解除
      */
-    private Integer isLock;
+    private Integer isRelease;
 }

+ 1 - 1
business-service/src/main/java/com/ozs/entity/vo/HistoricalAlarmVo.java

@@ -25,5 +25,5 @@ public class HistoricalAlarmVo implements Serializable {
     /**
      * 报警是否解除 1已解除2未解除
      */
-    private Integer isLock;
+    private Integer isRelease;
 }

+ 2 - 17
business-service/src/main/java/com/ozs/entity/vo/MsgAlarmResp.java

@@ -66,7 +66,7 @@ public class MsgAlarmResp implements Serializable {
     /**
      * 报警是否解除 1已解除2未解除
      */
-    private Integer isLock;
+    private Integer isRelease;
 
     /**
      * 解除时间
@@ -92,22 +92,7 @@ public class MsgAlarmResp implements Serializable {
      * 所属工务段编码(单位名称)
      */
     private String deptName;
-
-    /**
-     * 解除报警类型1真实报警2误报警
-     */
-    private Integer releasedType;
-
-    /**
-     * 解除原因
-     */
-    private String releasedReason;
-
-    /**
-     * 报警病害属性(可以给出泥石流的框定范围)
-     */
-    private String alarmAttr;
-
+    
     /**
      * 报警内容
      */

+ 2 - 5
business-service/src/main/java/com/ozs/entity/vo/MsgAlarmVo.java

@@ -61,7 +61,7 @@ public class MsgAlarmVo extends PageVo implements Serializable {
     /**
      * 报警是否解除 1已解除2未解除
      */
-    private Integer isLock;
+    private Integer isRelease;
 
     /**
      * 用户userID
@@ -87,8 +87,5 @@ public class MsgAlarmVo extends PageVo implements Serializable {
      */
     private String endMiles;
 
-    /**
-     * 解除报警类型1真实报警2误报警
-     */
-    private Integer releasedType;
+   
 }

+ 1 - 4
business-service/src/main/java/com/ozs/entity/vo/MsgAppPushVo.java

@@ -48,10 +48,7 @@ public class MsgAppPushVo extends PageVo implements Serializable {
      */
     private Integer alarmType;
 
-    /**
-     * 报警病害属性(可以给出泥石流的框定范围)
-     */
-    private String alarmAttr;
+   
 
     /**
      * 报警图片地址

+ 2 - 2
business-service/src/main/java/com/ozs/service/impl/BaseCameraManagementServiceImpl.java

@@ -193,8 +193,8 @@ public class BaseCameraManagementServiceImpl extends ServiceImpl<BaseCameraManag
         List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementMapper.selectCameraManagementList(baseCameraManagementVo);
         List<BaseCameraManagementHomeVo> allListVo = BeanUtils.entityListToVOList(baseCameraManagementList, BaseCameraManagementHomeVo.class);
         for (BaseCameraManagementHomeVo baseCameraManagementHomeVo : allListVo) {
-            Integer isLock = msgAlarmMapper.selectCameraCode(baseCameraManagementHomeVo.getCameraCode());
-            baseCameraManagementHomeVo.setIsLock(isLock != null ? isLock : 1);
+            Integer isRelease = msgAlarmMapper.selectCameraCode(baseCameraManagementHomeVo.getCameraCode());
+            baseCameraManagementHomeVo.setIsRelease(isRelease != null ? isRelease : 1);
         }
         return allListVo;
     }

+ 17 - 22
business-service/src/main/resources/mapper/MsgAlarmMapper.xml

@@ -8,18 +8,17 @@
         <result column="camera_code" property="cameraCode"/>
         <result column="alarm_time" property="alarmTime"/>
         <result column="remark" property="remark"/>
-        <result column="released_reason" property="releasedReason"/>
-        <result column="released_type" property="releasedType"/>
         <result column="alarm_mile" property="alarmMile"/>
         <result column="content" property="content"/>
         <result column="alarm_confidence" property="alarmConfidence"/>
         <result column="line_dir" property="lineDir"/>
+        <result column="alarm_level" property="alarmLevel"/>
         <result column="alarm_type" property="alarmType"/>
-        <result column="alarm_attr" property="alarmAttr"/>
         <result column="image_url" property="imageUrl"/>
         <result column="released_by" property="releasedBy"/>
         <result column="released_time" property="releasedTime"/>
-        <result column="is_lock" property="isLock"/>
+        <result column="is_release" property="isRelease"/>
+        <result column="release_content" property="releaseContent"/>
     </resultMap>
 
     <select id="list" resultMap="AlarmStatisticVoResult">
@@ -40,6 +39,8 @@
         a.released_type,
         c.railway_name,
         a.remark,
+        a.alarm_level,
+        a.release_content,
         a.is_lock
         FROM
         msg_alarm AS a inner join
@@ -80,15 +81,14 @@
         <result column="alarmConfidence" property="alarmConfidence"/>
         <result column="lineDir" property="lineDir"/>
         <result column="alarmType" property="alarmType"/>
-        <result column="alarmAttr" property="alarmAttr"/>
         <result column="imageUrl" property="imageUrl"/>
         <result column="releasedBy" property="releasedBy"/>
         <result column="releasedTime" property="releasedTime"/>
-        <result column="releasedReason" property="releasedReason"/>
-        <result column="releasedType" property="releasedType"/>
         <result column="railwayName" property="railwayName"/>
         <result column="remark" property="remark"/>
-        <result column="isLock" property="isLock"/>
+        <result column="isRelease" property="isRelease"/>
+        <result column="alarm_level" property="alarmLevel"/>
+        <result column="release_content" property="releaseContent"/>
     </resultMap>
     <select id="listDto" resultMap="AlarmStatisticDtoResult">
         SELECT
@@ -100,15 +100,14 @@
         a.alarm_confidence AS alarmConfidence,
         a.line_dir AS lineDir,
         a.alarm_type AS alarmType,
-        a.alarm_attr AS alarmAttr,
         a.image_url AS imageUrl,
         a.released_by AS releasedBy,
         a.released_time AS releasedTime,
-        a.released_reason AS releasedReason,
-        a.released_type AS releasedType,
         c.railway_name AS railwayName,
+        a.alarm_level AS alarmLevel,
         a.remark AS remark,
-        a.is_lock AS isLock
+        a.is_release AS isRelease,
+        a.release_content AS releaseContent
         FROM
         msg_alarm AS a inner join
         base_camera_management AS b on a.camera_code=b.camera_code left join
@@ -234,14 +233,13 @@
         a.id  AS id,
         a.content AS content,
         a.alarm_confidence AS alarmConfidence,
-        a.alarm_attr AS alarmAttr,
         a.image_url AS imageUrl,
         a.released_by AS releasedBy,
-        a.is_lock AS isLock,
+        a.is_release AS isRelease,
         a.released_time AS releasedTime,
-        a.released_type AS releasedType,
-        a.released_reason AS releasedReason,
-        a.remark AS remark
+        a.alarm_level AS alarmLevel,
+        a.remark AS remark,
+        a.release_content AS releaseContent
         FROM
         msg_alarm AS a  join
         base_camera_management AS b on a.camera_code=b.camera_code
@@ -278,15 +276,12 @@
             <if test="alarmMile != null and alarmMile != 0">
                 and a.alarm_mile=#{alarmMile}
             </if>
-            <if test="isLock != null and isLock != 0">
-                and a.is_lock=#{isLock}
+            <if test="isRelease != null and isRelease != 0">
+                and a.is_release=#{isRelease}
             </if>
             <if test="lineDir != null and lineDir != 0">
                 and a.line_dir =#{lineDir}
             </if>
-            <if test="releasedType != null and releasedType != 0">
-                and a.released_type =#{releasedType}
-            </if>
             <if test="beginAlarmTime != null and beginAlarmTime != ''">
                 and date_format(a.alarm_time,'%Y-%m-%d %H:%i:%S') &gt;= date_format(#{beginAlarmTime},'%Y-%m-%d %H:%i:%S')
             </if>

+ 0 - 3
business-service/src/main/resources/mapper/MsgAppPushMapper.xml

@@ -16,7 +16,6 @@
         <result column="railwayType" property="railwayType"/>
         <result column="alarmMile" property="alarmMile"/>
         <result column="alarmType" property="alarmType"/>
-        <result column="alarmAttr" property="alarmAttr"/>
         <result column="imageUrl" property="imageUrl"/>
         <association property="baseCameraManagement" javaType="com.ozs.entity.BaseCameraManagement">
             <id column="id" property="id"/>
@@ -37,8 +36,6 @@
         a.line_dir AS lineDir,
         a.alarm_mile AS alarmMile,
         a.alarm_type AS alarmType,
-        a.alarm_attr AS alarmAttr,
-        a.image_url AS imageUrl,
         m.status,
         m.create_by,
         m.create_time,

+ 2 - 2
business-service/src/main/resources/mapper/MsgWebPushMapper.xml

@@ -40,8 +40,8 @@
             <if test="endAlarmTime != null and endAlarmTime != ''">
                 and b.alarm_time &lt;= #{endAlarmTime}
             </if>
-            <if test="isLock != null and isLock != ''">
-                and b.is_lock = #{isLock}
+            <if test="isRelease != null and isRelease != ''">
+                and b.is_release = #{isRelease}
             </if>
             <if test="railwayCode != null and railwayCode != ''">
                 and c.railway_code = #{railwayCode}

+ 15 - 18
vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java

@@ -94,11 +94,11 @@ public class BaseCameraManagementController extends BaseController {
     @ApiOperation("根据相机ID、是否解除 获取相机信息、未解除信息")
     @Log(title = "相机台账管理", businessType = BusinessType.SELECT)
     public AjaxResult homeGetInfo(@RequestBody BaseCameraManagementHomeVo baseCameraManagementHomeVo) {
-        Integer isLock = baseCameraManagementHomeVo.getIsLock();
+        Integer isRelease = baseCameraManagementHomeVo.getIsRelease();
         Long id = baseCameraManagementHomeVo.getId();
         String cameraCode = baseCameraManagementHomeVo.getCameraCode();
-        // isLock  报警是否解除 1已解除2未解除
-        if (!StringUtils.isEmpty(isLock) && isLock == 1 && !StringUtils.isEmpty(id)) {
+        // isRelease  报警是否解除 1已解除2未解除
+        if (!StringUtils.isEmpty(isRelease) && isRelease == 1 && !StringUtils.isEmpty(id)) {
             BaseCameraManagement baseCameraManagement = baseCameraManagementService.getById(id);
             LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
             if (!ObjectUtils.isEmpty(baseCameraManagement.getRailwayCode())) {
@@ -115,7 +115,7 @@ public class BaseCameraManagementController extends BaseController {
             String begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
             baseCameraManagement.setBeginMiles(begin);
             return AjaxResult.success(baseCameraManagement);
-        } else if (!StringUtils.isEmpty(isLock) && isLock == 2 && !StringUtils.isEmpty(cameraCode)) {
+        } else if (!StringUtils.isEmpty(isRelease) && isRelease == 2 && !StringUtils.isEmpty(cameraCode)) {
             MsgAlarm msgAlarm = msgAlarmService.selectByCameraCode(cameraCode);
             LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
             if (!ObjectUtils.isEmpty(msgAlarm.getCameraCode())) {
@@ -138,9 +138,9 @@ public class BaseCameraManagementController extends BaseController {
             String mile = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());
             msgAlarmResp.setAlarmMile(mile);
             msgAlarmResp.setInstallLongitude(baseCameraManagement.getInstallLongitude() + "," + baseCameraManagement.getInstallLatitude());
-            String[] split = msgAlarm.getImageUrl().split(";");
-            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
-            msgAlarmResp.setImageUrls(objects);
+//            String[] split = msgAlarm.getImageUrl().split(";");
+//            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
+//            msgAlarmResp.setImageUrls(objects);
             return AjaxResult.success(msgAlarmResp);
         }
         return null;
@@ -417,7 +417,7 @@ public class BaseCameraManagementController extends BaseController {
             list.add(1);
         } else {
             MsgAlarm msgAlarm = list1.get(0);
-            list.add(msgAlarm.getIsLock());
+            list.add(msgAlarm.getIsRelease());
         }
         return AjaxResult.success(list);
     }
@@ -729,20 +729,17 @@ public class BaseCameraManagementController extends BaseController {
                     msgAlarm.setReleasedByName(user.getNickName());
                 }
                 msgAlarmResp.setAlarmType(msgAlarm.getAlarmType());
-                msgAlarmResp.setIsLock(msgAlarm.getIsLock());
+                msgAlarmResp.setIsRelease(msgAlarm.getIsRelease());
                 msgAlarmResp.setReleasedTime(msgAlarm.getReleasedTime());
                 msgAlarmResp.setAlarmTime(msgAlarm.getAlarmTime());
-                msgAlarmResp.setReleasedType(msgAlarm.getReleasedType());
-                msgAlarmResp.setReleasedReason(msgAlarm.getReleasedReason());
-                msgAlarmResp.setAlarmAttr(msgAlarm.getAlarmAttr());
                 msgAlarmResp.setContent(msgAlarm.getContent());
                 msgAlarmResp.setReleasedByName(msgAlarm.getReleasedByName());
-                if (!StringUtils.isEmpty(msgAlarm.getImageUrl())) {
-                    String[] split = msgAlarm.getImageUrl().split(";");
-                    ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
-                    log.info("publish--------" + objects);
-                    msgAlarmResp.setImageUrls(objects);
-                }
+//                if (!StringUtils.isEmpty(msgAlarm.getImageUrl())) {
+//                    String[] split = msgAlarm.getImageUrl().split(";");
+//                    ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
+//                    log.info("publish--------" + objects);
+//                    msgAlarmResp.setImageUrls(objects);
+//                }
             }
             BeanUtils.copyProperties(baseCameraManagement, msgAlarmResp);
             msgAlarmResp.setRailwayName(baseRailwayManagement.getRailwayName());

+ 21 - 40
vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java

@@ -158,9 +158,9 @@ public class MsgAlarmController extends BaseController {
 
         if (!ObjectUtils.isEmpty(page) && page.getRecords().size() > 0) {
             List<MsgAlarm> dto1 = page.getRecords().stream().map(o -> {
-                String[] split = o.getImageUrl().split(";");
-                ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
-                o.setImageUrls(objects);
+//                String[] split = o.getImageUrl().split(";");
+//                ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
+//                o.setImageUrls(objects);
                 LambdaQueryWrapper<BaseCameraManagement> cameraManagementLambdaQueryWrapper = new LambdaQueryWrapper<BaseCameraManagement>();
                 if (!ObjectUtils.isEmpty(o.getCameraCode())) {
                     cameraManagementLambdaQueryWrapper.eq(BaseCameraManagement::getCameraCode, o.getCameraCode());
@@ -187,9 +187,6 @@ public class MsgAlarmController extends BaseController {
                     wrapper.eq(MsgAlarmFrequency::getAlarmId, o.getAlarmId());
                 }
                 o.setAlarmCount((int) msgAlarmFrequencyService.count(wrapper));
-                if (!ObjectUtils.isEmpty(o.getReleasedType())) {
-                    o.setReleasedTypeName(o.getReleasedType() == 1 ? "真实报警" : "误报警");
-                }
                 return o;
             }).collect(Collectors.toList());
             page.setRecords(dto1);
@@ -218,9 +215,9 @@ public class MsgAlarmController extends BaseController {
         }
         List<MsgAlarm> msgAlarmList = msgAlarmService.msgAlarmList(msgAlarmVo);
         for (MsgAlarm msgAlarm : msgAlarmList) {
-            String[] split = msgAlarm.getImageUrl().split(";");
-            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
-            msgAlarm.setImageUrls(objects);
+//            String[] split = msgAlarm.getImageUrl().split(";");
+//            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
+//            msgAlarm.setImageUrls(objects);
             LambdaQueryWrapper<BaseCameraManagement> cameraManagementLambdaQueryWrapper = new LambdaQueryWrapper<BaseCameraManagement>();
             if (!ObjectUtils.isEmpty(msgAlarm.getCameraCode())) {
                 cameraManagementLambdaQueryWrapper.eq(BaseCameraManagement::getCameraCode, msgAlarm.getCameraCode());
@@ -247,11 +244,8 @@ public class MsgAlarmController extends BaseController {
                 wrapper.eq(MsgAlarmFrequency::getAlarmId, msgAlarm.getAlarmId());
             }
             msgAlarm.setAlarmCount((int) msgAlarmFrequencyService.count(wrapper));
-            if (!ObjectUtils.isEmpty(msgAlarm.getReleasedType())) {
-                msgAlarm.setReleasedTypeName(msgAlarm.getReleasedType() == 1 ? "真实报警" : "误报警");
-            }
             msgAlarm.setLineDirName(msgAlarm.getLineDir() == 1 ? "上行" : "下行");
-            msgAlarm.setIsLockName(msgAlarm.getIsLock() == 1 ? "已解除" : "未解除");
+            msgAlarm.setIsReleaseName(msgAlarm.getIsRelease() == 1 ? "已解除" : "未解除");
             msgAlarm.setAlarmTypeName("泥石流");
         }
         ExcelUtil<MsgAlarm> util = new ExcelUtil<>(MsgAlarm.class);
@@ -275,9 +269,9 @@ public class MsgAlarmController extends BaseController {
             }
             BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(wrapper);
             MsgAlarmResp msgAlarmResp = new MsgAlarmResp();
-            String[] split = msgAlarm.getImageUrl().split(";");
-            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
-            msgAlarm.setImageUrls(objects);
+//            String[] split = msgAlarm.getImageUrl().split(";");
+//            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
+//            msgAlarm.setImageUrls(objects);
             if (StringUtils.isNotEmpty(msgAlarm.getReleasedBy())) {
                 BaseUser user = baseUserService.getUser(msgAlarm.getReleasedBy());
                 msgAlarm.setReleasedByName(user.getNickName());
@@ -315,9 +309,9 @@ public class MsgAlarmController extends BaseController {
             }
             BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(wrapper);
             MsgAlarmResp msgAlarmResp = new MsgAlarmResp();
-            String[] split = msgAlarm.getImageUrl().split(";");
-            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
-            msgAlarm.setImageUrls(objects);
+//            String[] split = msgAlarm.getImageUrl().split(";");
+//            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
+//            msgAlarm.setImageUrls(objects);
             if (StringUtils.isNotEmpty(msgAlarm.getReleasedBy())) {
                 BaseUser user = baseUserService.getUser(msgAlarm.getReleasedBy());
                 msgAlarm.setReleasedByName(user.getNickName());
@@ -340,23 +334,15 @@ public class MsgAlarmController extends BaseController {
         }
     }
 
-    @PutMapping(value = "/updateIsLock")
+    @PutMapping(value = "/updateIsRelease")
     @ApiOperation("根据报警信息ID解除报警")
     @Log(title = "报警信息管理", businessType = BusinessType.UPDATE)
-    public AjaxResult updateIsLock(@RequestParam(value = "id") Long id,
-                                   @RequestParam(value = "releasedType",required = false) Integer releasedType,
-                                   @RequestParam(value = "releasedReason",required = false) String releasedReason) {
+    public AjaxResult updateIsRelease(@RequestParam(value = "id") Long id) {
         MsgAlarm msgAlarm = msgAlarmService.getById(id);
-        msgAlarm.setIsLock(1);
+        msgAlarm.setIsRelease(1);
         msgAlarm.setUpdateBy(getUserId());
         msgAlarm.setReleasedBy(getUserId());
         msgAlarm.setReleasedTime(new Date());
-        if (!ObjectUtils.isEmpty(msgAlarm.getReleasedReason())) {
-            msgAlarm.setReleasedReason(releasedReason);
-        }
-        if (!ObjectUtils.isEmpty(msgAlarm.getReleasedType())) {
-            msgAlarm.setReleasedType(releasedType);
-        }
         return AjaxResult.success(msgAlarmService.updateById(msgAlarm));
     }
 
@@ -416,17 +402,15 @@ public class MsgAlarmController extends BaseController {
                     BaseUser buser = baseUserService.getUser(l.getReleasedBy());
                     l.setReleasedByName(buser.getNickName());
                 }
-                if (!ObjectUtils.isEmpty(l.getReleasedType())) {
-                    l.setReleasedTypeName(l.getReleasedType() == 1 ? "真实报警" : "误报警");
-                }
+                
                 if (!ObjectUtils.isEmpty(l.getLineDir())) {
                     l.setLineDirName(l.getLineDir() == 1 ? "上行" : "下行");
                 }
                 if (!ObjectUtils.isEmpty(l.getAlarmType())) {
                     l.setAlarmTypeName(dictDataService.selectDictLabel("sys_alarm_type", String.valueOf(l.getAlarmType())));
                 }
-                if (!ObjectUtils.isEmpty(l.getIsLock())) {
-                    l.setIsLockName(l.getIsLock() == 1 ? "已解除" : "未解除");
+                if (!ObjectUtils.isEmpty(l.getIsRelease())) {
+                    l.setIsReleaseName(l.getIsRelease() == 1 ? "已解除" : "未解除");
                 }
             });
         }
@@ -539,9 +523,6 @@ public class MsgAlarmController extends BaseController {
                         BaseUser buser = baseUserService.getUser(l.getReleasedBy());
                         l.setReleasedByName(buser.getNickName());
                     }
-                    if (!ObjectUtils.isEmpty(l.getReleasedType())) {
-                        l.setReleasedTypeName(l.getReleasedType() == 1 ? "真实报警" : "误报警");
-                    }
                     if (!ObjectUtils.isEmpty(l.getAlarmType())) {
                         String alarmType = l.getAlarmType();
                         String alarmTypeValue = dictDataService.selectDictLabel("sys_alarm_type", alarmType);
@@ -552,8 +533,8 @@ public class MsgAlarmController extends BaseController {
                         String lineDirValue = dictDataService.selectDictLabel("sys_line_dir", lineDir);
                         l.setLineDirValue(lineDirValue);
                     }
-                    if (!ObjectUtils.isEmpty(l.getIsLock())) {
-                        l.setIsLockName(l.getIsLock() == 1 ? "已解除" : "未解除");
+                    if (!ObjectUtils.isEmpty(l.getIsRelease())) {
+                        l.setIsReleaseName(l.getIsRelease() == 1 ? "已解除" : "未解除");
                     }
                 });
             }

+ 111 - 0
vehicle-admin/src/main/java/com/ozs/web/controller/monitor/CacheController.java

@@ -0,0 +1,111 @@
+package com.ozs.web.controller.monitor;
+
+import com.ozs.common.constant.CacheConstants;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.utils.StringUtils;
+import com.ozs.system.domain.SysCache;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisCallback;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+/**
+ * 缓存监控
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/cache")
+public class CacheController
+{
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+
+    private final static List<SysCache> caches = new ArrayList<SysCache>();
+    {
+        caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "用户信息"));
+        caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "配置信息"));
+        caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "数据字典"));
+        caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "验证码"));
+        caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
+        caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
+        caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数"));
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping()
+    public AjaxResult getInfo() throws Exception
+    {
+        Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info());
+        Properties commandStats = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info("commandstats"));
+        Object dbSize = redisTemplate.execute((RedisCallback<Object>) connection -> connection.dbSize());
+
+        Map<String, Object> result = new HashMap<>(3);
+        result.put("info", info);
+        result.put("dbSize", dbSize);
+
+        List<Map<String, String>> pieList = new ArrayList<>();
+        commandStats.stringPropertyNames().forEach(key -> {
+            Map<String, String> data = new HashMap<>(2);
+            String property = commandStats.getProperty(key);
+            data.put("name", StringUtils.removeStart(key, "cmdstat_"));
+            data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));
+            pieList.add(data);
+        });
+        result.put("commandStats", pieList);
+        return AjaxResult.success(result);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getNames")
+    public AjaxResult cache()
+    {
+        return AjaxResult.success(caches);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getKeys/{cacheName}")
+    public AjaxResult getCacheKeys(@PathVariable String cacheName)
+    {
+        Set<String> cacheKeys = redisTemplate.keys(cacheName + "*");
+        return AjaxResult.success(cacheKeys);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @GetMapping("/getValue/{cacheName}/{cacheKey}")
+    public AjaxResult getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey)
+    {
+        String cacheValue = redisTemplate.opsForValue().get(cacheKey);
+        SysCache sysCache = new SysCache(cacheName, cacheKey, cacheValue);
+        return AjaxResult.success(sysCache);
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheName/{cacheName}")
+    public AjaxResult clearCacheName(@PathVariable String cacheName)
+    {
+        Collection<String> cacheKeys = redisTemplate.keys(cacheName + "*");
+        redisTemplate.delete(cacheKeys);
+        return AjaxResult.success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheKey/{cacheKey}")
+    public AjaxResult clearCacheKey(@PathVariable String cacheKey)
+    {
+        redisTemplate.delete(cacheKey);
+        return AjaxResult.success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
+    @DeleteMapping("/clearCacheAll")
+    public AjaxResult clearCacheAll()
+    {
+        Collection<String> cacheKeys = redisTemplate.keys("*");
+        redisTemplate.delete(cacheKeys);
+        return AjaxResult.success();
+    }
+}

+ 27 - 0
vehicle-admin/src/main/java/com/ozs/web/controller/monitor/ServerController.java

@@ -0,0 +1,27 @@
+package com.ozs.web.controller.monitor;
+
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.framework.web.domain.Server;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 服务器监控
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/server")
+public class ServerController
+{
+    @PreAuthorize("@ss.hasPermi('monitor:server:list')")
+    @GetMapping()
+    public AjaxResult getInfo() throws Exception
+    {
+        Server server = new Server();
+        server.copyTo();
+        return AjaxResult.success(server);
+    }
+}

+ 122 - 0
vehicle-admin/src/main/java/com/ozs/web/controller/monitor/SysLoginInfoController.java

@@ -0,0 +1,122 @@
+package com.ozs.web.controller.monitor;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ozs.common.annotation.Log;
+import com.ozs.common.core.controller.BaseController;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.core.domain.vo.SysLoginInfoVo;
+import com.ozs.common.enums.BusinessType;
+import com.ozs.common.utils.poi.ExcelUtil;
+import com.ozs.framework.web.service.SysPasswordService;
+import com.ozs.system.domain.SysLoginInfo;
+import com.ozs.system.service.ISysLoginInfoService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 系统访问记录
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/logininfor")
+public class SysLoginInfoController extends BaseController {
+    @Autowired
+    private ISysLoginInfoService logininforService;
+
+    @Autowired
+    private SysPasswordService passwordService;
+
+//    @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
+//    @GetMapping("/list")
+//    public TableDataInfo list(SysLoginInfo logininfor) {
+//        startPage();
+//        List<SysLoginInfo> list = logininforService.selectLogininforList(logininfor);
+//        return getDataTable(list);
+//    }
+
+    /**
+     * 获取登录日志分页列表
+     *
+     * @param sysLoginInfoVo
+     * @return
+     */
+    @ApiOperation(value = "获取登录日志分页列表")
+    @PostMapping("/list")
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
+    public AjaxResult list(@RequestBody SysLoginInfoVo sysLoginInfoVo) {
+        LambdaQueryWrapper<SysLoginInfo> wrapper = new LambdaQueryWrapper<SysLoginInfo>();
+        if (!ObjectUtils.isEmpty(sysLoginInfoVo.getIpaddr())) {
+            wrapper.like(SysLoginInfo::getIpaddr, sysLoginInfoVo.getIpaddr());
+        }
+        if (!ObjectUtils.isEmpty(sysLoginInfoVo.getUserName())) {
+            wrapper.like(SysLoginInfo::getUserName, sysLoginInfoVo.getUserName());
+        }
+        if (!ObjectUtils.isEmpty(sysLoginInfoVo.getStatus())) {
+            wrapper.like(SysLoginInfo::getStatus, sysLoginInfoVo.getStatus());
+        }
+        if (!ObjectUtils.isEmpty(sysLoginInfoVo.getLoginTime())) {
+            wrapper.like(SysLoginInfo::getLoginTime, sysLoginInfoVo.getLoginTime());
+        }
+        if (!ObjectUtils.isEmpty(sysLoginInfoVo.getStartTime())) {
+            wrapper.ge(SysLoginInfo::getLoginTime, sysLoginInfoVo.getStartTime());
+        }
+        if (!ObjectUtils.isEmpty(sysLoginInfoVo.getEndTime())) {
+            wrapper.le(SysLoginInfo::getLoginTime, sysLoginInfoVo.getEndTime());
+        }
+            wrapper.orderByDesc(SysLoginInfo::getLoginTime);
+        IPage<SysLoginInfo> page = logininforService.page(new Page<>(sysLoginInfoVo.getPageNum(), sysLoginInfoVo.getPageSize()), wrapper);
+        return AjaxResult.success(page);
+    }
+
+    @ApiOperation(value = "获取登录日志详细")
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:detail')")
+    @PostMapping("/detail")
+    public AjaxResult remove(Long infoId) {
+        SysLoginInfo info = logininforService.selectLoginLogById(infoId);
+        return AjaxResult.success(info);
+    }
+
+    @Log(title = "登录日志", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysLoginInfo logininfor) {
+        List<SysLoginInfo> list = logininforService.selectLogininforList(logininfor);
+        ExcelUtil<SysLoginInfo> util = new ExcelUtil<SysLoginInfo>(SysLoginInfo.class);
+        util.exportExcel(response, list, "登录日志");
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
+    @Log(title = "登录日志", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{infoIds}")
+    public AjaxResult remove(@PathVariable Long[] infoIds)
+    {
+        return toAjax(logininforService.deleteLogininforByIds(infoIds));
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
+    @Log(title = "登录日志", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/clean")
+    public AjaxResult clean()
+    {
+        logininforService.cleanLogininfor();
+        return success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')")
+    @Log(title = "账户解锁", businessType = BusinessType.OTHER)
+    @GetMapping("/unlock/{userName}")
+    public AjaxResult unlock(@PathVariable("userName") String userName)
+    {
+        passwordService.clearLoginRecordCache(userName);
+        return success();
+    }
+}

+ 116 - 0
vehicle-admin/src/main/java/com/ozs/web/controller/monitor/SysOperlogController.java

@@ -0,0 +1,116 @@
+package com.ozs.web.controller.monitor;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ozs.common.annotation.Log;
+import com.ozs.common.core.controller.BaseController;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.core.domain.vo.SysOperlogVo;
+import com.ozs.common.enums.BusinessType;
+import com.ozs.common.utils.poi.ExcelUtil;
+import com.ozs.system.domain.SysOperLog;
+import com.ozs.system.service.ISysOperLogService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 操作日志记录
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/operlog")
+public class SysOperlogController extends BaseController {
+    @Autowired
+    private ISysOperLogService operLogService;
+
+//    @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
+//    @GetMapping("/list")
+//    public TableDataInfo list(SysOperLog operLog)
+//    {
+//        startPage();
+//        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
+//        return getDataTable(list);
+//    }
+
+    /**
+     * 获取操作日志分页列表
+     *
+     * @param sysOperlogVo
+     * @return
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
+    @ApiOperation(value = "获取操作日志分页列表")
+    @PostMapping("/list")
+    public AjaxResult list(@RequestBody SysOperlogVo sysOperlogVo) {
+        LambdaQueryWrapper<SysOperLog> wrapper = new LambdaQueryWrapper<SysOperLog>();
+        if (!ObjectUtils.isEmpty(sysOperlogVo.getOperId())) {
+            wrapper.like(SysOperLog::getOperId, sysOperlogVo.getOperId());
+        }
+        if (!ObjectUtils.isEmpty(sysOperlogVo.getUserId())) {
+            wrapper.like(SysOperLog::getUserId, sysOperlogVo.getUserId());
+        }
+        if (!ObjectUtils.isEmpty(sysOperlogVo.getOperatorType())) {
+            wrapper.like(SysOperLog::getOperatorType, sysOperlogVo.getOperatorType());
+        }
+        if (!ObjectUtils.isEmpty(sysOperlogVo.getTitle())) {
+            wrapper.like(SysOperLog::getTitle, sysOperlogVo.getTitle());
+        }
+        if (!ObjectUtils.isEmpty(sysOperlogVo.getOperTime())) {
+            wrapper.like(SysOperLog::getOperTime, sysOperlogVo.getOperTime());
+        }
+        if (!ObjectUtils.isEmpty(sysOperlogVo.getStartTime())) {
+            wrapper.ge(SysOperLog::getOperTime, sysOperlogVo.getStartTime());
+        }
+        if (!ObjectUtils.isEmpty(sysOperlogVo.getEndTime())) {
+            wrapper.le(SysOperLog::getOperTime, sysOperlogVo.getEndTime());
+        }
+        if (!ObjectUtils.isEmpty(sysOperlogVo.getBusinessType())) {
+            wrapper.eq(SysOperLog::getBusinessType, sysOperlogVo.getBusinessType());
+        }
+            wrapper.orderByDesc(SysOperLog::getOperTime);
+        IPage<SysOperLog> page = operLogService.page(new Page<>(sysOperlogVo.getPageNum(), sysOperlogVo.getPageSize()), wrapper);
+        return AjaxResult.success(page);
+    }
+
+    @ApiOperation(value = "获取操作日志详细")
+    @PostMapping("/detail")
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:detail')")
+    public AjaxResult detail(Long operId) {
+        SysOperLog sysOperLog = operLogService.selectOperLogById(operId);
+        return AjaxResult.success(sysOperLog);
+    }
+
+    @Log(title = "操作日志", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysOperLog operLog) {
+        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
+        ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
+        util.exportExcel(response, list, "操作日志");
+    }
+
+    @Log(title = "操作日志", businessType = BusinessType.DELETE)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
+    @DeleteMapping("/{operIds}")
+    public AjaxResult remove(@PathVariable Long[] operIds)
+    {
+        return toAjax(operLogService.deleteOperLogByIds(operIds));
+    }
+
+    @Log(title = "操作日志", businessType = BusinessType.CLEAN)
+    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
+    @DeleteMapping("/clean")
+    public AjaxResult clean()
+    {
+        operLogService.cleanOperLog();
+        return success();
+    }
+}

+ 89 - 0
vehicle-admin/src/main/java/com/ozs/web/controller/monitor/SysUserOnlineController.java

@@ -0,0 +1,89 @@
+package com.ozs.web.controller.monitor;
+
+import com.ozs.common.annotation.Log;
+import com.ozs.common.constant.CacheConstants;
+import com.ozs.common.core.controller.BaseController;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.core.domain.model.LoginUser;
+import com.ozs.common.core.page.TableDataInfo;
+import com.ozs.common.core.redis.RedisCache;
+import com.ozs.common.enums.BusinessType;
+import com.ozs.common.utils.StringUtils;
+import com.ozs.system.domain.SysUserOnline;
+import com.ozs.system.service.ISysUserOnlineService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 在线用户监控
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/monitor/online")
+public class SysUserOnlineController extends BaseController
+{
+    @Autowired
+    private ISysUserOnlineService userOnlineService;
+
+    @Autowired
+    private RedisCache redisCache;
+
+    @PreAuthorize("@ss.hasPermi('monitor:online:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(String ipaddr, String userName)
+    {
+        Collection<String> keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
+        List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
+        for (String key : keys)
+        {
+            LoginUser user = redisCache.getCacheObject(key);
+            if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
+            {
+                if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
+                {
+                    userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
+                }
+            }
+            else if (StringUtils.isNotEmpty(ipaddr))
+            {
+                if (StringUtils.equals(ipaddr, user.getIpaddr()))
+                {
+                    userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
+                }
+            }
+            else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser()))
+            {
+                if (StringUtils.equals(userName, user.getUsername()))
+                {
+                    userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
+                }
+            }
+            else
+            {
+                userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
+            }
+        }
+        Collections.reverse(userOnlineList);
+        userOnlineList.removeAll(Collections.singleton(null));
+        return getDataTable(userOnlineList);
+    }
+
+    /**
+     * 强退用户
+     */
+    @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
+    @Log(title = "在线用户", businessType = BusinessType.FORCE)
+    @DeleteMapping("/{tokenId}")
+    public AjaxResult forceLogout(@PathVariable String tokenId)
+    {
+        redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
+        return success();
+    }
+}

+ 7 - 0
vehicle-admin/src/main/resources/mybatis/mybatis-config.xml

@@ -16,5 +16,12 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
         <!-- 使用驼峰命名法转换字段 -->
 		<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
 	</settings>
+    <plugins>
+        <!--        配置分页插件-->
+        <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor">
+            <property name="@page" value="com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor"/>
+            <property name="page:dbType" value="MYSQL"/>
+        </plugin>
+    </plugins>
 	
 </configuration>