Просмотр исходного кода

设备状态履历和电量履历开发

gao.qiang 1 месяц назад
Родитель
Сommit
a28946a4e4
18 измененных файлов с 814 добавлено и 38 удалено
  1. 53 0
      business-service/src/main/java/com/ozs/service/entity/BaseDeviceResume.java
  2. 53 0
      business-service/src/main/java/com/ozs/service/entity/BaseElectricityResume.java
  3. 49 0
      business-service/src/main/java/com/ozs/service/entity/vo/BaseDeviceResumeVo.java
  4. 46 0
      business-service/src/main/java/com/ozs/service/entity/vo/BaseElectricityResumeVo.java
  5. 47 0
      business-service/src/main/java/com/ozs/service/entity/vo/DeviceResumeResp.java
  6. 46 0
      business-service/src/main/java/com/ozs/service/entity/vo/ElectricityResumeResp.java
  7. 18 0
      business-service/src/main/java/com/ozs/service/mapper/BaseDeviceResumeMapper.java
  8. 17 0
      business-service/src/main/java/com/ozs/service/mapper/BaseElectricityResumeMapper.java
  9. 14 0
      business-service/src/main/java/com/ozs/service/service/BaseDeviceResumeService.java
  10. 14 0
      business-service/src/main/java/com/ozs/service/service/BaseElectricityResumeService.java
  11. 43 0
      business-service/src/main/java/com/ozs/service/service/impl/BaseDeviceResumeServiceImpl.java
  12. 46 0
      business-service/src/main/java/com/ozs/service/service/impl/BaseElectricityResumeServiceImpl.java
  13. 95 0
      business-service/src/main/resources/mapper/service/BaseDeviceResumeMapper.xml
  14. 87 0
      business-service/src/main/resources/mapper/service/BaseElectricityResumeMapper.xml
  15. 56 0
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseDeviceResumeController.java
  16. 62 0
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseElectricityResumeController.java
  17. 61 38
      hazard-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java
  18. 7 0
      hazard-sdk/src/main/java/com/ozs/controller/upload/GeoHazardMonitorTokenController.java

+ 53 - 0
business-service/src/main/java/com/ozs/service/entity/BaseDeviceResume.java

@@ -0,0 +1,53 @@
+package com.ozs.service.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.common.core.domain.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 设备状态履历表
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-22
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BaseDeviceResume extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 相机编码
+     */
+    private String cameraCode;
+
+    /**
+     * 相机状态(1在线2离线)
+     */
+    private Integer isDisable;
+    
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+}

+ 53 - 0
business-service/src/main/java/com/ozs/service/entity/BaseElectricityResume.java

@@ -0,0 +1,53 @@
+package com.ozs.service.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.common.core.domain.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 电池电量履历表
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-22
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BaseElectricityResume extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 相机编码
+     */
+    private String cameraCode;
+
+    /**
+     * 剩余电量
+     */
+    private Integer electricity;
+
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+}

+ 49 - 0
business-service/src/main/java/com/ozs/service/entity/vo/BaseDeviceResumeVo.java

@@ -0,0 +1,49 @@
+package com.ozs.service.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class BaseDeviceResumeVo {
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    /**
+     * 相机状态(1正常2故障)
+     */
+    private String isDisable;
+    /**
+     * 里程位置
+     */
+    private Integer installMile;
+    /**
+     * 里程位置
+     */
+    private String installMiles;
+    /**
+     * 测点名称
+     */
+    private String measurePointName;
+
+    /**
+     * 线路类型名称(1=高铁,2=普铁)
+     */
+    private String railwayType;
+
+    /**
+     * 线路名称
+     */
+    private String railwayName;
+
+    /**
+     * 故障条数
+     */
+    private Integer faultNum;
+}

+ 46 - 0
business-service/src/main/java/com/ozs/service/entity/vo/BaseElectricityResumeVo.java

@@ -0,0 +1,46 @@
+package com.ozs.service.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class BaseElectricityResumeVo {
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 剩余电量
+     */
+    private Integer electricity;
+    /**
+     * 里程位置
+     */
+    private Integer installMile;
+    /**
+     * 里程位置
+     */
+    private String installMiles;
+    /**
+     * 测点名称
+     */
+    private String measurePointName;
+
+    /**
+     * 线路类型名称(1=高铁,2=普铁)
+     */
+    private String railwayType;
+
+    /**
+     * 线路名称
+     */
+    private String railwayName;
+
+}

