SubscribeHandle.java
5.51 KB
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
package com.objecteye.handle.viid;
import com.objecteye.config.Gat1400Properties;
import com.objecteye.content.VIIDApi;
import com.objecteye.content.ViidCollectorRedisKey;
import com.objecteye.pojo.viid.subscribe.Subscribe;
import com.objecteye.pojo.viid.subscribe.SubscribeRequestObject;
import com.objecteye.utils.JSONUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
/**
* @author: liuhaoyu
* @date: 2023/7/5
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class SubscribeHandle {
private final StringRedisTemplate stringRedisTemplate;
private final Gat1400Properties gat1400Properties;
private final RestTemplate restTemplate;
@Value("${receiver}")
private String receiver;
public boolean subscribe(String deviceId) {
// 订阅统一标识码 = 公安机关机构代码 + 子类型编码(03-订阅)+ 时间编码(YYYYMMDDhhmmss) + 流水序号(00001)
String time = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS").format(LocalDateTime.now());
String toSecond = time.substring(0, 14);
String toMill = time.substring(14);
String subscribeId = "123456789012" + "03" + toSecond + StringUtils.leftPad(toMill, 5, "0");
String title = "订阅人脸识别、车牌识别消息";
// 订阅类别: 12-人脸信息 13-车辆信息
String subscribeDetail = "12,13";
String beginTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
String endTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now().plusMinutes(10L));
Integer operateType = 0;
SubscribeRequestObject subscribeRequestObject = new SubscribeRequestObject();
SubscribeRequestObject.SubscribeListObject subscribeListObject = new SubscribeRequestObject.SubscribeListObject();
subscribeRequestObject.setSubscribeListObject(subscribeListObject);
List<Subscribe> subscribeList = new ArrayList<>();
Subscribe subscribe = new Subscribe();
subscribe.setSubscribeId(subscribeId);
subscribe.setTitle(title);
subscribe.setSubscribeDetail(subscribeDetail);
subscribe.setResourceUri(deviceId);
subscribe.setBeginTime(beginTime);
subscribe.setEndTime(endTime);
subscribe.setReceiveAddr(receiver);
subscribe.setOperateType(operateType);
subscribeList.add(subscribe);
subscribeListObject.setSubscribeObject(subscribeList);
HttpEntity<String> httpEntity = new HttpEntity<>(JSONUtils.toJsonString(subscribeRequestObject),
buildHttpHeaders(deviceId));
if (log.isDebugEnabled()) {
log.debug("上传人脸消息体:{}", JSONUtils.toJsonString(subscribeRequestObject));
}
// 请求执行
ResponseEntity<String> responseEntity = restTemplate.exchange(getUrl(VIIDApi.SUBSCRIBES), HttpMethod.POST,
httpEntity, String.class);
if (org.apache.http.HttpStatus.SC_OK == responseEntity.getStatusCode().value()) {
stringRedisTemplate.opsForHash().put(ViidCollectorRedisKey.DEVICE_CACHE, deviceId, subscribeId);
return true;
}
return false;
}
public boolean unsubscribe(String deviceId) {
Object subscribeIdObj = stringRedisTemplate.opsForHash().get(ViidCollectorRedisKey.DEVICE_CACHE, deviceId);
if (null == subscribeIdObj) {
return false;
}
SubscribeRequestObject subscribeRequestObject = new SubscribeRequestObject();
SubscribeRequestObject.SubscribeListObject subscribeListObject = new SubscribeRequestObject.SubscribeListObject();
subscribeRequestObject.setSubscribeListObject(subscribeListObject);
List<Subscribe> subscribeList = new ArrayList<>();
Subscribe subscribe = new Subscribe();
subscribe.setSubscribeId(subscribeIdObj.toString());
subscribe.setOperateType(1);
subscribeList.add(subscribe);
subscribeListObject.setSubscribeObject(subscribeList);
HttpEntity<String> httpEntity = new HttpEntity<>(JSONUtils.toJsonString(subscribeRequestObject),
buildHttpHeaders(deviceId));
ResponseEntity<String> responseEntity = restTemplate.exchange(getUrl(VIIDApi.SUBSCRIBES),
HttpMethod.POST, httpEntity, String.class);
if (org.apache.http.HttpStatus.SC_OK == responseEntity.getStatusCode().value()) {
stringRedisTemplate.opsForHash().delete(ViidCollectorRedisKey.DEVICE_CACHE, deviceId);
return true;
}
return false;
}
private String getUrl(String uri) {
return "http://" + gat1400Properties.getServerAddress() + ":" + gat1400Properties.getPort() + uri;
}
private HttpHeaders buildHttpHeaders(String deviceId) {
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json;charset=utf-8");
headers.set("User-Identify", deviceId);
return headers;
}
}