From 257d6f4415edffbe180800ce091f1d0d72a792f4 Mon Sep 17 00:00:00 2001 From: aosodo_4812 Date: Wed, 2 Sep 2026 16:26:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=AD=A6=E7=9B=B8=E5=85=B3=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/model/AlarmDisposalE.java | 2 - .../dataobject/AlarmDisposalDO.java | 2 - .../main/resources/RegionManagementDDL.sql | 3 - 边缘人脸识别区域安全设计方案.md | 95 ++++--------------- 4 files changed, 16 insertions(+), 86 deletions(-) diff --git a/web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/model/AlarmDisposalE.java b/web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/model/AlarmDisposalE.java index 12388fe..9916253 100644 --- a/web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/model/AlarmDisposalE.java +++ b/web-domain/src/main/java/com/zcloud/gbs/edgeguard/domain/model/AlarmDisposalE.java @@ -20,8 +20,6 @@ public class AlarmDisposalE extends BaseE { private String disposalResultName; private String disposalDescription; private String hiddenId; - private String hiddenCreateStatus; - private String hiddenCreateError; private Long handlerUserId; private String handlerUserName; private Long handlerDeptId; diff --git a/web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/persistence/dataobject/AlarmDisposalDO.java b/web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/persistence/dataobject/AlarmDisposalDO.java index 48afde0..d6a74ef 100644 --- a/web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/persistence/dataobject/AlarmDisposalDO.java +++ b/web-infrastructure/src/main/java/com/zcloud/gbs/edgeguard/persistence/dataobject/AlarmDisposalDO.java @@ -18,8 +18,6 @@ public class AlarmDisposalDO extends BaseDO { private String disposalResultName; private String disposalDescription; private String hiddenId; - private String hiddenCreateStatus; - private String hiddenCreateError; private Long handlerUserId; private String handlerUserName; private Long handlerDeptId; diff --git a/web-infrastructure/src/main/resources/RegionManagementDDL.sql b/web-infrastructure/src/main/resources/RegionManagementDDL.sql index 4cd01f6..21f2072 100644 --- a/web-infrastructure/src/main/resources/RegionManagementDDL.sql +++ b/web-infrastructure/src/main/resources/RegionManagementDDL.sql @@ -129,8 +129,6 @@ CREATE TABLE `edgeguard_alarm_disposal` ( `disposal_result_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '处置结果名称快照', `disposal_description` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '处置说明', `hidden_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '关联隐患id,仅判定为隐患时有值', - `hidden_create_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '隐患创建状态PENDING/SUCCESS/FAILED', - `hidden_create_error` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最近隐患创建失败信息', `handler_user_id` bigint NOT NULL COMMENT '处置人用户id', `handler_user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '处置人姓名快照', `handler_dept_id` bigint DEFAULT NULL COMMENT '处置部门id', @@ -151,7 +149,6 @@ CREATE TABLE `edgeguard_alarm_disposal` ( PRIMARY KEY (`id`), UNIQUE KEY `uk_disposal_alarm` (`alarm_id`), KEY `idx_disposal_hidden` (`hidden_id`), - KEY `idx_hidden_create_retry` (`hidden_create_status`, `update_time`), KEY `idx_disposal_handler` (`tenant_id`, `handler_user_id`, `disposed_time`), KEY `idx_disposal_result` (`tenant_id`, `is_false_alarm`, `is_hidden_hazard`, `disposed_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报警处置结论表'; diff --git a/边缘人脸识别区域安全设计方案.md b/边缘人脸识别区域安全设计方案.md index 35718be..6ab9e22 100644 --- a/边缘人脸识别区域安全设计方案.md +++ b/边缘人脸识别区域安全设计方案.md @@ -232,38 +232,23 @@ nodeType = REGION 本地区域节点 | 修改区域 | 修改名称、负责人、围栏和排序 | | 删除区域 | 校验子区域和摄像头绑定后逻辑删除 | | 区域摄像头分页 | 查询选中区域直接绑定的摄像头 | -| 可选摄像头分页 | 代理/调用第三方摄像头查询能力 | +| 可选摄像头分页 | 前端直接调用视频巡检固定摄像头分页 | | 保存摄像头绑定 | 批量计算并保存绑定差异 | | 设置摄像头负责人 | 更新绑定记录负责人 | | 解除摄像头绑定 | 逻辑删除本地绑定关系 | -### 6.2 第三方区域开放接口 - -综合平台作为区域数据提供方,建议至少提供: - -- 区域分页查询。 -- 区域详情查询。 -- 区域树查询。 - -开放接口是否返回区域绑定摄像头需要第三方确认。建议区域和摄像头绑定分别返回,避免区域树报文过大: - -- `RegionCo`:区域自身信息、层级、负责人、围栏。 -- `RegionCameraCo`:区域 ID、第三方摄像头 ID、摄像头负责人。 - -第三方开放接口使用独立鉴权和数据范围,不直接复用页面登录权限。 - ## 7. DDD 落位 | 模块 | 内容 | | --- | --- | | `web-client` | Region、RegionCamera 的 Cmd、Qry、Co 和服务接口 | -| `web-adapter` | 区域管理 Controller、第三方区域开放接口 | +| `web-adapter` | 区域管理 Controller | | `web-app` | 区域增删改查、组树、摄像头绑定和负责人设置执行器 | | `web-domain` | `RegionE`、`RegionCameraBindingE`、树及围栏规则、Gateway | -| `web-infrastructure` | DO、Mapper、Repository、GatewayImpl、第三方摄像头 Facade 适配 | +| `web-infrastructure` | DO、Mapper、Repository、GatewayImpl | | `start` | RPC Client 和配置装配;当前不需要推送定时任务 | -第三方摄像头访问能力在 Domain 定义 Gateway,在 Infrastructure 通过 Dubbo 或 HTTP 实现。外部摄像头 DTO 不进入 Domain 和 Client。 +可选摄像头由前端调用视频巡检服务查询;本服务只接收选中结果并保存区域绑定及摄像头展示快照。 ## 8. 待确认问题 @@ -303,30 +288,11 @@ nodeType = REGION 本地区域节点 上一版人员推送 DDL 已删除。当前 `RegionManagementDDL.sql` 是根据原型形成的区域表草案;坐标系、摄像头唯一性和区域删除规则确认后,再作为正式迁移脚本执行。 -## 10. 第三方报警接收与处置 +## 10. 报警处置与统计 -### 10.1 接入方式 +报警数据如何进入本系统归入后续“对外接口”统一设计,本章只描述内部查询、处置和统计逻辑。 -报警由第三方产生,建议综合平台提供报警接收回调接口,由第三方主动调用: - -```text -第三方 -> 鉴权/验签 -> 幂等校验 -> 报警落库 -> 返回受理成功 - └-> 用户后续处置 -``` - -以 `sourceSystem + alarmNo` 作为幂等键。第三方重复推送同一报警编号时返回已受理,不重复新增。接收接口只负责报警可靠落库,不同步执行隐患长流程。 - -第三方至少传摄像头和区域信息,本系统校验并固化企业、区域及摄像头历史快照。区域或摄像头无法识别时是否拒绝接收,待双方接口协议确定。 - -报警业务报文只要求当前确认字段:报警编号、报警时间、报警地址、区域、摄像头和一张报警截图。来源系统、接收时间及处置状态属于综合平台接入和管理字段,不要求第三方提供。 - -### 10.2 图片传输 - -当前暂定第三方在 JSON 报警报文中直接传单张截图 URL,综合平台在 `alarm_image_url` 中保存并用于详情展示,不接收文件流,也不保存 BLOB 或 Base64。 - -正式联调前需要确认 URL 是否长期有效、是否需要鉴权、是否允许综合平台服务端访问。如果 URL 是短期签名地址,应改为稳定文件 ID,或由综合平台接收后转存统一文件服务。 - -### 10.3 处置状态机 +### 10.1 处置状态机 ```text PENDING(未处置) @@ -343,7 +309,7 @@ PENDING(未处置) - 隐患流程和进度以隐患服务为准,本地不再维护报警闭环状态。 - 当前报警不经过派单、转办或审批,每条报警只提交一次处置结论;处置人、处置时间及公共更新审计字段用于留痕。 -### 10.4 数据表 +### 10.2 数据表 区域、摄像头绑定、报警和处置统一维护在 `web-infrastructure/src/main/resources/RegionManagementDDL.sql`,报警部分包含: @@ -354,9 +320,7 @@ PENDING(未处置) Common 已有 `ZcloudHiddenFacade` 的 `aiHiddenAndSave`、`listByForeignKey` 和 `queryHiddenCheckStatus` 等能力。本系统不复制隐患主表,也不缓存隐患状态、级别和进度。创建成功后只在报警处置表保存 `hidden_id`;详情页根据该 ID 调用隐患服务查询实时详情。 -为处理隐患接口临时失败,处置表仅额外保存 `hidden_create_status` 和 `hidden_create_error`。它们属于调用可靠性字段,不是隐患业务数据。以报警编号作为 `foreignKey` 保证隐患创建幂等。 - -### 10.5 统计 +### 10.3 统计 一期直接聚合报警主表,不建统计结果表: @@ -366,17 +330,14 @@ Common 已有 `ZcloudHiddenFacade` 的 `aiHiddenAndSave`、`listByForeignKey` 报警保存发生时的企业、区域和摄像头快照,后续改名或移动不影响历史台账。数据量较大后再增加按日汇总表。 -### 10.6 待确认 +### 10.4 待确认 -- 第三方报警接口的 JSON 报文、鉴权、签名及重试规则。 -- 第三方报警 ID 是否在来源系统内永久唯一。 -- 报警截图 URL 的有效期、访问鉴权和网络可达性。 - 处置结果字典。 - 误报是否仍需填写处置原因。 - 隐患级别、确认人、整改人和期限由谁填写。 - 是否允许修改处置结论、重新打开报警及是否需要审批。 -### 10.7 报警查看权限升级 +### 10.5 报警查看权限升级 当前需求只控制报警列表的可见范围,不需要增加业务表: @@ -444,35 +405,13 @@ OR `RegionCameraPageQry` 至少包含 `regionId`,可选 `name`。可选摄像头分页参数以视频巡检服务的 `FixedCameraPageQry` 为准。 -### 11.4 第三方区域开放接口 +### 11.4 报警查询与处置接口 | 编号 | 方法与路径 | 用途 | 主要入参 | 主要返回 | 核心规则 | 优先级 | | --- | --- | --- | --- | --- | --- | --- | -| `OPEN-REGION-01` | `POST /open/edgeguard/regions/page` | 第三方分页查询区域 | `OpenRegionPageQry` | `PageResponse` | 只返回调用方被授权企业的数据;默认不返回逻辑删除数据 | P1 | -| `OPEN-REGION-02` | `GET /open/edgeguard/regions/{regionCode}` | 第三方查询区域详情 | `regionCode` | `SingleResponse` | 对外使用稳定的 `regionCode`,不暴露仅供内部使用的查询规则 | P1 | -| `OPEN-REGION-03` | `GET /open/edgeguard/regions/tree` | 第三方查询企业区域树 | `corpId` | `MultiResponse` | `corpId` 必须在应用授权范围内;只返回真实区域节点 | P1 | -| `OPEN-REGION-04` | `POST /open/edgeguard/region-cameras/page` | 第三方查询区域摄像头绑定 | `OpenRegionCameraPageQry` | `PageResponse` | 与区域接口分开分页,避免区域树报文过大;是否开放负责人字段联调前确认 | P1 | - -开放接口不直接复用页面 Controller。鉴权失败、签名错误、越权、参数错误和服务异常需要使用双方约定的稳定错误码。 - -### 11.5 报警接收与处置接口 - -| 编号 | 方法与路径 | 用途 | 主要入参 | 主要返回 | 核心规则 | 优先级 | -| --- | --- | --- | --- | --- | --- | --- | -| `ALARM-01` | `POST /open/edgeguard/alarms` | 接收第三方报警 | `AlarmReceiveCmd` | `SingleResponse` | 以 `sourceSystem + alarmNo` 幂等;服务端设置 `receivedTime/PENDING`;根据摄像头绑定固化企业、区域和摄像头快照 | P0,依赖第三方报文/鉴权 | | `ALARM-02` | `POST /edgeguard/alarms/page` | 报警处置列表/台账分页 | `AlarmPageQry` | `PageResponse` | 未处置列表执行负责人和10分钟升级规则;台账按页面数据权限;支持编号、区域、状态、时间筛选 | P0 | | `ALARM-03` | `GET /edgeguard/alarms/{id}` | 查询报警及处置详情 | `id` | `SingleResponse` | 返回报警、处置结论和 `hiddenId`;不复制隐患详情,前端按 ID 调隐患服务 | P0 | | `ALARM-04` | `POST /edgeguard/alarms/{id}/disposal` | 提交报警处置 | `id + AlarmDisposeCmd` | `Response` | 一条报警只处置一次;校验误报/隐患条件;保存处置记录并将报警改为 `DISPOSED` | P0 | -| `ALARM-05` | `POST /edgeguard/alarms/{id}/hidden/retry` | 重试创建隐患 | `id` | `Response` | 仅 `isHiddenHazard=1` 且创建失败时允许;以报警编号作为 `foreignKey` 保证幂等 | P1 | - -`AlarmReceiveCmd` 当前确认字段: - -- `sourceSystem`、`alarmNo`、`alarmTime`、`alarmAddress`。 -- `fixedCameraId`、`videoName`、`videoType`、所属单位、主管部门、视频等级、在线状态和摄像头编号等 `FixedCameraCO` 字段。 -- `regionCode`(第三方可传,但最终以本地摄像头绑定匹配结果校验)。 -- `alarmImageUrl`。 - -`AlarmReceiveCo` 返回本地 `alarmId`、`alarmNo` 和 `repeated`,重复推送返回受理成功而不是重复插入。 `AlarmDisposeCmd` 建议字段: @@ -481,7 +420,7 @@ OR - `disposalResultCode/disposalResultName/disposalDescription`:非误报且非隐患时按业务规则必填。 - 创建隐患所需字段暂不固化到本文,确认 `HiddenAddCmd` 必填项后补充;禁止由 Controller 直接调用隐患 Facade。 -处置事务边界:先完成本地处置条件校验;隐患远程创建不能放在持有数据库锁的长事务中。远程调用成功后保存 `hiddenId/SUCCESS`;失败时保存 `FAILED/error` 并允许 `ALARM-05` 重试。报警是否在隐患创建失败时立即标记为 `DISPOSED`,开发 `ALARM-04` 前必须最终确认。 +`ALARM-04` 在选择“是隐患”时负责调用隐患服务创建隐患并保存 `hiddenId`;创建失败则接口返回失败,不保存本地处置结果,由前端重新提交。远程调用不能放在持有数据库锁的长事务中,并以报警编号作为 `foreignKey` 保证重复提交幂等。 ### 11.6 报警统计接口 @@ -509,7 +448,7 @@ OR - 报警附件接口:当前只有单张截图 URL,直接保存在报警主表。 - 报警派单、转办、操作轨迹接口:当前报警直接处置,没有派单流程。 - 人员、人脸和人员区域准入接口:不在当前项目范围。 -- 主动推送、回执和失败重试接口:当前综合平台是数据提供方和报警接收方,不主动推送。 +- 报警接收、主动推送、回执和失败重试接口:统一归入后续对外接口设计。 ### 11.8 外部依赖契约 @@ -517,7 +456,6 @@ OR | --- | --- | --- | --- | | 企业/用户公共服务 | `REGION-01~04`、`CAMERA-04`、统计展示 | 已有公共能力 | 企业数据权限来源、负责人有效性校验和批量翻译字段 | | 视频巡检固定摄像头分页 | `CAMERA-02` | 已确认 | 前端调用 `POST /videopatrol/fixedCamera/list`,普通分页时返回 `FixedCameraCO` | -| 第三方报警平台 | `ALARM-01` | 契约待联调 | JSON 报文、鉴权签名、重试策略、截图 URL 有效期、区域/摄像头无法匹配时的处理 | | 隐患服务 `ZcloudHiddenFacade` | `ALARM-04/05` | Common 已有能力 | `HiddenAddCmd` 必填字段、返回的隐患 ID、幂等行为、失败错误码 | ### 11.9 建议实现顺序与状态 @@ -528,8 +466,7 @@ OR | --- | --- | --- | --- | | 第1批:区域闭环 | `REGION-01~05` | `DOING` | 分层实现、校验、测试及编译已完成;待菜单资源分配真实权限编码后转 `DONE` | | 第2批:摄像头绑定 | `CAMERA-01~05` | `DOING` | 前端复用视频巡检固定摄像头分页;本服务已完成快照保存、负责人、解绑及绑定差异逻辑;待配置菜单权限编码 | -| 第3批:报警与统计 | `ALARM-01~04`、`STAT-01~02` | `TODO` | 统计需求和下钻行为已由原型确认;与报警主流程同批开发、联调 | -| 第4批:开放查询 | `OPEN-REGION-01~04` | `TODO` | 需先确认第三方实际需要和开放鉴权方案 | -| 第5批:增强能力 | `CAMERA-06`、`ALARM-05` | `TODO` | 实时详情降级和隐患失败重试 | +| 第3批:报警与统计 | `ALARM-02~04`、`STAT-01~02` | `TODO` | 保留内部查询、处置和统计;报警接收归入后续对外接口统一设计 | +| 第4批:增强能力 | `CAMERA-06` | `TODO` | 摄像头实时详情降级 | 推荐从 `REGION-01` 区域树接口开始逐个实现。每个接口的完成标准包括:Client 契约、Controller、App 执行器、Domain 规则、Infrastructure 查询/持久化、权限与数据范围、参数校验、异常码、单元测试或集成测试,以及 Maven 编译通过。