+ 47 - 0
business-service/src/main/java/com/ozs/service/entity/vo/DeviceResumeResp.java

@@ -0,0 +1,47 @@
+package com.ozs.service.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.common.annotation.Excel;
+import com.ozs.common.vo.PageVo;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Administrator
+ * 设备状态履历
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class DeviceResumeResp extends PageVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private Integer installMile;
+    @Excel(name = "监控相机安装里程位置(单位KM)")
+    private String installMileName;
+    @Excel(name = "测点名称")
+    private String measurePointName;
+    @Excel(name = "线路名称")
+    private String railwayName;
+    @Excel(name = "所属工务段名称")
+    private String deptName;
+    @Excel(name = "行别")
+    private String lineDir;
+    @Excel(name = "相机编码")
+    private String cameraCode;
+    @Excel(name = "序列号")
+    private String cameraSn;
+    @Excel(name = "线路类型",readConverterExp = "1=高铁,2=普铁")
+    private Integer railwayType;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "新增时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime ;
+    @Excel(name = "相机状态",readConverterExp = "1=正常,2=故障")
+    private String isDisable;
+}

+ 46 - 0
business-service/src/main/java/com/ozs/service/entity/vo/ElectricityResumeResp.java

@@ -0,0 +1,46 @@
+package com.ozs.service.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.common.annotation.Excel;
+import com.ozs.common.vo.PageVo;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Administrator
+ * 设备状态履历
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class ElectricityResumeResp extends PageVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private Integer installMile;
+    @Excel(name = "监控相机安装里程位置(单位KM)")
+    private String installMileName;
+    @Excel(name = "测点名称")
+    private String measurePointName;
+    @Excel(name = "线路名称")
+    private String railwayName;
+    @Excel(name = "所属工务段名称")
+    private String deptName;
+    @Excel(name = "行别")
+    private String lineDir;
+    @Excel(name = "相机编码")
+    private String cameraCode;
+    @Excel(name = "序列号")
+    private String cameraSn;
+    @Excel(name = "线路类型",readConverterExp = "1=高铁,2=普铁")
+    private Integer railwayType;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "新增时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime ;
+    @Excel(name = "电量(%)")
+    private Integer electricity;
+}

+ 18 - 0
business-service/src/main/java/com/ozs/service/mapper/BaseDeviceResumeMapper.java

@@ -0,0 +1,18 @@
+package com.ozs.service.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ozs.service.entity.BaseDeviceResume;
+import com.ozs.service.entity.vo.BaseDeviceResumeVo;
+import com.ozs.service.entity.vo.DeviceResumeResp;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface BaseDeviceResumeMapper extends BaseMapper<BaseDeviceResume> {
+    List<BaseDeviceResumeVo> getBaseDeviceResume(@Param("cameraCode")String cameraCode, @Param("startTime")String startTime, @Param("endTime")String endTime);
+
+
+    List<DeviceResumeResp> exportDeviceResume(@Param("cameraCode")String cameraCode, @Param("startTime")String startTime, @Param("endTime")String endTime);
+}

+ 17 - 0
business-service/src/main/java/com/ozs/service/mapper/BaseElectricityResumeMapper.java

@@ -0,0 +1,17 @@
+package com.ozs.service.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ozs.service.entity.BaseElectricityResume;
+import com.ozs.service.entity.vo.BaseElectricityResumeVo;
+import com.ozs.service.entity.vo.ElectricityResumeResp;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface BaseElectricityResumeMapper extends BaseMapper<BaseElectricityResume> {
+    List<BaseElectricityResumeVo> getBaseElectricityResume(@Param("cameraCode")String cameraCode, @Param("startTime")String startTime, @Param("endTime")String endTime);
+
+    List<ElectricityResumeResp> exportElectricityResume(@Param("cameraCode")String cameraCode, @Param("startTime")String startTime, @Param("endTime")String endTime);
+}

+ 14 - 0
business-service/src/main/java/com/ozs/service/service/BaseDeviceResumeService.java

@@ -0,0 +1,14 @@
+package com.ozs.service.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ozs.service.entity.BaseDeviceResume;
+import com.ozs.service.entity.vo.BaseDeviceResumeVo;
+import com.ozs.service.entity.vo.DeviceResumeResp;
+
+import java.util.List;
+
+public interface BaseDeviceResumeService extends IService<BaseDeviceResume> {
+    List<BaseDeviceResumeVo> getBaseDeviceResume(String cameraCode, String startTime, String endTime);
+
+    List<DeviceResumeResp> exportDeviceResume(String cameraCode, String startTime, String endTime);
+}

