gao.qiang преди 1 година
родител
ревизия
5a4f34e58e
променени са 33 файла, в които са добавени 624 реда и са изтрити 266 реда
  1. 12 12
      .idea/jarRepositories.xml
  2. 3 0
      .idea/misc.xml
  3. 2 2
      business-service/src/main/java/com/ozs/entity/MsgAlarm.java
  4. 1 1
      business-service/src/main/java/com/ozs/entity/MsgAlarmFrequency.java
  5. 1 1
      business-service/src/main/java/com/ozs/entity/MsgHeartbeatAlarmMessage.java
  6. 6 0
      business-service/src/main/java/com/ozs/entity/VehiclePosition.java
  7. 17 0
      business-service/src/main/java/com/ozs/entity/vo/CamerasVo.java
  8. 1 1
      business-service/src/main/java/com/ozs/entity/vo/MsgAlarmDTO.java
  9. 6 1
      business-service/src/main/java/com/ozs/entity/vo/MsgAlarmResp.java
  10. 1 1
      business-service/src/main/java/com/ozs/entity/vo/MsgAlarmTemporary.java
  11. 25 0
      business-service/src/main/java/com/ozs/entity/vo/PlaybackVo.java
  12. 1 1
      business-service/src/main/java/com/ozs/entity/vo/ReqMsgAlarmVo.java
  13. 1 8
      business-service/src/main/java/com/ozs/entity/vo/RespCameraVo.java
  14. 5 0
      business-service/src/main/java/com/ozs/mapper/MsgHeartbeatAlarmMessageMapper.java
  15. 2 0
      business-service/src/main/java/com/ozs/mapper/VehiclePositionMapper.java
  16. 8 0
      business-service/src/main/java/com/ozs/service/MsgHeartbeatAlarmMessageService.java
  17. 24 0
      business-service/src/main/java/com/ozs/service/impl/MsgHeartbeatAlarmMessageServiceImpl.java
  18. 19 50
      business-service/src/main/java/com/ozs/service/impl/VehiclePositionServiceImpl.java
  19. 1 0
      business-service/src/main/resources/mapper/BaseCameraManagementMapper.xml
  20. 5 3
      business-service/src/main/resources/mapper/MsgAlarmMapper.xml
  21. 10 0
      business-service/src/main/resources/mapper/MsgHeartbeatAlarmMessageMapper.xml
  22. 24 1
      business-service/src/main/resources/mapper/VehiclePositionMapper.xml
  23. 5 0
      vehicle-admin/pom.xml
  24. 57 51
      vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java
  25. 3 7
      vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java
  26. 1 1
      vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmTemporaryController.java
  27. 8 13
      vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgHeartbeatAlarmMessageController.java
  28. 200 111
      vehicle-admin/src/main/java/com/ozs/web/controller/sdk/GeoHazardMonitorTokenController.java
  29. 3 1
      vehicle-admin/src/main/java/com/ozs/web/controller/websocket/WebSocketCommon.java
  30. 4 0
      vehicle-admin/src/main/java/com/ozs/web/core/config/CaneraConfig.java
  31. 60 0
      vehicle-admin/src/main/java/com/ozs/web/core/config/GetCameraPreviewURL.java
  32. 107 0
      vehicle-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java
  33. 1 0
      vehicle-admin/src/main/java/com/ozs/web/core/util/CmdCameraUtil.java

+ 12 - 12
.idea/jarRepositories.xml

@@ -1,16 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="RemoteRepositoriesConfiguration">
-    <remote-repository>
-      <option name="id" value="central" />
-      <option name="name" value="Central Repository" />
-      <option name="url" value="https://maven.aliyun.com/repository/public" />
-    </remote-repository>
-    <remote-repository>
-      <option name="id" value="central" />
-      <option name="name" value="Central Repository" />
-      <option name="url" value="https://repo.maven.apache.org/maven2" />
-    </remote-repository>
     <remote-repository>
       <option name="id" value="public" />
       <option name="name" value="aliyun nexus" />
@@ -18,8 +8,8 @@
     </remote-repository>
     <remote-repository>
       <option name="id" value="central" />
-      <option name="name" value="Maven Central repository" />
-      <option name="url" value="https://repo1.maven.org/maven2" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="https://repo.maven.apache.org/maven2" />
     </remote-repository>
     <remote-repository>
       <option name="id" value="central" />
@@ -36,6 +26,11 @@
       <option name="name" value="Central Repository" />
       <option name="url" value="http://maven.aliyun.com/nexus/content/repositories/central/" />
     </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
     <remote-repository>
       <option name="id" value="custom_group" />
       <option name="name" value="Nexus Repository" />
@@ -46,5 +41,10 @@
       <option name="name" value="JBoss Community repository" />
       <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
     </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="https://maven.aliyun.com/repository/public" />
+    </remote-repository>
   </component>
 </project>

+ 3 - 0
.idea/misc.xml

@@ -14,4 +14,7 @@
     </option>
   </component>
   <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
+  <component name="SuppressionsComponent">
+    <option name="suppComments" value="[]" />
+  </component>
 </project>

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

