puzhibing
3 小时以前 d41c7315b1850e58c93604001052bcfcb877e4cd
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
package com.ruoyi.dataInterchange.util.haikang;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSONArray;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.ruoyi.dataInterchange.util.haikang.model.*;
import lombok.extern.slf4j.Slf4j;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
 
/**
 * 事件订阅工具类
 * @author zhibing.pu
 * @Date 2025/5/20 16:17
 */
@Slf4j
public class Artemis {
    
    /**
     * STEP2:设置OpenAPI接口的上下文
     */
    private static final String ARTEMIS_PATH = "/artemis";
    /**
     * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
     *
     * ip:port : 平台门户/nginx的IP和端口(必须使用https协议,https端口默认为443)
     * appKey : 请填入appKey
     * appSecret : 请填入appSecret
     */
    private static ArtemisConfig artemisConfig = new ArtemisConfig("112.18.106.230:443", "27273246", "vjvZA7X4hHUc0SbONht9");
    
    //按事件类型取消订阅
    public static String eventUnSubscriptionByEventTypes(EventUnSubscriptionByEventTypesRequest eventUnSubscriptionByEventTypesRequest) throws Exception {
        String eventUnSubscriptionByEventTypesDataApi = ARTEMIS_PATH +"/api/eventService/v1/eventUnSubscriptionByEventTypes";
        Map<String,String> path = new HashMap<String,String>(2){
            {
                put("https://",eventUnSubscriptionByEventTypesDataApi);
            }
        };
        String body= JSON.toJSONString(eventUnSubscriptionByEventTypesRequest);
        String result =ArtemisHttpUtil.doPostStringArtemis(artemisConfig,path,body,null,null,"application/json");
        return result;
    }
 
    //查询事件订阅信息
    public static String eventSubscriptionView(EventSubscriptionViewRequest eventSubscriptionViewRequest) throws Exception {
        String eventSubscriptionViewDataApi = ARTEMIS_PATH +"/api/eventService/v1/eventSubscriptionView";
        Map<String,String> path = new HashMap<String,String>(2){
            {
                put("https://",eventSubscriptionViewDataApi);
            }
        };
        String body=JSON.toJSONString(eventSubscriptionViewRequest);
        String result =ArtemisHttpUtil.doPostStringArtemis(artemisConfig,path,body,null,null,"application/json");
        return result;
    }
 
    //按事件类型订阅事件
    public static String eventSubscriptionByEventTypes(EventSubscriptionByEventTypesRequest eventSubscriptionByEventTypesRequest) throws Exception {
        String eventSubscriptionByEventTypesDataApi = ARTEMIS_PATH +"/api/eventService/v1/eventSubscriptionByEventTypes";
        Map<String,String> path = new HashMap<String,String>(2){
            {
                put("https://",eventSubscriptionByEventTypesDataApi);
            }
        };
        String body=JSON.toJSONString(eventSubscriptionByEventTypesRequest);
        String result = ArtemisHttpUtil.doPostStringArtemis(artemisConfig,path,body,null,null,"application/json");
        return result;
    }
    