+ 14 - 0
business-service/src/main/java/com/ozs/service/service/BaseElectricityResumeService.java

@@ -0,0 +1,14 @@
+package com.ozs.service.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ozs.service.entity.BaseElectricityResume;
+import com.ozs.service.entity.vo.BaseElectricityResumeVo;
+import com.ozs.service.entity.vo.ElectricityResumeResp;
+
+import java.util.List;
+
+public interface BaseElectricityResumeService  extends IService<BaseElectricityResume> {
+    List<BaseElectricityResumeVo> getBaseElectricityResume(String cameraCode, String startTime, String endTime);
+
+    List<ElectricityResumeResp> exportElectricityResume(String cameraCode, String startTime, String endTime);
+}

+ 43 - 0
business-service/src/main/java/com/ozs/service/service/impl/BaseDeviceResumeServiceImpl.java

@@ -0,0 +1,43 @@
+package com.ozs.service.service.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ozs.common.utils.AppendUtils;
+import com.ozs.service.entity.BaseDeviceResume;
+import com.ozs.service.entity.vo.BaseDeviceResumeVo;
+import com.ozs.service.entity.vo.DeviceResumeResp;
+import com.ozs.service.mapper.BaseDeviceResumeMapper;
+import com.ozs.service.service.BaseDeviceResumeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author Administrator
+ */
+@Service
+public class BaseDeviceResumeServiceImpl extends ServiceImpl<BaseDeviceResumeMapper, BaseDeviceResume> implements BaseDeviceResumeService {
+    @Autowired
+    private BaseDeviceResumeMapper baseDeviceResumeMapper;
+    @Override
+    public List<BaseDeviceResumeVo> getBaseDeviceResume(String cameraCode, String startTime, String endTime) {
+
+        List<BaseDeviceResumeVo> baseDeviceResume = baseDeviceResumeMapper.getBaseDeviceResume(cameraCode, startTime, endTime);
+        for (BaseDeviceResumeVo baseDeviceResumeVo : baseDeviceResume) {
+            String installMile = AppendUtils.stringAppend(baseDeviceResumeVo.getInstallMile());
+            baseDeviceResumeVo.setInstallMiles(installMile);
+        }
+        return baseDeviceResume;
+    }
+
+    @Override
+    public List<DeviceResumeResp> exportDeviceResume(String cameraCode, String startTime, String endTime) {
+        List<DeviceResumeResp> deviceResumeRespList = baseDeviceResumeMapper.exportDeviceResume(cameraCode, startTime, endTime);
+        for (DeviceResumeResp deviceResumeResp : deviceResumeRespList) {
+            String mils = AppendUtils.stringAppend(deviceResumeResp.getInstallMile());
+            deviceResumeResp.setInstallMileName(mils);
+        }
+        return deviceResumeRespList;
+    }
+}

+ 46 - 0
business-service/src/main/java/com/ozs/service/service/impl/BaseElectricityResumeServiceImpl.java

@@ -0,0 +1,46 @@
+package com.ozs.service.service.impl;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ozs.common.utils.AppendUtils;
+import com.ozs.service.entity.BaseElectricityResume;
+import com.ozs.service.entity.vo.BaseDeviceResumeVo;
+import com.ozs.service.entity.vo.BaseElectricityResumeVo;
+import com.ozs.service.entity.vo.ElectricityResumeResp;
+import com.ozs.service.mapper.BaseElectricityResumeMapper;
+import com.ozs.service.service.BaseElectricityResumeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author Administrator
+ */
+@Service
+public class BaseElectricityResumeServiceImpl extends ServiceImpl<BaseElectricityResumeMapper, BaseElectricityResume> implements BaseElectricityResumeService {
+    @Autowired
+    private BaseElectricityResumeMapper baseElectricityResumeMapper;
+    @Override
+    public List<BaseElectricityResumeVo> getBaseElectricityResume(String cameraCode, String startTime, String endTime) {
+        List<BaseElectricityResumeVo> baseElectricityResume = baseElectricityResumeMapper.getBaseElectricityResume(cameraCode, startTime, endTime);
+
+        for (BaseElectricityResumeVo baseElectricityResumeVo : baseElectricityResume) {
+            String installMile = AppendUtils.stringAppend(baseElectricityResumeVo.getInstallMile());
+            baseElectricityResumeVo.setInstallMiles(installMile);
+        }
+        return baseElectricityResume;
+    }
+
+    @Override
+    public List<ElectricityResumeResp> exportElectricityResume(String cameraCode, String startTime, String endTime) {
+        List<ElectricityResumeResp> baseElectricityResumeVoList = baseElectricityResumeMapper.exportElectricityResume(cameraCode, startTime, endTime);
+
+        for (ElectricityResumeResp electricityResumeResp : baseElectricityResumeVoList) {
+            String installMile = AppendUtils.stringAppend(electricityResumeResp.getInstallMile());
+            electricityResumeResp.setInstallMileName(installMile);
+        }
+        return baseElectricityResumeVoList;
+    }
+}

