From 9d1da22aa0f77386363e7c451b9afd9078345192 Mon Sep 17 00:00:00 2001 From: shikong <919411476@qq.com> Date: Sat, 9 Sep 2023 22:13:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=20feign=20=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wvp/dto/common/GeneralTimeReq.java | 6 +- .../wvp/dto/download/DownloadStartReq.java | 6 +- .../wvp/dto/download/DownloadStartResp.java | 5 +- .../dto/media/proxy/GetDownloadTaskResp.java | 6 +- .../wvp/dto/record/QueryRecordReq.java | 12 ++-- .../gb28181/wvp/dto/stream/StreamContent.java | 5 +- .../gb28181/wvp/service/wvp/WvpService.java | 58 +++++++++++++++---- 7 files changed, 65 insertions(+), 33 deletions(-) diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/common/GeneralTimeReq.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/common/GeneralTimeReq.java index 9385c82..027cb27 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/common/GeneralTimeReq.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/common/GeneralTimeReq.java @@ -7,17 +7,15 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import java.util.Date; - @NoArgsConstructor @AllArgsConstructor @Data public class GeneralTimeReq { @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date startTime; + private String startTime; @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date endTime; + private String endTime; } diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartReq.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartReq.java index 579c697..4088016 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartReq.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartReq.java @@ -6,18 +6,16 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import java.util.Date; - @NoArgsConstructor @Data public class DownloadStartReq { @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date startTime; + private String startTime; @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date endTime; + private String endTime; private int downloadSpeed = 4; } diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartResp.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartResp.java index cae463b..35033fc 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartResp.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/download/DownloadStartResp.java @@ -6,7 +6,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import java.util.Date; import java.util.List; @NoArgsConstructor @@ -16,7 +15,7 @@ public class DownloadStartResp { @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date endTime; + private String endTime; private String flv; private String fmp4; @@ -34,7 +33,7 @@ public class DownloadStartResp { @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date startTime; + private String startTime; private String stream; private List tracks; private String ts; diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskResp.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskResp.java index 635ed60..dc6d508 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskResp.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/media/proxy/GetDownloadTaskResp.java @@ -6,8 +6,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import java.util.Date; - @NoArgsConstructor @Data public class GetDownloadTaskResp { @@ -16,11 +14,11 @@ public class GetDownloadTaskResp { private String stream; @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date startTime; + private String startTime; @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date endTime; + private String endTime; @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordReq.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordReq.java index eb57e0f..8572c96 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordReq.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/record/QueryRecordReq.java @@ -2,16 +2,20 @@ package cn.skcks.docking.gb28181.wvp.dto.record; import cn.hutool.core.date.DatePattern; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import java.util.Date; - +@AllArgsConstructor +@NoArgsConstructor +@Data public class QueryRecordReq { @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date startTime; + private String startTime; @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date endTime; + private String endTime; } diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/stream/StreamContent.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/stream/StreamContent.java index 9f0a142..7f60084 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/stream/StreamContent.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/dto/stream/StreamContent.java @@ -6,7 +6,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import java.util.Date; import java.util.List; @NoArgsConstructor @@ -15,7 +14,7 @@ public class StreamContent { private String app; @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date endTime; + private String endTime; private String flv; private String fmp4; private String hls; @@ -32,7 +31,7 @@ public class StreamContent { @DateTimeFormat(pattern= DatePattern.NORM_DATETIME_PATTERN) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private Date startTime; + private String startTime; private String stream; private List tracks; private String ts; diff --git a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/wvp/WvpService.java b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/wvp/WvpService.java index 1d31b8c..00e51d3 100644 --- a/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/wvp/WvpService.java +++ b/gb28181-wvp-proxy-service/src/main/java/cn/skcks/docking/gb28181/wvp/service/wvp/WvpService.java @@ -1,5 +1,6 @@ package cn.skcks.docking.gb28181.wvp.service.wvp; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.crypto.digest.MD5; import cn.skcks.docking.gb28181.common.json.JsonException; @@ -11,6 +12,8 @@ import cn.skcks.docking.gb28181.wvp.dto.device.GetDeviceChannelsReq; import cn.skcks.docking.gb28181.wvp.dto.device.GetDeviceChannelsResp; import cn.skcks.docking.gb28181.wvp.dto.login.WvpLoginReq; import cn.skcks.docking.gb28181.wvp.dto.login.WvpLoginResp; +import cn.skcks.docking.gb28181.wvp.dto.record.QueryRecordReq; +import cn.skcks.docking.gb28181.wvp.dto.record.QueryRecordResp; import cn.skcks.docking.gb28181.wvp.orm.mybatis.dynamic.model.WvpProxyDevice; import cn.skcks.docking.gb28181.wvp.proxy.WvpProxyClient; import cn.skcks.docking.gb28181.wvp.service.device.DeviceService; @@ -22,8 +25,10 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ArrayUtils; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; @@ -53,12 +58,12 @@ public class WvpService { public final static int DEFAULT_RETRY_WAIT_TIME = 3; @SuppressWarnings("UnstableApiUsage") - private static RetryListener defaultRetryListener(){ + private static RetryListener defaultRetryListener() { return new RetryListener() { @Override public void onRetry(Attempt attempt) { - log.info("第 {} 次 执行结束",attempt.getAttemptNumber()); - if(attempt.hasException()){ + log.info("第 {} 次 执行结束", attempt.getAttemptNumber()); + if (attempt.hasException()) { log.info("异常 {}", attempt.getExceptionCause().getMessage()); } } @@ -120,7 +125,7 @@ public class WvpService { asyncContext.start(() -> { HttpServletResponse asyncResponse = (HttpServletResponse) asyncContext.getResponse(); try { - genericRetryer.call(() -> video(asyncResponse, deviceCode,deviceId,channelId,startTime,endTime)); + genericRetryer.call(() -> video(asyncResponse, deviceCode, deviceId, channelId, startTime, endTime)); } catch (RetryException e) { String reason = MessageFormat.format("查询失败, 已重试 {0} 次", e.getNumberOfFailedAttempts()); log.error(reason); @@ -133,32 +138,63 @@ public class WvpService { }); } + /** + * 执行 视频查询 + *

返回一个 JsonResponse 类型的执行结果

+ *

如果返回值为 null 或 code 不为 0 或 200 则视为执行失败

+ *

如果排除异常 也视为执行失败

+ * + * @param response 异步响应 + * @param deviceCode 设备编码 21位 + * @param deviceId 国标设备编码 20位 + * @param channelId 通道id + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return JsonResponse 类型的执行结果 如果 为 null 或 code 不为 0 或 200 则视为执行失败 + */ @SneakyThrows - public JsonResponse video(HttpServletResponse response, String deviceCode, String deviceId,String channelId ,Date startTime, Date endTime) { + public JsonResponse video(HttpServletResponse response, String deviceCode, String deviceId, String channelId, Date startTime, Date endTime) { String passwdMd5 = MD5.create().digestHex(wvpProxyConfig.getPasswd()); WvpLoginReq loginReq = WvpLoginReq.builder() .username(wvpProxyConfig.getUser()) .password(passwdMd5) .build(); JsonResponse login = wvpProxyClient.login(loginReq); - String accessToken = login.getData().getAccessToken(); - log.info("wvp 登录成功 accessToken => {}", accessToken); + String token = login.getData().getAccessToken(); + log.info("wvp 登录成功 token => {}", token); log.debug("通过 wvp 查询设备 国标id(gbDeviceId => {}) 通道信息", deviceId); - JsonResponse deviceChannels = wvpProxyClient.getDeviceChannels(accessToken, deviceId, GetDeviceChannelsReq.builder().build()); + JsonResponse deviceChannels = wvpProxyClient.getDeviceChannels(token, deviceId, GetDeviceChannelsReq.builder().build()); if (deviceChannels.getData() == null || deviceChannels.getData().getTotal() == 0) { - writeErrorToResponse(response, JsonResponse.error(MessageFormat.format("未能获取 设备:{0}, 国标id: {1}, 的通道信息", deviceCode, deviceId))); + writeErrorToResponse(response, JsonResponse.error(MessageFormat.format("未能获取 设备: {0}, 国标id: {1}, 的通道信息", deviceCode, deviceId))); return JsonResponse.success(null); } List list = deviceChannels.getData().getList(); log.info("通过 wvp 获取到 查询设备 国标id(gbDeviceId => {}), 通道数量 => {}", deviceId, list.size()); DeviceChannel deviceChannel = list.parallelStream().filter(item -> item.getChannelId().equalsIgnoreCase(channelId)).findFirst().orElse(null); if (deviceChannel == null) { - writeErrorToResponse(response, JsonResponse.error(MessageFormat.format("未查询到 设备:{0}, 国标id: {1}, 通道: {2} 信息", deviceCode, deviceId, channelId))); + writeErrorToResponse(response, JsonResponse.error(MessageFormat.format("未查询到 设备: {0}, 国标id: {1}, 通道: {2} 信息", deviceCode, deviceId, channelId))); return JsonResponse.success(null); } + JsonResponse queryRecord = wvpProxyClient.queryRecord(token, deviceId, channelId, new QueryRecordReq(DateUtil.formatDateTime(startTime), DateUtil.formatDateTime(endTime))); + QueryRecordResp queryRecordData = queryRecord.getData(); + if (queryRecordData == null) { + String reason = MessageFormat.format("通过 wvp 查询历史录像 失败 设备: {0}, 国标id: {1}, 通道: {2}", deviceCode, deviceId, channelId); + log.error(reason); + log.error("查询历史录像 返回结果 => {}", queryRecord); + writeErrorToResponse(response, JsonResponse.error(reason)); + return null; + } + List recordList = queryRecordData.getRecordList(); + if (CollectionUtils.isEmpty(recordList)) { + String reason = MessageFormat.format("通过 wvp 查询历史录像 失败 设备: {0}, 国标id: {1}, 通道: {2}, 查询时间范围 开始时间: {3}, 结束时间: {4}, 录像数量为 0", deviceCode, deviceId, channelId, startTime, endTime); + writeErrorToResponse(response, JsonResponse.error(reason)); + return null; + } + log.info("通过 wvp 查询到 {} 条历史录像 设备: {}, 国标id: {}, 通道: {}, 开始时间: {}, 结束时间: {}", recordList.size(), deviceCode, deviceId, channelId, startTime, endTime); + downloadService.download(response, "http://192.168.1.241:18979/download/recordTemp/0490d767d94ce20aedce57c862b6bfe9/rtp/59777645.mp4"); - return login; + return queryRecord; } }