Преглед изворни кода

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

wyyay пре 2 година
родитељ
комит
f67ff4963f

+ 0 - 20
business-service/src/main/java/com/ozs/entity/BaseDeviceDynamicManagement.java

@@ -49,24 +49,4 @@ public class BaseDeviceDynamicManagement extends BaseEntity implements Serializa
      * 创建人
      */
     private String createBy;
-
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-
-    /**
-     * 修改人
-     */
-    private String updateBy;
-
-    /**
-     * 修改时间
-     */
-    private Date updateTime;
-
-    /**
-     * 备注
-     */
-    private String remark;
 }

+ 4 - 3
business-service/src/main/java/com/ozs/entity/BaseTerminal.java

@@ -2,8 +2,9 @@ package com.ozs.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -45,7 +46,7 @@ public class BaseTerminal implements Serializable {
     /**
      * 创建时间
      */
-    private LocalDateTime createTime;
+    private Date createTime;
 
     /**
      * 更新者
@@ -55,7 +56,7 @@ public class BaseTerminal implements Serializable {
     /**
      * 更新时间
      */
-    private LocalDateTime updateTime;
+    private Date updateTime;
 
     /**
      * 备注

+ 4 - 3
business-service/src/main/java/com/ozs/entity/BaseVehicle.java

@@ -2,8 +2,9 @@ package com.ozs.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -45,7 +46,7 @@ public class BaseVehicle implements Serializable {
     /**
      * 创建时间
      */
-    private LocalDateTime createTime;
+    private Date createTime;
 
     /**
      * 更新者
@@ -55,7 +56,7 @@ public class BaseVehicle implements Serializable {
     /**
      * 更新时间
      */
-    private LocalDateTime updateTime;
+    private Date updateTime;
 
     /**
      * 备注

+ 4 - 3
business-service/src/main/java/com/ozs/entity/BaseVehicleTerminal.java

@@ -2,8 +2,9 @@ package com.ozs.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -50,7 +51,7 @@ public class BaseVehicleTerminal implements Serializable {
     /**
      * 创建时间
      */
-    private LocalDateTime createTime;
+    private Date createTime;
 
     /**
      * 更新者
@@ -60,7 +61,7 @@ public class BaseVehicleTerminal implements Serializable {
     /**
      * 更新时间
      */
-    private LocalDateTime updateTime;
+    private Date updateTime;
 
     /**
      * 备注

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

@@ -2,10 +2,13 @@ package com.ozs.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
 import java.io.Serializable;
 import java.util.Date;
 
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.util.Date;
+
 import com.ozs.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import lombok.*;
@@ -30,7 +33,7 @@ public class TerminalIgnoreAlarm extends BaseEntity implements Serializable {
     /**
      * 主键
      */
-      @TableId(value = "id", type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     /**

+ 21 - 0
business-service/src/main/java/com/ozs/entity/vo/AlarmFilesVo.java

@@ -0,0 +1,21 @@
+package com.ozs.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class AlarmFilesVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 1图片;2声音;3视频
+     */
+    private Integer alarmAttType;
+    /**
+     * 存储路径
+     */
+    private String alarmAttPath;
+}

+ 41 - 0
business-service/src/main/java/com/ozs/entity/vo/AlarmInfoVo.java

@@ -0,0 +1,41 @@
+package com.ozs.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class AlarmInfoVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 标识UUID
+     */
+    private String alarmId;
+    /**
+     * 当前报警里程,单位米
+     */
+    private Integer alarmMile;
+    /**
+     * 当前报警时间,时间戳,单位毫秒
+     */
+    private Long alarmTime;
+    /**
+     * 当前报警内容
+     */
+    private String alarmContent;
+    /**
+     * 报警病害类型
+     */
+    private Integer alarmType;
+    /**
+     * 当前报警级别
+     */
+    private Integer alarmLevel;
+    /**
+     * 报警附件(集合)
+     */
+    private AlarmFilesVo[] alarmFiles;
+}

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

@@ -0,0 +1,25 @@
+package com.ozs.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class AlarmListVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 相机编码
+     */
+    private String cameraCode;
+    /**
+     * 相机实时播放流(报警)
+     */
+    private String cameraStream;
+    /**
+     * 报警信息
+     */
+    private AlarmInfoVo alarmInfo;
+}

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

@@ -0,0 +1,25 @@
+package com.ozs.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class CameraVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 车载终端编码
+     */
+    private String terminalCode;
+    /**
+     * 线路编码
+     */
+    private String railwayCode;
+    /**
+     * 1上行2下行
+     */
+    private Integer lineDir;
+}