    public static void main(String[] args) {
        try {
            FindVehicleByLicensePlateRequest findVehicleByLicensePlateRequest = new FindVehicleByLicensePlateRequest();
            findVehicleByLicensePlateRequest.setVehicleLicensePlate("川J52303");
            String vehicleByLicensePlate = Artemis.findVehicleByLicensePlate(findVehicleByLicensePlateRequest);
            com.alibaba.fastjson2.JSONObject jsonObject = com.alibaba.fastjson2.JSONObject.parseObject(vehicleByLicensePlate);
            String code = jsonObject.getString("code");
            if(!"0".equals(code)){
                return ;
            }
            com.alibaba.fastjson2.JSONObject data = jsonObject.getJSONObject("data");
            //车辆编号
            String indexCode = data.getString("indexCode");
            //主设备编号
            String primaryDeviceIndexCode = data.getString("primaryDeviceIndexCode");
            //根据车辆编号和设备编号获取监控点信息列表
            FindCameraPageRequest findCameraPageRequest = new FindCameraPageRequest();
            findCameraPageRequest.setPageNo(1);
            findCameraPageRequest.setPageSize(1000);
            ExactCondition1 exactCondition = new ExactCondition1();
            exactCondition.setDeviceIndexCodes(new ArrayList<String>(){{
                add(primaryDeviceIndexCode);
            }});
            exactCondition.setVehicleIndexCodes(new ArrayList<String>(){{
                add(indexCode);
            }});
            findCameraPageRequest.setExactCondition(exactCondition);
            String cameraPage = Artemis.findCameraPage(findCameraPageRequest);
            jsonObject = com.alibaba.fastjson2.JSONObject.parseObject(cameraPage);
            code = jsonObject.getString("code");
            if(!"0".equals(code)){
                return;
            }
            data = jsonObject.getJSONObject("data");
            JSONArray list = data.getJSONArray("list");
            //监控点编号
            String indexCode1 = "";
            for (int i = 0; i < list.size(); i++) {
                com.alibaba.fastjson2.JSONObject jsonObject1 = list.getJSONObject(i);
                String cameraName = jsonObject1.getString("cameraName");
                if("驾驶位".equals(cameraName)){
                    indexCode1 = jsonObject1.getString("indexCode");
                }
            }
            
            //根据监控点编号获取监控预览url
            PreviewURLsRequest previewURLsRequest = new PreviewURLsRequest();
            previewURLsRequest.setCameraIndexCode(indexCode1);
            String s = Artemis.previewURLs(previewURLsRequest);
            jsonObject = com.alibaba.fastjson2.JSONObject.parseObject(s);
            code = jsonObject.getString("code");
            if(!"0".equals(code)){
                return ;
            }
            data = jsonObject.getJSONObject("data");
            String url = data.getString("url");
            System.out.println(url);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    //根据车牌号码获取车辆信息(含设备)
    public static String findVehicleByLicensePlate(FindVehicleByLicensePlateRequest findVehicleByLicensePlateRequest)throws Exception{
        String findVehicleByLicensePlateDataApi = ARTEMIS_PATH +"/api/rtsm/v1/resource/findVehicleByLicensePlate";
        Map<String,String> path = new HashMap<String,String>(2){
            {
                put("https://",findVehicleByLicensePlateDataApi);
            }
        };
        String body=JSON.toJSONString(findVehicleByLicensePlateRequest);
        String result =ArtemisHttpUtil.doPostStringArtemis(artemisConfig,path,body,null,null,"application/json");
        return result;
    }
 
    //根据车辆编号与设备编号获取监控点信息列表
    public static String findCameraPage(FindCameraPageRequest findCameraPageRequest)throws Exception{
        String findCameraPageDataApi = ARTEMIS_PATH +"/api/rtsm/v1/vehicle/findCameraPage";
        Map<String,String> path = new HashMap<String,String>(2){
            {
                put("https://",findCameraPageDataApi);
            }
        };
        String body=JSON.toJSONString(findCameraPageRequest);
        String result =ArtemisHttpUtil.doPostStringArtemis(artemisConfig,path,body,null,null,"application/json");
        return result;
    }
    
    //获取监控点预览取流URL
    public static String previewURLs(PreviewURLsRequest previewURLsRequest)throws Exception{
        String previewURLsDataApi = ARTEMIS_PATH +"/api/video/v1/cameras/previewURLs";
        Map<String,String> path = new HashMap<String,String>(2){
            {
                put("https://",previewURLsDataApi);
            }
        };
        String body=JSON.toJSONString(previewURLsRequest);
        String result =ArtemisHttpUtil.doPostStringArtemis(artemisConfig,path,body,null,null,"application/json");
        return result;
    }
    
    //分页查询车辆信息
    public static String findVehiclePage(FindVehiclePageRequest findVehiclePageRequest)throws Exception{
        String findVehiclePageDataApi = ARTEMIS_PATH +"/api/rtsm/v1/resource/findVehiclePage";
        Map<String,String> path = new HashMap<String,String>(2){
            {
                put("https://",findVehiclePageDataApi);
            }
        };
        String body=JSON.toJSONString(findVehiclePageRequest);
        String result =ArtemisHttpUtil.doPostStringArtemis(artemisConfig,path,body,null,null,"application/json");
        return result;
    }
    
    public static void run() {
        try {
            //先查询是否订阅事件
            GetTopicInfoRequest getTopicInfoRequest = new GetTopicInfoRequest();
            getTopicInfoRequest.setEventTypes(new ArrayList<Long>(){{
                add(5201154049L);
                add(5201301505L);
            }});
            String eventSubscriptionView = Artemis.getTopicInfo(getTopicInfoRequest);
            JSONObject jsonObject = JSON.parseObject(eventSubscriptionView);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    
    //按事件类型获取事件订阅信息
    public static String getTopicInfo(GetTopicInfoRequest getTopicInfoRequest)throws Exception {
        String getTopicInfoDataApi = ARTEMIS_PATH +"/api/common/v1/event/getTopicInfo";
        Map<String,String> path = new HashMap<String,String>(2){
            {
                put("https://",getTopicInfoDataApi);
            }
        };
        String body=JSON.toJSONString(getTopicInfoRequest);
        String result =ArtemisHttpUtil.doPostStringArtemis(artemisConfig,path,body,null,null,"application/json");
        return result;
    }
}