guoshilong
2023-04-20 e8ce7b13646fb144a6d2d99c564ef899531d892c
Merge remote-tracking branch 'origin/jtdev' into jtdev
4 files modified
1 files renamed
3 files added
333 ■■■■■ changed files
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/TreeNode.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java 20 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java 30 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/Hk.java 42 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkService.java 30 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkServiceImpl.java 194 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkVO.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/node/TreeNode.java
@@ -32,6 +32,11 @@
    private String name;
    /**
     * 层级
     */
    private String level;
    /**
     * 子孙节点
     */
    private List<TreeNode> children = new ArrayList<>();
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java
@@ -75,4 +75,24 @@
     */
    public static final String manualCaptureUrls = "/api/video/v1/manualCapture";
    /**
     * 查询区域根节点数据url
     */
    public static final String regionsRootUrls = "/api/resource/v1/regions/root";
    /**
     * 获取摄像头在线信息
     */
    public static final String onlineCameraGetUrls = "/api/nms/v1/online/camera/get";
    /**
     * 根据编号获取监控点详细信息
     */
    public static final String camerasIndexCodeUrls = "/api/resource/v1/cameras/indexCode";
    /**
     * 根据编号获取区域详细信息
     */
    public static final String regionInfoUrls = "/api/resource/v1/region/regionCatalog/regionInfo";
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java
@@ -2,6 +2,7 @@
import cn.gistack.sm.hk.constant.HkConstant;
import cn.gistack.sm.hk.constant.ProtocolConstant;
import cn.gistack.sm.hk.service.HkService;
import cn.gistack.sm.hk.vo.HkVO;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
@@ -12,10 +13,9 @@
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
import static cn.gistack.sm.hk.util.GetCameraPreviewURL.*;
import static cn.gistack.sm.hk.util.GetCameraUtils.*;
/**
 * @author zhongrj
@@ -28,6 +28,8 @@
@RequestMapping("/hk/hk")
@AllArgsConstructor
public class HkController {
    private final HkService hkService;
    /**
     * 分页列表查询
@@ -108,4 +110,28 @@
        return R.data(result);
    }
    /**
     * 懒加载树
     * @param hk 查询参数
     * @return
     */
    @ApiOperation(value = "海康设备-懒加载树", notes = "海康设备-懒加载树")
    @GetMapping(value = "/lazy-tree")
    public R lazyTree(HkVO hk) {
        // 查询海康设备懒加载树并返回
        return R.data(hkService.lazyTree(hk));
    }
    /**
     * 查询监控统计数量
     * @param hk 查询参数
     * @return
     */
    @ApiOperation(value = "海康设备-查询监控统计数量", notes = "海康设备-查询监控统计数量")
    @GetMapping(value = "/getHkStatisticData")
    public R getHkStatisticData(HkVO hk,Query query) {
        // 查询海康设备懒加载树并返回
        return R.data(hkService.getHkStatisticData(hk,query));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/Hk.java
New file
@@ -0,0 +1,42 @@
package cn.gistack.sm.hk.entity;
import lombok.Data;
/**
 * 海康实体类
 * @author zhongrj
 * @date 2023-04-19
 */
@Data
public class Hk {
    /**
     * 摄像头名称
     */
    private String cameraName;
    /**
     * 摄像头播放编号
     */
    private String cameraIndexCode;
    /**
     * 摄像头预览url
     */
    private String previewUrl;
    /**
     * 摄像头地址信息
     */
    private String address;
    /**
     * 1:在线 0:离线  -1:未检测
     */
    private Integer status;
    /**
     * 水库名称
     */
    private String waterName;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkService.java
New file
@@ -0,0 +1,30 @@
package cn.gistack.sm.hk.service;
import cn.gistack.common.node.TreeNode;
import cn.gistack.sm.hk.vo.HkVO;
import org.springblade.core.mp.support.Query;
import java.util.List;
import java.util.Map;
/**
 * 海康服务接口层
 * @author zhongrj
 * @date 2023-04-18
 */
public interface HkService {
    /**
     * 懒加载树
     * @param hk 查询参数
     * @return
     */
    List<TreeNode> lazyTree(HkVO hk);
    /**
     * 查询监控统计数量
     * @param hk 查询参数
     * @return
     */
    Map<String, Object> getHkStatisticData(HkVO hk, Query query);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkServiceImpl.java
New file
@@ -0,0 +1,194 @@
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(rootRegionId,null));
        hashMap.put("onlineTotal",getCameraStatisticCount(rootRegionId,1));
        hashMap.put("offlineTotal",getCameraStatisticCount(rootRegionId,0));
        // 查询摄像头集合数据
        hashMap.put("list",getCameraStatisticList(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(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(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(String cameraIndexCode) {
        // 组装请求参数
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("cameraIndexCode", cameraIndexCode);
        String body = jsonBody.toJSONString();
        String result = GetCameraUtils.common(camerasIndexCodeUrls, body);
        // 数据处理
        JSONObject jsonObject = JSONObject.parseObject(result);
        // 返回
        return (JSONObject) jsonObject.get("data");
    }
    /**
     * 查询海康摄像头列表
     * @param regionId
     * @param hk
     * @param query
     * @return
     */
    private JSONObject getCameraStatisticList(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(onlineCameraGetUrls, body);
        // 数据处理
        JSONObject jsonObject = JSONObject.parseObject(result);
        // 返回数据
        return (JSONObject) jsonObject.get("data");
    }
    /**
     * 查询海康摄像头总数,在线,离线数
     * @param regionId
     * @param status
     * @return
     */
    private String getCameraStatisticCount(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(onlineCameraGetUrls, body);
        // 数据处理
        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONObject data = (JSONObject) jsonObject.get("data");
        // 返回数据
        return data.getString("total");
    }
    /**
     * 获取根节点区域信息
     * @param hk
     */
    private String getRootRegionId(HkVO hk) {
        // 组装请求参数
        JSONObject jsonBody = new JSONObject();
        String body = jsonBody.toJSONString();
        String result = GetCameraUtils.common(regionsRootUrls, body);
        // 数据处理
        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONObject data = (JSONObject) jsonObject.get("data");
        String indexCode = data.get("indexCode").toString();
        // 返回
        return indexCode;
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java
File was renamed from skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraPreviewURL.java
@@ -15,7 +15,7 @@
import static cn.gistack.sm.hk.constant.HkConstant.ARTEMIS_PATH;
public class GetCameraPreviewURL {
public class GetCameraUtils {
    /**
     * 公共方法
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkVO.java
@@ -105,5 +105,15 @@
     */
    private Integer transmode;
    /**
     * 层级
     */
    private Integer level;
    /**
     * 摄像头在线离线状态 1-在线,0-离线
     */
    private Integer status;
}