mirror of
https://gitee.com/pan648540858/wvp-GB28181-pro.git
synced 2026-05-24 22:17:49 +08:00
1078-存储多媒体数据上传接口优化
This commit is contained in:
parent
6af9b8da1f
commit
dcc20d0d15
@ -15,19 +15,29 @@ import io.swagger.v3.oas.annotations.Operation;
|
|||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import org.apache.commons.io.monitor.FileAlterationListener;
|
||||||
|
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
|
||||||
|
import org.apache.commons.io.monitor.FileAlterationMonitor;
|
||||||
|
import org.apache.commons.io.monitor.FileAlterationObserver;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.ObjectUtils;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.context.request.async.DeferredResult;
|
import org.springframework.web.context.request.async.DeferredResult;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.io.File;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
@ConditionalOnProperty(value = "jt1078.enable", havingValue = "true")
|
@ConditionalOnProperty(value = "jt1078.enable", havingValue = "true")
|
||||||
@ -44,6 +54,10 @@ public class JT1078Controller {
|
|||||||
@Autowired
|
@Autowired
|
||||||
UserSetting userSetting;
|
UserSetting userSetting;
|
||||||
|
|
||||||
|
@Qualifier("taskExecutor")
|
||||||
|
@Autowired
|
||||||
|
private ThreadPoolTaskExecutor taskExecutor;
|
||||||
|
|
||||||
@Operation(summary = "1078-开始点播", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
@Operation(summary = "1078-开始点播", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||||
@Parameter(name = "deviceId", description = "设备国标编号", required = true)
|
@Parameter(name = "deviceId", description = "设备国标编号", required = true)
|
||||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||||
@ -781,15 +795,54 @@ public class JT1078Controller {
|
|||||||
@Operation(summary = "1078-存储多媒体数据上传命令", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
@Operation(summary = "1078-存储多媒体数据上传命令", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||||
@Parameter(name = "param", description = "存储多媒体数据参数", required = true)
|
@Parameter(name = "param", description = "存储多媒体数据参数", required = true)
|
||||||
@PostMapping("/media-data-upload")
|
@PostMapping("/media-data-upload")
|
||||||
public WVPResult<List<JTMediaEventInfo>> updateMediaData(@RequestBody QueryMediaDataParam param){
|
public DeferredResult<WVPResult<List<String>>> updateMediaData(@RequestBody QueryMediaDataParam param){
|
||||||
|
|
||||||
logger.info("[1078-存储多媒体数据上传命令] param: {}", param );
|
logger.info("[1078-存储多媒体数据上传命令] param: {}", param );
|
||||||
List<JTMediaEventInfo> ids = service.uploadMediaData(param.getDeviceId(), param.getQueryMediaDataCommand());
|
DeferredResult<WVPResult<List<String>>> deferredResult = new DeferredResult<>(30000L);
|
||||||
if (ids != null) {
|
List<String> resultList = new ArrayList<>();
|
||||||
return WVPResult.success(ids);
|
|
||||||
}else {
|
deferredResult.onTimeout(()->{
|
||||||
return WVPResult.fail(ErrorCode.ERROR100);
|
logger.info("[1078-存储多媒体数据上传命令超时] param: {}", param );
|
||||||
|
WVPResult<List<String>> fail = WVPResult.fail(ErrorCode.ERROR100);
|
||||||
|
fail.setMsg("超时");
|
||||||
|
fail.setData(resultList);
|
||||||
|
deferredResult.setResult(fail);
|
||||||
|
});
|
||||||
|
List<JTMediaDataInfo> ids = service.queryMediaData(param.getDeviceId(), param.getQueryMediaDataCommand());
|
||||||
|
if (ids.isEmpty()) {
|
||||||
|
deferredResult.setResult(WVPResult.fail(ErrorCode.ERROR100));
|
||||||
|
return deferredResult;
|
||||||
}
|
}
|
||||||
|
Map<String, JTMediaDataInfo> idMap= new HashMap<>();
|
||||||
|
for (JTMediaDataInfo mediaDataInfo : ids) {
|
||||||
|
idMap.put(mediaDataInfo.getId() + ".jpg", mediaDataInfo);
|
||||||
|
}
|
||||||
|
// 开启文件监听
|
||||||
|
FileAlterationObserver observer = new FileAlterationObserver(new File("mediaEvent"));
|
||||||
|
observer.addListener(new FileAlterationListenerAdaptor() {
|
||||||
|
@Override
|
||||||
|
public void onFileCreate(File file) {
|
||||||
|
if (idMap.containsKey(file.getName())) {
|
||||||
|
idMap.remove(file.getName());
|
||||||
|
resultList.add("mediaEvent" + File.separator + file.getName());
|
||||||
|
if (idMap.isEmpty()) {
|
||||||
|
deferredResult.setResult(WVPResult.success(resultList));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
FileAlterationMonitor monitor = new FileAlterationMonitor(5, observer);
|
||||||
|
try {
|
||||||
|
monitor.start();
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.info("[1078-存储多媒体数据上传命令监听文件失败] param: {}", param );
|
||||||
|
deferredResult.setResult(null);
|
||||||
|
return deferredResult;
|
||||||
|
}
|
||||||
|
taskExecutor.execute(()->{
|
||||||
|
service.uploadMediaData(param.getDeviceId(), param.getQueryMediaDataCommand());
|
||||||
|
});
|
||||||
|
return deferredResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -34,7 +34,6 @@ public class J0801 extends Re {
|
|||||||
@Override
|
@Override
|
||||||
protected Rs decode0(ByteBuf buf, Header header, Session session) {
|
protected Rs decode0(ByteBuf buf, Header header, Session session) {
|
||||||
mediaEventInfo = JTMediaEventInfo.decode(buf);
|
mediaEventInfo = JTMediaEventInfo.decode(buf);
|
||||||
System.out.println(mediaEventInfo.getId());
|
|
||||||
ByteBuf byteBuf = buf.readSlice(28);
|
ByteBuf byteBuf = buf.readSlice(28);
|
||||||
positionBaseInfo = JTPositionBaseInfo.decode(byteBuf);
|
positionBaseInfo = JTPositionBaseInfo.decode(byteBuf);
|
||||||
String fileName = "mediaEvent/" + mediaEventInfo.getId() + ".";
|
String fileName = "mediaEvent/" + mediaEventInfo.getId() + ".";
|
||||||
@ -72,7 +71,7 @@ public class J0801 extends Re {
|
|||||||
log.info("[JT-多媒体数据上传] 写入文件失败", e);
|
log.info("[JT-多媒体数据上传] 写入文件失败", e);
|
||||||
}
|
}
|
||||||
log.info("[JT-多媒体数据上传]: {}", mediaEventInfo);
|
log.info("[JT-多媒体数据上传]: {}", mediaEventInfo);
|
||||||
// SessionManager.INSTANCE.response(header.getTerminalId(), "0801", null, mediaEventInfo);
|
SessionManager.INSTANCE.response(header.getTerminalId(), "0801", null, mediaEventInfo);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -100,6 +100,6 @@ public interface Ijt1078Service {
|
|||||||
|
|
||||||
List<JTMediaDataInfo> queryMediaData(String deviceId, JTQueryMediaDataCommand queryMediaDataCommand);
|
List<JTMediaDataInfo> queryMediaData(String deviceId, JTQueryMediaDataCommand queryMediaDataCommand);
|
||||||
|
|
||||||
List<JTMediaEventInfo> uploadMediaData(String deviceId, JTQueryMediaDataCommand queryMediaDataCommand);
|
void uploadMediaData(String deviceId, JTQueryMediaDataCommand queryMediaDataCommand);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -721,9 +721,9 @@ public class jt1078ServiceImpl implements Ijt1078Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<JTMediaEventInfo> uploadMediaData(String deviceId, JTQueryMediaDataCommand queryMediaDataCommand) {
|
public void uploadMediaData(String deviceId, JTQueryMediaDataCommand queryMediaDataCommand) {
|
||||||
J8803 j8803 = new J8803();
|
J8803 j8803 = new J8803();
|
||||||
j8803.setCommand(queryMediaDataCommand);
|
j8803.setCommand(queryMediaDataCommand);
|
||||||
return (List<JTMediaEventInfo>)jt1078Template.uploadMediaData(deviceId, j8803, 300);
|
jt1078Template.uploadMediaData(deviceId, j8803, 10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user