Browse Source

第三方接口开发

gao.qiang 2 years ago
parent
commit
4fcde42b32

+ 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;
 
     /**
      * 备注

+ 6 - 5
business-service/src/main/java/com/ozs/entity/TerminalIgnoreAlarm.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;
 
@@ -24,7 +25,7 @@ public class TerminalIgnoreAlarm implements Serializable {
     /**
      * 主键
      */
-      @TableId(value = "id", type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     /**
@@ -40,7 +41,7 @@ public class TerminalIgnoreAlarm implements Serializable {
     /**
      * 忽略时间
      */
-    private LocalDateTime ignoreTime;
+    private Date ignoreTime;
 
     /**
      * 创建者
@@ -50,7 +51,7 @@ public class TerminalIgnoreAlarm implements Serializable {
     /**
      * 创建时间
      */
-    private LocalDateTime createTime;
+    private Date createTime;
 
     /**
      * 更新者
@@ -60,7 +61,7 @@ public class TerminalIgnoreAlarm implements Serializable {
     /**
      * 更新时间
      */
-    private LocalDateTime updateTime;
+    private Date updateTime;
 
     /**
      * 备注

+ 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;
+}

+ 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;
+}

+ 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();

+ 262 - 31
vehicle-admin/src/main/java/com/ozs/web/controller/sdk/GeoHazardMonitorTokenController.java

@@ -3,30 +3,47 @@ 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.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.BaseTerminal;
 import com.ozs.entity.BaseUser;
 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.Files;
 import com.ozs.entity.vo.HeartbeatVo;
 import com.ozs.entity.vo.ReleaseAlarmVo;
 import com.ozs.entity.vo.ReqMsgAlarmVo;
 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.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;
@@ -74,7 +91,16 @@ 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;
     /**
      * 获取web访问令牌
      *
@@ -154,21 +180,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 +229,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 +264,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);
@@ -307,6 +349,9 @@ public class GeoHazardMonitorTokenController {
 
     @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 +359,198 @@ 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", "成功");
+                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);
+    }
+    
+    
+    @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", "成功");
+                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,7 +558,6 @@ public class GeoHazardMonitorTokenController {
             jsonObject.put("data", "token验证失败");
             return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "4370780c9a8c43e5");
         }
-
     }
 
     public static void main(String[] args) {

+ 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;
+    }
+    
+    
+
     /**
      * 开启录制功能
      *