package cn.gistack.sm.hk.service.impl;
|
|
import cn.gistack.common.node.TreeNode;
|
import cn.gistack.sm.hk.entity.Hk;
|
import cn.gistack.sm.hk.service.HkService;
|
import cn.gistack.sm.hk.util.GetCameraUtils;
|
import cn.gistack.sm.hk.vo.HkVO;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import org.springblade.core.mp.support.Query;
|
import org.springframework.stereotype.Service;
|
|
import java.lang.reflect.Array;
|
import java.util.*;
|
|
import static cn.gistack.sm.hk.constant.HkConstant.*;
|
|
/**
|
* 海康服务接口实现层
|
* @author zhongrj
|
* @date 2023-04-18
|
*/
|
@Service
|
public class HkServiceImpl implements HkService {
|
|
/**
|
* 懒加载树
|
* @param hk 查询参数
|
* @return
|
*/
|
@Override
|
public List<TreeNode> lazyTree(HkVO hk) {
|
List<TreeNode> list = new ArrayList<>();
|
if (hk.getLevel().equals(0)){
|
// 查询第一级,并计算下级摄像头总数,获取湖北省的行政区数据
|
|
}else {
|
// 查询其它层级
|
|
}
|
// 返回数据
|
return list;
|
}
|
|
/**
|
* 查询监控统计数量
|
* @param hk 查询参数
|
* @return
|
*/
|
@Override
|
public Map<String, Object> getHkStatisticData(HkVO hk, Query query) {
|
Map<String, Object> hashMap = new HashMap<>();
|
// 获取根区域编号
|
String rootRegionId = getRootRegionId(hk);
|
// 查询摄像头统计数据(需要有在线状态)
|
hashMap.put("total",getCameraStatisticCount(hk.getType(),rootRegionId,null));
|
hashMap.put("onlineTotal",getCameraStatisticCount(hk.getType(),rootRegionId,1));
|
hashMap.put("offlineTotal",getCameraStatisticCount(hk.getType(),rootRegionId,0));
|
// 查询摄像头集合数据
|
hashMap.put("list",getCameraStatisticList(hk.getType(),rootRegionId, hk,query));
|
// 返回数据
|
return hashMap;
|
}
|
|
/**
|
* 摄像头数据处理
|
* @param list
|
* @return
|
*/
|
private Object handleCameraList(JSONArray list) {
|
List<Hk> cameraList = new ArrayList<>();
|
// 当前只有水库名称,还需查询地址,cameraIndexCode(用于视频播放),摄像头图片
|
for (int i = 0; i < list.size(); i++) {
|
Hk hk = new Hk();
|
hk.setCameraIndexCode(((JSONObject) list.get(i)).getString("indexCode"));
|
hk.setStatus(((JSONObject) list.get(i)).getInteger("online"));
|
hk.setWaterName(((JSONObject) list.get(i)).getString("regionName"));
|
hk.setCameraName(((JSONObject) list.get(i)).getString("cn"));
|
// hk.setCameraName(getCameraName(hk.getCameraIndexCode()));
|
// hk.setAddress(getCameraAddress(((JSONObject) list.get(i)).getString("regionIndexCode")),hk.getCameraIndexCode());
|
cameraList.add(hk);
|
}
|
return cameraList;
|
}
|
|
/**
|
* 根据编号获取区域详细信息
|
* @param regionIndexCode
|
* @param cameraIndexCode
|
* @return
|
*/
|
private String getCameraAddress(Integer type,String regionIndexCode,String cameraIndexCode) {
|
// 组装请求参数
|
JSONObject jsonBody = new JSONObject();
|
jsonBody.put("regionIndexCodes", Arrays.asList(regionIndexCode));
|
List<Map<String, Object>> list = new ArrayList<>();
|
Map<String, Object> map = new HashMap<>();
|
map.put("key","indexCode");
|
map.put("operator",0);
|
map.put("values",Arrays.asList(cameraIndexCode));
|
list.add(map);
|
jsonBody.put("expressions", list);
|
String body = jsonBody.toJSONString();
|
String result = GetCameraUtils.common(type,regionInfoUrls, body);
|
// 数据处理
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
JSONObject data = (JSONObject) jsonObject.get("data");
|
JSONArray jsonArray = JSON.parseArray(data.getString("list"));
|
String name = ((JSONObject)jsonArray.get(0)).getString("regionPathName");
|
// 返回
|
return name;
|
}
|
|
/**
|
* 根据编号获取监控点详细信息
|
* @param cameraIndexCode
|
* @return
|
*/
|
private JSONObject getCameraDetail(Integer type,String cameraIndexCode) {
|
// 组装请求参数
|
JSONObject jsonBody = new JSONObject();
|
jsonBody.put("cameraIndexCode", cameraIndexCode);
|
String body = jsonBody.toJSONString();
|
String result = GetCameraUtils.common(type,camerasIndexCodeUrls, body);
|
// 数据处理
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
// 返回
|
return (JSONObject) jsonObject.get("data");
|
}
|
|
/**
|
* 查询海康摄像头列表
|
* @param regionId
|
* @param hk
|
* @param query
|
* @return
|
*/
|
private JSONObject getCameraStatisticList(Integer type,String regionId, HkVO hk,Query query) {
|
// 组装请求参数
|
JSONObject jsonBody = new JSONObject();
|
jsonBody.put("regionId", regionId);
|
jsonBody.put("pageNo", query.getCurrent());
|
jsonBody.put("pageSize", query.getSize());
|
if (null!=hk.getStatus()){
|
jsonBody.put("status",hk.getStatus());
|
}
|
String body = jsonBody.toJSONString();
|
String result = GetCameraUtils.common(type,onlineCameraGetUrls, body);
|
// 数据处理
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
// 返回数据
|
return (JSONObject) jsonObject.get("data");
|
}
|
|
/**
|
* 查询海康摄像头总数,在线,离线数
|
* @param regionId
|
* @param status
|
* @return
|
*/
|
private String getCameraStatisticCount(Integer type,String regionId,Integer status) {
|
// 组装请求参数
|
JSONObject jsonBody = new JSONObject();
|
jsonBody.put("regionId", regionId);
|
if (null!=status){
|
jsonBody.put("status",status);
|
}
|
String body = jsonBody.toJSONString();
|
String result = GetCameraUtils.common(type,onlineCameraGetUrls, body);
|
// 数据处理
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
JSONObject data = (JSONObject) jsonObject.get("data");
|
// 返回数据
|
return data.getString("total");
|
}
|
|
/**
|
* 获取根节点区域信息
|
* @param hk
|
*/
|
public String getRootRegionId(HkVO hk) {
|
// 组装请求参数
|
JSONObject jsonBody = new JSONObject();
|
String body = jsonBody.toJSONString();
|
String result = GetCameraUtils.common(null==hk.getType()?1:hk.getType(),regionsRootUrls, body);
|
// 数据处理
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
JSONObject data = (JSONObject) jsonObject.get("data");
|
String indexCode = data.get("indexCode").toString();
|
// 返回
|
return indexCode;
|
}
|
|
/**
|
* 查询区域列表v2
|
* @param hk
|
*/
|
public String regionNodesByParams(HkVO hk) {
|
String indexCode = "";
|
// 组装请求参数
|
JSONObject jsonBody = new JSONObject();
|
jsonBody.put("resourceType", "region");
|
jsonBody.put("regionName", hk.getRegionName());
|
jsonBody.put("pageNo", 1);
|
jsonBody.put("pageSize", 10);
|
String body = jsonBody.toJSONString();
|
|
String result = GetCameraUtils.common(null==hk.getType()?1:hk.getType(),regionNodesByParamsURLs, body);
|
// 数据处理
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
JSONObject data = jsonObject.getJSONObject("data");
|
JSONArray list = data.getJSONArray("list");
|
if (list.size()>0){
|
indexCode = list.getJSONObject(0).getString("indexCode");
|
}
|
// 返回
|
return indexCode;
|
}
|
}
|