package com.dy.pipIrrWechat.remote; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.dy.common.webUtil.BaseResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; /** * 远程视频服务调用类 * 用于调用pipIrr-web-remote模块的video接口 * * @author zuoxiao * @date 2025-01-21 * @description 微信模块调用远程控制模块的视频服务类 */ @Slf4j @Service @RequiredArgsConstructor public class RemoteService { @Value("${remote.service.base-url:http://localhost:8081/remote}") private String remoteServiceBaseUrl; private final OkHttpClient httpClient; /** * 调用远程视频监控接口 - 获取摄像机数据 * * @param queryParams 查询参数字符串 * @return 远程调用结果 */ public BaseResponse getVideoSome(String queryParams) { return callRemoteApi("/video/some?" + (queryParams != null ? queryParams : ""), null, "GET"); } /** * 通用远程API调用方法 * * @param endpoint 接口端点 * @param requestBody 请求体(GET请求时为null) * @param method HTTP方法 * @return 调用结果 */ private BaseResponse callRemoteApi(String endpoint, String requestBody, String method) { String url = remoteServiceBaseUrl + endpoint; Request request; try { Request.Builder requestBuilder = new Request.Builder() .url(url) .addHeader("Content-Type", "application/json") .addHeader("Accept", "application/json"); if ("POST".equalsIgnoreCase(method) && requestBody != null) { RequestBody body = RequestBody.create(requestBody, MediaType.get("application/json; charset=utf-8")); request = requestBuilder.post(body).build(); } else { request = requestBuilder.get().build(); } log.info("调用远程接口: {} {}", method, url); log.debug("请求体: {}", requestBody); try (Response response = httpClient.newCall(request).execute()) { if (!response.isSuccessful()) { log.error("远程调用失败: HTTP {}", response.code()); return BaseResponse.builder() .success(false) .msg("远程服务调用失败: HTTP " + response.code()) .build(); } String responseBody = response.body() != null ? response.body().string() : ""; log.debug("远程接口响应: {}", responseBody); // 解析远程服务返回的BaseResponse JSONObject jsonResponse = JSON.parseObject(responseBody); return BaseResponse.builder() .success(jsonResponse.getBooleanValue("success")) .msg(jsonResponse.getString("msg")) .content(jsonResponse.get("content")) .build(); } } catch (IOException e) { log.error("调用远程接口异常: {}", e.getMessage(), e); return BaseResponse.builder() .success(false) .msg("远程服务调用异常: " + e.getMessage()) .build(); } } }