From 34355ba1d27d94efd62f2d74d9712da6ef840ef3 Mon Sep 17 00:00:00 2001 From: wangguangyuan Date: Wed, 30 Sep 2026 16:40:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=8A=93=E6=8B=8D=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=82=B9=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/inspect/nvr/controller/IvsServerController.java | 1 + .../com/inspect/nvr/hik/service/HikIvsVendorService.java | 4 ++++ .../com/inspect/nvr/hik/service/HikNvrUiActionService.java | 6 ++++-- .../java/com/inspect/nvr/service/CommonCameraService.java | 6 +++--- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/inspect/nvr/controller/IvsServerController.java b/src/main/java/com/inspect/nvr/controller/IvsServerController.java index 703b4a4b..4f48f608 100644 --- a/src/main/java/com/inspect/nvr/controller/IvsServerController.java +++ b/src/main/java/com/inspect/nvr/controller/IvsServerController.java @@ -176,6 +176,7 @@ public class IvsServerController { // 写入路径编码,避免客户端通过查询参数改变抓图目标。 normalized.setCameraCode(cameraCode); normalized.setDomainCode(domainCode); + log.info("平台抓图任务,cameraCode {}, domainCode {}", cameraCode, domainCode); // 交给 IVS 门面路由到海康适配器,由适配器复用 /actions/snapshot 抓图实现。 return ResponseEntity.ok(ivsOpenApiService.platformSnapshot(normalized)); } diff --git a/src/main/java/com/inspect/nvr/hik/service/HikIvsVendorService.java b/src/main/java/com/inspect/nvr/hik/service/HikIvsVendorService.java index f3545a94..2f058fc2 100644 --- a/src/main/java/com/inspect/nvr/hik/service/HikIvsVendorService.java +++ b/src/main/java/com/inspect/nvr/hik/service/HikIvsVendorService.java @@ -274,8 +274,10 @@ public class HikIvsVendorService implements IvsVendorAdapter { validatePathCameraCode(request.getCameraCode(), request.getDomainCode()); // 先从 ivs_camera 读取前端 IP,避免数字通道直接走 NVR SDK 时出现 error 29。 String cameraIp = resolveCameraIp(request.getCameraCode(), request.getDomainCode()); + log.info("抓图的相机ip {}",cameraIp); // 查询启用的 NVR 并解析 IVS 通道,后续抓图始终使用同一个目标。 Target target = resolveTarget(request.getCameraCode(), request.getDomainCode()); + log.info("查询启用的 NVR {} 并解析 IVS 通道 {}", target.nvr, target.channel); // 复用 /hik/nvr/playback/hls/ui/actions/snapshot 背后的业务服务,保持厂商 SDK 只在海康层。 HikNvrUiActionService actions = uiActionService.forNvr(toNvrInfo(target.nvr)); // 将 IVS 通道转换为海康操作服务所需的页面逻辑通道并执行 JPEG 抓图。 @@ -287,6 +289,7 @@ public class HikIvsVendorService implements IvsVendorAdapter { // 使用 UTC 记录 IVS 要求的紧凑时间格式,避免服务器时区影响查询结果。 String snapTime = LocalDateTime.now(ZoneOffset.UTC).format(IVS_TIME); // 保存任务元数据和图片内容,列表接口只返回元数据,图片接口再返回 JPEG 字节。 + log.info("保存任务元数据和图片内容 taskId {}", taskId); snapshotRecords.put(taskId, new SnapshotRecord( taskId, request.getCameraCode(), request.getDomainCode(), snapTime, image == null ? new byte[0] : image.clone())); @@ -311,6 +314,7 @@ public class HikIvsVendorService implements IvsVendorAdapter { if (request == null || !hasText(request.getTaskID())) { throw HikNvrPlaybackException.badRequest("taskID不能为空"); } + log.info("抓图的任务id {}",request.getTaskID()); // 读取任务缓存;任务尚未完成或已过期时返回空列表而不是伪造图片记录。 SnapshotRecord record = snapshotRecords.get(request.getTaskID().trim()); List infos = new ArrayList<>(); diff --git a/src/main/java/com/inspect/nvr/hik/service/HikNvrUiActionService.java b/src/main/java/com/inspect/nvr/hik/service/HikNvrUiActionService.java index 361850dd..e6553006 100644 --- a/src/main/java/com/inspect/nvr/hik/service/HikNvrUiActionService.java +++ b/src/main/java/com/inspect/nvr/hik/service/HikNvrUiActionService.java @@ -634,6 +634,7 @@ public class HikNvrUiActionService { // 生成本次抓图的本地保存路径,便于回退链路和日志复用。 Path savePath = buildCapturePath(channel); + log.info("抓图的保存路径 {}", savePath); // 1) 优先:使用调用方传入或 NVR 配置解析出的相机 IP,直连 Digest 抓图。 // 平台抓图优先使用 ivs_camera.dev_ip;普通工作台调用则沿用 NVR 通道映射。 String cameraIp = hasText(preferredCameraIp) @@ -655,13 +656,14 @@ public class HikNvrUiActionService { return image; } } catch (Exception ex) { - log.warn("[snapshot] Digest 直连抓图失败 channel={} ip={}:{}", + log.info("[snapshot] Digest 直连抓图失败 channel={} ip={}:{}", channel, cameraIp, ex.getMessage()); } } // 2) 回退:NVR SDK 抓图 try { + log.info("回退:NVR SDK 抓图"); // 登录 NVR 并将页面通道转换为 SDK 通道。 HikLoginSession session = loginSession(); // 计算海康 SDK 通道编号。 @@ -679,7 +681,7 @@ public class HikNvrUiActionService { return image; } } catch (Exception ex) { - log.warn("[snapshot] SDK 抓图失败 channel={}:{}", channel, ex.getMessage()); + log.info("[snapshot] SDK 抓图失败 channel={}:{}", channel, ex.getMessage()); } throw HikNvrPlaybackException.sdkFailure(-1, diff --git a/src/main/java/com/inspect/nvr/service/CommonCameraService.java b/src/main/java/com/inspect/nvr/service/CommonCameraService.java index ecac0127..a360b743 100644 --- a/src/main/java/com/inspect/nvr/service/CommonCameraService.java +++ b/src/main/java/com/inspect/nvr/service/CommonCameraService.java @@ -71,7 +71,7 @@ public class CommonCameraService { return task.call(); } catch (Exception e) { // 将各厂商 SDK 异常统一记录并转换为 null,保持原有服务返回约定。 - log.error("任务执行异常:", e); + log.info("任务执行异常:", e); return null; } finally { // 先释放通道锁,再由外层释放 NVR 许可,避免其他任务拿到许可后仍被旧通道锁阻塞。 @@ -112,7 +112,7 @@ public class CommonCameraService { String username = nvrInfo.getAccount(); String password = nvrInfo.getPassword(); String url = String.format(urlTemplate, ip, channel); - + log.info("Digest认证抓图 url {}", url); BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(new AuthScope(null, -1), new UsernamePasswordCredentials(username, password.toCharArray())); @@ -141,7 +141,7 @@ public class CommonCameraService { } }); } catch (Exception e) { - log.error("Digest认证抓图失败:", e); + log.info("Digest认证抓图失败:", e); } return null; }