调整 feign 日期格式问题
This commit is contained in:
parent
6a25f48852
commit
9d1da22aa0
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user