+ 95 - 0
business-service/src/main/resources/mapper/service/BaseDeviceResumeMapper.xml

@@ -0,0 +1,95 @@
+<?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.ozs.service.mapper.BaseDeviceResumeMapper">
+
+    <select id="getBaseDeviceResume" resultType="com.ozs.service.entity.vo.BaseDeviceResumeVo">
+        SELECT
+        de.create_time  AS createTime,
+        ca.install_mile AS installMile,
+        ra.railway_name AS railwayName,
+        ca.measure_point_name AS measurePointName,
+        CASE
+        ra.railway_type
+        WHEN 1 THEN
+        '高铁'
+        WHEN 2 THEN
+        '普铁'
+        END AS railwayType,
+        CASE
+        de.is_disable
+        WHEN 1 THEN
+        '设备正常'
+        WHEN 2 THEN
+        '设备故障'
+        END AS isDisable,
+        COUNT(CASE WHEN de.is_disable = 2 THEN 1 END) OVER () AS faultNum
+        FROM
+        base_device_resume AS de
+        LEFT JOIN base_camera_management AS ca ON de.camera_code = ca.camera_code
+        LEFT JOIN base_railway_management AS ra ON ca.railway_code = ra.railway_code
+        <where>
+            <if test="cameraCode != null and cameraCode != ''">
+                AND de.camera_code=#{cameraCode}
+            </if>
+            <if test="startTime != null and startTime != ''">
+                AND de.create_time &gt;=#{startTime}
+            </if>
+            <if test="startTime == null or startTime == ''">
+                AND de.create_time &gt;= DATE_SUB(NOW(), INTERVAL 24 HOUR)
+            </if>
+            <if test="endTime != null and endTime != ''">
+                AND de.create_time &lt;=#{endTime}
+            </if>
+            <if test="endTime == null and endTime == ''">
+                AND de.create_time &lt;= NOW()
+            </if>
+        </where>
+        ORDER BY de.create_time desc
+    </select>
+    <select id="exportDeviceResume" resultType="com.ozs.service.entity.vo.DeviceResumeResp">
+        SELECT
+        ca.measure_point_name AS measurePointName,
+        ra.railway_name AS railwayName,
+        de.create_time  AS createTime,
+        ca.install_mile AS installMile,
+        pt.dept_name AS deptName,
+        de.camera_code AS cameraCode,
+        ca.camera_sn AS cameraSn,
+        de.is_disable AS isDisable,
+        de.create_time  AS createTime,
+        CASE
+        line_dir
+        WHEN 1 THEN
+        '上行'
+        WHEN 2 THEN
+        '下行'
+        WHEN 3 THEN
+        '上下行'
+        END AS lineDir,
+        ra.railway_type AS railwayType,
+        COUNT(CASE WHEN de.is_disable = 2 THEN 1 END) OVER () AS faultNum
+        FROM
+        base_device_resume AS de
+        LEFT JOIN base_camera_management AS ca ON de.camera_code = ca.camera_code
+        LEFT JOIN base_railway_management AS ra ON ca.railway_code = ra.railway_code
+        LEFT JOIN sys_dept AS pt ON ca.dept_id = pt.dept_id
+        <where>
+            <if test="cameraCode != null and cameraCode != ''">
+                AND de.camera_code=#{cameraCode}
+            </if>
+            <if test="startTime != null and startTime != ''">
+                AND de.create_time &gt;=#{startTime}
+            </if>
+            <if test="startTime == null or startTime == ''">
+                AND de.create_time &gt;= DATE_SUB(NOW(), INTERVAL 24 HOUR)
+            </if>
+            <if test="endTime != null and endTime != ''">
+                AND de.create_time &lt;=#{endTime}
+            </if>
+            <if test="endTime == null and endTime == ''">
+                AND de.create_time &lt;= NOW()
+            </if>
+        </where>
+        ORDER BY de.create_time desc
+    </select>
+</mapper>

