Browse Source

代码合并

gao.qiang 4 weeks ago
parent
commit
9523387e88
29 changed files with 548 additions and 272 deletions
  1. 1 1
      business-service/src/main/java/com/ozs/service/entity/BaseDeviceResume.java
  2. 1 1
      business-service/src/main/java/com/ozs/service/entity/BaseElectricityResume.java
  3. 14 0
      business-service/src/main/java/com/ozs/service/entity/MsgAlarm.java
  4. 12 0
      business-service/src/main/java/com/ozs/service/entity/MsgAlarmCloud.java
  5. 4 0
      business-service/src/main/java/com/ozs/service/entity/MsgAlarmMatter.java
  6. 1 1
      business-service/src/main/java/com/ozs/service/entity/vo/DeviceResumeResp.java
  7. 1 1
      business-service/src/main/java/com/ozs/service/entity/vo/ElectricityResumeResp.java
  8. 19 0
      business-service/src/main/java/com/ozs/service/entity/vo/MsgAlarmResp.java
  9. 2 0
      business-service/src/main/java/com/ozs/service/mapper/BaseCameraManagementMapper.java
  10. 2 0
      business-service/src/main/java/com/ozs/service/service/BaseCameraManagementService.java
  11. 0 1
      business-service/src/main/java/com/ozs/service/service/MsgAlarmCloudService.java
  12. 13 0
      business-service/src/main/java/com/ozs/service/service/impl/BaseCameraManagementServiceImpl.java
  13. 25 23
      business-service/src/main/java/com/ozs/service/service/impl/BaseUserServiceImpl.java
  14. 0 8
      business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmCloudServiceImpl.java
  15. 13 4
      business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmServiceImpl.java
  16. 25 1
      business-service/src/main/java/com/ozs/service/utils/CallbackUtil.java
  17. 8 8
      business-service/src/main/java/com/ozs/service/utils/PublishCallback.java
  18. 73 0
      business-service/src/main/resources/mapper/service/BaseCameraManagementMapper.xml
  19. 1 1
      business-service/src/main/resources/mapper/service/BaseUserMapper.xml
  20. 2 1
      business-service/src/main/resources/mapper/service/MsgAlarmCloudMapper.xml
  21. 2 1
      business-service/src/main/resources/mapper/service/MsgAlarmMapper.xml
  22. 118 105
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java
  23. 2 2
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseDeviceResumeController.java
  24. 2 2
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseRailwayManagementController.java
  25. 5 1
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmMatterController.java
  26. 15 4
      hazard-admin/src/main/java/com/ozs/web/controller/websocket/WebSocketConteoller.java
  27. 3 0
      hazard-admin/src/main/java/com/ozs/web/core/config/CaneraConfig.java
  28. 183 106
      hazard-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java
  29. 1 0
      hazard-admin/src/main/resources/application.yml

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

