package com.objecteye.handle.viid; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.objecteye.config.ApplicationConfigurationProperties; import com.objecteye.content.VIIDApi; import com.objecteye.content.enums.VIIDConfirmStatusTypeEnum; import com.objecteye.pojo.platform.DeviceRequestParams; import com.objecteye.pojo.viid.common.CommonDeviceIdRequestParams; import com.objecteye.pojo.viid.common.ResponseStatusResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; /** * @author: liuhaoyu * @date: 2023/6/28 */ @Slf4j @Component @RequiredArgsConstructor public class VIIDCommonHandle { private final ObjectMapper objectMapper; private final RestTemplate restTemplate; private final ApplicationConfigurationProperties applicationConfigurationProperties; private static final String CONTENT_TYPE = "application/*+JSON"; private static final String HTTP = "http://"; /** * 注册 * * @param deviceRequestParams 注册目标设备 * @return 注册结果 */ public boolean register(DeviceRequestParams deviceRequestParams) { return commonDeviceIdPost(deviceRequestParams, VIIDApi.REGISTER); } /** * 保活 * * @param deviceRequestParams 心跳目标设备 * @return 发送结果 */ public boolean keepalive(DeviceRequestParams deviceRequestParams) { return commonDeviceIdPost(deviceRequestParams, VIIDApi.KEEPALIVE); } /** * 注销 * * @param deviceRequestParams 注销目标设备 * @return 注销结果 */ public boolean unregister(DeviceRequestParams deviceRequestParams) { return commonDeviceIdPost(deviceRequestParams, VIIDApi.UNREGISTER); } private boolean commonDeviceIdPost(DeviceRequestParams deviceRequestParams, String uri) { return checkResponse(restTemplate.postForEntity(getAddress(deviceRequestParams) + uri, buildHttpEntity(buildCommonDeviceIdRequestParam(deviceRequestParams)), String.class)); } private CommonDeviceIdRequestParams buildCommonDeviceIdRequestParam(DeviceRequestParams deviceRequestParams) { CommonDeviceIdRequestParams commonDeviceIdRequestParams = new CommonDeviceIdRequestParams(); commonDeviceIdRequestParams.setDeviceId(applicationConfigurationProperties.getPlatformCode()); return commonDeviceIdRequestParams; } private String getAddress(DeviceRequestParams deviceRequestParams) { return HTTP + deviceRequestParams.getHost() + ":" + deviceRequestParams.getPort(); } private boolean checkResponse(ResponseEntity responseEntity) { String body = responseEntity.getBody(); if (StringUtils.hasText(body)) { try { ResponseStatusResponse responseStatusResponse = objectMapper.readValue(body, ResponseStatusResponse.class); if (null == responseStatusResponse || null == responseStatusResponse.getStatusCode() || !responseStatusResponse.getStatusCode().equals(VIIDConfirmStatusTypeEnum.OK.ordinal())) { if (log.isDebugEnabled()) { log.debug("register failed, {}", body); } return false; } return true; } catch (JsonProcessingException e) { if (log.isDebugEnabled()) { log.debug("convert failed, {}", body); } return false; } } return false; } private HttpEntity buildHttpEntity(T t) { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add(HttpHeaders.CONTENT_TYPE, CONTENT_TYPE); return new HttpEntity<>(t, httpHeaders); } }