+ 8 - 0
business-service/src/main/java/com/ozs/entity/vo/HeartbeatVo.java

@@ -34,4 +34,12 @@ public class HeartbeatVo implements Serializable {
      * 信号强度(1全码率 2低码率)
      */
     private Integer signalStrength;
+    /**
+     * 当前所在经度
+     */
+    private String longitude;
+    /**
+     * 当前所在纬度
+     */
+    private String latitude;
 }

+ 10 - 0
business-service/src/main/java/com/ozs/entity/vo/IgnoreVo.java

@@ -0,0 +1,10 @@
+package com.ozs.entity.vo;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+public class IgnoreVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+}

+ 34 - 0
business-service/src/main/java/com/ozs/entity/vo/RespCameraVo.java

@@ -0,0 +1,34 @@
+package com.ozs.entity.vo;
+
+import lombok.Data;
+import org.omg.PortableInterceptor.INACTIVE;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class RespCameraVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 相机编码
+     */
+    private String cameraCode;
+    /**
+     * 所属线路编码
+     */
+    private String railwayCode;
+    /**
+     * 所属线路名称
+     */
+    private String railwayCame;
+    /**
+     * 行别
+     */
+    private Integer lineDir;
+    /**
+     * 安装里程位置单位米
+     */
+    private Integer installMile;
+}

+ 33 - 0
business-service/src/main/java/com/ozs/entity/vo/RespHeartbeatVo.java

@@ -0,0 +1,33 @@
+package com.ozs.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class RespHeartbeatVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 前方相机/报警相机(实时播放流)
+     */
+    private String currentStream;
+    /**
+     * 当前流是否为报警流:1是 2否
+     */
+    private Integer isAlarm;
+    /**
+     * 当前播放的相机编码
+     */
+    private String cameraCode;
+    /**
+     * 后续报警集合(配置范围内的其他报警)
+     */
+    private AlarmListVo[] alarmList;
+    /**
+     * 当前报警信息((isAlarm为1时非空))
+     */
+    private AlarmInfoVo alarmInfo;
+}

+ 18 - 0
business-service/src/main/java/com/ozs/entity/vo/TerminalIgnoreVo.java

@@ -0,0 +1,18 @@
+package com.ozs.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class TerminalIgnoreVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 车载终端编码
+     */
+    private  String terminalCode;
+    /**
+     * 报警唯一UUID
+     */
+    private  String  alarmId;
+}

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

@@ -514,6 +514,22 @@ public class BaseCameraManagementController extends BaseController {
         return new AjaxResult(200, "ok", CameraUtil.getPlayFlv(cameraCode, one.getChannel()));
     }
 
+
+
+    @ApiOperation("视频邀约")
+    @GetMapping("/api/invite/{cameraCode}")
+    @Log(title = "相机台账管理", businessType = BusinessType.OTHER)
+    public AjaxResult invite(@PathVariable @NotNull(message = "相机编码不能为空") String cameraCode) {
+        LambdaQueryWrapper<BaseCameraManagement> lw = new LambdaQueryWrapper<BaseCameraManagement>();
+        lw.eq(BaseCameraManagement::getCameraCode, cameraCode);
+        BaseCameraManagement one = baseCameraManagementService.getOne(lw);
+        if (ObjectUtils.isEmpty(one)) {
+            throw new BaseException("相机编号【" + cameraCode + "】不存在");
+        }
+        return new AjaxResult(200, "ok", CameraUtil.invite(cameraCode, one.getChannel()));
+    }
+    
+
     @ApiOperation("查询录像")
     @GetMapping("/api/records/{cameraCode}/{flay}")
     @Log(title = "相机台账管理", businessType = BusinessType.OTHER)
