From 81740090b448350189248b5d7fc67b237f92f03d Mon Sep 17 00:00:00 2001 From: shenzhidan Date: Sat, 1 Aug 2026 11:20:27 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=90=8C=E6=AD=A5=E5=A4=A7=E5=8D=8E=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E8=AE=BE=E5=A4=87=20=E7=BB=84=E7=BB=87=E6=9E=B6?= =?UTF-8?q?=E6=9E=84=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zcloud/primeport/web/DaHuaController.java | 15 +++- .../primeport/service/DaHuaServiceImpl.java | 21 +++++- .../zcloud/primeport/api/DaHuaServiceI.java | 6 +- .../dahua/config/DaHuaAutoConfig.java | 4 +- .../src/main/resources/TableCreationDDL.sql | 72 ++++++++++++++++++- 5 files changed, 112 insertions(+), 6 deletions(-) diff --git a/web-adapter/src/main/java/com/zcloud/primeport/web/DaHuaController.java b/web-adapter/src/main/java/com/zcloud/primeport/web/DaHuaController.java index 56beda7..7701617 100644 --- a/web-adapter/src/main/java/com/zcloud/primeport/web/DaHuaController.java +++ b/web-adapter/src/main/java/com/zcloud/primeport/web/DaHuaController.java @@ -8,6 +8,8 @@ import com.zcloud.primeport.domain.model.DaHuaCarPageCmd; import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd; import com.zcloud.primeport.dto.DaHuaCarDeleteCmd; import com.zcloud.primeport.dto.DaHuaPersonDeleteCmd; +import com.zcloud.primeport.dto.DaHuaResourceSyncCmd; +import com.zcloud.primeport.dto.clientobject.DaHuaResourceSyncResultCO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -15,6 +17,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Map; +import javax.validation.Valid; @Api(tags = "大华平台对接") @RequestMapping("/${application.gateway}/dahua") @@ -105,4 +108,14 @@ public class DaHuaController { } return daHuaService.deletePerson(cmd); } -} \ No newline at end of file + + @ApiOperation("同步大华部门、企业映射和门口设备") + @PostMapping("/resource/sync") + public SingleResponse syncResources( + @Valid @RequestBody(required = false) DaHuaResourceSyncCmd cmd) { + if (daHuaService == null) { + throw new RuntimeException("大华服务未配置"); + } + return daHuaService.syncResources(cmd); + } +} diff --git a/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java b/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java index 7e29ce8..905d9d3 100644 --- a/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/primeport/service/DaHuaServiceImpl.java @@ -7,9 +7,13 @@ import com.zcloud.primeport.domain.model.DaHuaAccessRecordCmd; import com.zcloud.primeport.domain.model.DaHuaCarAddCmd; import com.zcloud.primeport.domain.model.DaHuaCarPageCmd; import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd; +import com.zcloud.primeport.domain.model.DaHuaResourceSyncResultE; import com.zcloud.primeport.dto.DaHuaCarDeleteCmd; import com.zcloud.primeport.dto.DaHuaPersonDeleteCmd; +import com.zcloud.primeport.dto.DaHuaResourceSyncCmd; +import com.zcloud.primeport.dto.clientobject.DaHuaResourceSyncResultCO; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.Map; @@ -20,6 +24,9 @@ public class DaHuaServiceImpl implements DaHuaServiceI { @Autowired private DaHuaGateway daHuaGateway; + @Autowired + private DaHuaResourceSyncApplicationService daHuaResourceSyncApplicationService; + @Override public SingleResponse generatePersonId() { Long id = daHuaGateway.generatePersonId(); @@ -196,4 +203,16 @@ public class DaHuaServiceImpl implements DaHuaServiceI { System.out.println("大华门禁事件查询最终返回 - success:" + resp.isSuccess() + ", errCode:" + resp.getErrCode() + ", errMessage:" + resp.getErrMessage() + ", data:" + (dhData != null ? "已返回数据" : "null")); return resp; } -} \ No newline at end of file + + @Override + public SingleResponse syncResources(DaHuaResourceSyncCmd cmd) { + DaHuaResourceSyncCmd actualCmd = cmd == null ? new DaHuaResourceSyncCmd() : cmd; + int pageSize = actualCmd.getPageSize() == null ? 200 : actualCmd.getPageSize(); + boolean autoMatchByName = actualCmd.getAutoMatchByName() == null || actualCmd.getAutoMatchByName(); + DaHuaResourceSyncResultE result = daHuaResourceSyncApplicationService.sync( + pageSize, actualCmd.getSubsystem(), autoMatchByName); + DaHuaResourceSyncResultCO data = new DaHuaResourceSyncResultCO(); + BeanUtils.copyProperties(result, data); + return SingleResponse.of(data); + } +} diff --git a/web-client/src/main/java/com/zcloud/primeport/api/DaHuaServiceI.java b/web-client/src/main/java/com/zcloud/primeport/api/DaHuaServiceI.java index af2ef8a..fa57c8c 100644 --- a/web-client/src/main/java/com/zcloud/primeport/api/DaHuaServiceI.java +++ b/web-client/src/main/java/com/zcloud/primeport/api/DaHuaServiceI.java @@ -8,6 +8,8 @@ import com.zcloud.primeport.domain.model.DaHuaCarPageCmd; import com.zcloud.primeport.domain.model.DaHuaPersonSyncCmd; import com.zcloud.primeport.dto.DaHuaCarDeleteCmd; import com.zcloud.primeport.dto.DaHuaPersonDeleteCmd; +import com.zcloud.primeport.dto.DaHuaResourceSyncCmd; +import com.zcloud.primeport.dto.clientobject.DaHuaResourceSyncResultCO; import java.util.Map; @@ -30,4 +32,6 @@ public interface DaHuaServiceI { SingleResponse deleteCar(DaHuaCarDeleteCmd cmd); SingleResponse> queryAccessRecord(DaHuaAccessRecordCmd cmd); -} \ No newline at end of file + + SingleResponse syncResources(DaHuaResourceSyncCmd cmd); +} diff --git a/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfig.java b/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfig.java index 84c5c90..7d8a537 100644 --- a/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfig.java +++ b/web-infrastructure/src/main/java/com/zcloud/primeport/dahua/config/DaHuaAutoConfig.java @@ -8,7 +8,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration -@EnableConfigurationProperties(DaHuaProperties.class) +@EnableConfigurationProperties({DaHuaProperties.class, DaHuaResourceProperties.class}) public class DaHuaAutoConfig { @Bean("dahuaApiOauthConfig") @@ -41,4 +41,4 @@ public class DaHuaAutoConfig { } return new DaHuaApiClient(oauthConfig); } -} \ No newline at end of file +} diff --git a/web-infrastructure/src/main/resources/TableCreationDDL.sql b/web-infrastructure/src/main/resources/TableCreationDDL.sql index df57bc6..c394c57 100644 --- a/web-infrastructure/src/main/resources/TableCreationDDL.sql +++ b/web-infrastructure/src/main/resources/TableCreationDDL.sql @@ -327,4 +327,74 @@ CREATE TABLE `video` ( `update_id` bigint DEFAULT NULL COMMENT '修改人id', `env` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='摄像头表'; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='摄像头表'; + +CREATE TABLE `dahua_department_corp_mapping` ( + `id` bigint NOT NULL COMMENT '主键ID', + `dahua_department_id` bigint NOT NULL COMMENT '大华部门ID', + `dahua_org_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '大华组织编码', + `dahua_department_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '大华部门名称快照', + `corp_id` bigint NOT NULL COMMENT '本平台企业ID,对应corp_info.id', + `corp_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '本平台企业名称快照', + `match_type` smallint NOT NULL DEFAULT '1' COMMENT '匹配方式:1-名称匹配,2-人工绑定', + `bind_status` smallint NOT NULL DEFAULT '1' COMMENT '绑定状态:1-有效,0-停用', + `last_sync_time` datetime DEFAULT NULL COMMENT '最近同步时间', + `delete_enum` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'FALSE' COMMENT '删除标识', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `create_id` bigint DEFAULT NULL COMMENT '创建人ID', + `update_id` bigint DEFAULT NULL COMMENT '更新人ID', + `env` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROD' COMMENT '环境标识', + `create_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人姓名', + `update_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人姓名', + `tenant_id` bigint DEFAULT NULL COMMENT '租户ID', + `org_id` bigint DEFAULT NULL COMMENT '组织ID', + `version` int NOT NULL DEFAULT '0' COMMENT '版本号', + `remarks` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dahua_department_corp_mapping_department` (`dahua_department_id`), + UNIQUE KEY `uk_dahua_department_corp_mapping_org_code` (`dahua_org_code`), + UNIQUE KEY `uk_dahua_department_corp_mapping_corp` (`corp_id`), + KEY `idx_dahua_department_corp_mapping_status` (`bind_status`, `delete_enum`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='大华部门与本平台企业映射表'; + +CREATE TABLE `dahua_device` ( + `id` bigint NOT NULL COMMENT '主键ID', + `device_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '大华设备编码', + `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '大华设备名称', + `device_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '设备类型', + `device_category` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '设备类别', + `device_manufacturer` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '设备厂商', + `device_model` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '设备型号', + `is_online` smallint DEFAULT NULL COMMENT '在线状态:1-在线,0-离线', + `offline_reason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '离线原因', + `sub_system` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '所属大华子系统', + `device_ip` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '设备IP', + `device_port` int DEFAULT NULL COMMENT '设备端口', + `dahua_department_id` bigint DEFAULT NULL COMMENT '大华所属部门ID', + `dahua_org_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '大华所属组织编码', + `dahua_org_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '大华所属组织名称', + `corp_id` bigint DEFAULT NULL COMMENT '本平台企业ID,对应corp_info.id', + `corp_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '本平台企业名称快照', + `match_status` smallint NOT NULL DEFAULT '0' COMMENT '企业匹配状态:1-已匹配,0-未匹配', + `raw_data` json DEFAULT NULL COMMENT '大华原始设备数据', + `last_sync_time` datetime DEFAULT NULL COMMENT '最近同步时间', + `delete_enum` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'FALSE' COMMENT '删除标识', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `create_id` bigint DEFAULT NULL COMMENT '创建人ID', + `update_id` bigint DEFAULT NULL COMMENT '更新人ID', + `env` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT 'PROD' COMMENT '环境标识', + `create_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人姓名', + `update_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人姓名', + `tenant_id` bigint DEFAULT NULL COMMENT '租户ID', + `org_id` bigint DEFAULT NULL COMMENT '组织ID', + `version` int NOT NULL DEFAULT '0' COMMENT '版本号', + `remarks` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_dahua_device_code` (`device_code`), + KEY `idx_dahua_device_department` (`dahua_department_id`), + KEY `idx_dahua_device_org_code` (`dahua_org_code`), + KEY `idx_dahua_device_corp` (`corp_id`), + KEY `idx_dahua_device_match_status` (`match_status`, `delete_enum`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='大华门口设备同步表';