+ 87 - 0
business-service/src/main/resources/mapper/service/BaseElectricityResumeMapper.xml

@@ -0,0 +1,87 @@
+<?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.ozs.service.mapper.BaseElectricityResumeMapper">
+
+    <select id="getBaseElectricityResume" resultType="com.ozs.service.entity.vo.BaseElectricityResumeVo">
+        SELECT
+        de.create_time  AS createTime,
+        ca.install_mile AS installMile,
+        ra.railway_name AS railwayName,
+        ca.measure_point_name AS measurePointName,
+        de.electricity AS electricity,
+        CASE
+        ra.railway_type
+        WHEN 1 THEN
+        '高铁'
+        WHEN 2 THEN
+        '普铁'
+        END AS railwayType
+        FROM
+        base_electricity_resume AS de
+        LEFT JOIN base_camera_management AS ca ON de.camera_code = ca.camera_code
+        LEFT JOIN base_railway_management AS ra ON ca.railway_code = ra.railway_code
+        <where>
+            <if test="cameraCode != null and cameraCode != ''">
+                AND de.camera_code=#{cameraCode}
+            </if>
+            <if test="startTime != null and startTime != ''">
+                AND de.create_time &gt;=#{startTime}
+            </if>
+            <if test="startTime == null or startTime == ''">
+                AND de.create_time &gt;= DATE_SUB(NOW(), INTERVAL 24 HOUR)
+            </if>
+            <if test="endTime != null and endTime != ''">
+                AND de.create_time &lt;=#{endTime}
+            </if>
+            <if test="endTime == null and endTime == ''">
+                AND de.create_time &lt;= NOW()
+            </if>
+        </where>
+        ORDER BY de.create_time desc
+    </select>
+    <select id="exportElectricityResume" resultType="com.ozs.service.entity.vo.ElectricityResumeResp">
+        SELECT
+        ca.measure_point_name AS measurePointName,
+        ra.railway_name AS railwayName,
+        de.create_time  AS createTime,
+        ca.install_mile AS installMile,
+        pt.dept_name AS deptName,
+        de.camera_code AS cameraCode,
+        ca.camera_sn AS cameraSn,
+        de.create_time  AS createTime,
+        de.electricity AS electricity,
+        CASE
+        line_dir
+        WHEN 1 THEN
+        '上行'
+        WHEN 2 THEN
+        '下行'
+        WHEN 3 THEN
+        '上下行'
+        END AS lineDir,
+        ra.railway_type AS railwayType
+        FROM
+        base_electricity_resume AS de
+        LEFT JOIN base_camera_management AS ca ON de.camera_code = ca.camera_code
+        LEFT JOIN base_railway_management AS ra ON ca.railway_code = ra.railway_code
+        LEFT JOIN sys_dept AS pt ON ca.dept_id = pt.dept_id
+        <where>
+            <if test="cameraCode != null and cameraCode != ''">
+                AND de.camera_code=#{cameraCode}
+            </if>
+            <if test="startTime != null and startTime != ''">
+                AND de.create_time &gt;=#{startTime}
+            </if>
+            <if test="startTime == null or startTime == ''">
+                AND de.create_time &gt;= DATE_SUB(NOW(), INTERVAL 24 HOUR)
+            </if>
+            <if test="endTime != null and endTime != ''">
+                AND de.create_time &lt;=#{endTime}
+            </if>
+            <if test="endTime == null and endTime == ''">
+                AND de.create_time &lt;= NOW()
+            </if>
+        </where>
+        ORDER BY de.create_time desc
+    </select>
+</mapper>

+ 56 - 0
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseDeviceResumeController.java

