From 9d47fe30f5aef0827e5d5095276bebe60e44e18f Mon Sep 17 00:00:00 2001 From: lin <648540858@qq.com> Date: Fri, 11 Jul 2025 22:07:32 +0800 Subject: [PATCH] =?UTF-8?q?[1078]=20=E5=A2=9E=E5=8A=A0=E5=8D=95=E6=9D=A1?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E5=A4=9A=E5=AA=92=E4=BD=93=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jt1078/controller/JT1078Controller.java | 141 ++++++++++-------- .../vmp/jt1078/service/Ijt1078Service.java | 3 + .../service/impl/jt1078ServiceImpl.java | 21 +++ 3 files changed, 103 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java b/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java index 1c16b38b9..6640e2e26 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/controller/JT1078Controller.java @@ -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> 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>> 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>> deferredResult = new DeferredResult<>(30000L); - List resultList = new ArrayList<>(); - - deferredResult.onTimeout(()->{ - log.info("[JT-存储多媒体数据上传命令超时] param: {}", param ); - WVPResult> fail = WVPResult.fail(ErrorCode.ERROR100); - fail.setMsg("超时"); - fail.setData(resultList); - deferredResult.setResult(fail); - }); - List 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 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>> updateMediaData(@RequestBody QueryMediaDataParam param){ +// +// log.info("[JT-存储多媒体数据上传命令] param: {}", param ); +// DeferredResult>> deferredResult = new DeferredResult<>(30000L); +// List resultList = new ArrayList<>(); +// +// deferredResult.onTimeout(()->{ +// log.info("[JT-存储多媒体数据上传命令超时] param: {}", param ); +// WVPResult> fail = WVPResult.fail(ErrorCode.ERROR100); +// fail.setMsg("超时"); +// fail.setData(resultList); +// deferredResult.setResult(fail); +// }); +// List 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 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) diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java b/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java index 8358f14b6..9c1619616 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/service/Ijt1078Service.java @@ -125,4 +125,7 @@ public interface Ijt1078Service { void snap(String phoneNumber, int channelId, ServletOutputStream outputStream); + void uploadOneMedia(String phoneNumber, Long mediaId, ServletOutputStream outputStream); + + } diff --git a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java index 4e4f636a9..220d7d371 100644 --- a/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/jt1078/service/impl/jt1078ServiceImpl.java @@ -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(), "数据写入异常"); + } + } }