zhanghua
2023-12-11 a9674f2fdd767d37a920e08535d8ab7d88746796
ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java
@@ -1,10 +1,17 @@
package com.ycl.controller.platformApi;
import cn.hutool.json.JSONConverter;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.ycl.annotation.LogSave;
import com.ycl.api.CommonResult;
import com.ycl.dto.video.AlarmParam;
import com.ycl.dto.video.HKAlarmParam;
import com.ycl.entity.video.VideoPoint;
import com.ycl.enums.common.ResultCode;
import com.ycl.service.video.IVideoAlarmReportService;
import com.ycl.service.video.impl.IVideoPointService;
import com.ycl.util.VideoUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -14,13 +21,18 @@
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.DatatypeConverter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
/**
 * @author admin
@@ -29,9 +41,10 @@
@RestController
@RequestMapping("/API")
public class AlarmController {
    private IVideoPointService videoPointService;
    private IVideoAlarmReportService videoAlarmReportService;
    private static Integer index = 0;
    private static Dictionary<String, Integer> sessionDic = new Hashtable<>();
    @Autowired
    private VideoUtil videoUtil;
@@ -41,10 +54,26 @@
        this.videoAlarmReportService = videoAlarmReportService;
    }
    @Autowired
    public void setVideoPointService(IVideoPointService videoPointService) {
        this.videoPointService = videoPointService;
    }
    @ApiOperation("视频报警推送API")
    @PostMapping("/AlarmReport")
    @LogSave(operationType = "报警管理", contain = "视频报警推送")
    public CommonResult alarmReport(@RequestBody @Validated AlarmParam alarmParam) {
//        System.out.println("保存报警数据:" + JSONObject.toJSONString(alarmParam));
        videoAlarmReportService.save(alarmParam);
        return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage());
    }
    @ApiOperation("海康视频报警推送API")
    @PostMapping("/HK/alarmReport")
    @LogSave(operationType = "报警管理", contain = "海康视频报警推送")
    public CommonResult hkAlarmReport(@RequestBody @Validated HKAlarmParam alarmParam) {
        System.out.println("海康视频报警推送API:" + JSONObject.toJSONString(alarmParam));
        videoAlarmReportService.saveFromHK(alarmParam);
        return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage());
    }
@@ -54,13 +83,34 @@
    public CommonResult getMonitorAddress(@PathVariable String code, @PathVariable Integer subType,
                                          @RequestParam(required = false) String scheme) {
        if (subType == null) {
            subType = 1;
        LambdaQueryWrapper<VideoPoint> queryWrapper = new LambdaQueryWrapper<VideoPoint>()
                .eq(VideoPoint::getPlatResourceId, code)
                .or().eq(VideoPoint::getCode, code);
        List<VideoPoint> pointList = videoPointService.list(queryWrapper);
        if (pointList.size() > 0) {
            VideoPoint videoPoint = pointList.get(0);
            if (videoPoint.getType() == 1) {
//                videoUtil.getKHPresets(code);
                return CommonResult.successApi(videoUtil.getKHVideo(code));
            } else {
                if (subType == null) {
                    subType = 1;
                }
                if (!StringUtils.isNotBlank(scheme)) {
                    scheme = "RTSP";
                }
                return CommonResult.successApi(videoUtil.getVideo(code, scheme, subType));
            }
        } else {
            if (subType == null) {
                subType = 1;
            }
            if (!StringUtils.isNotBlank(scheme)) {
                scheme = "RTSP";
            }
            return CommonResult.successApi(videoUtil.getVideo(code, scheme, subType));
        }
        if (!StringUtils.isNotBlank(scheme)) {
            scheme = "RTSP";
        }
        return CommonResult.successApi(videoUtil.getVideo(code, scheme, subType));
    }
@@ -68,19 +118,52 @@
    @GetMapping(value = "/img", produces = {MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_PNG_VALUE})
//    @GetMapping(value = "/img")
    @ResponseBody
    public byte[] getImages(HttpServletResponse response, @RequestParam String fileUrl, @RequestParam String OSSAccessKeyId, @RequestParam String Signature) {
    public byte[] getImages(HttpServletRequest request, HttpServletResponse response,
                            @RequestParam String fileUrl, @RequestParam(required = false) String OSSAccessKeyId,
                            @RequestParam(required = false) String Signature) {
        if (StringUtils.isNotBlank(fileUrl)) {
            String sessionId = request.getSession().getId();
            sessionDic.put(sessionId, 0);
            return getBytes(fileUrl, OSSAccessKeyId, Signature, sessionId);
        } else {
            return null;
        }
    }
        index = 0;
        return getBytes(fileUrl, OSSAccessKeyId, Signature);
    @ApiOperation(value = "获取图片")
    @GetMapping(value = "/img/base64")
//    @GetMapping(value = "/img")
    @ResponseBody
    public String getImagesBase64(HttpServletRequest request, HttpServletResponse response,
                                  @RequestParam String fileUrl, @RequestParam(required = false) String OSSAccessKeyId,
                                  @RequestParam(required = false) String Signature) {
        String sessionId = request.getSession().getId();
        sessionDic.put(sessionId, 0);
        byte[] bytes = getBytes(fileUrl, OSSAccessKeyId, Signature, sessionId);
        String base64 = DatatypeConverter.printBase64Binary(bytes);
        return base64;
    }
    @GetMapping(value = "/index")
    @ResponseBody
    public String getImages(HttpServletRequest request, HttpServletResponse response) {
        return "遂昌综合执法平台";
    }
    private byte[] getBytes(String fileUrl, String OSSAccessKeyId, String Signature) {
    private byte[] getBytes(String fileUrl, String OSSAccessKeyId, String Signature, String sessionId) {
        int index = sessionDic.get(sessionId);
        try {
            if (index < 10) {
                index++;
            if (sessionDic.get(sessionId) < 10) {
                sessionDic.remove(sessionId);
                fileUrl = fileUrl.replace("Expires", "v");
                System.out.println("getImages获取图片地址:" + fileUrl + "&OSSAccessKeyId=" + OSSAccessKeyId + "&Signature=" + Signature);
                URL url = new URL(fileUrl + "&OSSAccessKeyId=" + OSSAccessKeyId + "&Signature=" + Signature);
                URL url = null;
                if (StringUtils.isNotBlank(OSSAccessKeyId) && StringUtils.isNotBlank(Signature)) {
                    url = new URL(fileUrl + "&OSSAccessKeyId=" + OSSAccessKeyId + "&Signature=" + Signature);
                } else {
                    url = new URL(fileUrl);
                }
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(10 * 1000);
@@ -94,9 +177,12 @@
                return data;
            }
        } catch (Exception e) {
            System.out.println(index + "getImages获取图片失败:" + e.getMessage());
            getBytes(fileUrl, OSSAccessKeyId, Signature);
            // e.printStackTrace();
            index++;
            sessionDic.put(sessionId, index);
            System.out.println(index + "-getImages获取图片失败:" + e.getMessage());
            e.printStackTrace();
            getBytes(fileUrl, OSSAccessKeyId, Signature, sessionId);
        }
        return null;
    }