From f4f4fc53260eb67483dce406a963628273786a61 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Sat, 30 May 2026 17:22:17 +0800
Subject: [PATCH] 优化

---
 ard-modules/ard-modules-work/src/main/java/com/ard/work/sdk/dh/service/DaHuaSDK.java |   81 +++++++++++++++++++++++++---------------
 1 files changed, 50 insertions(+), 31 deletions(-)

diff --git a/ard-modules/ard-modules-work/src/main/java/com/ard/work/sdk/dh/service/DaHuaSDK.java b/ard-modules/ard-modules-work/src/main/java/com/ard/work/sdk/dh/service/DaHuaSDK.java
index b27ef5f..ac2fddc 100644
--- a/ard-modules/ard-modules-work/src/main/java/com/ard/work/sdk/dh/service/DaHuaSDK.java
+++ b/ard-modules/ard-modules-work/src/main/java/com/ard/work/sdk/dh/service/DaHuaSDK.java
@@ -5,6 +5,7 @@
 import com.ard.common.core.exception.ServiceException;
 import com.ard.common.core.exception.device.CameraSDKException;
 import com.ard.common.core.utils.StringUtils;
+import com.ard.common.core.utils.file.FileMultipartFile;
 import com.ard.common.core.utils.file.FileUtils;
 import com.ard.common.core.utils.file.MimeTypeUtils;
 import com.ard.common.redis.service.RedisService;
@@ -29,7 +30,6 @@
 import com.ard.work.sdk.model.PtzScope;
 import com.ard.work.sdk.service.CameraSDK;
 import com.ard.work.utils.FFmpegUtils;
-import com.ard.work.utils.file.MultipartFileUtil;
 import com.ard.work.utils.gis.GisUtil;
 import com.sun.jna.Native;
 import com.sun.jna.Pointer;
@@ -44,6 +44,7 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
@@ -224,7 +225,7 @@
                     camera.getRtspPort(),
                     channel.getChanNo()
             );
-            channel.setRtspUrl(rtspUrl);
+            channel.setLiveAddress(rtspUrl);
             ardChannelList.add(channel);
         }
         return ardChannelList;
@@ -379,11 +380,6 @@
     }
 
     @Override
-    public PtzDto getPtzHigh(CameraCmd cmd) {
-        return getPtz(cmd);
-    }
-
-    @Override
     public PtzScope getPtzScope(CameraCmd cmd) {
         NetSDKLib.LLong loginId = new LLong(cmd.getLoginId());
         NET_PRODUCTION_DEFNITION productionDefinition = new NET_PRODUCTION_DEFNITION();
@@ -399,17 +395,6 @@
         ptzScope.setTMax((float) productionDefinition.nPtzVerticalAngleMax);
         ptzScope.setTMin((float) productionDefinition.nPtzVerticalAngleMin);
         return ptzScope;
-    }
-
-
-    @Override
-    public Boolean setPtzHigh(CameraCmd cmd) {
-        return setPtz(cmd);
-    }
-
-    @Override
-    public Boolean setPtzHighT(CameraCmd cmd) {
-        return setPtz(cmd);
     }
 
     //设置ptz信息
@@ -675,10 +660,12 @@
             log.warn("转码耗时:{}", watchStop.getTotalTimeMillis());
             //存入minio
             String bucketName = "record";
-            String objectName = cameraId + "_" + chanNo;
+            String fileName = cameraId + "_" + chanNo;
             String type = cmd.getType();
-            MultipartFile multipartFile = MultipartFileUtil.filePathToMultipartFile(newpath, objectName,
-                    MimeTypeUtils.VIDEO_MP4);
+//            MultipartFile multipartFile = MultipartFileUtil.filePathToMultipartFile(newpath, objectName,
+//                    MimeTypeUtils.VIDEO_MP4);
+            File tempFile = new File(newpath);
+            MultipartFile multipartFile = new FileMultipartFile(tempFile, fileName, MimeTypeUtils.VIDEO_MP4);
             R<SysFile> sysFileR = remoteFileService.upload(multipartFile, bucketName, type);
             if (sysFileR.getCode() == R.SUCCESS) {
                 url = sysFileR.getData().getUrl();
@@ -1182,17 +1169,49 @@
         public void invoke(LLong lLoginID, Pointer pBuf, int RevLen, int EncodeType, int CmdSerial, Pointer dwUser) {
             if (pBuf != null && RevLen > 0) {
                 byte[] buf = pBuf.getByteArray(0, RevLen);
-                //存储到minio
-                InputStream inputStream = new ByteArrayInputStream(buf);
-                MultipartFile multipartFile = MultipartFileUtil.inputStreamToMultipartFile(inputStream, objectName,
-                        MimeTypeUtils.IMAGE_JPEG);
-                R<SysFile> sysFileR = remoteFileService.upload(multipartFile, bucketName, type);
-                if (sysFileR.getCode() == R.SUCCESS) {
-                    String url = sysFileR.getData().getUrl();
-                    log.info("上传文件成功:{}", url);
-                    // 在回调中完成 CompletableFuture
-                    urlFuture.complete(url);
+
+                // 定义文件信息
+                String fileName = objectName;
+                String tempDir = System.getProperty("java.io.tmpdir") + "/snap_temp/";
+                File tempDirFile = new File(tempDir);
+                if (!tempDirFile.exists()) {
+                    tempDirFile.mkdirs();
                 }
+                File tempFile = new File(tempDir + fileName);
+
+                try {
+                    // 写入临时文件
+                    try (FileOutputStream fos = new FileOutputStream(tempFile)) {
+                        fos.write(buf);
+                        fos.flush();
+                    }
+
+                    // 使用 FileMultipartFile 转换
+                    MultipartFile multipartFile = new FileMultipartFile(tempFile, fileName, MimeTypeUtils.IMAGE_JPEG);
+
+                    // 上传到 MinIO
+                    R<SysFile> sysFileR = remoteFileService.upload(multipartFile, bucketName, type);
+
+                    if (sysFileR.getCode() == R.SUCCESS) {
+                        String url = sysFileR.getData().getUrl();
+                        log.info("上传文件成功:{}", url);
+                        urlFuture.complete(url);
+                    } else {
+                        log.error("上传文件失败: {}", sysFileR.getMsg());
+                        urlFuture.completeExceptionally(new RuntimeException("上传失败: " + sysFileR.getMsg()));
+                    }
+
+                } catch (Exception e) {
+                    log.error("处理截图失败", e);
+                    urlFuture.completeExceptionally(e);
+                } finally {
+                    // 清理临时文件
+                    if (tempFile.exists()) {
+                        tempFile.delete();
+                    }
+                }
+            } else {
+                urlFuture.completeExceptionally(new RuntimeException("截图数据为空"));
             }
         }
     }

--
Gitblit v1.9.3