@@ -0,0 +1,56 @@
+package com.ozs.web.controller.accountmanagment;
+
+
+import com.ozs.common.annotation.Log;
+import com.ozs.common.core.controller.BaseController;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.enums.BusinessType;
+import com.ozs.common.utils.poi.ExcelUtil;
+import com.ozs.service.entity.vo.BaseDeviceResumeVo;
+import com.ozs.service.entity.vo.DeviceResumeResp;
+import com.ozs.service.service.BaseDeviceResumeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @author Administrator
+ */
+@RestController
+@RequestMapping("/service/BaseDeviceResume")
+@Slf4j
+public class BaseDeviceResumeController extends BaseController {
+
+    @Autowired
+    private BaseDeviceResumeService baseDeviceResumeService;
+
+    /**
+     * 获取设备状态履历
+     */
+    @GetMapping("/getBaseDeviceResume")
+    @Log(title = "设备状态履历", businessType = BusinessType.SELECT)
+    public AjaxResult getBaseDeviceResume(@RequestParam(value = "cameraCode") String cameraCode,
+                                          @RequestParam(value ="startTime", required = false) String startTime,
+                                          @RequestParam(value ="endTime", required = false) String endTime) {
+        List<BaseDeviceResumeVo> baseDevicResumeVoList = baseDeviceResumeService.getBaseDeviceResume(cameraCode, startTime, endTime);
+        return AjaxResult.success(baseDevicResumeVoList);
+    }
+
+    /**
+     * 导出设备状态履历
+     *
+     * @param response
+     */
+    @GetMapping("/exportDeviceResume")
+    @Log(title = "设备状态履历", businessType = BusinessType.EXPORT)
+    public void exportDeviceResume(HttpServletResponse response, @RequestParam(value = "cameraCode") String cameraCode,
+                                   @RequestParam(value ="startTime", required = false) String startTime,
+                                   @RequestParam(value ="endTime", required = false) String endTime) {
+        List<DeviceResumeResp> deviceResumeRespList = baseDeviceResumeService.exportDeviceResume(cameraCode, startTime, endTime);
+        ExcelUtil<DeviceResumeResp> util = new ExcelUtil<>(DeviceResumeResp.class);
+        util.exportExcel(response, deviceResumeRespList, "设备状态履历数据导出失败");
+    }
+}

+ 62 - 0
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseElectricityResumeController.java

@@ -0,0 +1,62 @@
+package com.ozs.web.controller.accountmanagment;
+
+
+import com.ozs.common.annotation.Log;
+import com.ozs.common.core.controller.BaseController;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.enums.BusinessType;
+import com.ozs.common.utils.poi.ExcelUtil;
+import com.ozs.service.entity.vo.BaseDeviceResumeVo;
+import com.ozs.service.entity.vo.BaseElectricityResumeVo;
+import com.ozs.service.entity.vo.DeviceResumeResp;
+import com.ozs.service.entity.vo.ElectricityResumeResp;
+import com.ozs.service.service.BaseElectricityResumeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @author Administrator
+ */
+@RestController
+@RequestMapping("/service/BaseElectricityResume")
+@Slf4j
+public class BaseElectricityResumeController extends BaseController {
+
+    @Autowired
+    private BaseElectricityResumeService baseElectricityResumeService;
+
+    /**
+     * 获取电池电量状态履历
+     */
+    @GetMapping("/getBaseElectricityResume")
+    @Log(title = "设备状态履历", businessType = BusinessType.SELECT)
+    public AjaxResult getBaseElectricityResume(@RequestParam(value = "cameraCode") String cameraCode,
+                                               @RequestParam(value = "startTime", required = false) String startTime,
+                                               @RequestParam(value = "endTime", required = false) String endTime) {
+        List<BaseElectricityResumeVo> baseElectricityResumeVoList = baseElectricityResumeService.getBaseElectricityResume(cameraCode, startTime, endTime);
+        return AjaxResult.success(baseElectricityResumeVoList);
+    }
+
+
+    /**
+     * 导出电池电量状态履历
+     *
+     * @param response
+     */
+    @GetMapping("/exportElectricityResume")
+    @Log(title = "电池电量状态履历", businessType = BusinessType.EXPORT)
+    public void exportElectricityResume(HttpServletResponse response, @RequestParam(value = "cameraCode") String cameraCode,
+                                   @RequestParam(value ="startTime", required = false) String startTime,
+                                   @RequestParam(value ="endTime", required = false) String endTime) {
+        List<ElectricityResumeResp> electricityResumeRespList = baseElectricityResumeService.exportElectricityResume(cameraCode, startTime, endTime);
+        ExcelUtil<ElectricityResumeResp> util = new ExcelUtil<>(ElectricityResumeResp.class);
+        util.exportExcel(response, electricityResumeRespList, "电池电量状态履历数据导出失败");
+    }
+}

