[1078] 增加单条存储多媒体数据上传

This commit is contained in:
lin
2025-07-11 22:07:32 +08:00
parent cefc87ad47
commit 9d47fe30f5
3 changed files with 103 additions and 62 deletions

View File

@@ -888,7 +888,7 @@ public class JT1078Controller {
@Operation(summary = "JT-存储多媒体数据检索", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "param", description = "存储多媒体数据参数", required = true)
@PostMapping("/media-data-info")
@PostMapping("/media/list")
public WVPResult<List<JTMediaDataInfo>> queryMediaData(@RequestBody QueryMediaDataParam param){
log.info("[JT-存储多媒体数据检索] param: {}", param );
@@ -900,72 +900,89 @@ public class JT1078Controller {
}
}
@Operation(summary = "JT-存储多媒体数据上传命令", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "param", description = "存储多媒体数据参数", required = true)
@PostMapping("/media-data-upload")
public DeferredResult<WVPResult<List<String>>> updateMediaData(@RequestBody QueryMediaDataParam param){
@Operation(summary = "JT-单条存储多媒体数据上传", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "phoneNumber", description = "设备编号", required = true)
@Parameter(name = "mediaId", description = "多媒体ID", required = true)
@GetMapping("/media/upload/one")
public void uploadOneMedia(HttpServletResponse response, String phoneNumber, Long mediaId){
log.info("[JT-存储多媒体数据上传命令] param: {}", param );
DeferredResult<WVPResult<List<String>>> deferredResult = new DeferredResult<>(30000L);
List<String> resultList = new ArrayList<>();
deferredResult.onTimeout(()->{
log.info("[JT-存储多媒体数据上传命令超时] param: {}", param );
WVPResult<List<String>> fail = WVPResult.fail(ErrorCode.ERROR100);
fail.setMsg("超时");
fail.setData(resultList);
deferredResult.setResult(fail);
});
List<JTMediaDataInfo> ids;
if (param.getMediaId() != null) {
ids = new ArrayList<>();
JTMediaDataInfo mediaDataInfo = new JTMediaDataInfo();
mediaDataInfo.setId(param.getMediaId());
ids.add(mediaDataInfo);
}else {
ids = service.queryMediaData(param.getPhoneNumber(), 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);
log.info("[JT-单条存储多媒体数据上传] 设备编号: {}, 多媒体ID: {}", phoneNumber, mediaId );
Assert.notNull(mediaId, "缺少通道编号");
try {
monitor.start();
} catch (Exception e) {
log.info("[JT-存储多媒体数据上传命令监听文件失败] param: {}", param );
deferredResult.setResult(null);
return deferredResult;
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
service.uploadOneMedia(phoneNumber, mediaId, outputStream);
}catch (Exception e) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), e.getMessage());
}
taskExecutor.execute(()->{
if (param.getMediaId() != null) {
service.uploadMediaDataForSingle(param.getPhoneNumber(), param.getMediaId(), param.getDelete());
}else {
service.uploadMediaData(param.getPhoneNumber(), param.getQueryMediaDataCommand());
}
});
return deferredResult;
}
// @Operation(summary = "JT-存储多媒体数据上传命令", security = @SecurityRequirement(name = JwtUtils.HEADER))
// @Parameter(name = "param", description = "存储多媒体数据参数", required = true)
// @PostMapping("/media-data-upload")
// public DeferredResult<WVPResult<List<String>>> updateMediaData(@RequestBody QueryMediaDataParam param){
//
// log.info("[JT-存储多媒体数据上传命令] param: {}", param );
// DeferredResult<WVPResult<List<String>>> deferredResult = new DeferredResult<>(30000L);
// List<String> resultList = new ArrayList<>();
//
// deferredResult.onTimeout(()->{
// log.info("[JT-存储多媒体数据上传命令超时] param: {}", param );
// WVPResult<List<String>> fail = WVPResult.fail(ErrorCode.ERROR100);
// fail.setMsg("超时");
// fail.setData(resultList);
// deferredResult.setResult(fail);
// });
// List<JTMediaDataInfo> ids;
// if (param.getMediaId() != null) {
// ids = new ArrayList<>();
// JTMediaDataInfo mediaDataInfo = new JTMediaDataInfo();
// mediaDataInfo.setId(param.getMediaId());
// ids.add(mediaDataInfo);
// }else {
// ids = service.queryMediaData(param.getPhoneNumber(), 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) {
// log.info("[JT-存储多媒体数据上传命令监听文件失败] param: {}", param );
// deferredResult.setResult(null);
// return deferredResult;
// }
// taskExecutor.execute(()->{
// if (param.getMediaId() != null) {
// service.uploadMediaDataForSingle(param.getPhoneNumber(), param.getMediaId(), param.getDelete());
// }else {
// service.uploadMediaData(param.getPhoneNumber(), param.getQueryMediaDataCommand());
// }
//
// });
// return deferredResult;
// }
@Operation(summary = "JT-开始录音", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "phoneNumber", description = "设备手机号", required = true)
@Parameter(name = "time", description = "录音时间,单位为秒(s) ,0 表示一直录音", required = false)

View File

@@ -125,4 +125,7 @@ public interface Ijt1078Service {
void snap(String phoneNumber, int channelId, ServletOutputStream outputStream);
void uploadOneMedia(String phoneNumber, Long mediaId, ServletOutputStream outputStream);
}

View File

@@ -767,4 +767,25 @@ public class jt1078ServiceImpl implements Ijt1078Service {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "数据写入异常");
}
}
@Override
public void uploadOneMedia(String phoneNumber, Long mediaId, ServletOutputStream outputStream) {
log.info("[JT-单条存储多媒体数据上传] 媒体编号: {} 设备编号: {}", mediaId, phoneNumber);
J8805 j8805 = new J8805();
j8805.setMediaId(mediaId);
j8805.setDelete(1);
log.info("[JT-单条存储多媒体数据上传] 请求上传图片,媒体编号: {} 设备编号: {}", mediaId, phoneNumber);
JTMediaEventInfo mediaEventInfo = (JTMediaEventInfo)jt1078Template.uploadMediaDataForSingle(phoneNumber, j8805, 300);
if (mediaEventInfo == null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), ErrorCode.ERROR100.getMsg());
}
log.info("[JT-单条存储多媒体数据上传] 图片上传完成,媒体编号: {} 设备编号: {}", mediaId, phoneNumber);
try {
outputStream.write(mediaEventInfo.getMediaData());
outputStream.flush();
} catch (IOException e) {
log.info("[JT-单条存储多媒体数据上传] 数据写入异常,抓图编号: {} 设备编号: {}", mediaId, phoneNumber, e);
throw new ControllerException(ErrorCode.ERROR100.getCode(), "数据写入异常");
}
}
}