@@ -699,7 +715,7 @@ public class BaseCameraManagementController extends BaseController {
 //            baseCameraManagement.setTaskId(start);
 //            baseCameraManagement.setUpdateBy(getUserId());
 //        } else {
-//            return success("开启视频录制失败:请确认流是否存在或流是否开启");
+//            return success("视频录制失败:请确认流是否存在或流是否开视频启开启");
 //        }
 //        if (baseCameraManagementService.updateById(baseCameraManagement)) {
 //            return success();

+ 355 - 37
vehicle-admin/src/main/java/com/ozs/web/controller/sdk/GeoHazardMonitorTokenController.java

@@ -3,30 +3,53 @@ package com.ozs.web.controller.sdk;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.exception.base.BaseException;
 import com.ozs.common.utils.ApiTokenUtils;
+import com.ozs.common.utils.ChineseToPingyin;
+import com.ozs.common.utils.HeartbeatUtils;
 import com.ozs.common.utils.HttpClientUtil;
+import com.ozs.common.utils.IgnoreUtils;
 import com.ozs.common.utils.StringUtils;
+import com.ozs.common.utils.http.HttpUtils;
 import com.ozs.common.utils.stateSecrets.SM4Utils;
 import com.ozs.entity.BaseCameraManagement;
 import com.ozs.entity.BaseDeviceDynamicManagement;
+import com.ozs.entity.BaseRailwayManagement;
+import com.ozs.entity.BaseTerminal;
 import com.ozs.entity.BaseUser;
+import com.ozs.entity.CameraTree;
 import com.ozs.entity.MsgAlarm;
 import com.ozs.entity.MsgAlarmExt;
 import com.ozs.entity.MsgAlarmFrequency;
 import com.ozs.entity.SvcAddress;
+import com.ozs.entity.TerminalIgnoreAlarm;
+import com.ozs.entity.VehiclePosition;
+import com.ozs.entity.vo.AlarmFilesVo;
+import com.ozs.entity.vo.AlarmInfoVo;
+import com.ozs.entity.vo.AlarmListVo;
+import com.ozs.entity.vo.CameraVo;
 import com.ozs.entity.vo.Files;
 import com.ozs.entity.vo.HeartbeatVo;
 import com.ozs.entity.vo.ReleaseAlarmVo;
 import com.ozs.entity.vo.ReqMsgAlarmVo;
+import com.ozs.entity.vo.RespCameraVo;
 import com.ozs.entity.vo.RespGeoHazardMonitorVo;
+import com.ozs.entity.vo.RespHeartbeatVo;
 import com.ozs.entity.vo.RespMsgAlarmVo;
+import com.ozs.entity.vo.TerminalIgnoreVo;
 import com.ozs.service.BaseCameraManagementService;
 import com.ozs.service.BaseDeviceDynamicManagementService;
+import com.ozs.service.BaseRailwayManagementService;
+import com.ozs.service.BaseTerminalService;
 import com.ozs.service.BaseUserService;
 import com.ozs.service.MsgAlarmExtService;
 import com.ozs.service.MsgAlarmFrequencyService;
 import com.ozs.service.MsgAlarmService;
 import com.ozs.service.SvcAddressService;
+import com.ozs.service.TerminalIgnoreAlarmService;
+import com.ozs.service.VehiclePositionService;
+import com.ozs.web.core.util.CameraUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +65,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.text.ParseException;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -74,6 +98,18 @@ public class GeoHazardMonitorTokenController {
     private BaseUserService baseUserService;
     @Autowired
     private MsgAlarmExtService msgAlarmExtService;
+    @Autowired
+    private BaseTerminalService baseTerminalService;
+    @Autowired
+    private VehiclePositionService vehiclePositionService;
+    @Autowired
+    private HeartbeatUtils heartbeatUtils;
+    @Autowired
+    private TerminalIgnoreAlarmService terminalIgnoreAlarmService;
+    @Autowired
+    private IgnoreUtils ignoreUtils;
+    @Autowired
+    private BaseRailwayManagementService baseRailwayManagementService;
 
     /**
      * 获取web访问令牌
@@ -105,7 +141,7 @@ public class GeoHazardMonitorTokenController {
                     respGeoHazardMonitorVo.setExpiresIn(l / 1000);
                     respGeoHazardMonitorVo.setTokenType("令牌类型");
                     jsonObject.put("resultCode", 1);
-                    jsonObject.put("message", "成功");
+                    jsonObject.put("message", "ok");
                     jsonObject.put("data", respGeoHazardMonitorVo);
                     return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
                 } else {
@@ -154,21 +190,20 @@ public class GeoHazardMonitorTokenController {
             }
             log.info("reqMsgAlarmVo:{}", reqMsgAlarmVo);
 
-//            RespMsgAlarmVo respMsgAlarmVo = new RespMsgAlarmVo();
-//            LambdaQueryWrapper<BaseCameraManagement> wrapper = new LambdaQueryWrapper<BaseCameraManagement>();
-//            if (!ObjectUtils.isEmpty(reqMsgAlarmVo.getAlarmMile())) {
-//                wrapper.ge(BaseCameraManagement::getBeginMile, reqMsgAlarmVo.getAlarmMile());
-//                wrapper.le(BaseCameraManagement::getEndMile, reqMsgAlarmVo.getAlarmMile());
-//            }
-//            List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(wrapper);
-//            log.info("baseCameraManagement:{}", baseCameraManagementList);
-//            if (baseCameraManagementList.size() <= 0) {
-//                jsonObject.put("resultCode", 0);
-//                jsonObject.put("message", "失败");
-//                jsonObject.put("data", "报警里程位置没有可用的相机!!!");
-//                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
-//            }
-            //todo 需要根据报警里程位置  拉取相机的录制视频
+            RespMsgAlarmVo respMsgAlarmVo = new RespMsgAlarmVo();
+            LambdaQueryWrapper<BaseCameraManagement> wrapper = new LambdaQueryWrapper<BaseCameraManagement>();
+            if (!ObjectUtils.isEmpty(reqMsgAlarmVo.getAlarmMile())) {
+                wrapper.ge(BaseCameraManagement::getBeginMile, reqMsgAlarmVo.getAlarmMile());
+                wrapper.le(BaseCameraManagement::getEndMile, reqMsgAlarmVo.getAlarmMile());
+            }
+            List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(wrapper);
+            log.info("baseCameraManagement:{}", baseCameraManagementList);
+            if (baseCameraManagementList.size() <= 0) {
+                jsonObject.put("resultCode", 0);
+                jsonObject.put("message", "失败");
+                jsonObject.put("data", "报警里程位置没有可用的相机!!!");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            }
             LambdaQueryWrapper<MsgAlarm> lw = new LambdaQueryWrapper<MsgAlarm>();
             if (!ObjectUtils.isEmpty(reqMsgAlarmVo.getAlarmId())) {
                 lw.eq(MsgAlarm::getAlarmId, reqMsgAlarmVo.getAlarmId());
@@ -204,9 +239,33 @@ public class GeoHazardMonitorTokenController {
                 msgAlarmVice.setRailwayCode(reqMsgAlarmVo.getAlarmRailway());
                 msgAlarmVice.setAlarmTime(new Date(reqMsgAlarmVo.getAlarmTime()));
                 msgAlarmFrequencyService.save(msgAlarmVice);
-//                        respMsgAlarmVo.setAlarmId(reqMsgAlarmVo.getAlarmId());
-//                        respMsgAlarmVo.setIsCancel(2);
-//                        respMsgAlarmVo.setCancelTime(null);
+                for (BaseCameraManagement baseCameraManagement : baseCameraManagementList) {
+                    String invite = CameraUtil.invite(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel());
+                    if ("304".equals(invite) || "200".equals(invite)) {
+                        String start = HttpUtils.sendGet(CameraUtil.startRecording(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel()));
+                        log.info("startRecording------------" + start);
+                        if (start.startsWith(baseCameraManagement.getCameraCode() + "/" + baseCameraManagement.getChannel())) {
+                            baseCameraManagement.setTaskId(start);
+                            baseCameraManagement.setUpdateBy(admin.getUserId());
+                        } else {
+                            jsonObject.put("resultCode", 0);
+                            jsonObject.put("message", "失败");
+                            jsonObject.put("data", "视频录制失败:请确认流是否存在!!!");
+                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                        }
+                        if (!baseCameraManagementService.updateById(baseCameraManagement)) {
+                            jsonObject.put("resultCode", 0);
+                            jsonObject.put("message", "失败");
+                            jsonObject.put("data", "开启录制视频失败!!!");
+                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                        }
+                    } else {
+                        jsonObject.put("resultCode", 0);
+                        jsonObject.put("message", "失败");
+                        jsonObject.put("data", "视频邀约失败,视频中心没有该相机编码或通道编码的摄像头!!!");
+                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                    }
+                }
 
             } else {
                 BeanUtils.copyProperties(reqMsgAlarmVo, msgAlarmVice);
@@ -215,13 +274,6 @@ public class GeoHazardMonitorTokenController {
                 msgAlarmVice.setAlarmTime(new Date(reqMsgAlarmVo.getAlarmTime()));
                 msgAlarmVice.setRailwayCode(reqMsgAlarmVo.getAlarmRailway());
                 msgAlarmFrequencyService.save(msgAlarmVice);
-//                respMsgAlarmVo.setAlarmId(reqMsgAlarmVo.getAlarmId());
-//                respMsgAlarmVo.setCameraCode(reqMsgAlarmVo.getAlarmCamera());
-//                respMsgAlarmVo.setIsCancel(alarm.getIsRelease());
-//                if (!ObjectUtils.isEmpty(alarm.getReleasedTime())) {
-//                    respMsgAlarmVo.setCancelTime(alarm.getReleasedTime().getTime());
-//                }
-//                respMsgAlarmVo.setCancelTime(null);
             }
 //            try {
 //                MsgAlarm alarms = msgAlarmService.getOne(lw);
@@ -238,7 +290,7 @@ public class GeoHazardMonitorTokenController {
 //                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
 //            }
             jsonObject.put("resultCode", 1);
-            jsonObject.put("message", "成功");
+            jsonObject.put("message", "ok");
             jsonObject.put("data", null);
             return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
         } else {
@@ -287,7 +339,7 @@ public class GeoHazardMonitorTokenController {
             if (count) {
                 map.put("releaseState", 1);
                 jsonObject.put("resultCode", 1);
-                jsonObject.put("message", "成功");
+                jsonObject.put("message", "ok");
                 jsonObject.put("data", map);
             } else {
                 map.put("releaseState", 2);
@@ -304,9 +356,18 @@ public class GeoHazardMonitorTokenController {
         }
     }
 
-
+    /**
+     * 车载心跳机制交互
+     *
+     * @param parameter
+     * @param request
+     * @return
+     */
     @PostMapping("/api/terminal/heartbeat")
     public String heartbeat(@RequestParam("parameter") String parameter, HttpServletRequest request) {
+        Map<String, Object> twoMap = new HashMap<>();
+        int distance = 0;
+        RespHeartbeatVo respHeartbeatVo = new RespHeartbeatVo();
         String token = apiTokenUtils.getGeoHazardMonitorToken(request);
         log.info("token:{}", token);
         log.info("parameter:{}", parameter);
@@ -314,11 +375,204 @@ public class GeoHazardMonitorTokenController {
         if (StringUtils.isNotEmpty(token)) {
             String s = SM4Utils.decryptData_ECB(parameter, "4370780c9a8c43e5");
             HeartbeatVo heartbeatVo = JSON.parseObject(s, HeartbeatVo.class);
-//            BeanUtils.copyProperties(heartbeatVo, msgAlarm);
+            VehiclePosition vehiclePosition = new VehiclePosition();
+            BeanUtils.copyProperties(heartbeatVo, vehiclePosition);
+            LambdaQueryWrapper<BaseTerminal> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(BaseTerminal::getTerminalCode, vehiclePosition.getTerminalCode());
+            BaseTerminal baseTerminal = baseTerminalService.getOne(wrapper);
+            vehiclePosition.setTravelMile(heartbeatVo.getCurrentMile());
+            vehiclePosition.setVehicleCode(baseTerminal.getVehicleCode());
+            //机车行驶表添加数据
+            boolean save = vehiclePositionService.save(vehiclePosition);
+            //目视距离和里程位置
+            if (save) {
+                LambdaQueryWrapper<MsgAlarm> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.le(MsgAlarm::getAlarmMile, heartbeatVo.getCurrentMile());
+                queryWrapper.ge(MsgAlarm::getAlarmMile, (heartbeatVo.getCurrentMile() + 10000));
+                queryWrapper.eq(MsgAlarm::getLineDir, heartbeatVo.getLineDir());
+                queryWrapper.orderByAsc(MsgAlarm::getAlarmMile);
+                List<MsgAlarm> list = msgAlarmService.list(queryWrapper);
+                //有报警信息的时候
+                if (list.size() > 0) {
+                    //获取报警里程所监控的所有相机
+                    LambdaQueryWrapper<BaseCameraManagement> camera = new LambdaQueryWrapper<BaseCameraManagement>();
+                    camera.ge(BaseCameraManagement::getBeginMile, list.get(0).getAlarmMile());
+                    camera.le(BaseCameraManagement::getEndMile, list.get(0).getAlarmMile());
+                    camera.eq(BaseCameraManagement::getLineDir, heartbeatVo.getLineDir());
+                    camera.orderByAsc(BaseCameraManagement::getInstallMile);
+                    List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementService.list(camera);
+                    if (baseCameraManagementList.size() > 0) {
+                        //获取视频点播地址
+                        String playFlv = CameraUtil.getPlayFlv(baseCameraManagementList.get(0).getCameraCode(), baseCameraManagementList.get(0).getChannel(), false);
+                        respHeartbeatVo.setCurrentStream(playFlv);
+                        respHeartbeatVo.setIsAlarm(1);
+                        respHeartbeatVo.setCameraCode(baseCameraManagementList.get(0).getCameraCode());
+                        twoMap.put(respHeartbeatVo.getCameraCode(), respHeartbeatVo.getCurrentStream());
+                        //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.setAlarmType(list.get(0).getAlarmType());
+                        alarmInfoVo.setAlarmLevel(list.get(0).getAlarmLevel());
+                        AlarmFilesVo[] files = new AlarmFilesVo[1];
+                        LambdaQueryWrapper<MsgAlarmExt> ext = new LambdaQueryWrapper<>();
+                        ext.eq(MsgAlarmExt::getAlarmId, list.get(0).getAlarmId());
+                        MsgAlarmExt one = msgAlarmExtService.getOne(ext);
+                        files[0] = new AlarmFilesVo();
+                        files[0].setAlarmAttType(one.getAlarmAttType());
+                        files[0].setAlarmAttPath(one.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), "4370780c9a8c43e5");
+                    }
+                    for (int i = 0; i < list.size(); i++) {
+                        //获取剩余的报警信息
+                        LambdaQueryWrapper<BaseCameraManagement> ment = new LambdaQueryWrapper<BaseCameraManagement>();
+                        ment.ge(BaseCameraManagement::getBeginMile, list.get(i).getAlarmMile());
+                        ment.le(BaseCameraManagement::getEndMile, list.get(i).getAlarmMile());
+                        ment.eq(BaseCameraManagement::getLineDir, heartbeatVo.getLineDir());
+                        ment.orderByAsc(BaseCameraManagement::getInstallMile);
+                        if (i == 0) {
+                            wrapper.last("limit 1,1000000");
+                        }
+                        List<BaseCameraManagement> baseList = baseCameraManagementService.list(camera);
+                        if (baseList.size() > 0) {
+                            for (int o = 0; o < baseList.size(); o++) {
+                                String flv = CameraUtil.getPlayFlv(baseList.get(o).getCameraCode(), baseList.get(o).getChannel(), false);
+                                List<AlarmListVo> listVos = new ArrayList<>();
+                                AlarmListVo alarmListVo = new AlarmListVo();
+                                //alarmList对象
+                                alarmListVo.setCameraStream(flv);
+                                alarmListVo.setCameraCode(baseList.get(o).getCameraCode());
+                                twoMap.put(alarmListVo.getCameraCode(), alarmListVo.getCameraStream());
+                                //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.setAlarmLevel(list.get(i).getAlarmLevel());
+                                AlarmFilesVo[] vo = new AlarmFilesVo[1];
+                                LambdaQueryWrapper<MsgAlarmExt> alarm = new LambdaQueryWrapper<>();
+                                alarm.eq(MsgAlarmExt::getAlarmId, list.get(0).getAlarmId());
+                                MsgAlarmExt msgAlarmExt = msgAlarmExtService.getOne(alarm);
+                                vo[0] = new AlarmFilesVo();
+                                vo[0].setAlarmAttType(msgAlarmExt.getAlarmAttType());
+                                vo[0].setAlarmAttPath(msgAlarmExt.getAlarmAttPath());
+                                //返回结果
+                                alarmInfoVo1.setAlarmFiles(vo);
+                                listVos.add(alarmListVo);
+                                AlarmListVo[] array = listVos.toArray(new AlarmListVo[]{});
+                                respHeartbeatVo.setAlarmList(array);
+                            }
+                        } else {
+                            jsonObject.put("resultCode", 0);
+                            jsonObject.put("message", "失败");
+                            jsonObject.put("data", "报警里程无可用相机");
+                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                        }
+                    }
+                } else {
+                    //没有报警信息的时候
+                    distance = heartbeatVo.getVisualDistance() + heartbeatVo.getCurrentMile();
+                    LambdaQueryWrapper<BaseCameraManagement> base = new LambdaQueryWrapper<>();
+                    base.gt(BaseCameraManagement::getInstallMiles, distance);
+                    base.eq(BaseCameraManagement::getLineDir, heartbeatVo.getLineDir());
+                    base.orderByAsc(BaseCameraManagement::getInstallMiles);
+                    wrapper.last("limit 4");
+                    List<BaseCameraManagement> list1 = baseCameraManagementService.list(base);
+                    String flv = CameraUtil.getPlayFlv(list1.get(0).getCameraCode(), list1.get(0).getChannel(), false);
+                    for (BaseCameraManagement baseCameraManagement : list1) {
+                        String flv1 = CameraUtil.getPlayFlv(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel(), false);
+                        twoMap.put(baseCameraManagement.getCameraCode(), flv1);
+                        String invite = CameraUtil.invite(baseCameraManagement.getCameraCode(), baseCameraManagement.getChannel());
+                        if (!"304".equals(invite) && !"200".equals(invite)) {
+                            jsonObject.put("resultCode", 0);
+                            jsonObject.put("message", "失败");
+                            jsonObject.put("data", "视频邀约失败,视频中心没有该相机编码或通道编码的摄像头!!!");
+                            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+                        }
+                    }
+                    respHeartbeatVo.setCurrentStream(flv);
+                    respHeartbeatVo.setIsAlarm(2);
+                    respHeartbeatVo.setCameraCode(list1.get(0).getCameraCode());
+                    respHeartbeatVo.setAlarmList(null);
+                    respHeartbeatVo.setAlarmInfo(null);
+                }
+                heartbeatUtils.createHeartbeat(heartbeatVo.getTerminalCode(), twoMap);
+                jsonObject.put("resultCode", 1);
+                jsonObject.put("message", "ok");
+                jsonObject.put("data", respHeartbeatVo);
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            } else {
+                jsonObject.put("resultCode", 0);
+                jsonObject.put("message", "失败");
+                jsonObject.put("data", "心跳机制交互失败");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            }
+        } else {
+            jsonObject.put("resultCode", 2);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "token验证失败");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+        }
 
-            jsonObject.put("resultCode", 1);
-            jsonObject.put("message", "成功");
-            jsonObject.put("data", null);
+    }
+
+    /**
+     * 司机忽略报警接口
+     *
+     * @param parameter
+     * @param request
+     * @return
+     */
+    @PostMapping("/api/terminal/ignore")
+    public String terminalIgnore(@RequestParam("parameter") String parameter, HttpServletRequest request) {
+        String token = apiTokenUtils.getGeoHazardMonitorToken(request);
+        Map<String, Object> map = new HashMap<>();
+        log.info("token:{}", token);
+        log.info("parameter:{}", parameter);
+        JSONObject jsonObject = new JSONObject();
+        if (StringUtils.isNotEmpty(token)) {
+            String s = SM4Utils.decryptData_ECB(parameter, "4370780c9a8c43e5");
+            TerminalIgnoreVo terminalIgnoreVo = JSON.parseObject(s, TerminalIgnoreVo.class);
+            map.put("terminalCode", terminalIgnoreVo.getTerminalCode());
+            map.put("alarmId", terminalIgnoreVo.getAlarmId());
+            LambdaQueryWrapper<MsgAlarm> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(MsgAlarm::getAlarmId, terminalIgnoreVo.getAlarmId());
+            MsgAlarm msgAlarm = msgAlarmService.getOne(wrapper);
+            if (ObjectUtils.isEmpty(msgAlarm)) {
+                map.put("isIgnore", 1);
+                jsonObject.put("resultCode", 0);
+                jsonObject.put("message", "失败");
+                jsonObject.put("data", map);
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+            }
+            TerminalIgnoreAlarm terminalIgnoreAlarm = new TerminalIgnoreAlarm();
+            terminalIgnoreAlarm.setAlarmId(terminalIgnoreVo.getAlarmId());
+            terminalIgnoreAlarm.setTerminalCode(terminalIgnoreVo.getTerminalCode());
+            terminalIgnoreAlarm.setIgnoreTime(new Date());
+            terminalIgnoreAlarm.setCreateBy(terminalIgnoreVo.getTerminalCode());
+            terminalIgnoreAlarm.setUpdateBy(terminalIgnoreVo.getTerminalCode());
+            boolean save = terminalIgnoreAlarmService.save(terminalIgnoreAlarm);
+            if (save) {
+                ignoreUtils.createIgnore("HL" + terminalIgnoreAlarm.getTerminalCode(), terminalIgnoreAlarm.getAlarmId());
+                map.put("isIgnore", 2);
+                jsonObject.put("resultCode", 1);
+                jsonObject.put("message", "ok");
+                jsonObject.put("data", map);
+            } else {
+                map.put("isIgnore", 3);
+                jsonObject.put("resultCode", 0);
+                jsonObject.put("message", "失败");
+                jsonObject.put("data", map);
+            }
             return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
         } else {
             jsonObject.put("resultCode", 2);
@@ -326,15 +580,79 @@ public class GeoHazardMonitorTokenController {
             jsonObject.put("data", "token验证失败");
             return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
         }
+    }
 
+    /**
+     * 获取所有的相机列表接口定义
+     *
+     * @param parameter
+     * @param request
+     * @return
+     */
+    @PostMapping("/api/query/camera")
+    public String camera(@RequestParam("parameter") String parameter, HttpServletRequest request) {
+        String token = apiTokenUtils.getGeoHazardMonitorToken(request);
+        log.info("token:{}", token);
+        log.info("parameter:{}", parameter);
+        JSONObject jsonObject = new JSONObject();
+        if (StringUtils.isNotEmpty(token)) {
+            String s = SM4Utils.decryptData_ECB(parameter, "4370780c9a8c43e5");
+            CameraVo cameraVo = JSON.parseObject(s, CameraVo.class);
+            LambdaQueryWrapper<BaseCameraManagement> wrapper = new LambdaQueryWrapper<>();
+            if (!ObjectUtils.isEmpty(cameraVo.getRailwayCode())) {
+                wrapper.eq(BaseCameraManagement::getRailwayCode, cameraVo.getRailwayCode());
+            }
+            if (!ObjectUtils.isEmpty(cameraVo.getLineDir())) {
+                wrapper.eq(BaseCameraManagement::getLineDir, cameraVo.getLineDir());
+            }
+            List<BaseCameraManagement> list = baseCameraManagementService.list(wrapper);
+            for (BaseCameraManagement baseCameraManagement : list) {
+                LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
+                if (!ObjectUtils.isEmpty(baseCameraManagement.getRailwayCode())) {
+                    queryWrapper.eq(BaseRailwayManagement::getRailwayCode, baseCameraManagement.getRailwayCode());
+                }
+                BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
+                baseCameraManagement.setRailwayName(baseRailwayManagement.getRailwayName());
+            }
+            list.sort(new Comparator<BaseCameraManagement>() {
+                @Override
+                public int compare(BaseCameraManagement o1, BaseCameraManagement o2) {
+                    String name1 = ChineseToPingyin.convertHanziToPinyin(o1.getRailwayName());
+                    String substring1 = name1.substring(0, 1);
+                    String name2 = ChineseToPingyin.convertHanziToPinyin(o2.getRailwayName());
+                    String substring2 = name2.substring(0, 1);
+                    int i = substring1.compareTo(substring2);
+                    if (i == 0) {
+                        return -o1.getInstallMile() - o2.getInstallMile();
+                    } else {
+                        return i;
+                    }
+                }
+            });
+            List<RespCameraVo> cameraVos=new ArrayList<>();
+            for (BaseCameraManagement baseCameraManagement : list) {
+                RespCameraVo respCameraVo=new RespCameraVo();
+                BeanUtils.copyProperties(baseCameraManagement, respCameraVo);
+                respCameraVo.setRailwayCame(baseCameraManagement.getRailwayName());
+                cameraVos.add(respCameraVo);
+            }
+            
+            jsonObject.put("resultCode", 1);
+            jsonObject.put("message", "ok");
+            jsonObject.put("data", cameraVos);
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+        }else {
+            jsonObject.put("resultCode", 2);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "token验证失败");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
+        }
     }
 
+
     public static void main(String[] args) {
         JSONObject res = new JSONObject();
-        res.put("alarmId", "42010001541320001115");
-        res.put("releaseTime", 1681200512L);
-        res.put("releaseContent", "已处理");
-        res.put("operator", 1);
+        res.put("terminalCode", "111");
         String s = SM4Utils.encryptData_ECB(JSONObject.toJSONString(res), "4370780c9a8c43e5");
         System.out.println(s);
     }

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

@@ -1,12 +1,16 @@
 package com.ozs.web.core.util;
 
 import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import com.ozs.common.config.BaseConfig;
 import com.ozs.common.constant.Constants;
 import com.ozs.common.core.domain.entity.SysDictData;
 import com.ozs.common.exception.base.BaseException;
 import com.ozs.common.utils.DateUtils;
+import com.ozs.common.utils.HttpClientUtil;
 import com.ozs.common.utils.http.HttpUtils;
+import com.ozs.common.utils.stateSecrets.SM4Utils;
+import com.ozs.entity.MsgAlarm;
 import com.ozs.service.BaseCameraManagementService;
 import com.ozs.system.mapper.SysDictDataMapper;
 import com.ozs.web.core.config.CaneraConfig;
@@ -120,6 +124,21 @@ public class CameraUtil {
         return getPlayFlv(cameraCode, channel, true);
     }
 
+    public static String invite(String cameraCode, String channel) {
+        String result = null;
+        String url = bakUrl + "/api/gb28181/invite?id=" + cameraCode + "&channel=" + channel;
+        try {
+            result = HttpClientUtil.get(url);
+            log.info("result:{}", result);
+        } catch (Exception e) {
+            log.info(e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+    
+    
+
     /**
      * 开启录制功能
      *