Blame view

src/main/java/com/objecteye/handle/viid/SubscribeHandle.java 5.51 KB
020ea372   Hugiee.Liu   fea: 测试接口添加
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;
      }
  }