调整 feign 日期格式问题

This commit is contained in:
shikong 2023-09-09 22:13:38 +08:00
parent 6a25f48852
commit 9d1da22aa0
7 changed files with 65 additions and 33 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<TracksDTO> tracks;
private String ts;

View File

@ -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)

View File

@ -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;
}

View File

@ -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<TracksDTO> tracks;
private String ts;

View File

@ -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 <V> void onRetry(Attempt<V> 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 {
});
}
/**
* 执行 视频查询
* <p>返回一个 JsonResponse 类型的执行结果 <p>
* <p>如果返回值为 null code 不为 0 200 则视为执行失败</p>
* <p>如果排除异常 也视为执行失败</p>
*
* @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<WvpLoginResp> 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<GetDeviceChannelsResp> deviceChannels = wvpProxyClient.getDeviceChannels(accessToken, deviceId, GetDeviceChannelsReq.builder().build());
JsonResponse<GetDeviceChannelsResp> 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<DeviceChannel> 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<QueryRecordResp> 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<QueryRecordResp.RecordListDTO> 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;
}
}