+ 61 - 38
hazard-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java

@@ -140,7 +140,8 @@ public class CameraUtil {
     private ServerConfig serverConfig;
     @Autowired
     private MsgAlarmCloudService msgAlarmCloudService;
-
+    @Autowired
+    BaseDeviceResumeService baseDeviceResumeService;
     @Resource
     BaseCameraManagementService baseCameraManagementService;
     @Autowired
@@ -1009,51 +1010,73 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
      * 相机状态修改
      */
     public void cameraBlockUp() {
-        long time=60000L;
+        long baseTime = 60000L;
         //当前时间戳
-        long dades = System.currentTimeMillis();
+        long currentTimestamp = System.currentTimeMillis();
         //字典中设置的值
         List<SysDictData> heartIntervalTime = dictDataMapper.selectDictDataByType("heart_interval_time");
         List<SysDictData> triggerWarningFrequency = dictDataMapper.selectDictDataByType("trigger_warning_frequency");
-        if (!ObjectUtils.isEmpty(heartIntervalTime)){
-            time=time*Long.valueOf(heartIntervalTime.get(0).getDictValue());
+        // 计算时间间隔
+        long timeInterval = baseTime;
+        if (!ObjectUtils.isEmpty(heartIntervalTime)) {
+            timeInterval *= Long.valueOf(heartIntervalTime.get(0).getDictValue());
         }
-        if (!ObjectUtils.isEmpty(triggerWarningFrequency)){
-            time=time*Long.valueOf(triggerWarningFrequency.get(0).getDictValue());
+        if (!ObjectUtils.isEmpty(triggerWarningFrequency)) {
+            timeInterval *= Long.valueOf(triggerWarningFrequency.get(0).getDictValue());
+        }
+        if (ObjectUtils.isEmpty(heartIntervalTime) || ObjectUtils.isEmpty(triggerWarningFrequency)) {
+            timeInterval = baseTime * 5 * 3; // 默认值
+        }
+        // 计算查询的时间范围(前五分钟)
+        long startTime = currentTimestamp - timeInterval;
+        // 查询 MQ 日志
+        LambdaQueryWrapper<MqLog> mqLogQuery = new LambdaQueryWrapper<>();
+        mqLogQuery.between(MqLog::getCreateTime, new Date(startTime), new Date(currentTimestamp));
+        List<MqLog> mqLogs = mqLogService.list(mqLogQuery);
+        Set<String> loggedCameraCodes = mqLogs.stream().map(MqLog::getCameraCode).collect(Collectors.toSet());
+        // 获取所有设备
+        List<BaseDeviceDynamicManagement> devices = baseDeviceDynamicManagementService.list();
+        Set<String> allCameraCodes = devices.stream().map(BaseDeviceDynamicManagement::getCameraCode).collect(Collectors.toSet());
+        // 找出未记录日志的设备
+        Set<String> inactiveCameraCodes = new HashSet<>(allCameraCodes);
+        inactiveCameraCodes.removeAll(loggedCameraCodes);
+
+        // 更新设备状态
+        updateDeviceStatus(loggedCameraCodes, 1); // 启用设备
+        updateDeviceStatus(inactiveCameraCodes, 2); // 禁用设备
+
+        // 保存设备状态变更记录
+        saveDeviceResume(loggedCameraCodes, 1);
+        saveDeviceResume(inactiveCameraCodes, 2);
+    }
+
+    // 辅助方法:更新设备状态
+    private void updateDeviceStatus(Set<String> cameraCodes, int status) {
+        if (!cameraCodes.isEmpty()) {
+            LambdaUpdateWrapper<BaseDeviceDynamicManagement> updateWrapper = new LambdaUpdateWrapper<>();
+            updateWrapper.in(BaseDeviceDynamicManagement::getCameraCode, cameraCodes);
+            updateWrapper.set(BaseDeviceDynamicManagement::getIsDisable, status);
+            baseDeviceDynamicManagementService.update(updateWrapper);
         }
-        if (ObjectUtils.isEmpty(heartIntervalTime)||ObjectUtils.isEmpty(triggerWarningFrequency)){
-            time=time*5*3;
+    }
+
+
+    // 辅助方法:批量保存设备状态变更记录
+    private void saveDeviceResume(Set<String> cameraCodes, int status) {
+        if (cameraCodes.isEmpty()) {
+            return; // 如果集合为空,直接返回
         }
-        //当前时间5分钟之前的时间戳
-        long time2 = dades - (time);
-        LambdaQueryWrapper<MqLog> mqLog = new LambdaQueryWrapper<>();
-        mqLog.ge(MqLog::getCreateTime, new Date(time2));
-        mqLog.le(MqLog::getCreateTime, new Date(dades));
-        List<MqLog> list = mqLogService.list(mqLog);
-        List<String> log = list.stream().map(MqLog::getCameraCode).collect(Collectors.toList());
-        List<BaseDeviceDynamicManagement> dynamicManagements = baseDeviceDynamicManagementService.list();
-        List<String> base = dynamicManagements.stream().map(BaseDeviceDynamicManagement::getCameraCode).collect(Collectors.toList());
-        if (!ObjectUtils.isEmpty(log)) {
-            //找出相机表中不包含日志表相机的数据
-            List<BaseDeviceDynamicManagement> ones = dynamicManagements.stream().filter(o -> !log.contains(o.getCameraCode())).collect(Collectors.toList());
-            List<String> collect = ones.stream().map(BaseDeviceDynamicManagement::getCameraCode).collect(Collectors.toList());
-            //找出相机表中包含日志表相机的数据
-            base.retainAll(log);
-            LambdaUpdateWrapper<BaseDeviceDynamicManagement> queryWrapper = new LambdaUpdateWrapper<>();
-            queryWrapper.in(BaseDeviceDynamicManagement::getCameraCode, base);
-            queryWrapper.set(BaseDeviceDynamicManagement::getIsDisable, 1);
-            baseDeviceDynamicManagementService.saveOrUpdate(null, queryWrapper);
-
-            LambdaUpdateWrapper<BaseDeviceDynamicManagement> wrapper = new LambdaUpdateWrapper<>();
-            wrapper.in(BaseDeviceDynamicManagement::getCameraCode, collect);
-            wrapper.set(BaseDeviceDynamicManagement::getIsDisable, 2);
-            baseDeviceDynamicManagementService.saveOrUpdate(null, wrapper);
-        }else {
-            LambdaUpdateWrapper<BaseDeviceDynamicManagement> wrapper = new LambdaUpdateWrapper<>();
-            wrapper.in(BaseDeviceDynamicManagement::getCameraCode, base);
-            wrapper.set(BaseDeviceDynamicManagement::getIsDisable, 2);
-            baseDeviceDynamicManagementService.saveOrUpdate(null, wrapper);
+
+        List<BaseDeviceResume> resumes = new ArrayList<>();
+        for (String cameraCode : cameraCodes) {
+            BaseDeviceResume resume = new BaseDeviceResume();
+            resume.setCameraCode(cameraCode);
+            resume.setIsDisable(status);
+            resumes.add(resume);
         }
+
+        // 批量保存
+        baseDeviceResumeService.saveBatch(resumes);
     }
 
     /**

+ 7 - 0
hazard-sdk/src/main/java/com/ozs/controller/upload/GeoHazardMonitorTokenController.java

@@ -85,6 +85,8 @@ public class GeoHazardMonitorTokenController {
     private String recordUrl;
     @Autowired
     private CloudStateService cloudStateService;
+    @Autowired
+    private BaseElectricityResumeService baseElectricityResumeService;
 
     /**
      * 获取web访问令牌
@@ -378,6 +380,7 @@ public class GeoHazardMonitorTokenController {
      * @return
      */
     @PostMapping("/device/state")
+    @Transactional
     public String deviceState(@RequestParam("parameter") String parameter, HttpServletRequest request) throws ParseException {
         JSONObject jsonObject = new JSONObject();
         String token = apiTokenUtils.getGeoHazardMonitorToken(request);
@@ -413,6 +416,10 @@ public class GeoHazardMonitorTokenController {
                 baseDynamicManagement.setUpdateBy(admin.getUserId());
                 log.info("reqDeviceVo:{}", baseDynamicManagement);
                 if (baseDeviceDynamicManagementService.updateById(baseDynamicManagement)) {
+                    BaseElectricityResume baseElectricityResume=new BaseElectricityResume();
+                    baseElectricityResume.setCameraCode(baseDynamicManagement.getCameraCode());
+                    baseElectricityResume.setElectricity(reqDeviceVo.getElectricity());
+                    baseElectricityResumeService.save(baseElectricityResume);
                     jsonObject.put("resultCode", 1);
                     jsonObject.put("message", "成功");
                     return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");