zhongrj
2023-11-13 7eee9e04b31e1d8fdcbce8bc48bc839aa975441f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
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;
    }
}