@@ -85,7 +85,7 @@ public class MsgAlarm extends BaseEntity implements Serializable {
     private Integer lineDir;
 
     /**
-     * 报警病害类型(1泥石流2异物侵线 3断轨监测)
+     * 报警病害类型(1泥石流2异物侵 3断轨监测)
      */
     private Integer alarmType;
     @TableField(exist = false)
@@ -225,7 +225,7 @@ public class MsgAlarm extends BaseEntity implements Serializable {
     private String  isReleaseName;
 
     /**
-     * 解除视频URL
+     * 报警视频URL
      */
     private String releasedUrl;
 

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

@@ -79,7 +79,7 @@ public class MsgAlarmFrequency extends BaseEntity implements Serializable {
     private Integer alarmConfidence;
 
     /**
-     * 报警病害类型(1泥石流2异物侵线 3断轨监测)
+     * 报警病害类型(1泥石流2异物侵 3断轨监测)
      */
     private Integer alarmType;
 

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

@@ -53,7 +53,7 @@ public class MsgHeartbeatAlarmMessage implements Serializable {
      * 机车名称
      */
     @TableField(exist = false)
-    private String vehicleName;
+    private String vehicle;
 
     /**
      * 终端名称

+ 6 - 0
business-service/src/main/java/com/ozs/entity/VehiclePosition.java

@@ -126,6 +126,12 @@ public class VehiclePosition implements Serializable {
     @Excel(name = "车载状态",readConverterExp = "1=在线,2=离线")
     private String status;
 
+    /**
+     *机车车载终端信息表车载状态
+     */
+    @TableField(exist = false)
+    private Integer sta;
+
     /**
      * 终端经度
      */

+ 17 - 0
business-service/src/main/java/com/ozs/entity/vo/CamerasVo.java

@@ -0,0 +1,17 @@
+package com.ozs.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class CamerasVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    
+    private String cameraIndexCode;
+    private Integer streamType;
+    private String protocol;
+    private Integer transmode;
+    private String expand;
+    private String streamform;
+}

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

@@ -67,7 +67,7 @@ public class MsgAlarmDTO implements Serializable {
     private Integer lineDir;
 
     /**
-     * 报警病害类型(1泥石流2异物侵线 3断轨监测)
+     * 报警病害类型(1泥石流2异物侵 3断轨监测)
      */
     private Integer alarmType;
 

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

@@ -41,7 +41,7 @@ public class MsgAlarmResp implements Serializable {
     private String railwayName;
 
     /**
-     * 报警病害类型(1泥石流2异物侵线 3断轨监测)
+     * 报警病害类型(1泥石流2异物侵 3断轨监测)
      */
     private Integer alarmType;
     private String alarmTypeStr;
@@ -62,6 +62,11 @@ public class MsgAlarmResp implements Serializable {
      */
     private String alarmMile;
 
+    /**
+     * 报警里程位置
+     */
+    private Integer alarmMiles;
+
     /**
      * 里程范围
      */

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

@@ -84,7 +84,7 @@ public class MsgAlarmTemporary  implements Serializable {
     private Integer lineDir;
 
     /**
-     * 报警病害类型(1泥石流2异物侵线 3断轨监测)
+     * 报警病害类型(1泥石流2异物侵 3断轨监测)
      */
     private Integer alarmType;
     @TableField(exist = false)

+ 25 - 0
business-service/src/main/java/com/ozs/entity/vo/PlaybackVo.java

@@ -0,0 +1,25 @@
+package com.ozs.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class PlaybackVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    
+    private String cameraIndexCode;
+    private Integer recordLocation;
+    private String protocol;
+    private Integer transmode;
+    private String beginTime;
+    private String endTime;
+    private String uuid;
+    private String expand;
+    private String streamform;
+    private Integer lockType;
+}

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

@@ -44,7 +44,7 @@ public class ReqMsgAlarmVo implements Serializable {
     private String content;
 
     /**
-     * 报警病害类型(1泥石流2异物侵线 3断轨监测)
+     * 报警病害类型(1泥石流2异物侵 3断轨监测)
      */
     private Integer alarmType;
 

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

@@ -15,14 +15,7 @@ public class RespCameraVo implements Serializable {
      * 相机编码
      */
     private String cameraCode;
-    /**
-     * 所属线路编码
-     */
-    private String railwayCode;
-    /**
-     * 所属线路名称
-     */
-    private String railwayCame;
+    private  String  stationName;
     /**
      * 行别
      */

+ 5 - 0
business-service/src/main/java/com/ozs/mapper/MsgHeartbeatAlarmMessageMapper.java

@@ -2,8 +2,13 @@ package com.ozs.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ozs.entity.MsgHeartbeatAlarmMessage;
+import com.ozs.entity.VehiclePosition;
+import com.ozs.entity.vo.MsgAlarmVo;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 @Mapper
 public interface MsgHeartbeatAlarmMessageMapper extends BaseMapper<MsgHeartbeatAlarmMessage> {
+    List<MsgHeartbeatAlarmMessage> selectBaseLineManagement(String alarmId);
 }

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

@@ -2,6 +2,7 @@ package com.ozs.mapper;
 
 import com.ozs.entity.VehiclePosition;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ozs.entity.vo.VehiclePositionResp;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -24,4 +25,5 @@ public interface VehiclePositionMapper extends BaseMapper<VehiclePosition> {
      */
     List<VehiclePosition> list(@Param("vehicleCode") String vehicleCode, @Param("railwayCode") String railwayCode, @Param("lineDir") Integer lineDir, @Param("status") Integer status);
 
+    List<VehiclePosition> vehiclePositionPage(@Param("terminalCode") String terminalCode, @Param("terminalName") String terminalName,@Param("status") Integer status);
 }

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

@@ -1,7 +1,15 @@
 package com.ozs.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ozs.entity.MsgHeartbeatAlarmMessage;
+import com.ozs.entity.VehiclePosition;
+import com.ozs.entity.vo.MsgAlarmVo;
+
+import java.util.List;
 
 public interface MsgHeartbeatAlarmMessageService extends IService<MsgHeartbeatAlarmMessage> {
+    IPage<MsgHeartbeatAlarmMessage> listToPage(List<MsgHeartbeatAlarmMessage> list, Integer pageNum, Integer pageSize);
+
+    List<MsgHeartbeatAlarmMessage> selectBaseLineManagement(String alarmId);
 }

+ 24 - 0
business-service/src/main/java/com/ozs/service/impl/MsgHeartbeatAlarmMessageServiceImpl.java

@@ -1,12 +1,36 @@
 package com.ozs.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ozs.entity.MsgHeartbeatAlarmMessage;
+import com.ozs.entity.VehiclePosition;
+import com.ozs.entity.vo.MsgAlarmVo;
 import com.ozs.mapper.MsgHeartbeatAlarmMessageMapper;
 import com.ozs.service.MsgHeartbeatAlarmMessageService;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 
 @Service
 public class MsgHeartbeatAlarmMessageServiceImpl extends ServiceImpl<MsgHeartbeatAlarmMessageMapper, MsgHeartbeatAlarmMessage> implements MsgHeartbeatAlarmMessageService {
+    @Override
+    public IPage listToPage(List<MsgHeartbeatAlarmMessage> list, Integer pageNum, Integer pageSize) {
+        List pageList = new ArrayList<>();
+        int curIdx = pageNum > 1 ? (pageNum - 1) * pageSize : 0;
+        for (int i = 0; i < pageSize && curIdx + i < list.size(); i++) {
+            pageList.add(list.get(curIdx + i));
+        }
+        IPage page = new Page<>(pageNum, pageSize);
+        page.setRecords(pageList);
+        page.setTotal(list.size());
+        return page;
+    }
+
+    @Override
+    public List<MsgHeartbeatAlarmMessage> selectBaseLineManagement(String alarmId) {
+        return baseMapper.selectBaseLineManagement(alarmId);
+    }
 }

+ 19 - 50
business-service/src/main/java/com/ozs/service/impl/VehiclePositionServiceImpl.java

@@ -62,58 +62,27 @@ public class VehiclePositionServiceImpl extends ServiceImpl<VehiclePositionMappe
 
     @Override
     public List<VehiclePosition> vehiclePositionPage(VehiclePositionResp vehiclePositionResp) {
-        boolean state = true;
-        LambdaQueryWrapper<BaseTerminal> wrapper3=new LambdaQueryWrapper<>();
-        if (StringUtils.isNotEmpty(vehiclePositionResp.getTerminalCode())){
-            wrapper3.eq(BaseTerminal::getTerminalCode,vehiclePositionResp.getTerminalCode());
-        }
-        if (StringUtils.isNotEmpty(vehiclePositionResp.getTerminalName())){
-            wrapper3.like(BaseTerminal::getTerminalName,vehiclePositionResp.getTerminalName());
-        }
-        if (!ObjectUtils.isEmpty(vehiclePositionResp.getStatus())){
-            wrapper3.eq(BaseTerminal::getStatus,vehiclePositionResp.getStatus());
-        }
-        List<BaseTerminal> baseTerminals = baseTerminalMapper.selectList(wrapper3);
-        QueryWrapper<VehiclePosition> wrapper = new QueryWrapper<>();
-        wrapper.orderByDesc("create_time");
-        List<VehiclePosition> vehiclePositions = baseMapper.selectList(wrapper);
-        ArrayList<VehiclePosition> vehiclePositionArrayList = new ArrayList<>();
-        for (BaseTerminal baseTerminal : baseTerminals) {
-            state = true;
-            for (VehiclePosition vehiclePosition : vehiclePositions) {
-                if (baseTerminal.getTerminalCode().equals(vehiclePosition.getTerminalCode())) {
-                    vehiclePosition.setTerminalName(baseTerminal.getTerminalName());
-                    // 查询线路
-                    LambdaQueryWrapper<BaseRailwayManagement> lwBaseRailwayManagement = new LambdaQueryWrapper<>();
-                    if (!StringUtils.isEmptySunhh(vehiclePosition.getRailwayCode())) {
-                        lwBaseRailwayManagement.eq(BaseRailwayManagement::getRailwayCode, vehiclePosition.getRailwayCode());
-                    }
-                    BaseRailwayManagement baseRailwayManagement = baseRailwayManagementMapper.selectOne(lwBaseRailwayManagement);
-                    if (!ObjectUtils.isEmpty(baseRailwayManagement)) {
-                        vehiclePosition.setRailwayName(baseRailwayManagement.getRailwayName());
-                    }
-                    if (!ObjectUtils.isEmpty(vehiclePosition.getTravelMile())) {
-                        vehiclePosition.setTravelMileFormat(AppendUtils.stringAppend(vehiclePosition.getTravelMile()));
-                    }
-                    if (!ObjectUtils.isEmpty(vehiclePosition.getLineDir())) {
-                        vehiclePosition.setLineDirName(vehiclePosition.getLineDir() == 1 ? "上行" : "下行");
-                    }
-                    if (!ObjectUtils.isEmpty(baseTerminal.getStatus())) {
-                        vehiclePosition.setStatus(baseTerminal.getStatus() == 1 ? "在线" : "离线");
-                    }
-                    vehiclePositionArrayList.add(vehiclePosition);
-                    state = false;
-                    break;
-                }
+        List<VehiclePosition> vehiclePositions = baseMapper.vehiclePositionPage(vehiclePositionResp.getTerminalCode(),vehiclePositionResp.getTerminalName(),vehiclePositionResp.getStatus());
+        for (VehiclePosition vehiclePosition : vehiclePositions) {
+            // 查询线路
+            LambdaQueryWrapper<BaseRailwayManagement> lwBaseRailwayManagement = new LambdaQueryWrapper<>();
+            if (!StringUtils.isEmptySunhh(vehiclePosition.getRailwayCode())) {
+                lwBaseRailwayManagement.eq(BaseRailwayManagement::getRailwayCode, vehiclePosition.getRailwayCode());
+            }
+            BaseRailwayManagement baseRailwayManagement = baseRailwayManagementMapper.selectOne(lwBaseRailwayManagement);
+            if (!ObjectUtils.isEmpty(baseRailwayManagement)) {
+                vehiclePosition.setRailwayName(baseRailwayManagement.getRailwayName());
+            }
+            if (!ObjectUtils.isEmpty(vehiclePosition.getTravelMile())) {
+                vehiclePosition.setTravelMileFormat(AppendUtils.stringAppend(vehiclePosition.getTravelMile()));
+            }
+            if (!ObjectUtils.isEmpty(vehiclePosition.getLineDir())) {
+                vehiclePosition.setLineDirName(vehiclePosition.getLineDir() == 1 ? "上行" : "下行");
             }
-            if (state) {
-                VehiclePosition vehiclePosition = new VehiclePosition();
-                vehiclePosition.setStatus(baseTerminal.getStatus() == 1 ? "在线" : "离线");
-                vehiclePosition.setTerminalCode(baseTerminal.getTerminalCode());
-                vehiclePosition.setTerminalName(baseTerminal.getTerminalName());
-                vehiclePositionArrayList.add(vehiclePosition);
+            if (!ObjectUtils.isEmpty(vehiclePosition.getSta())) {
+                vehiclePosition.setStatus(vehiclePosition.getSta() == 1 ? "在线" : "离线");
             }
         }
-        return vehiclePositionArrayList;
+        return vehiclePositions;
     }
 }

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

@@ -40,6 +40,7 @@
                 </foreach>
             </if>
         </where>
+        ORDER BY install_mile
     </select>
 
     <select id="countCamera" parameterType="com.ozs.entity.vo.MsgAlarmVo" resultType="java.lang.Integer">

+ 5 - 3
business-service/src/main/resources/mapper/MsgAlarmMapper.xml

@@ -155,13 +155,15 @@
         <result column="frequency" property="frequency"/>
     </resultMap>
     <select id="alarmTypeAreaCount" resultMap="AlarmTypeStatisticResult">
-        SELECT /*+ GROUP_OPT_FLAG(1)*/ railwayCode,railwayName,alarmMile,SUM(p.pre) as frequency
+        SELECT /*+ GROUP_OPT_FLAG(1)*/ railwayCode,railwayName,alarmMile,SUM(p.pre) as frequency,
+        p.line_dir AS lineDir
         from
         (SELECT /*+ GROUP_OPT_FLAG(1)*/
         a.railway_code as railwayCode,
         b.railway_name as railwayName,
         a.alarm_mile as alarmMile,
-        count(a.railway_code) as pre
+        count(a.railway_code) as pre,
+        a.line_dir
         FROM
         msg_alarm AS a inner join
         base_railway_management b on a.railway_code=b.railway_code
@@ -180,7 +182,7 @@
                 and MONTH(a.alarm_time) =#{currentMonth}
             </if>
         </where>
-        group by a.alarm_id) AS p group by p.railwayCode order by frequency desc
+        group by a.alarm_id) AS p group by p.railwayCode,p.alarmMile order by frequency desc
     </select>
 
     <select id="getAlarmNum" resultType="java.lang.Long">

+ 10 - 0
business-service/src/main/resources/mapper/MsgHeartbeatAlarmMessageMapper.xml

@@ -1,4 +1,14 @@
 <?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.mapper.MsgHeartbeatAlarmMessageMapper">
+    <select id="selectBaseLineManagement" resultType="com.ozs.entity.MsgHeartbeatAlarmMessage" parameterType="java.lang.String">
+        SELECT /*+ GROUP_OPT_FLAG(1)*/ id, alarm_id, terminal_code, train_num, create_time FROM
+      msg_heartbeat_alarm_message
+        <where>
+            <if test="alarmId != null and alarmId != ''">
+                and alarm_id = #{alarmId}
+            </if>
+        </where>
+        GROUP BY alarm_id, terminal_code, train_num order by create_time asc
+    </select>
 </mapper>

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

@@ -15,7 +15,7 @@
         <result column="railway_name" property="railwayName"/>
         <result column="status" property="status"/>
     </resultMap>
-    <select id="list" resultMap="VehiclePositionResult" >
+    <select id="list" resultMap="VehiclePositionResult">
         SELECT
         a.*,
         b.vehicle_name,
@@ -42,6 +42,29 @@
         </where>
         order by a.create_time desc
     </select>
+    <select id="vehiclePositionPage" resultType="com.ozs.entity.VehiclePosition">
+        SELECT /*+ GROUP_OPT_FLAG(1)*/ pos.*, ter.terminal_name AS terminalName, ter.status AS sta
+        FROM vehicle_position pos
+        RIGHT JOIN base_terminal ter ON pos.terminal_code = ter.terminal_code
+        <where>
+            <if test="terminalCode != null and terminalCode != ''">
+                AND ter.terminal_code = #{terminalCode}
+            </if>
+            <if test="terminalName != null and terminalName != ''">
+                AND ter.terminal_name LIKE CONCAT('%', #{terminalName}, '%')
+            </if>
+            <if test="status != null and status != 0">
+                AND ter.status = #{status}
+            </if>
+        </where>
+        AND pos.create_time = (
+        SELECT MAX(create_time)
+        FROM vehicle_position
+        WHERE terminal_code = ter.terminal_code
+        )
+        GROUP BY ter.terminal_code
+        ORDER BY pos.create_time
+    </select>
 
 
 </mapper>

+ 5 - 0
vehicle-admin/pom.xml

@@ -35,6 +35,11 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-websocket</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.hikvision.ga</groupId>
+            <artifactId>artemis-http-client</artifactId>
+            <version>1.1.3</version>
+        </dependency>
 
         <!-- swagger3-->
         <!--        <dependency>-->

+ 57 - 51
vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ozs.common.annotation.Log;
 import com.ozs.common.core.controller.BaseController;
 import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.core.domain.R;
 import com.ozs.common.core.domain.entity.SysDept;
 import com.ozs.common.enums.BusinessType;
 import com.ozs.common.exception.base.BaseException;
@@ -23,6 +24,7 @@ import com.ozs.service.*;
 import com.ozs.system.service.DataScoreUtil;
 import com.ozs.system.service.ISysDeptService;
 import com.ozs.web.core.config.CaneraConfig;
+import com.ozs.web.core.config.GetCameraPreviewURL;
 import com.ozs.web.core.util.CameraUtil;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -79,6 +81,9 @@ public class BaseCameraManagementController extends BaseController {
     @Resource
     private BaseUserService baseUserService;
 
+    @Autowired
+    private CameraUtil cameraUtil;
+
     /**
      * 所有相机列表+权限
      */
@@ -106,7 +111,7 @@ public class BaseCameraManagementController extends BaseController {
             } else {
                 return AjaxResult.error("修改失败");
             }
-        }else {
+        } else {
             return AjaxResult.error("未查询该ID的相机台账信息");
         }
     }
@@ -289,6 +294,22 @@ public class BaseCameraManagementController extends BaseController {
         return AjaxResult.success();
     }
 
+
+    /**
+     * HTTP流转RTSP流
+     *
+     * @param
+     * @return
+     */
+    @GetMapping("/streamConversion")
+    @ApiOperation("HTTP流转RTSP流")
+    @Transactional
+    @Log(title = "相机台账管理", businessType = BusinessType.INSERT)
+    public AjaxResult streamConversion(String code) {
+        cameraUtil.streamConversion(code);
+        return AjaxResult.success();
+    }
+
     /**
      * 新增相机台账管理信息
      *
@@ -643,7 +664,7 @@ public class BaseCameraManagementController extends BaseController {
         if (ObjectUtils.isEmpty(one)) {
             throw new BaseException("相机编号【" + cameraCode + "】不存在");
         }
-        return new AjaxResult(200, "ok", CameraUtil.getPlayFlv(cameraCode, one.getChannel()));
+        return new AjaxResult(200, "ok", one.getUrl());
     }
 
     @ApiOperation("视频邀约")
@@ -681,56 +702,33 @@ public class BaseCameraManagementController extends BaseController {
         LambdaQueryWrapper<MsgAlarm> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(MsgAlarm::getAlarmId, alarmId);
         MsgAlarm msgAlarm = msgAlarmService.getOne(wrapper);
-        if (ObjectUtils.isEmpty(msgAlarm.getReleasedUrl())) {
-            LambdaQueryWrapper<BaseRailwayManagement> wrapperRailway = new LambdaQueryWrapper<>();
-            if (!ObjectUtils.isEmpty(msgAlarm.getRailwayCode())) {
-                wrapperRailway.eq(BaseRailwayManagement::getRailwayCode, msgAlarm.getRailwayCode());
-            }
-            BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(wrapperRailway);
-            if (StringUtils.isEmptySunhh(baseRailwayManagement)) {
-                return AjaxResult.error("报警线路编码:" + msgAlarm.getRailwayCode() + "不存在!");
-            }
-            // 查询里程位置最近的相机
-            LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<>();
-            if (!StringUtils.isEmptySunhh(msgAlarm.getRailwayCode())) {
-                lw.eq(BaseCameraManagement::getRailwayCode, msgAlarm.getRailwayCode());
-            }
-            if (!StringUtils.isEmptySunhh(msgAlarm.getAlarmMile())) {
-                lw.le(BaseCameraManagement::getBeginMile, msgAlarm.getAlarmMile());
-                lw.gt(BaseCameraManagement::getEndMile, msgAlarm.getAlarmMile());
-            }
-            List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(lw);
-            BaseCameraManagement baseCameraManagement = new BaseCameraManagement();
-            if (!StringUtils.isEmptySunhh(baseCameraManagementList) && baseCameraManagementList.size() > 0) {
-                baseCameraManagement = baseCameraManagementList.get(0);
-            } else {
-                return AjaxResult.error("报警里程范围内:" + msgAlarm.getAlarmMile() + "没有可查看的相机!");
-            }
-            Map<String, Object> map = new HashMap<>();
-            map.put("isLock", msgAlarm.getIsRelease());
-            map.put("releasedTime", msgAlarm.getReleasedTime());
-            map.put("alarmTime", msgAlarm.getAlarmTime());
-            map.put("channel", baseCameraManagement.getChannel());
-            map.put("cameraCode", baseCameraManagement.getCameraCode());
-            // Map<String, Object> map = baseCameraManagementService.getCameraChannelByAlarmId(alarmId);
-            if (!ObjectUtils.isEmpty(map)
-                    && map.size() > 0
-                    && !org.apache.commons.lang3.StringUtils.isBlank(map.get("channel").toString())) {
-                String url = null;
-                if (map.get("isLock").toString().equals("1")) {
-                    url = com.ozs.web.core.util.CameraUtil.historyPlayListStr(map.get("channel").toString(),
-                            (Date) map.get("alarmTime"),
-                            (Date) map.get("releasedTime"),
-                            true);
-                    msgAlarm.setReleasedUrl(url);
-                    msgAlarmService.updateById(msgAlarm);
-                }
-                return error("报警ID为:【" + alarmId + "】的相机信息还未生成报警回放视频");
-            } else {
-                return error("报警ID为:【" + alarmId + "】的相机信息不存在");
-            }
+        LambdaQueryWrapper<BaseRailwayManagement> wrapperRailway = new LambdaQueryWrapper<>();
+        if (!ObjectUtils.isEmpty(msgAlarm.getRailwayCode())) {
+            wrapperRailway.eq(BaseRailwayManagement::getRailwayCode, msgAlarm.getRailwayCode());
+        }
+        BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(wrapperRailway);
+        if (StringUtils.isEmptySunhh(baseRailwayManagement)) {
+            return AjaxResult.error("报警线路编码:" + msgAlarm.getRailwayCode() + "不存在!");
+        }
+        // 查询里程位置最近的相机
+        LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<>();
+        if (!StringUtils.isEmptySunhh(msgAlarm.getRailwayCode())) {
+            lw.eq(BaseCameraManagement::getRailwayCode, msgAlarm.getRailwayCode());
+        }
+        if (!StringUtils.isEmptySunhh(msgAlarm.getAlarmMile())) {
+            lw.le(BaseCameraManagement::getBeginMile, msgAlarm.getAlarmMile());
+            lw.gt(BaseCameraManagement::getEndMile, msgAlarm.getAlarmMile());
+        }
+        lw.eq(BaseCameraManagement::getLineDir, msgAlarm.getLineDir());
+//        lw.eq(BaseCameraManagement::getOnline, 2);
+        lw.eq(BaseCameraManagement::getEnableOrNot, 1);
+        List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(lw);
+        BaseCameraManagement baseCameraManagement = new BaseCameraManagement();
+        if (!StringUtils.isEmptySunhh(baseCameraManagementList) && baseCameraManagementList.size() > 0) {
+            baseCameraManagement = baseCameraManagementList.get(0);
+            return new AjaxResult(200, "ok", baseCameraManagement.getUrl());
         } else {
-            return new AjaxResult(200, "ok", caneraConfig.getRecordUrl() + msgAlarm.getReleasedUrl());
+            return AjaxResult.error("报警里程范围内:" + msgAlarm.getAlarmMile() + "没有可查看的相机!");
         }
     }
 
@@ -1001,5 +999,13 @@ public class BaseCameraManagementController extends BaseController {
             return error("该相机编码在相机台账表中不存在");
         }
     }
+
+    @GetMapping(value = "/getCameraPreviewURL")
+    @ApiOperation("天网接口测试")
+    @Log(title = "相机台账管理", businessType = BusinessType.MESSAGE)
+    public AjaxResult getCameraPreviewURL() {
+        String cameraPreviewURL = GetCameraPreviewURL.getCameraPreviewURL();
+        return AjaxResult.success(cameraPreviewURL);
+    }
 }
 

+ 3 - 7
vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java

@@ -203,11 +203,7 @@ public class MsgAlarmController extends BaseController {
                         o.setAlarmTypeName(sysDictData.getDictLabel());
                     }
                 });
-                LambdaQueryWrapper<MsgHeartbeatAlarmMessage> lw = new LambdaQueryWrapper<>();
-                if (!StringUtils.isBlank(o.getAlarmId())) {
-                    lw.eq(MsgHeartbeatAlarmMessage::getAlarmId, o.getAlarmId());
-                }
-                List<MsgHeartbeatAlarmMessage> list = msgHeartbeatAlarmMessageService.list(lw);
+                List<MsgHeartbeatAlarmMessage> list = msgHeartbeatAlarmMessageService.selectBaseLineManagement(o.getAlarmId());
                 if (!ObjectUtils.isEmpty(list)) {
                     StringBuilder stringBuilder = new StringBuilder();
                     for (MsgHeartbeatAlarmMessage msgHeartbeatAlarmMessage : list) {
@@ -262,7 +258,7 @@ public class MsgAlarmController extends BaseController {
             String mils = AppendUtils.stringAppend(o.getAlarmMile());
             o.setAlarmMiles(mils);
             o.setLineDirName(o.getLineDir() == 1 ? "上行" : "下行");
-            o.setAlarmTypeStr(o.getAlarmType() == 1 ? "泥石流" : (o.getAlarmType() == 2 ? "异物侵线" : (o.getAlarmType() == 3 ? "断轨监测" : "未知")));
+            o.setAlarmTypeStr(o.getAlarmType() == 1 ? "泥石流" : (o.getAlarmType() == 2 ? "异物侵" : (o.getAlarmType() == 3 ? "断轨监测" : "未知")));
             o.setIsReleaseName(o.getIsRelease() == 1 ? "已解除" : (o.getIsRelease() == 2 ? "未解除" : "未知"));
             List<SysDictData> data = dictTypeService.selectDictDataByType("sys_alarm_type");
             data.stream().forEach(sysDictData -> {
@@ -362,7 +358,7 @@ public class MsgAlarmController extends BaseController {
                 msgAlarmResp.setAlarmAttrName(msgAlarm.getAlarmAttr());
             }
             msgAlarmResp.setLineDirStr(msgAlarm.getLineDir() == 1 ? "上行" : "下行");
-            msgAlarmResp.setAlarmTypeStr(msgAlarm.getAlarmType() == 1 ? "泥石流" : (msgAlarm.getAlarmType() == 2 ? "异物侵线" : (msgAlarm.getAlarmType() == 3 ? "断轨监测" : "未知")));
+            msgAlarmResp.setAlarmTypeStr(msgAlarm.getAlarmType() == 1 ? "泥石流" : (msgAlarm.getAlarmType() == 2 ? "异物侵" : (msgAlarm.getAlarmType() == 3 ? "断轨监测" : "未知")));
             msgAlarmResp.setIsReleaseName(msgAlarm.getIsRelease() == 1 ? "已解除" : (msgAlarm.getIsRelease() == 2 ? "未解除" : "未知"));
             msgAlarmResp.setAlarmLevel(msgAlarm.getAlarmLevel());
             List<SysDictData> data = dictTypeService.selectDictDataByType("sys_alarm_type");

+ 1 - 1
vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmTemporaryController.java

@@ -124,7 +124,7 @@ public class MsgAlarmTemporaryController extends BaseController {
                 o.setAlarmMiles(mils);
                 o.setLineDirName(o.getLineDir() == 1 ? "上行" : "下行");
                 o.setStareName(o.getStare() == 1 ? "未生效" : "已生效");
-                o.setAlarmTypeStr(o.getAlarmType() == 1 ? "泥石流" : (o.getAlarmType() == 2 ? "异物侵线" : (o.getAlarmType() == 3 ? "断轨监测" : "未知")));
+                o.setAlarmTypeStr(o.getAlarmType() == 1 ? "泥石流" : (o.getAlarmType() == 2 ? "异物侵" : (o.getAlarmType() == 3 ? "断轨监测" : "未知")));
                 List<SysDictData> data = dictTypeService.selectDictDataByType("sys_alarm_type");
                 data.stream().forEach(sysDictData -> {
                     if (sysDictData.getDictValue().equals(o.getAlarmType().toString())) {

+ 8 - 13
vehicle-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgHeartbeatAlarmMessageController.java

@@ -13,6 +13,7 @@ import com.ozs.entity.BaseTerminal;
 import com.ozs.entity.BaseVehicle;
 import com.ozs.entity.BaseVehicleTerminal;
 import com.ozs.entity.MsgHeartbeatAlarmMessage;
+import com.ozs.entity.VehiclePosition;
 import com.ozs.entity.vo.MsgAlarmVo;
 import com.ozs.service.BaseTerminalService;
 import com.ozs.service.BaseVehicleService;
@@ -52,29 +53,23 @@ public class MsgHeartbeatAlarmMessageController extends BaseController {
     @PostMapping("/list")
     @Log(title = "报警和心跳交互信息表", businessType = BusinessType.SELECT)
     public AjaxResult selectBaseLineManagement(@RequestBody MsgAlarmVo msgAlarmVo) {
-        LambdaQueryWrapper<MsgHeartbeatAlarmMessage> lw = new LambdaQueryWrapper<>();
-        if (!StringUtils.isBlank(msgAlarmVo.getAlarmId())) {
-            lw.eq(MsgHeartbeatAlarmMessage::getAlarmId, msgAlarmVo.getAlarmId());
-        }
-        IPage<MsgHeartbeatAlarmMessage> page = msgHeartbeatAlarmMessageService.page(new Page<>(msgAlarmVo.getPageNum(), msgAlarmVo.getPageSize()), lw);
+        Integer pageNum = msgAlarmVo.getPageNum().intValue();
+        Integer pageSize = msgAlarmVo.getPageSize().intValue();
+        List<MsgHeartbeatAlarmMessage> list = msgHeartbeatAlarmMessageService.selectBaseLineManagement(msgAlarmVo.getAlarmId());
+        IPage<MsgHeartbeatAlarmMessage> page = msgHeartbeatAlarmMessageService.listToPage(list, pageNum, pageSize);
         if (!ObjectUtils.isEmpty(page) && !ObjectUtils.isEmpty(page.getRecords())) {
             List<MsgHeartbeatAlarmMessage> dto1 = page.getRecords().stream().map(o -> {
                 LambdaQueryWrapper<BaseTerminal> wrapper5 = new LambdaQueryWrapper<>();
                 wrapper5.eq(BaseTerminal::getTerminalCode, o.getTerminalCode());
-                BaseTerminal  baseTerminal= baseTerminalService.getOne(wrapper5);
-                if (!ObjectUtils.isEmpty(baseTerminal)){
+                BaseTerminal baseTerminal = baseTerminalService.getOne(wrapper5);
+                if (!ObjectUtils.isEmpty(baseTerminal)) {
                     o.setTerminalName(baseTerminal.getTerminalName());
                 }
                 LambdaQueryWrapper<BaseVehicleTerminal> wrapper1 = new LambdaQueryWrapper<>();
                 wrapper1.eq(BaseVehicleTerminal::getTerminalCode, o.getTerminalCode());
                 BaseVehicleTerminal baseVehicleTerminal = baseVehicleTerminalService.getOne(wrapper1);
                 if (!ObjectUtils.isEmpty(baseVehicleTerminal)) {
-                    LambdaQueryWrapper<BaseVehicle> wrapper2 = new LambdaQueryWrapper<>();
-                    wrapper2.eq(BaseVehicle::getVehicleCode, baseVehicleTerminal.getVehicleCode());
-                    BaseVehicle baseVehicle = baseVehicleService.getOne(wrapper2);
-                    if (!ObjectUtils.isEmpty(baseVehicle)) {
-                        o.setVehicleName(baseVehicle.getVehicleName());
-                    }
+                    o.setVehicle(baseVehicleTerminal.getVehicleCode());
                 }
                 return o;
             }).collect(Collectors.toList());

+ 200 - 111
vehicle-admin/src/main/java/com/ozs/web/controller/sdk/GeoHazardMonitorTokenController.java

@@ -77,12 +77,15 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 1. 获取身份认证控制层
@@ -138,6 +141,8 @@ public class GeoHazardMonitorTokenController {
     private SysUserMapper sysUserMapper;
     @Autowired
     WebSocketCommon webSocketCommon;
+    @Autowired
+    private CameraUtil cameraUtil;
     @Resource
     private SkynetHeartbeatLogMapper synetHeartbeatLogMapper;
     @Resource
@@ -508,6 +513,7 @@ public class GeoHazardMonitorTokenController {
     @PostMapping("/api/terminal/heartbeat")
     @Transactional
     public String heartbeat(@RequestBody ParameterVo parameterVo, HttpServletRequest request) {
+        long begin = System.currentTimeMillis();
         Map<String, Object> twoMap = new HashMap<>();
         int distance = 0;
         RespHeartbeatVo respHeartbeatVo = new RespHeartbeatVo();
@@ -632,112 +638,190 @@ public class GeoHazardMonitorTokenController {
                 queryWrapper.eq(MsgAlarm::getLineDir, heartbeatVo.getLineDir());
                 queryWrapper.eq(MsgAlarm::getRailwayCode, heartbeatVo.getRailwayCode());
                 queryWrapper.orderByAsc(MsgAlarm::getAlarmMile);
-                List<MsgAlarm> list = msgAlarmService.list(queryWrapper);
-                //有报警信息的时候
-                if (list.size() > 0) {
-                    //获取报警里程所监控的所有相机
-                    LambdaQueryWrapper<BaseCameraManagement> camera = new LambdaQueryWrapper<BaseCameraManagement>();
-                    camera.ge(BaseCameraManagement::getEndMile, list.get(0).getAlarmMile());
-                    camera.le(BaseCameraManagement::getBeginMile, list.get(0).getAlarmMile());
-                    camera.eq(BaseCameraManagement::getLineDir, heartbeatVo.getLineDir());
-                    camera.eq(BaseCameraManagement::getRailwayCode, heartbeatVo.getRailwayCode());
-                    camera.eq(BaseCameraManagement::getOnline,2);
-                    camera.eq(BaseCameraManagement::getEnableOrNot,1);
-                    camera.orderByAsc(BaseCameraManagement::getInstallMile);
-                    List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(camera);
-                    List<AlarmListVo> listVos = new ArrayList<>();
-                    if (baseCameraManagementList.size() > 0) {
-                        //获取视频点播地址
-                        String playFlv = CameraUtil.getPlayFlvRtsp(baseCameraManagementList.get(0).getCameraCode(), baseCameraManagementList.get(0).getChannel(), false);
-                        respHeartbeatVo.setCurrentStream(playFlv);
-                        respHeartbeatVo.setIsAlarm(1);
-                        respHeartbeatVo.setCameraCode(baseCameraManagementList.get(0).getCameraCode());
-//                        twoMap.put("currentStream", playFlv);
-                        twoMap.put("currentStream", baseCameraManagementList.get(0).getRtspUrl());
-                        twoMap.put("cameraCode", baseCameraManagementList.get(0).getCameraCode());
-                        //alarmInfo对象
-                        AlarmInfoVo alarmInfoVo = new AlarmInfoVo();
-                        alarmInfoVo.setAlarmId(list.get(0).getAlarmId());
-                        alarmInfoVo.setAlarmMile(list.get(0).getAlarmMile());
-                        alarmInfoVo.setAlarmTime(list.get(0).getAlarmTime().getTime());
-                        alarmInfoVo.setAlarmContent(list.get(0).getContent());
-                        alarmInfoVo.setAlarmType(list.get(0).getAlarmType());
-                        alarmInfoVo.setAlarmLevel(list.get(0).getAlarmLevel());
-                        LambdaQueryWrapper<MsgAlarmExt> ext = new LambdaQueryWrapper<>();
-                        ext.eq(MsgAlarmExt::getAlarmId, list.get(0).getAlarmId());
-                        List<MsgAlarmExt> list1 = msgAlarmExtService.list(ext);
-                        AlarmFilesVo[] files = new AlarmFilesVo[list1.size()];
-                        if (!ObjectUtils.isEmpty(list1)) {
-                            for (int i = 0; i < list1.size(); i++) {
-                                files[i] = new AlarmFilesVo();
-                                files[i].setAlarmAttType(list1.get(i).getAlarmAttType());
-                                files[i].setAlarmAttPath(list1.get(i).getAlarmAttPath());
-                            }
-                            //返回结果
-                            alarmInfoVo.setAlarmFiles(files);
+                queryWrapper.eq(MsgAlarm::getIsRelease, 2);
+                List<MsgAlarm> alarmsList = msgAlarmService.list(queryWrapper);
+                //根据终端编码 判断终端忽略报警信息记录表中的是否有忽略的报警
+                if (!ObjectUtils.isEmpty(alarmsList)) {
+                    // 获取当前时间
+                    LocalDateTime currentDateTime = LocalDateTime.now();
+                    // 获取前一天的时间
+                    LocalDateTime previousDateTime = currentDateTime.minusDays(1);
+                    // 格式化日期时间
+                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+                    String currentFormattedDateTime = currentDateTime.format(formatter);
+                    String previousFormattedDateTime = previousDateTime.format(formatter);
+                    
+                    LambdaQueryWrapper<TerminalIgnoreAlarm> queryWrapper1 = new LambdaQueryWrapper<>();
+                    List<String> collect = alarmsList.stream().map(MsgAlarm::getAlarmId).collect(Collectors.toList());
+                    queryWrapper1.in(TerminalIgnoreAlarm::getAlarmId, collect);
+                    queryWrapper1.eq(TerminalIgnoreAlarm::getTerminalCode, heartbeatVo.getTerminalCode());
+                    queryWrapper1.ge(TerminalIgnoreAlarm::getIgnoreTime,previousFormattedDateTime);
+                    queryWrapper1.le(TerminalIgnoreAlarm::getIgnoreTime,currentFormattedDateTime);
+                    List<TerminalIgnoreAlarm> list2 = terminalIgnoreAlarmService.list(queryWrapper1);
+                    //找出未忽略的报警信息
+                    LambdaQueryWrapper<MsgAlarm> queryWrapper2 = new LambdaQueryWrapper<>();
+                    if (!ObjectUtils.isEmpty(list2)) {
+                        List<String> collect1 = list2.stream().map(TerminalIgnoreAlarm::getAlarmId).collect(Collectors.toList());
+                        List<String> list = collect.stream()
+                                .filter(item -> !collect1.contains(item))
+                                .collect(Collectors.toList());
+                        if (!ObjectUtils.isEmpty(list)) {
+                            queryWrapper2.in(MsgAlarm::getAlarmId, list);
+                        }else {
+                            queryWrapper2.eq(MsgAlarm::getAlarmId, "1111111111111");
                         }
-                        respHeartbeatVo.setAlarmInfo(alarmInfoVo);
                     } else {
-                        jsonObject.put("resultCode", 0);
-                        jsonObject.put("message", "失败");
-                        jsonObject.put("data", "报警里程无可用相机");
-                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
+                        queryWrapper2.in(MsgAlarm::getAlarmId, collect);
                     }
-                    for (int i = 0; i < list.size(); i++) {
-                        MsgHeartbeatAlarmMessage msgHearbeatAlarmMessage = new MsgHeartbeatAlarmMessage();
-                        msgHearbeatAlarmMessage.setAlarmId(list.get(i).getAlarmId());
-                        msgHearbeatAlarmMessage.setTerminalCode(heartbeatVo.getTerminalCode());
-                        msgHearbeatAlarmMessage.setTrainNum(heartbeatVo.getTrainNum());
-                        msgHearbeatAlarmMessageMapper.insert(msgHearbeatAlarmMessage);
-                        //获取剩余的报警信息
-                        LambdaQueryWrapper<BaseCameraManagement> ment = new LambdaQueryWrapper<BaseCameraManagement>();
-                        ment.ge(BaseCameraManagement::getEndMile, list.get(i).getAlarmMile());
-                        ment.le(BaseCameraManagement::getBeginMile, list.get(i).getAlarmMile());
-                        ment.eq(BaseCameraManagement::getLineDir, heartbeatVo.getLineDir());
-                        ment.eq(BaseCameraManagement::getRailwayCode, heartbeatVo.getRailwayCode());
-                        camera.eq(BaseCameraManagement::getOnline,2);
-                        camera.eq(BaseCameraManagement::getEnableOrNot,1);
-                        ment.orderByAsc(BaseCameraManagement::getInstallMile);
-                        if (i == 0) {
-                            ment.last("limit 1,1000000");
+                    List<MsgAlarm> list = msgAlarmService.list(queryWrapper2);
+                    //有报警信息的时候
+                    if (!ObjectUtils.isEmpty(list)) {
+                        //获取报警里程所监控的所有相机
+                        LambdaQueryWrapper<BaseCameraManagement> camera = new LambdaQueryWrapper<BaseCameraManagement>();
+                        camera.ge(BaseCameraManagement::getEndMile, list.get(0).getAlarmMile());
+                        camera.le(BaseCameraManagement::getBeginMile, list.get(0).getAlarmMile());
+                        camera.eq(BaseCameraManagement::getLineDir, heartbeatVo.getLineDir());
+                        camera.eq(BaseCameraManagement::getRailwayCode, heartbeatVo.getRailwayCode());
+//                    camera.eq(BaseCameraManagement::getOnline,2);
+                        camera.eq(BaseCameraManagement::getEnableOrNot, 1);
+                        camera.orderByAsc(BaseCameraManagement::getInstallMile);
+                        List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(camera);
+                        List<AlarmListVo> listVos = new ArrayList<>();
+                        if (baseCameraManagementList.size() > 0) {
+                            //获取视频点播地址
+//                        String playFlv = CameraUtil.getPlayFlvRtsp(baseCameraManagementList.get(0).getCameraCode(), baseCameraManagementList.get(0).getChannel(), false);
+                            cameraUtil.streamConversion(baseCameraManagementList.get(0).getCameraCode());
+//                        respHeartbeatVo.setCurrentStream(playFlv);
+                            respHeartbeatVo.setCurrentStream(baseCameraManagementList.get(0).getRtspUrl());
+                            respHeartbeatVo.setIsAlarm(1);
+                            respHeartbeatVo.setCameraCode(baseCameraManagementList.get(0).getCameraCode());
+//                        twoMap.put("currentStream", playFlv);
+                            twoMap.put("currentStream", baseCameraManagementList.get(0).getRtspUrl());
+                            twoMap.put("cameraCode", baseCameraManagementList.get(0).getCameraCode());
+                            //alarmInfo对象
+                            AlarmInfoVo alarmInfoVo = new AlarmInfoVo();
+                            alarmInfoVo.setAlarmId(list.get(0).getAlarmId());
+                            alarmInfoVo.setAlarmMile(list.get(0).getAlarmMile());
+                            alarmInfoVo.setAlarmTime(list.get(0).getAlarmTime().getTime());
+                            alarmInfoVo.setAlarmContent(list.get(0).getContent());
+                            alarmInfoVo.setAlarmType(list.get(0).getAlarmType());
+                            alarmInfoVo.setAlarmLevel(list.get(0).getAlarmLevel());
+                            LambdaQueryWrapper<MsgAlarmExt> ext = new LambdaQueryWrapper<>();
+                            ext.eq(MsgAlarmExt::getAlarmId, list.get(0).getAlarmId());
+                            List<MsgAlarmExt> list1 = msgAlarmExtService.list(ext);
+                            AlarmFilesVo[] files = new AlarmFilesVo[list1.size()];
+                            if (!ObjectUtils.isEmpty(list1)) {
+                                for (int i = 0; i < list1.size(); i++) {
+                                    files[i] = new AlarmFilesVo();
+                                    files[i].setAlarmAttType(list1.get(i).getAlarmAttType());
+                                    files[i].setAlarmAttPath(list1.get(i).getAlarmAttPath());
+                                }
+                                //返回结果
+                                alarmInfoVo.setAlarmFiles(files);
+                            }
+                            respHeartbeatVo.setAlarmInfo(alarmInfoVo);
+                        } else {
+                            jsonObject.put("resultCode", 0);
+                            jsonObject.put("message", "失败");
+                            jsonObject.put("data", "报警里程无可用相机");
+                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                         }
-                        //获取所有报警安装里程位置的相机
-                        List<BaseCameraManagement> baseList = baseCameraManagementService.list(ment);
-                        if (baseList.size() > 0) {
-                            for (int o = 0; o < baseList.size(); o++) {
-                                String flv = CameraUtil.getPlayFlvRtsp(baseList.get(o).getCameraCode(), baseList.get(o).getChannel(), false);
-                                AlarmListVo alarmListVo = new AlarmListVo();
-                                //alarmList对象
+                        for (int i = 0; i < list.size(); i++) {
+                            MsgHeartbeatAlarmMessage msgHearbeatAlarmMessage = new MsgHeartbeatAlarmMessage();
+                            msgHearbeatAlarmMessage.setAlarmId(list.get(i).getAlarmId());
+                            msgHearbeatAlarmMessage.setTerminalCode(heartbeatVo.getTerminalCode());
+                            msgHearbeatAlarmMessage.setTrainNum(heartbeatVo.getTrainNum());
+                            msgHearbeatAlarmMessageMapper.insert(msgHearbeatAlarmMessage);
+                            //获取剩余的报警信息
+                            LambdaQueryWrapper<BaseCameraManagement> ment = new LambdaQueryWrapper<BaseCameraManagement>();
+                            ment.ge(BaseCameraManagement::getEndMile, list.get(i).getAlarmMile());
+                            ment.le(BaseCameraManagement::getBeginMile, list.get(i).getAlarmMile());
+                            ment.eq(BaseCameraManagement::getLineDir, heartbeatVo.getLineDir());
+                            ment.eq(BaseCameraManagement::getRailwayCode, heartbeatVo.getRailwayCode());
+//                        ment.eq(BaseCameraManagement::getOnline,2);
+                            ment.eq(BaseCameraManagement::getEnableOrNot, 1);
+                            ment.orderByAsc(BaseCameraManagement::getInstallMile);
+                            if (i == 0) {
+                                ment.last("limit 1,1000000");
+                            }
+                            //获取所有报警安装里程位置的相机
+                            List<BaseCameraManagement> baseList = baseCameraManagementService.list(ment);
+                            if (baseList.size() > 0) {
+                                for (int o = 0; o < baseList.size(); o++) {
+//                                String flv = CameraUtil.getPlayFlvRtsp(baseList.get(o).getCameraCode(), baseList.get(o).getChannel(), false);
+                                    cameraUtil.streamConversion(baseCameraManagementList.get(o).getCameraCode());
+                                    AlarmListVo alarmListVo = new AlarmListVo();
+                                    //alarmList对象
 //                                alarmListVo.setCameraStream(flv);
-                                alarmListVo.setCameraStream(baseList.get(o).getRtspUrl());
-                                alarmListVo.setCameraCode(baseList.get(o).getCameraCode());
-                                //alarmInfo对象
-                                AlarmInfoVo alarmInfoVo1 = new AlarmInfoVo();
-                                alarmInfoVo1.setAlarmId(list.get(i).getAlarmId());
-                                alarmInfoVo1.setAlarmMile(list.get(i).getAlarmMile());
-                                alarmInfoVo1.setAlarmTime(list.get(i).getAlarmTime().getTime());
-                                alarmInfoVo1.setAlarmType(list.get(i).getAlarmType());
-                                alarmInfoVo1.setAlarmContent(list.get(i).getContent());
-                                alarmInfoVo1.setAlarmLevel(list.get(i).getAlarmLevel());
-                                LambdaQueryWrapper<MsgAlarmExt> alarm = new LambdaQueryWrapper<>();
-                                alarm.eq(MsgAlarmExt::getAlarmId, list.get(0).getAlarmId());
-                                List<MsgAlarmExt> list1 = msgAlarmExtService.list(alarm);
-                                if (list1.size() > 0) {
-                                    AlarmFilesVo[] vo = new AlarmFilesVo[list1.size()];
-                                    for (int i1 = 0; i1 < list1.size(); i1++) {
-                                        vo[i1] = new AlarmFilesVo();
-                                        vo[i1].setAlarmAttType(list1.get(i1).getAlarmAttType());
-                                        vo[i1].setAlarmAttPath(list1.get(i1).getAlarmAttPath());
+                                    alarmListVo.setCameraStream(baseList.get(o).getRtspUrl());
+                                    alarmListVo.setCameraCode(baseList.get(o).getCameraCode());
+                                    //alarmInfo对象
+                                    AlarmInfoVo alarmInfoVo1 = new AlarmInfoVo();
+                                    alarmInfoVo1.setAlarmId(list.get(i).getAlarmId());
+                                    alarmInfoVo1.setAlarmMile(list.get(i).getAlarmMile());
+                                    alarmInfoVo1.setAlarmTime(list.get(i).getAlarmTime().getTime());
+                                    alarmInfoVo1.setAlarmType(list.get(i).getAlarmType());
+                                    alarmInfoVo1.setAlarmContent(list.get(i).getContent());
+                                    alarmInfoVo1.setAlarmLevel(list.get(i).getAlarmLevel());
+                                    LambdaQueryWrapper<MsgAlarmExt> alarm = new LambdaQueryWrapper<>();
+                                    alarm.eq(MsgAlarmExt::getAlarmId, list.get(0).getAlarmId());
+                                    List<MsgAlarmExt> list1 = msgAlarmExtService.list(alarm);
+                                    if (list1.size() > 0) {
+                                        AlarmFilesVo[] vo = new AlarmFilesVo[list1.size()];
+                                        for (int i1 = 0; i1 < list1.size(); i1++) {
+                                            vo[i1] = new AlarmFilesVo();
+                                            vo[i1].setAlarmAttType(list1.get(i1).getAlarmAttType());
+                                            vo[i1].setAlarmAttPath(list1.get(i1).getAlarmAttPath());
+                                        }
+                                        alarmInfoVo1.setAlarmFiles(vo);
                                     }
-                                    alarmInfoVo1.setAlarmFiles(vo);
+                                    alarmListVo.setAlarmInfo(alarmInfoVo1);
+                                    listVos.add(alarmListVo);
                                 }
-                                alarmListVo.setAlarmInfo(alarmInfoVo1);
-                                listVos.add(alarmListVo);
                             }
                         }
+                        AlarmListVo[] array = listVos.toArray(new AlarmListVo[]{});
+                        respHeartbeatVo.setAlarmList(array);
+                    } else {
+                        //没有报警信息的时候
+                        distance = heartbeatVo.getVisualDistance() + heartbeatVo.getCurrentMile();
+                        LambdaQueryWrapper<BaseCameraManagement> base = new LambdaQueryWrapper<>();
+                        if (heartbeatVo.getLineDir() == 1) {
+                            base.gt(BaseCameraManagement::getInstallMile, distance);
+                        }
+                        if (heartbeatVo.getLineDir() == 2) {
+                            base.lt(BaseCameraManagement::getInstallMile, distance);
+                        }
+                        base.eq(BaseCameraManagement::getLineDir, heartbeatVo.getLineDir());
+                        base.eq(BaseCameraManagement::getRailwayCode, heartbeatVo.getRailwayCode());
+                        base.orderByAsc(BaseCameraManagement::getInstallMile);
+//                    base.eq(BaseCameraManagement::getOnline,2);
+                        base.eq(BaseCameraManagement::getEnableOrNot, 1);
+                        base.last("limit 4");
+                        List<BaseCameraManagement> list1 = baseCameraManagementService.list(base);
+                        if (list1.size() <= 0) {
+                            jsonObject.put("resultCode", 0);
+                            jsonObject.put("message", "失败");
+                            jsonObject.put("data", "没有监控里程的相机");
+                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
+                        }
+                        CameraUtil.invite(list1.get(0).getCameraCode(), list1.get(0).getChannel());
+//                    String flv = CameraUtil.getPlayFlvRtsp(list1.get(0).getCameraCode(), list1.get(0).getChannel(), false);
+                        cameraUtil.streamConversion(list1.get(0).getCameraCode());
+                        //twoMap.put("currentStream", flv);
+                        twoMap.put("currentStream", list1.get(0).getRtspUrl());
+                        twoMap.put("cameraCode", list1.get(0).getCameraCode());
+                        for (BaseCameraManagement baseCameraManagement : list1) {
+//                        String flv1 = CameraUtil.getPlayFlvRtsp(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel(), false);
+                            CameraUtil.invite(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel());
+                        }
+                        cameraUtil.streamConversion(list1.get(0).getCameraCode());
+                        respHeartbeatVo.setCurrentStream(list1.get(0).getRtspUrl());
+                        respHeartbeatVo.setIsAlarm(2);
+                        respHeartbeatVo.setCameraCode(list1.get(0).getCameraCode());
+                        respHeartbeatVo.setAlarmList(null);
+                        respHeartbeatVo.setAlarmInfo(null);
                     }
-                    AlarmListVo[] array = listVos.toArray(new AlarmListVo[]{});
-                    respHeartbeatVo.setAlarmList(array);
                 } else {
                     //没有报警信息的时候
                     distance = heartbeatVo.getVisualDistance() + heartbeatVo.getCurrentMile();
@@ -751,8 +835,8 @@ public class GeoHazardMonitorTokenController {
                     base.eq(BaseCameraManagement::getLineDir, heartbeatVo.getLineDir());
                     base.eq(BaseCameraManagement::getRailwayCode, heartbeatVo.getRailwayCode());
                     base.orderByAsc(BaseCameraManagement::getInstallMile);
-                    base.eq(BaseCameraManagement::getOnline,2);
-                    base.eq(BaseCameraManagement::getEnableOrNot,1);
+//                    base.eq(BaseCameraManagement::getOnline,2);
+                    base.eq(BaseCameraManagement::getEnableOrNot, 1);
                     base.last("limit 4");
                     List<BaseCameraManagement> list1 = baseCameraManagementService.list(base);
                     if (list1.size() <= 0) {
@@ -762,14 +846,16 @@ public class GeoHazardMonitorTokenController {
                         return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
                     }
                     CameraUtil.invite(list1.get(0).getCameraCode(), list1.get(0).getChannel());
-                    String flv = CameraUtil.getPlayFlvRtsp(list1.get(0).getCameraCode(), list1.get(0).getChannel(), false);
-//                    twoMap.put("currentStream", flv);
+//                    String flv = CameraUtil.getPlayFlvRtsp(list1.get(0).getCameraCode(), list1.get(0).getChannel(), false);
+                    cameraUtil.streamConversion(list1.get(0).getCameraCode());
+                    //twoMap.put("currentStream", flv);
                     twoMap.put("currentStream", list1.get(0).getRtspUrl());
                     twoMap.put("cameraCode", list1.get(0).getCameraCode());
                     for (BaseCameraManagement baseCameraManagement : list1) {
-                        String flv1 = CameraUtil.getPlayFlvRtsp(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel(), false);
+//                        String flv1 = CameraUtil.getPlayFlvRtsp(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel(), false);
                         CameraUtil.invite(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel());
                     }
+                    cameraUtil.streamConversion(list1.get(0).getCameraCode());
                     respHeartbeatVo.setCurrentStream(list1.get(0).getRtspUrl());
                     respHeartbeatVo.setIsAlarm(2);
                     respHeartbeatVo.setCameraCode(list1.get(0).getCameraCode());
@@ -782,6 +868,8 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("resultCode", 1);
                 jsonObject.put("message", "ok");
                 jsonObject.put("data", respHeartbeatVo);
+                long end = System.currentTimeMillis();
+                System.out.println("-------------------" + (begin - end) / 1000);
                 return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             } else {
                 jsonObject.put("resultCode", 0);
@@ -900,8 +988,8 @@ public class GeoHazardMonitorTokenController {
             if (!ObjectUtils.isEmpty(cameraVo.getLineDir())) {
                 wrapper.eq(BaseCameraManagement::getLineDir, cameraVo.getLineDir());
             }
-            wrapper.eq(BaseCameraManagement::getOnline,2);
-            wrapper.eq(BaseCameraManagement::getEnableOrNot,1);
+//            wrapper.eq(BaseCameraManagement::getOnline,2);
+            wrapper.eq(BaseCameraManagement::getEnableOrNot, 1);
             wrapper.orderByAsc(BaseCameraManagement::getInstallMile);
             List<BaseCameraManagement> list = baseCameraManagementService.list(wrapper);
             if (list.size() <= 0) {
@@ -943,7 +1031,6 @@ public class GeoHazardMonitorTokenController {
             for (BaseCameraManagement baseCameraManagement : list) {
                 RespCameraVo respCameraVo = new RespCameraVo();
                 BeanUtils.copyProperties(baseCameraManagement, respCameraVo);
-                respCameraVo.setRailwayCame(baseCameraManagement.getRailwayName());
                 cameraVos.add(respCameraVo);
             }
 
@@ -992,8 +1079,8 @@ public class GeoHazardMonitorTokenController {
             }
             LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
             lw.eq(BaseCameraManagement::getCameraCode, cameraPlayVo.getCameraCode());
-            lw.eq(BaseCameraManagement::getOnline,2);
-            lw.eq(BaseCameraManagement::getEnableOrNot,1);
+//            lw.eq(BaseCameraManagement::getOnline,2);
+            lw.eq(BaseCameraManagement::getEnableOrNot, 1);
             BaseCameraManagement one = baseCameraManagementService.getOne(lw);
             if (ObjectUtils.isEmpty(one)) {
                 jsonObject.put("resultCode", 0);
@@ -1001,9 +1088,10 @@ public class GeoHazardMonitorTokenController {
                 jsonObject.put("data", "没有该相机编码的相机或已离线");
                 return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), key);
             }
-            String flv = CameraUtil.getPlayFlvRtsp(one.getCameraCode(), one.getChannel(), false);
+//            String flv = CameraUtil.getPlayFlvRtsp(one.getCameraCode(), one.getChannel(), false);
+            cameraUtil.streamConversion(one.getCameraCode());
 //            map.put("url", flv);
-            map.put("url",one.getRtspUrl());
+            map.put("url", one.getRtspUrl());
             jsonObject.put("resultCode", 1);
             jsonObject.put("message", "ok");
             jsonObject.put("data", map);
@@ -1143,11 +1231,12 @@ public class GeoHazardMonitorTokenController {
                     camera.ge(BaseCameraManagement::getEndMile, one.getAlarmMile());
                     camera.eq(BaseCameraManagement::getLineDir, one.getLineDir());
                     camera.orderByAsc(BaseCameraManagement::getInstallMile);
-                    camera.eq(BaseCameraManagement::getOnline,2);
-                    camera.eq(BaseCameraManagement::getEnableOrNot,1);
+//                    camera.eq(BaseCameraManagement::getOnline,2);
+                    camera.eq(BaseCameraManagement::getEnableOrNot, 1);
                     List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(camera);
                     if (baseCameraManagementList.size() > 0) {
                         BaseCameraManagement baseCameraManagement = baseCameraManagementList.get(0);
+                        cameraUtil.streamConversion(baseCameraManagement.getCameraCode());
 //                        long time = one.getAlarmTime().getTime();
 //                        long time2 = time - 600000L;
 //                        one.setAlarmTime(new Date(time2));
@@ -1174,7 +1263,7 @@ public class GeoHazardMonitorTokenController {
                     }
                 }
             }
-            map.put("url", serverConfig.getUrl() + one.getReleasedUrl());
+            map.put("url", one.getReleasedUrl());
             jsonObject.put("resultCode", 1);
             jsonObject.put("message", "ok");
             jsonObject.put("data", map);

+ 3 - 1
vehicle-admin/src/main/java/com/ozs/web/controller/websocket/WebSocketCommon.java

@@ -68,13 +68,15 @@ public class WebSocketCommon {
             msgAlarmResp.setBeginMile(endMile);
         }
         msgAlarmResp.setAlarmType(msgAlarm.getAlarmType());
-        String mile = AppendUtils.stringAppend(Integer.valueOf(msgAlarm.getAlarmMile()));
+        String mile = AppendUtils.stringAppend(msgAlarm.getAlarmMile());
+        msgAlarmResp.setAlarmMiles(msgAlarm.getAlarmMile());
         msgAlarmResp.setAlarmMile(mile);
 //        String cameraCode = msgAlarm.getCameraCode();
 //        msgAlarmResp.setCameraCode(cameraCode);
 
         String cameraName = baseRailwayManagementService.getCameraNameByCameraCode(msgAlarm.getRailwayCode());
         msgAlarmResp.setRailwayName(cameraName != null ? cameraName : "");
+        msgAlarmResp.setRailwayCode(msgAlarm.getRailwayCode());
         msgAlarmResp.setLineDirStr(msgAlarm.getLineDir() == 1 ? "上行" : "下行");
         msgAlarmResp.setAlarmTime(msgAlarm.getAlarmTime() != null ? msgAlarm.getAlarmTime() : new Date());
         // 图片

+ 4 - 0
vehicle-admin/src/main/java/com/ozs/web/core/config/CaneraConfig.java

@@ -46,4 +46,8 @@ public class CaneraConfig {
 
     @Value("${base.recordUrl:http://183.236.39.220:8083}")
     private String recordUrl;
+
+    @Value("${base.hkUrl:http://10.48.253.21:1443}")
+    private String hkUrl;
+    
 }

+ 60 - 0
vehicle-admin/src/main/java/com/ozs/web/core/config/GetCameraPreviewURL.java

@@ -0,0 +1,60 @@
+package com.ozs.web.core.config;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.hikvision.artemis.sdk.ArtemisHttpUtil;
+import com.hikvision.artemis.sdk.config.ArtemisConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+@Configuration
+@Slf4j
+public class GetCameraPreviewURL {
+    public static String getCameraPreviewURL() {
+
+        /**
+         * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
+         */
+        ArtemisConfig.host = "10.48.253.21:1443"; // 平台的ip端口
+        ArtemisConfig.appKey = "20110033";  // 密钥appkey
+        ArtemisConfig.appSecret = "QoGESFXOYrC68ixIS7wo";// 密钥appSecret
+
+        /**
+         * STEP2:设置OpenAPI接口的上下文
+         */
+        final String ARTEMIS_PATH = "/artemis";
+
+        /**
+         * STEP3:设置接口的URI地址
+         */
+        final String previewURLsApi = ARTEMIS_PATH + "/api/resource/v2/encodeDevice/search";
+        Map<String, String> path = new HashMap<String, String>(2) {
+            {
+                put("https://", previewURLsApi);//根据现场环境部署确认是http还是https
+            }
+        };
+
+        /**
+         * STEP4:设置参数提交方式
+         */
+        String contentType = "application/json";
+
+        /**
+         * STEP5:组装请求参数
+         */
+        JSONObject jsonBody = new JSONObject();
+        jsonBody.put("pageNo", 1);
+        jsonBody.put("pageSize", 10);
+        String body = jsonBody.toJSONString();
+        /**
+         * STEP6:调用接口
+         */
+        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType , null);// post请求application/json类型参数
+        log.info("GetCameraPreviewURL----->"+result);
+        return result;
+    }
+    
+}

+ 107 - 0
vehicle-admin/src/main/java/com/ozs/web/core/util/CameraUtil.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ozs.common.config.BaseConfig;
 import com.ozs.common.constant.Constants;
+import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.core.domain.entity.SysDictData;
 import com.ozs.common.core.redis.RedisCache;
 import com.ozs.common.exception.base.BaseException;
@@ -13,6 +14,8 @@ import com.ozs.common.utils.HttpClientUtil;
 import com.ozs.common.utils.http.HttpUtils;
 import com.ozs.entity.BaseTerminal;
 import com.ozs.entity.MsgHeartbeatAlarmMessage;
+import com.ozs.entity.vo.CamerasVo;
+import com.ozs.entity.vo.PlaybackVo;
 import com.ozs.framework.config.ServerConfig;
 import com.ozs.service.BaseTerminalService;
 import com.ozs.service.MsgHeartbeatAlarmMessageService;
@@ -32,8 +35,12 @@ import java.io.*;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -58,6 +65,7 @@ public class CameraUtil {
     private static RedisCache rc;
     private static ServerConfig sc;
     private static String recordUrl;
+    private static String hkUrl;
 
     @Autowired
     private CaneraConfig caneraConfig;
@@ -483,6 +491,7 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
         sc = serverConfig;
         wsUrl = caneraConfig.getWsUrl();
         recordUrl = caneraConfig.getRecordUrl();
+        hkUrl=caneraConfig.getHkUrl();
     }
 
     /**
@@ -702,6 +711,67 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
         return filterRecordList(channel, startTm, endTm, filePath, recordUrl + "profile/");
     }
 
+
+    /**
+     * HTTP流转RTSP流
+     */
+    public void streamConversion(String code) {
+
+        ExecutorService executor = Executors.newSingleThreadExecutor();
+        Callable<String> task = new Callable<String>() {
+            @Override
+            public String call() throws Exception {
+                // 执行网络请求...
+                log.info(ffmpegPath + " -re -i /opt/streams/file/vid/" + code + ".mp4  -c:v copy -c:a copy -f flv rtmp://124.70.58.209:1935/live/" + code);
+                cmdCameraUtil.cmd(ffmpegPath + " -re -i /opt/streams/file/vid/" + code + ".mp4  -c:v copy -c:a copy -f flv rtmp://124.70.58.209:1935/live/" + code);
+                return "Response";
+            }
+        };
+
+        try {
+            String result = executor.submit(task).get(1, TimeUnit.SECONDS); // 设置5秒超时时间
+            System.out.println("Response: " + result);
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            // 请求超时处理逻辑
+            System.out.println("Request timeout");
+        }
+
+        executor.shutdown();
+
+//        try {
+//            Process proc = Runtime.getRuntime().exec("/bin/bash", null, null);
+//            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
+//            PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
+//            String commit = ffmpegPath+" -re -i /opt/streams/file/"+code+".mp4  -c:v copy -c:a copy -f rtsp rtsp://124.70.58.209:8554/live/"+code;
+//            List<String> commands = new ArrayList<>();
+//
+//            // 删除
+//            commands.add(commit);
+//            log.info("HTTP流转RTSP流:{}", commands);
+//            for (String line : commands) {
+//                out.println(line);
+//            }
+//            out.println("exit");// 这个命令必须执行,否则in流不结束。
+//            String rspLine = "";
+//            while ((rspLine = in.readLine()) != null) {
+//                System.out.println(rspLine);
+//
+//            }
+//            int i = proc.waitFor();
+//            log.info("执行结果:{}", i);
+//
+//            in.close();
+//            out.close();
+//            proc.destroy();
+//        } catch (IOException e) {
+//            log.error(e.getMessage());
+//        } catch (InterruptedException e) {
+//            e.printStackTrace();
+//        }
+
+    }
+
+
     public static List<Map<String, Object>> filterRecordList(String channel,
                                                              Date startTm,
                                                              Date endTm,
@@ -820,6 +890,43 @@ ffmpeg -i "concat:1.ts|2.ts" -c copy output.mp4
         }
 
     }
+    
+    
+    public void previewURLs(CamerasVo camerasVo){
+        String result = null;
+        String url="http://"+hkUrl+"/api/video/v2/cameras/previewURLs";
+        try {
+            result = HttpClientUtil.postJson(url, JSON.toJSONString(camerasVo));
+        } catch (Exception e) {
+            log.error("previewURLs------------>"+e.getMessage());
+            e.printStackTrace();
+        }
+        JSONObject outJson = (JSONObject) JSONObject.parse(result);
+        if ("200".equals(outJson.getString("code"))) {
+            log.info("outJson----->"+outJson);
+            JSONObject data = outJson.getJSONObject("data");
+            String urls=data.getString("url");
+            HttpUtils.sendGet(historyUrl+"rtsp/api/pull?target="+urls+"&streamPath="+camerasVo.getCameraIndexCode()+"/"+camerasVo.getCameraIndexCode()+"&save=0");
+        }
+        
+    }
+    
+    public AjaxResult playbackURLs(PlaybackVo playbackVo){
+        String result = null;
+        String url="http://"+hkUrl+"/api/video/v2/cameras/playbackURLs";
+        try {
+            result = HttpClientUtil.postJson(url, JSON.toJSONString(playbackVo));
+        } catch (Exception e) {
+            log.error("playbackURLs------------>"+e.getMessage());
+            e.printStackTrace();
+        }
+        JSONObject outJson = (JSONObject) JSONObject.parse(result);
+        if ("200".equals(outJson.getString("code"))) {
+            log.info("outJson----->"+outJson);
+            return AjaxResult.success(outJson);
+        }
+        return AjaxResult.error("方法调用异常");
+    }
 
     public static void main(String[] args) throws InterruptedException, ParseException, IOException {
 //        CameraUtil cameraUtil = new CameraUtil();

+ 1 - 0
vehicle-admin/src/main/java/com/ozs/web/core/util/CmdCameraUtil.java

@@ -32,6 +32,7 @@ public class CmdCameraUtil {
         }
         try {
             int i = exec.waitFor();
+            log.info("------"+i);
         } catch (InterruptedException e) {
             log.error(e.getMessage());
             e.printStackTrace();