1078-存储多媒体数据上传接口优化

This commit is contained in:
648540858 2024-05-19 17:08:31 +08:00
parent 6af9b8da1f
commit dcc20d0d15
4 changed files with 63 additions and 11 deletions

View File

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

View File

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

View File

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

View File

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