Browse Source

监控视频、摄像头控制接口

develop
Mr.Wang 1 year ago
parent
commit
5e1eba3360
  1. 305
      zc-business/src/main/java/com/zc/business/controller/VideoController.java

305
zc-business/src/main/java/com/zc/business/controller/VideoController.java

@ -0,0 +1,305 @@
package com.zc.business.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.zc.common.core.httpclient.OkHttp;
import com.zc.common.core.httpclient.exception.HttpException;
import com.zc.common.core.httpclient.request.RequestParams;
import okhttp3.Response;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.ruoyi.common.constant.Constants.HTTP;
/**
* License
*
* @author Athena-xiepufeng
*/
@RestController
@RequestMapping("/video")
public class VideoController extends BaseController {
private static final String USERNAME = "jhgskj";
private static final String PASSWORD = "jhgskj@2023";
private static String TOKEN;
private final static String URL = HTTP + "10.166.147.60:9021";
public static final Integer UNAUTHORIZED = 401;
public static final Integer ERROR = 500;
/**
* 查询附近相机
*/
@GetMapping(value = "/nearCamListDistance")
public JSONObject nearCamListDistance(String devLat, String devLon) throws HttpException, IOException {
JSONObject jsonResult = null;
// 1000 米
String distance = "1000";
OkHttp okHttp = new OkHttp();
RequestParams requestParams = new RequestParams();
requestParams.put("devLat", devLat);
requestParams.put("devLon", devLon);
requestParams.put("distance", distance);
Map<String, String> header = new HashMap<>();
if (VideoController.TOKEN == null) {
getToken();
}
header.put("Authorization", TOKEN);
Response response // 请求响应
= okHttp
.headers(header)
.url(URL + "/videoInfo/api/nearCamListDistance") // 请求地址
.data(requestParams) // 请求参数
.get(); // 请求方法
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
if (jsonResult.containsKey("code") && UNAUTHORIZED.equals(jsonResult.getInteger("code"))) {
getToken();
okHttp.get();
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
}
}
}
return jsonResult;
}
/**
* 根据桩号查询附近相机
*/
@GetMapping(value = "/nearCamListPileNum")
public Object nearCamListPileNum(String pileNum) throws HttpException, IOException {
// 获取济菏运管中心相机信息
JSONObject camInfo = getCamByDept("1301730");
if (!camInfo.containsKey("data")) {
return camInfo;
}
JSONArray camData = camInfo.getJSONArray("data");
List<Object> resultList = new ArrayList<>();
camData.forEach(item -> {
JSONObject jsonObject = (JSONObject) item;
if (isNearbyPileNum(pileNum, jsonObject.getString("pileNum"))) {
resultList.add(item);
}
});
return AjaxResult.success(resultList);
}
/**
* 获取视频流信息
*/
@GetMapping(value = "/externalVideoStreaming")
public JSONObject externalVideoStreaming(String camId) throws HttpException, IOException {
JSONObject jsonResult = null;
OkHttp okHttp = new OkHttp();
RequestParams requestParams = new RequestParams();
requestParams.put("type", "1");
requestParams.put("camId", camId);
Map<String, String> header = new HashMap<>();
if (VideoController.TOKEN == null) {
getToken();
}
header.put("Authorization", TOKEN);
Response response // 请求响应
= okHttp
.headers(header)
.url(URL + "/videoInfo/api/externalVideoStreaming") // 请求地址
.data(requestParams) // 请求参数
.post(); // 请求方法
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
if (jsonResult.containsKey("code") && UNAUTHORIZED.equals(jsonResult.getInteger("code"))) {
getToken();
okHttp.post();
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
}
}
}
return jsonResult;
}
/**
* 云平台控制
*/
@GetMapping(value = "/PTZControl")
public JSONObject PTZControl(String camId, String cmdType, String speed) throws HttpException, IOException {
JSONObject jsonResult = null;
OkHttp okHttp = new OkHttp();
RequestParams requestParams = new RequestParams();
requestParams.put("msgType", "3");
requestParams.put("camId", camId);
requestParams.put("cmdType", cmdType);
requestParams.put("speed", speed);
Map<String, String> header = new HashMap<>();
if (VideoController.TOKEN == null) {
getToken();
}
header.put("Authorization", TOKEN);
Response response // 请求响应
= okHttp
.headers(header)
.url(URL + "/videoInfo/api/PTZControl") // 请求地址
.data(requestParams) // 请求参数
.get(); // 请求方法
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
if (jsonResult.containsKey("code") && UNAUTHORIZED.equals(jsonResult.getInteger("code"))) {
getToken();
okHttp.get();
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
}
}
}
return jsonResult;
}
public void getToken() throws HttpException, IOException {
OkHttp okHttp = new OkHttp();
RequestParams requestParams = new RequestParams();
requestParams.put("username", USERNAME);
requestParams.put("password", PASSWORD);
Response response // 请求响应
= okHttp
.url(URL + "/apiLogin") // 请求地址
.data(requestParams) // 请求参数
.post(); // 请求方法
if (response.body() != null) {
JSONObject jsonResult = JSONObject.parseObject(response.body().string());
if (jsonResult.containsKey("token")) {
VideoController.TOKEN = jsonResult.getString("token");
}
}
}
/**
* 根据组织机构获取摄像机信息
* @param deptId 机构id
* @return
*/
public JSONObject getCamByDept(String deptId) throws HttpException, IOException {
JSONObject jsonResult = null;
OkHttp okHttp = new OkHttp();
RequestParams requestParams = new RequestParams();
requestParams.put("deptId", deptId);
Map<String, String> header = new HashMap<>();
if (VideoController.TOKEN == null) {
getToken();
}
header.put("Authorization", TOKEN);
Response response // 请求响应
= okHttp
.headers(header)
.url(URL + "/system/camera/camList") // 请求地址
.data(requestParams) // 请求参数
.get(); // 请求方法
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
if (jsonResult.containsKey("code") && UNAUTHORIZED.equals(jsonResult.getInteger("code"))) {
getToken();
okHttp.get();
if (response.body() != null) {
jsonResult = JSONObject.parseObject(response.body().string());
}
}
}
return jsonResult;
}
/**
* 判断是否是附近桩号
* @return
*/
private boolean isNearbyPileNum(String centralPileNum, String nearbyPileNum) {
int centralPileNumMetre = pileNumTransformMetre(centralPileNum);
int nearbyPileNumMetre = pileNumTransformMetre(nearbyPileNum);
return (nearbyPileNumMetre <= centralPileNumMetre + 1000) && (nearbyPileNumMetre >= centralPileNumMetre - 1000);
}
/**
* 转换转换成米
* @param pileNum 桩号
* @return
*/
private int pileNumTransformMetre(String pileNum) {
String[] parts = pileNum.split("[+ ]");
if (parts.length < 2) {
return 0;
}
int kilometer = Integer.parseInt(parts[0].substring(1)); // 移除开头的字母
int meter = Integer.parseInt(parts[1]);
return kilometer * 1000 + meter;
}
}
Loading…
Cancel
Save