Initial commit: reorganized source tree

- backend/: 13 Maven modules (cw-elevator-application, cloudwalk-cloud, intelligent-cwoscomponent, ninca-crk, etc.)
- frontend/: 4 Vue projects (elevator-front, cwos-portal, alarm-front, front_acs) + decompiled + scripts
- scripts/: build, test-env, tools (Docker Compose, service templates, API parity)
- docs/: AGENTS.md, superpowers specs, architecture docs
- .gitignore: standard Java/Maven exclusions

Moved from legacy maven-*/ root layout to backend/ organized structure.
This commit is contained in:
hpd840321
2026-05-09 09:00:12 +08:00
commit 7b2bd307f1
7260 changed files with 612980 additions and 0 deletions
@@ -0,0 +1,25 @@
-- 租户访客楼层策略 — 仅用于组织服务库:component-organization
-- 应用只连此库读取策略;与电梯库 cw-elevator-application 中同表结构对齐(org_id 粒度)。
-- 执行:mysql ... component-organization < organization_tenant_visitor_floor_policy.sql
USE `component-organization`;
CREATE TABLE IF NOT EXISTS tenant_visitor_floor_policy (
id VARCHAR(32) NOT NULL COMMENT '主键',
business_id VARCHAR(64) NULL COMMENT 'DEPRECATED: 历史字段;以 org_id 为准',
org_id VARCHAR(32) NULL COMMENT '组织节点ID(cw_is_organization.ID),租户默认策略必填',
policy_type VARCHAR(32) NOT NULL DEFAULT 'INTERSECT_ALLOWLIST' COMMENT '策略类型(历史命名;语义为替代 allow_zone_ids',
allow_zone_ids TEXT NULL COMMENT 'JSON 数组,zoneId 列表',
building_id VARCHAR(64) NULL COMMENT '预留:楼栋维度;租户默认填 NULL',
enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1 启用 0 停用',
policy_version BIGINT NOT NULL DEFAULT 1 COMMENT '配置版本号',
remark VARCHAR(256) NULL,
created_by VARCHAR(64) NULL,
created_at BIGINT NULL,
updated_by VARCHAR(64) NULL,
updated_at BIGINT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_org_building (org_id, building_id),
KEY idx_org_enabled (org_id, enabled),
KEY idx_business_enabled (business_id, enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户访客楼层策略(组织库;detail/访客列表替代 floorList';
@@ -0,0 +1,202 @@
-- 组织库 component-organization:广发基金 + 物业管理相关组织 — 访客楼层策略种子数据
-- 表:tenant_visitor_floor_policy(须已执行 organization_tenant_visitor_floor_policy.sql
-- 语义:组织服务按 org_id 命中;allow_zone_ids 为替代用 zoneId 列表(与电梯库种子同源)。
--
-- 执行示例:
-- mysql -h HOST -P PORT -u USER -p < organization_tenant_visitor_floor_policy_init_tenants.sql
USE `component-organization`;
SET NAMES utf8mb4;
-- ---------------------------------------------------------------------------
-- 广发基金:[28-38F]广发基金管理有限公司 → org_id 488b8ad049bb43408a6fbcc50bcb89ac
-- allow28F zone_id = 605560545117995008
-- ---------------------------------------------------------------------------
INSERT INTO tenant_visitor_floor_policy (
id,
org_id,
business_id,
policy_type,
allow_zone_ids,
building_id,
enabled,
policy_version,
remark,
created_at,
updated_at
) VALUES (
'gf_vstr_policy_guangfa_fund_001x',
'488b8ad049bb43408a6fbcc50bcb89ac',
'2524639890ba4f2cba9ba1a4eeaa4015',
'INTERSECT_ALLOWLIST',
'["605560545117995008"]',
NULL,
1,
1,
'广发基金:访客楼层策略(组织库);默认 28F。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
org_id = VALUES(org_id),
business_id = VALUES(business_id),
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
-- ---------------------------------------------------------------------------
-- 物业管理公司(多组织节点):allow = 28F + 6F,便于前端 floorList 展示两档
-- 28F zone_id = 6055605451179950086F zone_id = 605560541473144832
-- JSON 数组顺序:先 28 后 6(与「28+6」表述一致)
-- org_id 来源:component-organization.cw_is_organization(与 docs/sql/tenant_visitor_floor_policy_init_property_mgmt_6f.sql 一致)
-- ---------------------------------------------------------------------------
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_001',
'2524639890ba4f2cba9ba1a4eeaa4015',
'64fdc8eaf5824df5a1329819af29b79f',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星河湾物业管理有限公司:访客策略(组织库);28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_002',
'2524639890ba4f2cba9ba1a4eeaa4015',
'8fc3f910bd834198a539832017fe920e',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星河湾物业管理公司:访客策略(组织库);28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_003',
'2524639890ba4f2cba9ba1a4eeaa4015',
'cc760fdf9c384a0cbf4951ccf2c6452e',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星河湾物管公司:访客策略(组织库);28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_004',
'2524639890ba4f2cba9ba1a4eeaa4015',
'f216235e54ca42bfa0379e69b3754aff',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星中心物业管理公司:访客策略(组织库);28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_005',
'2524639890ba4f2cba9ba1a4eeaa4015',
'95818575a2284db6833289474d33671f',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星中心物业服务中心:访客策略(组织库);28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_006',
'2524639890ba4f2cba9ba1a4eeaa4015',
'348328d755624b3491cd307a3109f36a',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星中心物管公司:访客策略(组织库);28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_007',
'2524639890ba4f2cba9ba1a4eeaa4015',
'dde6cc9a4f6b4f5490d03e26fb016200',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'物业管理总部:访客策略(组织库);28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
+27
View File
@@ -0,0 +1,27 @@
-- 租户访客默认楼层策略(电梯应用库)
-- 设计说明:docs/business/租户访客默认楼层-数据库配置阶段技术设计.md
CREATE TABLE IF NOT EXISTS tenant_visitor_floor_policy (
id VARCHAR(32) NOT NULL COMMENT '主键',
business_id VARCHAR(64) NOT NULL COMMENT '机构/租户 ID',
policy_type VARCHAR(32) NOT NULL DEFAULT 'INTERSECT_ALLOWLIST' COMMENT '策略类型',
allow_zone_ids TEXT NULL COMMENT 'JSON 数组,zoneId 列表',
building_id VARCHAR(64) NULL COMMENT '预留:楼栋维度;租户默认填 NULL',
enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1 启用 0 停用',
policy_version BIGINT NOT NULL DEFAULT 1 COMMENT '配置版本号',
remark VARCHAR(256) NULL,
created_by VARCHAR(64) NULL,
created_at BIGINT NULL,
updated_by VARCHAR(64) NULL,
updated_at BIGINT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_biz_building (business_id, building_id),
KEY idx_business_enabled (business_id, enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='租户访客默认楼层策略(与组织 floorList 求交)';
-- 示例(实施时替换占位符后执行)
-- INSERT INTO tenant_visitor_floor_policy
-- (id, business_id, policy_type, allow_zone_ids, building_id, enabled, policy_version, remark, created_at, updated_at)
-- VALUES
-- (REPLACE(UUID(),'-',''), 'REPLACE_WITH_BUSINESS_ID', 'INTERSECT_ALLOWLIST',
-- '["REPLACE_ZONE_A","REPLACE_ZONE_B"]', NULL, 1, 1, '实施录入', UNIX_TIMESTAMP(NOW())*1000, UNIX_TIMESTAMP(NOW())*1000);
@@ -0,0 +1,48 @@
-- 广发基金租户:访客默认楼层策略初始化(电梯库 cw-elevator-application
-- 组织库 component-organization 同源种子:organization_tenant_visitor_floor_policy_init_tenants.sql
--
-- 字段说明:allow_zone_ids 为 JSON 数组,元素使用 code_elevator_area.zone_idsnowflake 格式),
-- 与 PersonResult.floorList 和 image_rule_ref.zone_id 同一套 ID。
--
-- 数据来源(现场查询 192.168.3.12:3307):
-- org_idcomponent-organization.cw_is_organization
-- NAME='[28-38F]广发基金管理有限公司' -> ID = 488b8ad049bb43408a6fbcc50bcb89ac
-- 28F zone_idcw-elevator-application.code_elevator_area
-- zone_id = 605560545117995008zone_name=28Fcode=0x1C
--
-- 重复执行:使用固定 id + ON DUPLICATE KEY UPDATE,幂等。
SET NAMES utf8mb4;
INSERT INTO tenant_visitor_floor_policy (
id,
org_id,
business_id,
policy_type,
allow_zone_ids,
building_id,
enabled,
policy_version,
remark,
created_at,
updated_at
) VALUES (
'gf_vstr_policy_guangfa_fund_001x',
'488b8ad049bb43408a6fbcc50bcb89ac',
'2524639890ba4f2cba9ba1a4eeaa4015',
'INTERSECT_ALLOWLIST',
'["605560545117995008"]',
NULL,
1,
1,
'广发基金:访客与 floorList 求交后仅保留 allowlist(默认仅 28F zone)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
org_id = VALUES(org_id),
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
@@ -0,0 +1,186 @@
-- 物业公司租户:访客默认楼层策略初始化(电梯库 cw-elevator-application
-- 组织库 component-organization 同源种子:organization_tenant_visitor_floor_policy_init_tenants.sql
-- allow_zone_ids28F + 6FJSON 顺序先 28 后 6),便于前端展示;语义仍以组织侧替代 floorList 为准。
--
-- 数据来源(192.168.3.12:3307):
-- org_idcomponent-organization.cw_is_organization
-- 星河湾物业管理有限公司 → 64fdc8eaf5824df5a1329819af29b79f
-- 星河湾物业管理公司 → 8fc3f910bd834198a539832017fe920e
-- 星河湾物管公司 → cc760fdf9c384a0cbf4951ccf2c6452e
-- 星中心物业管理公司 → f216235e54ca42bfa0379e69b3754aff
-- 星中心物业服务中心 → 95818575a2284db6833289474d33671f
-- 星中心物管公司 → 348328d755624b3491cd307a3109f36a
-- 物业管理总部 → dde6cc9a4f6b4f5490d03e26fb016200
-- 28F zone_id6055605451179950086F zone_id605560541473144832code_elevator_area
--
-- 重复执行:使用固定 id + ON DUPLICATE KEY UPDATE。
SET NAMES utf8mb4;
-- ============================================================
-- 1. 星河湾物业管理有限公司
-- ============================================================
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_001',
'2524639890ba4f2cba9ba1a4eeaa4015',
'64fdc8eaf5824df5a1329819af29b79f',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星河湾物业管理有限公司:访客默认 28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
-- ============================================================
-- 2. 星河湾物业管理公司
-- ============================================================
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_002',
'2524639890ba4f2cba9ba1a4eeaa4015',
'8fc3f910bd834198a539832017fe920e',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星河湾物业管理公司:访客默认 28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
-- ============================================================
-- 3. 星河湾物管公司
-- ============================================================
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_003',
'2524639890ba4f2cba9ba1a4eeaa4015',
'cc760fdf9c384a0cbf4951ccf2c6452e',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星河湾物管公司:访客默认 28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
-- ============================================================
-- 4. 星中心物业管理公司
-- ============================================================
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_004',
'2524639890ba4f2cba9ba1a4eeaa4015',
'f216235e54ca42bfa0379e69b3754aff',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星中心物业管理公司:访客默认 28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
-- ============================================================
-- 5. 星中心物业服务中心
-- ============================================================
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_005',
'2524639890ba4f2cba9ba1a4eeaa4015',
'95818575a2284db6833289474d33671f',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星中心物业服务中心:访客默认 28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
-- ============================================================
-- 6. 星中心物管公司
-- ============================================================
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_006',
'2524639890ba4f2cba9ba1a4eeaa4015',
'348328d755624b3491cd307a3109f36a',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'星中心物管公司:访客默认 28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
-- ============================================================
-- 7. 物业管理总部
-- ============================================================
INSERT INTO tenant_visitor_floor_policy (
id, business_id, org_id, policy_type, allow_zone_ids,
building_id, enabled, policy_version, remark, created_at, updated_at
) VALUES (
'pm_6f_vstr_policy_007',
'2524639890ba4f2cba9ba1a4eeaa4015',
'dde6cc9a4f6b4f5490d03e26fb016200',
'INTERSECT_ALLOWLIST',
'["605560545117995008","605560541473144832"]',
NULL, 1, 1,
'物业管理总部:访客默认 28F+6F(顺序:先 28 后 6,便于前端)。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
) ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
@@ -0,0 +1,31 @@
-- 租户访客楼层策略:business_id → org_id 数据迁移
-- 前提:DDLtenant_visitor_floor_policy_v2.sql)已执行
-- 执行方式:人工确认 org_id 对应关系后逐行执行
-- 1. 列出所有公司级组织节点(在 component-organization 库执行,供确认)
-- SELECT o.ID, o.NAME, o.PARENT_ID
-- FROM `component-organization`.cw_is_organization o
-- WHERE o.BUSINESS_ID = '2524639890ba4f2cba9ba1a4eeaa4015'
-- AND o.IS_DEL = 0
-- ORDER BY o.NAME;
USE cw-elevator-application;
-- 2. 为现有策略行填入 org_id(示例:广发基金)
-- 请先确认 NAME 匹配正确,再执行
-- UPDATE tenant_visitor_floor_policy
-- SET org_id = '<广发基金的 org_id>',
-- business_id = NULL
-- WHERE id = 'gf_vstr_policy_guangfa_fund_001x';
-- 3. 为其他公司新增策略行(模板)
-- INSERT INTO tenant_visitor_floor_policy
-- (id, org_id, policy_type, allow_zone_ids, building_id, enabled, policy_version, remark, created_at, updated_at)
-- VALUES
-- (REPLACE(UUID(),'-',''), '<公司 org_id>', 'INTERSECT_ALLOWLIST',
-- '["<zone_id>"]', NULL, 1, 1, '', UNIX_TIMESTAMP(NOW())*1000, UNIX_TIMESTAMP(NOW())*1000);
-- 4. 验证迁移结果
SELECT id, org_id, business_id, policy_type, allow_zone_ids, enabled
FROM tenant_visitor_floor_policy
ORDER BY org_id;
@@ -0,0 +1,26 @@
-- 租户访客楼层策略:org_id 粒度修复
-- 执行顺序:先 DDL → 数据迁移 → 发应用包
-- 回滚:DROP INDEX uk_org_building, DROP COLUMN org_id, ADD UNIQUE KEY uk_biz_building (business_id, building_id)
USE `cw-elevator-application`;
-- 1. 新增 org_id 列
ALTER TABLE tenant_visitor_floor_policy
ADD COLUMN org_id VARCHAR(32) NULL COMMENT '组织节点ID(cw_is_organization.ID)'
AFTER business_id;
-- 2. 替换唯一约束(business_id → org_id
ALTER TABLE tenant_visitor_floor_policy
DROP INDEX uk_biz_building,
ADD UNIQUE KEY uk_org_building (org_id, building_id);
-- 3. 标记 business_id 为废弃
ALTER TABLE tenant_visitor_floor_policy
MODIFY COLUMN business_id VARCHAR(64) NULL COMMENT 'DEPRECATED: 已废弃,以 org_id 为准';
-- 验证
SELECT COLUMN_NAME, COLUMN_KEY, COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'cw-elevator-application'
AND TABLE_NAME = 'tenant_visitor_floor_policy'
ORDER BY ORDINAL_POSITION;