@@ -24,7 +24,7 @@ import java.util.Date;
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder
-public class BaseDeviceResume extends BaseEntity implements Serializable {
+public class BaseDeviceResume  implements Serializable {
 
     private static final long serialVersionUID = 1L;
 

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

@@ -24,7 +24,7 @@ import java.util.Date;
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder
-public class BaseElectricityResume extends BaseEntity implements Serializable {
+public class BaseElectricityResume  implements Serializable {
 
     private static final long serialVersionUID = 1L;
 

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

@@ -1,5 +1,6 @@
 package com.ozs.service.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -253,6 +254,7 @@ public class MsgAlarm extends BaseEntity implements Serializable {
     /**
      *所属工务段名称
      */
+    @Excel(name = "所属工务段")
     @TableField(exist = false)
     private String deptName;
 
@@ -269,4 +271,16 @@ public class MsgAlarm extends BaseEntity implements Serializable {
     @Excel(name = "版本名称")
     @TableField(exist = false)
     private String versionName;
+
+    /**
+     * 相机序列号
+     */
+    @Excel(name = "设备序列号")
+    @TableField(exist = false)
+    private String cameraSn;
+
+
+    @TableField(exist = false)
+    private Integer unlockNum;
+
 }

+ 12 - 0
business-service/src/main/java/com/ozs/service/entity/MsgAlarmCloud.java

@@ -244,6 +244,7 @@ public class MsgAlarmCloud extends BaseEntity implements Serializable {
     /**
      *所属工务段名称
      */
+    @Excel(name = "所属工务段")
     @TableField(exist = false)
     private String deptName;
 
@@ -260,4 +261,15 @@ public class MsgAlarmCloud extends BaseEntity implements Serializable {
     @Excel(name = "版本名称")
     @TableField(exist = false)
     private String versionName;
+
+    /**
+     * 相机序列号
+     */
+    @Excel(name = "设备序列号")
+    @TableField(exist = false)
+    private String cameraSn;
+
+
+    @TableField(exist = false)
+    private Integer unlockNum;
 }

+ 4 - 0
business-service/src/main/java/com/ozs/service/entity/MsgAlarmMatter.java

@@ -182,6 +182,10 @@ public class MsgAlarmMatter extends BaseEntity implements Serializable {
     @TableField(exist = false)
     private List<String> imageUrls;
 
+    @TableField(exist = false)
+    @Excel(name = "报警图片URL")
+    private String imageUrlStr;
+
     /**
      * 解除人真实姓名
      */

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

@@ -40,7 +40,7 @@ public class DeviceResumeResp extends PageVo implements Serializable {
     @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")
+    @Excel(name = "时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date createTime ;
     @Excel(name = "相机状态",readConverterExp = "1=正常,2=故障")
     private String isDisable;

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

@@ -39,7 +39,7 @@ public class ElectricityResumeResp extends PageVo implements Serializable {
     @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")
+    @Excel(name = "时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date createTime ;
     @Excel(name = "电量(%)")
     private Integer electricity;

+ 19 - 0
business-service/src/main/java/com/ozs/service/entity/vo/MsgAlarmResp.java

@@ -167,4 +167,23 @@ public class MsgAlarmResp implements Serializable {
 
     private String electricity;
 
+    /**
+     * 版本号
+     */
+    private String versionNum;
+
+    /**
+     * 版本名称
+     */
+    private String versionName;
+    /**
+     * 未解除报警总数
+     */
+    private  Long unlockNum;
+    /**
+     * 线路类型
+     */
+    private Integer railwayType;
+
+
 }

+ 2 - 0
business-service/src/main/java/com/ozs/service/mapper/BaseCameraManagementMapper.java

@@ -31,4 +31,6 @@ public interface BaseCameraManagementMapper extends BaseMapper<BaseCameraManagem
     List<AlarmCountSortVo> alarmCountSort(MsgAlarmVo msgAlarmVo);
 
     List<BaseCameraManagement> cameraManagementList(BaseCameraManagementVo baseCameraManagementVo);
+
+    List<DeviceStateResp> bellDeviceStatePage(DeviceStateResp deviceStateResp);
 }

+ 2 - 0
business-service/src/main/java/com/ozs/service/service/BaseCameraManagementService.java

@@ -53,4 +53,6 @@ public interface BaseCameraManagementService extends IService<BaseCameraManageme
     AjaxResult cameraStateList(BaseCameraManagementVo baseCameraManagementVo);
 
     AjaxResult updateStateAll(Integer state);
+
+    IPage<DeviceStateResp> bellDeviceStatePage(DeviceStateResp deviceStateResp);
 }

+ 0 - 1
business-service/src/main/java/com/ozs/service/service/MsgAlarmCloudService.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.service.entity.BaseCameraManagement;
-import com.ozs.service.entity.MsgAlarm;
 import com.ozs.service.entity.MsgAlarmCloud;
 import com.ozs.service.entity.vo.*;
 

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

@@ -405,4 +405,17 @@ public class BaseCameraManagementServiceImpl extends ServiceImpl<BaseCameraManag
         baseDeviceDynamicManagementMapper.update(baseDeviceDynamicManagement,null);
         return AjaxResult.success();
     }
+
+    @Override
+    public IPage<DeviceStateResp> bellDeviceStatePage(DeviceStateResp deviceStateResp) {
+        int pageNum = Integer.parseInt(deviceStateResp.getPageNum().toString());
+        int pageSize = Integer.parseInt(deviceStateResp.getPageSize().toString());
+        com.github.pagehelper.Page<DeviceStateResp> page = PageHelper.startPage(pageNum, pageSize)
+                .doSelectPage(() -> baseCameraManagementMapper.bellDeviceStatePage(deviceStateResp));
+        com.baomidou.mybatisplus.extension.plugins.pagination.Page<DeviceStateResp> pageR =
+                new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(pageNum, pageSize);
+        pageR.setRecords(page.getResult());
+        pageR.setTotal(page.getTotal());
+        return pageR;
+    }
 }

+ 25 - 23
business-service/src/main/java/com/ozs/service/service/impl/BaseUserServiceImpl.java

@@ -22,35 +22,37 @@ public class BaseUserServiceImpl extends ServiceImpl<BaseUserMapper, BaseUser> i
     @Override
     public Set<String> getUserIdList(String createBy, Long deptId) {
         Set<String> set = new HashSet<>();
-        // 根据create_by、data_permission=1(本人)
-        Set<String> set1 = baseUserMapper.getUserIdList(createBy);
-        set.addAll(set1);
-        // 根据 dept_id(本部门)data_permission=2
-        Set<String> set2 = baseUserMapper.getUserIdByDeptId(deptId);
-        set.addAll(set2);
+//        // 根据create_by、data_permission=1(本人)
+//        Set<String> set1 = baseUserMapper.getUserIdList(createBy);
+//        set.addAll(set1);
+//        // 根据 dept_id(本部门)data_permission=2
+//        Set<String> set2 = baseUserMapper.getUserIdByDeptId(deptId);
+//        set.addAll(set2);
         // 根据 dept_id(本部门及下级部门数据) data_permission=3
         // 获取部门数据
         List<Long> deptList = baseUserMapper.getDeptId(deptId);
         // 获取用户列表
+        deptList.add(235L);
+        deptList.add(243L);
         Set<String> set3 = baseUserMapper.getUserIdByDeptIds(deptList);
         set.addAll(set3);
-        // 本人及本级部门数据 data_permission=4
-        Set<String> set4 = baseUserMapper.getUserIdByDeptIdAndUserId(createBy, deptId);
-        set.addAll(set4);
-        // 本人及本部门及下级部门数据 data_permission=5
-        // 获取本人
-        Set<String> setUser = baseUserMapper.getUserIdListBy5(createBy);
-        // 获取部门数据
-        List<Long> deptList5 = baseUserMapper.getDeptId(deptId);
-        // 获取用户列表
-        Set<String> setUsers = baseUserMapper.getUserIdByDeptIdsBy5(deptList5);
-        Set<String> set5 = new HashSet<>();
-        set5.addAll(setUser);
-        set5.addAll(setUsers);
-        set.addAll(set5);
-        // 全部 data_permission=6
-        Set<String> set6 = baseUserMapper.getUserIdList6();
-        set.addAll(set6);
+//        // 本人及本级部门数据 data_permission=4
+//        Set<String> set4 = baseUserMapper.getUserIdByDeptIdAndUserId(createBy, deptId);
+//        set.addAll(set4);
+//        // 本人及本部门及下级部门数据 data_permission=5
+//        // 获取本人
+//        Set<String> setUser = baseUserMapper.getUserIdListBy5(createBy);
+//        // 获取部门数据
+//        List<Long> deptList5 = baseUserMapper.getDeptId(deptId);
+//        // 获取用户列表
+//        Set<String> setUsers = baseUserMapper.getUserIdByDeptIdsBy5(deptList5);
+//        Set<String> set5 = new HashSet<>();
+//        set5.addAll(setUser);
+//        set5.addAll(setUsers);
+//        set.addAll(set5);
+//        // 全部 data_permission=6
+//        Set<String> set6 = baseUserMapper.getUserIdList6();
+//        set.addAll(set6);
         return set;
     }
 

+ 0 - 8
business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmCloudServiceImpl.java

@@ -10,13 +10,11 @@ import com.ozs.common.constant.Constants;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.service.entity.BaseCameraManagement;
 import com.ozs.service.entity.BaseRailwayManagement;
-import com.ozs.service.entity.MsgAlarm;
 import com.ozs.service.entity.MsgAlarmCloud;
 import com.ozs.service.entity.vo.*;
 import com.ozs.service.mapper.BaseCameraManagementMapper;
 import com.ozs.service.mapper.BaseRailwayManagementMapper;
 import com.ozs.service.mapper.MsgAlarmCloudMapper;
-import com.ozs.service.mapper.MsgAlarmMapper;
 import com.ozs.service.service.MsgAlarmCloudService;
 import com.ozs.service.service.RedisService;
 import lombok.extern.slf4j.Slf4j;
@@ -123,13 +121,7 @@ public class MsgAlarmCloudServiceImpl extends ServiceImpl<MsgAlarmCloudMapper, M
         Integer countCamera = baseCameraManagementMapper.countCamera(msgAlarmVo);
         // 累计报警次数
         Integer countMsg = msgAlarmCloudMapper.countMsg(msgAlarmVo);
-        // 解除报警
-//        LambdaQueryWrapper<MsgAlarm> lwJC = new LambdaQueryWrapper<MsgAlarm>();
-//        lwJC.eq(MsgAlarm::getIsLock, "1");
         Integer countJC = msgAlarmCloudMapper.countJC(msgAlarmVo);
-        // 未解除报警
-//        LambdaQueryWrapper<MsgAlarm> lwWJC = new LambdaQueryWrapper<MsgAlarm>();
-//        lwWJC.eq(MsgAlarm::getIsLock, "2");
         Integer countWJC = msgAlarmCloudMapper.countWJC(msgAlarmVo);
         map.put("countCamera", countCamera);
         map.put("countMsg", countMsg);

+ 13 - 4
business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmServiceImpl.java

@@ -8,6 +8,7 @@ import com.github.pagehelper.PageHelper;
 import com.ozs.common.constant.Constants;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.service.entity.BaseCameraManagement;
+import com.ozs.service.entity.BaseRailwayManagement;
 import com.ozs.service.entity.MsgAlarm;
 import com.ozs.service.entity.vo.*;
 import com.ozs.service.mapper.BaseCameraManagementMapper;
@@ -246,10 +247,18 @@ public class MsgAlarmServiceImpl extends ServiceImpl<MsgAlarmMapper, MsgAlarm> i
 
         // 创建返回结果的 map
         Map<String, Integer> results = new HashMap<>();
-        results.put("highAlarmCount", statistics.get("highAlarmCount"));
-        results.put("puAlarmCount", statistics.get("puAlarmCount"));
-        results.put("highUnresolvedCount", statistics.get("highUnresolvedCount"));
-        results.put("puUnresolvedCount", statistics.get("puUnresolvedCount"));
+        if (statistics != null) {
+            results.put("highAlarmCount", statistics.get("highAlarmCount"));
+            results.put("puAlarmCount", statistics.get("puAlarmCount"));
+            results.put("highUnresolvedCount", statistics.get("highUnresolvedCount"));
+            results.put("puUnresolvedCount", statistics.get("puUnresolvedCount"));
+        } else {
+            // 处理statistics为空的情况,设置默认值或空值
+            results.put("highAlarmCount", 0);
+            results.put("puAlarmCount", 0);
+            results.put("highUnresolvedCount", 0);
+            results.put("puUnresolvedCount", 0);
+        }
 
         return AjaxResult.success(results);
     }

+ 25 - 1
business-service/src/main/java/com/ozs/service/utils/CallbackUtil.java

@@ -1,8 +1,10 @@
 package com.ozs.service.utils;
 
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.ozs.service.entity.BaseCameraManagement;
+import com.ozs.service.service.BaseCameraManagementService;
 import com.ozs.service.service.CameraLogDetailService;
-import com.ozs.service.service.CameraUpdateLogService;
 import com.ozs.service.service.MqLogService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,13 +26,17 @@ public class CallbackUtil {
     CameraLogDetailService cameraLogDetailService;
     @Autowired
     MqLogService mqLogService;
+    @Autowired
+    BaseCameraManagementService baseCameraManagementService;
     private static  CameraLogDetailService cameraLogDetail;
     private static  MqLogService mqLog;
+    private static  BaseCameraManagementService baseCameraManagement;
 
     @PostConstruct
     public void init() {
         cameraLogDetail = cameraLogDetailService;
         mqLog=mqLogService;
+        baseCameraManagement=baseCameraManagementService;
     }
 
     public static void  callback(String deviceSn,Integer code,String remark){
@@ -40,4 +46,22 @@ public class CallbackUtil {
     public static void  heart(String cameraCode){
         CallbackUtil.mqLog.insetHeartLog(cameraCode);
     }
+
+    public static void updateVersionNum(String model,String cameraCode) {
+        // 找到 "bovai" 的位置
+        int bovaiIndex = model.indexOf("bovai");
+        if (bovaiIndex != -1) {
+            // 截取 "bovai." 之后的版本号
+            String version = model.substring(bovaiIndex + "bovai.".length());
+            log.info("bovai 的位置: " + bovaiIndex);
+            log.info("版本号: " + version);
+            // 创建 LambdaUpdateWrapper 用于构建更新条件
+            LambdaUpdateWrapper<BaseCameraManagement> wrapper = new LambdaUpdateWrapper<>();
+            // 设置更新条件:根据 cameraCode 进行筛选
+            wrapper.eq(BaseCameraManagement::getCameraCode, cameraCode);
+            // 设置要更新的字段:将 versionNum 更新为指定的 version
+            wrapper.set(BaseCameraManagement::getVersionNum, version);
+            CallbackUtil.baseCameraManagement.update(wrapper);
+        }
+    }
 }

+ 8 - 8
business-service/src/main/java/com/ozs/service/utils/PublishCallback.java

@@ -1,22 +1,14 @@
 package com.ozs.service.utils;
 
-import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.ozs.service.entity.CameraUpdateLog;
-import com.ozs.service.service.CameraUpdateLogService;
-import com.ozs.service.service.impl.CameraUpdateLogServiceImpl;
 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
 import org.eclipse.paho.client.mqttv3.MqttCallback;
 import org.eclipse.paho.client.mqttv3.MqttMessage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.util.List;
 
 /**
  * callback回调:
@@ -54,6 +46,7 @@ public class PublishCallback implements MqttCallback {
         String sign = null;
         String deviceSn = null;
         Integer code = null;
+        String model = null;
         // subscribe后得到的消息会执行到这里面
         logger.info("接收消息主题 : {}", topic);
         logger.info("接收消息内容 : {}", new String(message.getPayload()));
@@ -66,8 +59,15 @@ public class PublishCallback implements MqttCallback {
                     JSONObject object = jsonArray.getJSONObject(i);
                     sign = (String) object.get("sign");
                     deviceSn = (String) object.get("device_sn");
+                    JSONArray model1 = object.getJSONArray("model");
+                    // 检查数组是否为空
+                    if (model1 != null && !model1.isEmpty()) {
+                        // 取出数组的第一个值
+                        model = model1.getString(0);
+                    }
                 }
 //                CallbackUtil.heart(deviceSn);
+//                CallbackUtil.updateVersionNum(model,deviceSn);
                 PublishClient.pull(sign, deviceSn);
             } catch (Exception e) {
                 logger.error(e.getMessage());

+ 73 - 0
business-service/src/main/resources/mapper/service/BaseCameraManagementMapper.xml

@@ -315,4 +315,77 @@
         ORDER BY
         a.install_longitude,man.is_disable,msg.is_lock
     </select>
+    <select id="bellDeviceStatePage" resultType="com.ozs.service.entity.vo.DeviceStateResp" parameterType="com.ozs.service.entity.vo.DeviceStateResp">
+        SELECT
+        ca.install_mile AS installMile,
+        ca.measure_point_name AS measurePointName,
+        ra.railway_name AS railwayName,
+        ra.railway_type AS railwayType,
+        de.dept_name AS deptName,
+        CASE
+        line_dir
+        WHEN 1 THEN
+        '上行'
+        WHEN 2 THEN
+        '下行'
+        WHEN 3 THEN
+        '上下行'
+        END AS lineDir,
+        CASE
+        man.is_disable
+        WHEN 1 THEN
+        '正常'
+        WHEN 2 THEN
+        '故障'
+        END AS isDisable,
+        man.electricity,
+        ca.camera_code AS cameraCode,
+        ca.camera_sn AS cameraSn,
+        man.update_time AS updateTime,
+        man.heart_time AS heartTime
+        FROM
+        base_camera_management AS ca
+        LEFT JOIN base_railway_management AS ra ON ca.railway_code = ra.railway_code
+        LEFT JOIN sys_dept AS de ON ca.dept_id = de.dept_id
+        LEFT JOIN base_device_dynamic_management AS man ON ca.camera_code = man.camera_code
+        <where>
+            <if test="railwayCode != null and railwayCode != ''">
+                and ca.railway_code=#{railwayCode}
+            </if>
+            <if test="isDisable != null and isDisable != ''">
+                and man.is_disable=#{isDisable}
+            </if>
+            <if test="electricity != null and electricity != ''">
+                and man.electricity &lt;=#{electricity} and man.electricity &gt;=0
+            </if>
+            <if test="lineDir != null and lineDir != 0">
+                and ca.line_dir =#{lineDir}
+            </if>
+            <if test="railwayType != null and railwayType != 0">
+                and ra.railway_type =#{railwayType}
+            </if>
+            <if test="deptId != null and deptId != 0">
+                and ca.dept_id =#{deptId}
+            </if>
+            <if test="!dsFlay">
+                and
+                <trim prefix="(" prefixOverrides="or" suffix=")">
+                    <if test="dsUserId != null and dsUserId != ''">
+                        or ca.create_by=#{dsUserId}
+                    </if>
+                    <if test="dsDeptId != null and dsDeptId != 0">
+                        or ca.dept_id=#{dsDeptId}
+                    </if>
+                    <if test="dsDeptIds != null">
+                        or ca.dept_id in
+                        <foreach item="item" collection="dsDeptIds" separator="," open="(" close=")" index="">
+                            #{item}
+                        </foreach>
+                    </if>
+                </trim>
+            </if>
+        </where>
+        ORDER BY man.is_disable DESC,
+        man.heart_time DESC
+    </select>
 </mapper>

+ 1 - 1
business-service/src/main/resources/mapper/service/BaseUserMapper.xml

@@ -25,7 +25,7 @@
     <select id="getUserIdByDeptIds" resultType="java.lang.String" parameterType="java.util.List">
         select user_id
         from sys_user
-        where data_permission = 3 and dept_id in
+        where  dept_id in
         <foreach item="item" collection="deptList" separator="," open="(" close=")" index="">
             #{item}
         </foreach>

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

@@ -306,7 +306,8 @@
         a.released_time AS releasedTime,
         a.released_type AS releasedType,
         a.released_reason AS releasedReason,
-        a.remark AS remark
+        a.remark AS remark,
+        COUNT(CASE WHEN a.is_lock = 2 THEN 1 END) OVER() AS unlockNum
         FROM msg_alarm_cloud AS a
             join base_camera_management AS b on a.camera_code=b.camera_code
             join base_railway_management AS l on b.railway_code=l.railway_code

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

@@ -306,7 +306,8 @@
         a.released_time AS releasedTime,
         a.released_type AS releasedType,
         a.released_reason AS releasedReason,
-        a.remark AS remark
+        a.remark AS remark,
+        COUNT(CASE WHEN a.is_lock = 2 THEN 1 END) OVER() AS unlockNum
         FROM msg_alarm AS a
             join base_camera_management AS b on a.camera_code=b.camera_code
             join base_railway_management AS l on b.railway_code=l.railway_code

+ 118 - 105
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java

@@ -115,92 +115,93 @@ public class BaseCameraManagementController extends BaseController {
         Integer isLock = baseCameraManagementHomeVo.getIsLock();
         Long id = baseCameraManagementHomeVo.getId();
         String cameraCode = baseCameraManagementHomeVo.getCameraCode();
-        // isLock  报警是否解除 1已解除2未解除
-        if (!StringUtils.isEmpty(isLock) && isLock == 1 && !StringUtils.isEmpty(id)) {
+
+        if (isLock != null && id != null) {
             BaseCameraManagement baseCameraManagement = baseCameraManagementService.getById(id);
-            LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
-            if (!ObjectUtils.isEmpty(baseCameraManagement.getRailwayCode())) {
-                queryWrapper.eq(BaseRailwayManagement::getRailwayCode, baseCameraManagement.getRailwayCode());
-            }
-            BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
-            SysDept sysDept = deptService.selectDeptById(baseCameraManagement.getDeptId());
-            baseCameraManagement.setDeptName(sysDept.getDeptName());
-            baseCameraManagement.setRailwayName(baseRailwayManagement.getRailwayName());
-            String mils = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());
-            baseCameraManagement.setInstallMiles(mils);
-            if (!ObjectUtils.isEmpty(baseCameraManagement.getEndMile())) {
-                String end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
-                baseCameraManagement.setEndMiles(end);
-            }
-            if (!ObjectUtils.isEmpty(baseCameraManagement.getBeginMile())) {
-                String begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
-                baseCameraManagement.setBeginMiles(begin);
-            }
-            BaseDeviceDynamicManagement deviceDynamicManagement = baseDeviceDynamicManagementService.getOne(new LambdaQueryWrapper<BaseDeviceDynamicManagement>()
-                    .eq(BaseDeviceDynamicManagement::getCameraCode, cameraCode));
-            baseCameraManagement.setIsDisable(deviceDynamicManagement.getIsDisable());
-            baseCameraManagement.setElectricity(deviceDynamicManagement.getElectricity() + "%");
-            List<MqLog> list = mqLogService.list(new LambdaQueryWrapper<MqLog>()
-                    .eq(MqLog::getCameraCode, cameraCode).orderByDesc(MqLog::getCreateTime));
-            if (!ObjectUtils.isEmpty(list)) {
-                baseCameraManagement.setHeartTime(list.get(0).getCreateTime());
-            }
-            // 将字符串转换为浮点数
-            double installLatitude = Double.parseDouble(baseCameraManagement.getInstallLatitude());
-            double installLongitude = Double.parseDouble(baseCameraManagement.getInstallLongitude());
-            // 创建 DecimalFormat 对象,指定格式
-            DecimalFormat decimalFormat = new DecimalFormat("#.00");
-            // 格式化数字
-            baseCameraManagement.setInstallLatitude(decimalFormat.format(installLatitude));
-            baseCameraManagement.setInstallLongitude(decimalFormat.format(installLongitude));
-            return AjaxResult.success(baseCameraManagement);
-        } else if (!StringUtils.isEmpty(isLock) && isLock == 2 && !StringUtils.isEmpty(cameraCode)) {
-            MsgAlarmCloud msgAlarmclou = msgAlarmCloudService.selectByCameraCode(cameraCode);
-            LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
-            if (!ObjectUtils.isEmpty(msgAlarmclou.getCameraCode())) {
-                lw.eq(BaseCameraManagement::getCameraCode, msgAlarmclou.getCameraCode());
-            }
-            BaseCameraManagement baseCameraManagement = baseCameraManagementService.getOne(lw);
-            LambdaQueryWrapper<BaseRailwayManagement> wrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
-            if (!ObjectUtils.isEmpty(baseCameraManagement.getRailwayCode())) {
-                wrapper.eq(BaseRailwayManagement::getRailwayCode, baseCameraManagement.getRailwayCode());
-            }
-            BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(wrapper);
-            MsgAlarmResp msgAlarmResp = new MsgAlarmResp();
-            BeanUtils.copyProperties(msgAlarmclou, msgAlarmResp);
-            msgAlarmResp.setRailwayName(baseRailwayManagement.getRailwayName());
-            msgAlarmResp.setDeptId(baseCameraManagement.getDeptId());
-            if (!ObjectUtils.isEmpty(baseCameraManagement.getEndMile()) && !ObjectUtils.isEmpty(baseCameraManagement.getBeginMile())) {
-                String begin = AppendUtils.stringAppend(baseCameraManagement.getBeginMile());
-                String end = AppendUtils.stringAppend(baseCameraManagement.getEndMile());
-                String endMile = begin + "-" + end;
-                msgAlarmResp.setBeginMile(endMile);
-            }
-            String mile = AppendUtils.stringAppend(baseCameraManagement.getInstallMile());
-            msgAlarmResp.setAlarmMile(mile);
-            double installLatitude = Double.parseDouble(baseCameraManagement.getInstallLatitude());
-            double installLongitude = Double.parseDouble(baseCameraManagement.getInstallLongitude());
-            // 创建 DecimalFormat 对象,指定格式
-            DecimalFormat decimalFormat = new DecimalFormat("#.00");
-            // 格式化数字
-            msgAlarmResp.setInstallLongitude(decimalFormat.format(installLongitude) + "," + decimalFormat.format(installLatitude));
-            String[] split = msgAlarmclou.getImageUrl().split(";");
-            ArrayList<String> objects = new ArrayList<>(Arrays.asList(split));
-            msgAlarmResp.setImageUrls(objects);
-            BaseDeviceDynamicManagement deviceDynamicManagement = baseDeviceDynamicManagementService.getOne(new LambdaQueryWrapper<BaseDeviceDynamicManagement>()
-                    .eq(BaseDeviceDynamicManagement::getCameraCode, cameraCode));
-            msgAlarmResp.setIsDisable(deviceDynamicManagement.getIsDisable());
-            msgAlarmResp.setElectricity(deviceDynamicManagement.getElectricity() + "%");
-            List<MqLog> list = mqLogService.list(new LambdaQueryWrapper<MqLog>()
-                    .eq(MqLog::getCameraCode, cameraCode).orderByDesc(MqLog::getCreateTime));
-            if (!ObjectUtils.isEmpty(list)) {
-                msgAlarmResp.setHeartTime(list.get(0).getCreateTime());
+            if (isLock == 1) {
+                // 一次性取相关的设备动态管理
+                List<BaseDeviceDynamicManagement> deviceDynamics = baseDeviceDynamicManagementService.list(new LambdaQueryWrapper<BaseDeviceDynamicManagement>()
+                        .eq(BaseDeviceDynamicManagement::getCameraCode, cameraCode));
+
+                if (!deviceDynamics.isEmpty()) {
+                    BaseDeviceDynamicManagement deviceDynamicManagement = deviceDynamics.get(0);
+                    baseCameraManagement.setIsDisable(deviceDynamicManagement.getIsDisable());
+                    baseCameraManagement.setElectricity(deviceDynamicManagement.getElectricity() + "%");
+                }
+
+                // 一次性获取铁路管理
+                BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(new LambdaQueryWrapper<BaseRailwayManagement>()
+                        .eq(BaseRailwayManagement::getRailwayCode, baseCameraManagement.getRailwayCode()));
+
+                // 设置属性的单独方法
+                setCameraManagementProperties(baseCameraManagement, baseRailwayManagement);
+
+                return AjaxResult.success(baseCameraManagement);
             }
+
+        } else if (isLock != null && cameraCode != null && isLock == 2) {
+            MsgAlarmCloud msgAlarmCloud = msgAlarmCloudService.selectByCameraCode(cameraCode);
+            BaseCameraManagement baseCameraManagement = baseCameraManagementService.getOne(new LambdaQueryWrapper<BaseCameraManagement>()
+                    .eq(BaseCameraManagement::getCameraCode, msgAlarmCloud.getCameraCode()));
+
+            BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(new LambdaQueryWrapper<BaseRailwayManagement>()
+                    .eq(BaseRailwayManagement::getRailwayCode, baseCameraManagement.getRailwayCode()));
+
+            // 准备 MsgAlarmResp 的方法以避免重复
+            MsgAlarmResp msgAlarmResp = prepareMsgAlarmResponse(msgAlarmCloud, baseCameraManagement, baseRailwayManagement);
+
             return AjaxResult.success(msgAlarmResp);
         }
+
         return null;
     }
 
+    // 设置 BaseCameraManagement 的属性方法
+    private void setCameraManagementProperties(BaseCameraManagement baseCameraManagement, BaseRailwayManagement baseRailwayManagement) {
+        SysDept sysDept = deptService.selectDeptById(baseCameraManagement.getDeptId());
+        baseCameraManagement.setDeptName(sysDept.getDeptName());
+        baseCameraManagement.setRailwayName(baseRailwayManagement.getRailwayName());
+
+        // 处理里程和坐标格式化
+        baseCameraManagement.setInstallMiles(AppendUtils.stringAppend(baseCameraManagement.getInstallMile()));
+        if (!ObjectUtils.isEmpty(baseCameraManagement.getEndMile())) {
+            baseCameraManagement.setEndMiles(AppendUtils.stringAppend(baseCameraManagement.getEndMile()));
+        }
+        if (!ObjectUtils.isEmpty(baseCameraManagement.getBeginMile())) {
+            baseCameraManagement.setBeginMiles(AppendUtils.stringAppend(baseCameraManagement.getBeginMile()));
+        }
+        formatCoordinates(baseCameraManagement);
+    }
+
+    // 坐标格式化方法
+    private void formatCoordinates(BaseCameraManagement baseCameraManagement) {
+        double installLatitude = Double.parseDouble(baseCameraManagement.getInstallLatitude());
+        double installLongitude = Double.parseDouble(baseCameraManagement.getInstallLongitude());
+        DecimalFormat decimalFormat = new DecimalFormat("#.00");
+        baseCameraManagement.setInstallLatitude(decimalFormat.format(installLatitude));
+        baseCameraManagement.setInstallLongitude(decimalFormat.format(installLongitude));
+    }
+
+    // 准备 MsgAlarmResp 的方法
+    private MsgAlarmResp prepareMsgAlarmResponse(MsgAlarmCloud msgAlarmCloud, BaseCameraManagement baseCameraManagement, BaseRailwayManagement baseRailwayManagement) {
+        MsgAlarmResp msgAlarmResp = new MsgAlarmResp();
+        BeanUtils.copyProperties(msgAlarmCloud, msgAlarmResp);
+        msgAlarmResp.setRailwayName(baseRailwayManagement.getRailwayName());
+        msgAlarmResp.setDeptId(baseCameraManagement.getDeptId());
+
+        // 添加里程数据
+        msgAlarmResp.setBeginMile(AppendUtils.stringAppend(baseCameraManagement.getBeginMile()) + "-" +
+                AppendUtils.stringAppend(baseCameraManagement.getEndMile()));
+
+        msgAlarmResp.setAlarmMile(AppendUtils.stringAppend(baseCameraManagement.getInstallMile()));
+        formatCoordinates(baseCameraManagement);
+
+        // 处理图像 URL
+        msgAlarmResp.setImageUrls(new ArrayList<>(Arrays.asList(msgAlarmCloud.getImageUrl().split(";"))));
+
+        return msgAlarmResp;
+    }
+
     /**
      * 相机台账管理分页
      *
@@ -1003,36 +1004,25 @@ public class BaseCameraManagementController extends BaseController {
             throw new BaseException("相机编号【" + vo.getCameraCode() + "】不存在");
         }
         String recordUrl = CameraUtil.getRecordUrl(one.getCameraCode(), one.getChannel(), vo.getStartTime(), vo.getEntTime());
-        if (recordUrl.contains("当前相机暂无回放视频")) {
+        if (recordUrl.contains("当前相机暂无回放视频") || recordUrl.contains("当前回放视频数已超过带宽限制,请您10分钟以后重试")) {
             return AjaxResult.error(recordUrl);
         } else {
             return AjaxResult.success("ok", recordUrl);
         }
     }
 
-    /**
-     * 视频服务页面,报警信息列表点击查看 报警记录回放视频
-     * @param alarmId
-     * @return
-     */
-    @GetMapping("/api/getAlarmRecord")
+/**
+ * 关闭录像
+ */
+    @GetMapping("/closestream")
     @Log(title = "相机台账管理", businessType = BusinessType.OTHER)
-    public AjaxResult getAlarmRecord(@RequestParam("alarmId") String alarmId) {
-
-        LambdaQueryWrapper<MsgAlarmCloud> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(MsgAlarmCloud::getAlarmId, alarmId);
-        MsgAlarmCloud msgAlarmclou = msgAlarmCloudService.getOne(wrapper);
-        // 获取报警时间
-        Date alarmTime = msgAlarmclou.getAlarmTime();
-        // 获取报警前5分钟的时间
-        Date startTime = DateUtils.addMinutes(alarmTime, -5);
-        // 获取报警后5分钟的时间
-        Date endTime = DateUtils.addMinutes(alarmTime, 5);
-        String recordUrl = CameraUtil.getRecordUrl(msgAlarmclou.getCameraCode(), msgAlarmclou.getCameraCode(), startTime, endTime);
-        if (recordUrl.contains("当前相机暂无回放视频")) {
-            return AjaxResult.error(recordUrl);
-        } else {
-            return AjaxResult.success("ok", recordUrl);
+    public AjaxResult closestream(@RequestParam("path") String path) {
+        String start = HttpUtils.sendGet(CameraUtil.closestream(path));
+        log.info("endRecording------------" + start);
+        if (start.contains("ok")) {
+            return AjaxResult.success();
+        }else {
+            return AjaxResult.error();
         }
     }
 
@@ -1072,7 +1062,7 @@ public class BaseCameraManagementController extends BaseController {
      * @return
      */
     @GetMapping("/nightVision/{code}/{mode}")
-    public AjaxResult nightVision(@PathVariable("code") String code,@PathVariable("mode") Integer mode) {
+    public AjaxResult nightVision(@PathVariable("code") String code, @PathVariable("mode") Integer mode) {
         BaseCameraManagement baseCameraManagement = baseCameraManagementService.getOne(new LambdaQueryWrapper<BaseCameraManagement>()
                 .eq(BaseCameraManagement::getCameraCode, code));
         PublishClient.configFrameRate(baseCameraManagement, mode);
@@ -1118,6 +1108,30 @@ public class BaseCameraManagementController extends BaseController {
         return AjaxResult.success(page);
     }
 
+    /**
+     * 首页铃铛进去的页面
+     *
+     * @param deviceStateResp
+     * @return
+     */
+    @PostMapping("/bell/deviceState/page")
+    @Log(title = "相机台账管理", businessType = BusinessType.SELECT)
+    public AjaxResult bellDeviceStatePage(@RequestBody DeviceStateResp deviceStateResp) {
+        deviceStateResp = (DeviceStateResp) dataScoreUtil.setDataScore(getUserId(), deviceStateResp);
+        IPage<DeviceStateResp> page = baseCameraManagementService.bellDeviceStatePage(deviceStateResp);
+        page.setTotal(page.getTotal());
+        page.setCurrent(page.getCurrent());
+        page.setPages(page.getPages());
+        if (!ObjectUtils.isEmpty(page) && page.getRecords().size() > 0) {
+            List<DeviceStateResp> dto1 = page.getRecords().stream().map(o -> {
+                String mils = AppendUtils.stringAppend(o.getInstallMile());
+                o.setInstallMileName(mils);
+                return o;
+            }).collect(Collectors.toList());
+            page.setRecords(dto1);
+        }
+        return AjaxResult.success(page);
+    }
 
     /**
      * 导出设备状态页面
@@ -1149,8 +1163,7 @@ public class BaseCameraManagementController extends BaseController {
         log.info("getMalfunctionAndLowCameraManagement------------------------" + deviceStateRespList.toString());
         List<DeviceStateResp> isDisable = deviceStateRespList.stream().filter(f -> f.getIsDisable().equals("故障")).collect(Collectors.toList());
         map.put("isDisable", isDisable.size());
-        LambdaQueryWrapper<BaseDeviceDynamicManagement> queryWrapper = new LambdaQueryWrapper<>();
-        List<DeviceStateResp> electricity = deviceStateRespList.stream().filter(f -> f.getElectricity() <= 10).collect(Collectors.toList());
+        List<DeviceStateResp> electricity = deviceStateRespList.stream().filter(f -> f.getElectricity() <= 10 && f.getElectricity() >= 0).collect(Collectors.toList());
         map.put("electricity", electricity.size());
         map.put("count", isDisable.size() + electricity.size());
         map.put("readCount", isDisable.size() + electricity.size());

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

@@ -33,8 +33,8 @@ public class BaseDeviceResumeController extends BaseController {
     @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) {
+                                          @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);
     }

+ 2 - 2
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseRailwayManagementController.java

@@ -289,8 +289,8 @@ public class BaseRailwayManagementController extends BaseController {
     @GetMapping("/query")
     @Log(title = "线路台账管理", businessType = BusinessType.SELECT)
     public AjaxResult query() {
-        // List<BaseRailwayManagement> list = baseRailwayManagementService.list();
-        List<BaseRailwayManagement> list = baseRailwayManagementService.listRailway();
+         List<BaseRailwayManagement> list = baseRailwayManagementService.list();
+//        List<BaseRailwayManagement> list = baseRailwayManagementService.listRailway();
         list.sort(new Comparator<BaseRailwayManagement>() {
             @Override
             public int compare(BaseRailwayManagement o1, BaseRailwayManagement o2) {

+ 5 - 1
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmMatterController.java

@@ -14,7 +14,6 @@ import com.ozs.common.utils.StringUtils;
 import com.ozs.common.utils.poi.ExcelUtil;
 import com.ozs.service.entity.*;
 import com.ozs.service.entity.vo.*;
-import com.ozs.service.mapper.MsgAlarmMapper;
 import com.ozs.service.service.*;
 import com.ozs.system.service.DataScoreUtil;
 import com.ozs.system.service.ISysDeptService;
@@ -154,6 +153,11 @@ public class MsgAlarmMatterController extends BaseController {
             if (!StringUtils.isEmptySunhh(o.getRailwayCode())) {
                 queryWrapper.eq(BaseRailwayManagement::getRailwayCode, o.getRailwayCode());
             }
+            List<MsgAlarmExt> list1 = msgAlarmExtService.list(new LambdaQueryWrapper<MsgAlarmExt>().eq(MsgAlarmExt::getAlarmId, o.getAlarmId()));
+            if (!ObjectUtils.isEmpty(list1)) {
+                List<String> collect = list1.stream().map(MsgAlarmExt::getAlarmAttPath).collect(Collectors.toList());
+                o.setImageUrlStr(String.join(",", collect));
+            }
             BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
             if (!StringUtils.isEmptySunhh(baseRailwayManagement) && !StringUtils.isEmptySunhh(baseRailwayManagement.getRailwayName())) {
                 o.setRailwayName(baseRailwayManagement.getRailwayName());

+ 15 - 4
hazard-admin/src/main/java/com/ozs/web/controller/websocket/WebSocketConteoller.java

@@ -52,6 +52,8 @@ public class WebSocketConteoller extends BaseController {
     private MsgAppPushService msgAppPushService;
     @Autowired
     private ISysDictDataService dictDataService;
+    @Autowired
+    private  MsgAlarmCloudService  msgAlarmCloudService;
 
     /**
      * 获取项目名称
@@ -149,9 +151,18 @@ public class WebSocketConteoller extends BaseController {
         msgAlarmResp.setAlarmMile(mile);
         String cameraCode = baseCameraManagement.getCameraCode();
         msgAlarmResp.setCameraCode(cameraCode);
-        
-        String cameraName = baseRailwayManagementService.getCameraNameByCameraCode(cameraCode);
-        msgAlarmResp.setRailwayName(cameraName != null ? cameraName : "");
+        BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(new LambdaQueryWrapper<BaseRailwayManagement>()
+                .eq(BaseRailwayManagement::getRailwayCode, baseCameraManagement.getRailwayCode()));
+        if (!StringUtils.isEmpty(baseRailwayManagement)){
+            msgAlarmResp.setRailwayName(baseRailwayManagement.getRailwayName());
+            msgAlarmResp.setRailwayType(baseRailwayManagement.getRailwayType());
+            msgAlarmResp.setIsLock(2);
+        }else {
+            msgAlarmResp.setRailwayName("");
+        }
+        long count = msgAlarmCloudService.count(new LambdaQueryWrapper<MsgAlarmCloud>().eq(MsgAlarmCloud::getIsLock, 2));
+        msgAlarmResp.setUnlockNum(count+1);
+        msgAlarmResp.setLineDir(baseCameraManagement.getLineDir());
         if (baseCameraManagement.getLineDir() == 1) {
             msgAlarmResp.setLineDirStr("上行");
         } else if (baseCameraManagement.getLineDir() == 2) {
@@ -259,7 +270,7 @@ public class WebSocketConteoller extends BaseController {
                         userList.add(userRegistrationid.getRegistrationId());
                         JPushUtil.sendToRegistrationId(
                                 userList,
-                                "报警通知!", cameraName != null ? cameraName : "",
+                                "报警通知!", baseRailwayManagement.getRailwayName() != null ? baseRailwayManagement.getRailwayName() : "",
                                 // content,
                                 formatDate + "     " + (msgAlarmResp.getAlarmType() == 1 ? "泥石流" : msgAlarmResp.getAlarmType()) + "     " + lineDirName + "     " + mile + "     " + endMile,
                                 content);

+ 3 - 0
hazard-admin/src/main/java/com/ozs/web/core/config/CaneraConfig.java

@@ -36,4 +36,7 @@ public class CaneraConfig {
 
     @Value("${base.recordUrl:http://183.236.39.220:8083}")
     private String recordUrl;
+
+    @Value("${base.isEnable:false}")
+    private String isEnable;
 }

+ 183 - 106
hazard-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java

@@ -117,6 +117,7 @@ public class CameraUtil {
     private static RedisCache rc;
     private static ServerConfig sc;
     private static String recordUrl;
+    private static String isEnable;
 
     public final static String tsFilekey = "mergeVideoTsFile";
 
@@ -143,6 +144,7 @@ public class CameraUtil {
     private MsgAlarmCloudService msgAlarmCloudService;
     @Autowired
     BaseDeviceResumeService baseDeviceResumeService;
+
     @Resource
     BaseCameraManagementService baseCameraManagementService;
     @Autowired
@@ -204,12 +206,12 @@ public class CameraUtil {
      */
     public static String getPlayFlv(String cameraCode, String channel, boolean flay, String format) {
         if (!ObjectUtils.isEmpty(format) && "WS-FLV".equals(format)) {
-            return wsUrl + "/ws/" + channel + "/" + cameraCode ;
+            return wsUrl + "/ws/" + channel + "/" + cameraCode;
         }
         if (!flay) {
-            return webUrl + "/hdl/" + channel + "/" + cameraCode ;
+            return webUrl + "/hdl/" + channel + "/" + cameraCode;
         }
-        return webUrl + "/hdl/" + channel + "/" + cameraCode ;
+        return webUrl + "/hdl/" + channel + "/" + cameraCode;
     }
 
     public static String getPlayFlv(String cameraCode, String channel, String format) {
@@ -534,6 +536,12 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
      * @return
      */
     public static String getRecordUrl(String cameraCode, String channel, Date startTm, Date endTm) {
+        log.info("getRecordUrl--->" + cameraCode + "--" + channel + "--" + startTm + "--" + endTm);
+        Integer count = streamPathCount(cameraCode);
+        log.info("getRecordUrl--count->" + count);
+        if (count>3){
+            return "当前回放视频数已超过带宽限制,请您10分钟以后重试";
+        }
         log.info(bakUrl + "/gb28181/api/invite?id=" + cameraCode + "&channel=" + channel + "&startTime=" + startTm.getTime()/1000 + "&endTime=" + endTm.getTime()/1000);
         String url = bakUrl + "/gb28181/api/invite?id=" + cameraCode + "&channel=" + channel + "&startTime=" + startTm.getTime()/1000 + "&endTime=" + endTm.getTime()/1000;
         try {
@@ -543,12 +551,18 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
                 log.info("-----getRecordUrl----message--" + cameraCode + "---" + response.message());
                 log.info("-----getRecordUrl----body--" + cameraCode + "---" + response.body());
                 if (response.code() == 200) {
-                    String path = apiSummary(cameraCode + "/" + channel + "/" + startTm.getTime() / 1000 + "-" + endTm.getTime() / 1000);
-                    if (StringUtils.isNotEmpty(path)) {
-                        return path;
-                    } else {
-                        return "当前相机暂无回放视频";
-                    }
+//                    String path = apiSummary(cameraCode + "/" + channel + "/" + startTm.getTime() / 1000 + "-" + endTm.getTime() / 1000);
+//                    if (StringUtils.isNotEmpty(path)) {
+//                        return path;
+//                    } else {
+//                        return "当前相机暂无回放视频";
+//                    }
+                    //183.236.39.220:8083/*s/34020000001320809071/34020000001320809071/1747103914-1747104514
+                    log.info("-----getRecordUrl----startTm.getTime()--" + startTm.getTime());
+                    log.info("-----getRecordUrl----endTm.getTime()--" + endTm.getTime());
+                    log.info("-----getRecordUrl----startTm.getTime()/1000--" + startTm.getTime()/1000);
+                    log.info("-----getRecordUrl----endTm.getTime()/1000--" + endTm.getTime()/1000);
+                    return wsUrl+"/ws/"+cameraCode+"/"+channel+"/"+startTm.getTime()/1000+"-"+endTm.getTime()/1000;
                 }
             }else {
                 return "当前相机暂无回放视频";
@@ -560,13 +574,20 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
         return "当前相机暂无回放视频";
     }
 
+
+    public static String closestream(String path) {
+        //http://10.161.12.50:9080/api/closestream?streamPath=34020000001320427017/34020000001320427017/1748835314-1748835556
+        log.info("closestream--->" + bakUrl + "/api/closestream?streamPath=" + path);
+        return bakUrl + "/api/closestream?streamPath=" + path;
+    }
+
     /**
      * 调用流媒体获取流列表信息
      *
      * @return
      */
     public static String apiSummary(String path) {
-        log.info("---------apiSummary-----"+path);
+        log.info("---------apiSummary-----" + path);
         int maxRetries = 5;
         int retryCount = 0;
         boolean success = false;
@@ -586,16 +607,16 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
                 retryCount++;
             }
         }
-        log.info("---------streamArray-----"+streamArray);
+        log.info("---------streamArray-----" + streamArray);
         if (!ObjectUtils.isEmpty(streamArray)) {
             for (int i = 0; i < streamArray.size(); i++) {
                 JSONObject subObj = streamArray.getJSONObject(i);
                 String streamPath = subObj.getString("StreamPath");
-                log.info("---------streamPath-----"+streamPath);
+                log.info("---------streamPath-----" + streamPath);
                 if (streamPath.equals(path)) {
                     //取出VideoTracks
                     JSONArray videoJson = subObj.getJSONArray("VideoTracks");
-                    log.info("---------videoJson-----"+videoJson);
+                    log.info("---------videoJson-----" + videoJson);
                     if (videoJson != null && videoJson.size() > 0) {
                         return wsUrl + "/ws/" + streamPath;
                     }
@@ -605,6 +626,47 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
         return null;
     }
 
+
+    public static Integer streamPathCount(String code) {
+        int maxRetries = 5;
+        int retryCount = 0;
+        int count=0;
+        boolean success = false;
+        JSONArray streamArray = null;
+        while (!success && retryCount < maxRetries) {
+            try {
+                String data = HttpClientUtil.gets(bakUrl + "/api/summary");
+                log.info("data------------------>" + data);
+                if (StringUtils.isNotEmpty(data)) {
+                    JSONObject jsonObject = JSONObject.parseObject(data);
+                    streamArray = jsonObject.getJSONArray("Streams");
+                    success = true;
+                }
+            } catch (Exception e) {
+                log.info("Exception caught: " + e.getMessage());
+                // 增加重试计数
+                retryCount++;
+            }
+        }
+        log.info("---------streamArray-----" + streamArray);
+        if (!ObjectUtils.isEmpty(streamArray)) {
+            for (int i = 0; i < streamArray.size(); i++) {
+                JSONObject subObj = streamArray.getJSONObject(i);
+                String streamPath = subObj.getString("StreamPath");
+                log.info("---------streamPath-----" + streamPath);
+                //判断streamPath中是否包含code
+                if (streamPath.contains(code)) {
+                    //判断streamPath中/是否大于等于2
+                    if (streamPath.split("/").length > 2) {
+                        count++;
+                    }
+                }
+            }
+        }
+        return count;
+    }
+
+
     /**
      * 定时任务参数flv文件
      * -----------------------------废弃
@@ -848,7 +910,7 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
         if (StringUtils.isBlank(channel)
                 || ObjectUtils.isEmpty(startTm)
                 || ObjectUtils.isEmpty(endTm)) {
-            log.info("channel-----"+channel+"----startTm"+startTm+"-----endTm"+endTm);
+            log.info("channel-----" + channel + "----startTm" + startTm + "-----endTm" + endTm);
             return null;
         }
         Map<Date, Map<String, Object>> m = new HashMap<>();
@@ -860,11 +922,11 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
         // /api/record/flv/list
         String s = HttpUtils.sendGet(bakUrl + "/recordpro/api/list", param);
         // 视频拼接
-        log.info("视频拼接s-----"+s);
+        log.info("视频拼接s-----" + s);
         if (!StringUtils.isBlank(s) || "null".equals(s)) {
             List<Map<String, Object>> maps = JSON.parseArray(s, Map.class);
             if (ObjectUtils.isEmpty(maps)) {
-                log.info("maps-----"+maps);
+                log.info("maps-----" + maps);
                 return null;
             }
             for (Map<String, Object> map : maps) {
@@ -941,6 +1003,7 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
         sc = serverConfig;
         wsUrl = caneraConfig.getWsUrl();
         recordUrl = caneraConfig.getRecordUrl();
+        isEnable=caneraConfig.getIsEnable();
     }
 
 
@@ -1016,44 +1079,45 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
      * 相机状态修改
      */
     public void cameraBlockUp() {
-        long baseTime = 60000L;
-        //当前时间戳
-        long currentTimestamp = System.currentTimeMillis();
-        //字典中设置的值
-        List<SysDictData> heartIntervalTime = dictDataMapper.selectDictDataByType("heart_interval_time");
-        List<SysDictData> triggerWarningFrequency = dictDataMapper.selectDictDataByType("trigger_warning_frequency");
-        // 计算时间间隔
-        long timeInterval = baseTime;
-        if (!ObjectUtils.isEmpty(heartIntervalTime)) {
-            timeInterval *= Long.valueOf(heartIntervalTime.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; // 默认值
+        if (isEnable.equals("true")) {
+            long baseTime = 60000L;
+            //当前时间戳
+            long currentTimestamp = System.currentTimeMillis();
+            //字典中设置的值
+            List<SysDictData> heartIntervalTime = dictDataMapper.selectDictDataByType("heart_interval_time");
+            List<SysDictData> triggerWarningFrequency = dictDataMapper.selectDictDataByType("trigger_warning_frequency");
+            // 计算时间间隔
+            long timeInterval = baseTime;
+            if (!ObjectUtils.isEmpty(heartIntervalTime)) {
+                timeInterval *= Long.valueOf(heartIntervalTime.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);
+            // 保存设备状态变更记录
+            saveDeviceResume(loggedCameraCodes, 1);
+            saveDeviceResume(inactiveCameraCodes, 2);
+
+            // 更新设备状态
+            updateDeviceStatus(loggedCameraCodes, 1); // 启用设备
+            updateDeviceStatus(inactiveCameraCodes, 2); // 禁用设备
         }
-        // 计算查询的时间范围(前五分钟)
-        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);
     }
 
     // 辅助方法:更新设备状态
@@ -1075,10 +1139,23 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
 
         List<BaseDeviceResume> resumes = new ArrayList<>();
         for (String cameraCode : cameraCodes) {
+            BaseDeviceDynamicManagement deviceDynamicManagement = baseDeviceDynamicManagementService.getOne(
+                    new LambdaQueryWrapper<BaseDeviceDynamicManagement>()
+                            .eq(BaseDeviceDynamicManagement::getCameraCode, cameraCode));
+            Long count = baseDeviceResumeService.count(
+                    new LambdaQueryWrapper<BaseDeviceResume>()
+                            .eq(BaseDeviceResume::getCameraCode, cameraCode)
+                            .eq(BaseDeviceResume::getIsDisable, status));
+
+            boolean shouldDisable = (status == 1) || (!ObjectUtils.isEmpty(deviceDynamicManagement) && (status == 2 && deviceDynamicManagement.getIsDisable().equals(1)));
+
             BaseDeviceResume resume = new BaseDeviceResume();
             resume.setCameraCode(cameraCode);
             resume.setIsDisable(status);
-            resumes.add(resume);
+
+            if (shouldDisable||count<=0) {
+                resumes.add(resume);
+            }
         }
 
         // 批量保存
@@ -1110,51 +1187,51 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
     /**
      * 修改相机状态
      */
-    public void updateCameraManagementState() {
-        //离线的
-        ArrayList<String> offLine = new ArrayList<>();
-        List<BaseDeviceDynamicManagement> list = baseDeviceDynamicManagementService.list();
-        for (BaseDeviceDynamicManagement baseDeviceDynamicManagement : list) {
-            // 格式化输入时间
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-            Instant instant = baseDeviceDynamicManagement.getUpdateTime().toInstant();
-            // 将Instant对象转换为LocalDateTime对象
-            LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
-
-
-            // 获取当前时间
-            LocalDateTime currentTime = LocalDateTime.now();
-
-            // 计算时间差
-            Duration duration = Duration.between(localDateTime, currentTime);
-
-            // 检查时间差是否大于3小时
-            if (duration.toHours() >= 3) {
-                offLine.add(baseDeviceDynamicManagement.getCameraCode());
-            }
-        }
-        //修改离线相机
-        if (!ObjectUtils.isEmpty(offLine)) {
-            LambdaUpdateWrapper<BaseDeviceDynamicManagement> updateWrapper = Wrappers.lambdaUpdate();
-            updateWrapper.in(BaseDeviceDynamicManagement::getCameraCode, offLine);
-
-            // 执行批量修改操作
-            BaseDeviceDynamicManagement update = new BaseDeviceDynamicManagement();
-            update.setIsDisable(2);
-            baseDeviceDynamicManagementService.update(update, updateWrapper);
-        }
-
-        //修改在线相机
-        LambdaUpdateWrapper<BaseDeviceDynamicManagement> wrapper = Wrappers.lambdaUpdate();
-        if (!ObjectUtils.isEmpty(offLine)) {
-            wrapper.notIn(BaseDeviceDynamicManagement::getCameraCode, offLine);
-        }
-
-        // 执行批量修改操作
-        BaseDeviceDynamicManagement baseDeviceDynamicManagement = new BaseDeviceDynamicManagement();
-        baseDeviceDynamicManagement.setIsDisable(1);
-        baseDeviceDynamicManagementService.update(baseDeviceDynamicManagement, wrapper);
-    }
+//    public void updateCameraManagementState() {
+//        //离线的
+//        ArrayList<String> offLine = new ArrayList<>();
+//        List<BaseDeviceDynamicManagement> list = baseDeviceDynamicManagementService.list();
+//        for (BaseDeviceDynamicManagement baseDeviceDynamicManagement : list) {
+//            // 格式化输入时间
+//            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+//            Instant instant = baseDeviceDynamicManagement.getUpdateTime().toInstant();
+//            // 将Instant对象转换为LocalDateTime对象
+//            LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
+//
+//
+//            // 获取当前时间
+//            LocalDateTime currentTime = LocalDateTime.now();
+//
+//            // 计算时间差
+//            Duration duration = Duration.between(localDateTime, currentTime);
+//
+//            // 检查时间差是否大于3小时
+//            if (duration.toHours() >= 3) {
+//                offLine.add(baseDeviceDynamicManagement.getCameraCode());
+//            }
+//        }
+//        //修改离线相机
+//        if (!ObjectUtils.isEmpty(offLine)) {
+//            LambdaUpdateWrapper<BaseDeviceDynamicManagement> updateWrapper = Wrappers.lambdaUpdate();
+//            updateWrapper.in(BaseDeviceDynamicManagement::getCameraCode, offLine);
+//
+//            // 执行批量修改操作
+//            BaseDeviceDynamicManagement update = new BaseDeviceDynamicManagement();
+//            update.setIsDisable(2);
+//            baseDeviceDynamicManagementService.update(update, updateWrapper);
+//        }
+//
+//        //修改在线相机
+//        LambdaUpdateWrapper<BaseDeviceDynamicManagement> wrapper = Wrappers.lambdaUpdate();
+//        if (!ObjectUtils.isEmpty(offLine)) {
+//            wrapper.notIn(BaseDeviceDynamicManagement::getCameraCode, offLine);
+//        }
+//
+//        // 执行批量修改操作
+//        BaseDeviceDynamicManagement baseDeviceDynamicManagement = new BaseDeviceDynamicManagement();
+//        baseDeviceDynamicManagement.setIsDisable(1);
+//        baseDeviceDynamicManagementService.update(baseDeviceDynamicManagement, wrapper);
+//    }
 
     /**
      * 删除录制视频的零时文件
@@ -1236,10 +1313,10 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
     }
 
 
-    public void removePrice(Integer number,String path) {
+    public void removePrice(Integer number, String path) {
         log.info("removePrice-----------开始调用");
-        log.info("removePrice------number-----"+number);
-        log.info("removePrice-------path----"+path);
+        log.info("removePrice------number-----" + number);
+        log.info("removePrice-------path----" + path);
         try {
             // 创建MinioClient对象
             MinioClient minioClient = MinioClient.builder()
@@ -1249,8 +1326,8 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
 
             // 指定要删除文件的桶名和目录名
             String bucketName = this.bucketName;
-            String prefix = "camera_picture/normal/"+path;
-            log.info("removePrice-------prefix----"+prefix);
+            String prefix = "camera_picture/normal/" + path;
+            log.info("removePrice-------prefix----" + prefix);
             // 指定要删除的时间点(此处为当前时间之前的时间)
             ZonedDateTime deleteTime = ZonedDateTime.now().minusDays(number); // 删除90天前的文件
 
@@ -1294,10 +1371,10 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
             String prefix = "camera_picture/normal/";
             // List all objects in the bucket
             Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).prefix(prefix).recursive(true).build());
-            log.info("-------获取minio所有图片--------"+results);
+            log.info("-------获取minio所有图片--------" + results);
             for (Result<Item> result : results) {
                 Item item = result.get();
-                log.info("----item.lastModified()----"+item.lastModified());
+                log.info("----item.lastModified()----" + item.lastModified());
                 log.info(item.objectName());
             }
         } catch (Exception e) {

+ 1 - 0
hazard-admin/src/main/resources/application.yml

@@ -26,6 +26,7 @@ base:
   defaultPassword: yn5aq5Mt.106.tky
   imgUrl: http://10.161.12.52:18801/picbucket
   recordUrl: http://183.236.39.220:8081${server.servlet.context-path}
+  isEnable: true;
 # 开发环境配置
 server:
   # 服务器的HTTP端口,默认为8080