Files
aiot-platform-cloud/sql/mysql/project/02-default-data.sql
lzh a2f500fa20 feat(tenant): 租户-项目两级架构 Phase 2 — IoT + Ops 业务迁移
DO 迁移 (15个 TenantBaseDO → ProjectBaseDO):
- IoT: IotDeviceDO
- Ops 核心: OpsOrderDO, OpsOrderEventDO, OpsOrderDispatchDO, OpsOrderQueueDO,
  OpsBusAreaDO, OpsAreaDeviceRelationDO, OpsDeviceTrajectoryDO
- Ops 保洁: OpsOrderCleanExtDO, OpsCleanerStatusDO, OpsCleanerPerformanceMonthlyDO,
  OpsInspectionRecordDO, OpsInspectionRecordItemDO
- Ops 安保: OpsOrderSecurityExtDO, OpsAreaSecurityUserDO

IoT 适配:
- IotDeviceRespDTO 新增 projectId 字段
- IotDeviceMessage 新增 projectId 字段
- IotDeviceMessageServiceImpl.appendDeviceMessage() 设置 projectId
- IotCleanRuleMessageHandler 嵌套 ProjectUtils.execute() 设置项目上下文

缓存改造:
- ProjectRedisCacheManager extends TenantRedisCacheManager,追加 :projectId 后缀
- ViewshTenantAutoConfiguration 替换为 ProjectRedisCacheManager

SQL 迁移脚本 (sql/mysql/project/):
- 01-create-tables.sql: system_project + system_user_project 建表
- 02-default-data.sql: 默认项目 + 用户关联回填
- 03-alter-business-tables.sql: 15 张表添加 project_id (NULL → 回填 → NOT NULL → 索引)
- 04-index-audit.sql: 现有索引审计 + project_id 补充建议
- 99-rollback.sql: 完整回滚方案

附带修复:
- fix(ops): UserDispatchStatusServiceImpl 添加缺失的 KEY_PREFIX 常量

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 22:27:34 +08:00

22 lines
1.0 KiB
SQL

-- =============================================
-- 租户-项目两级架构 - 默认数据迁移
-- 为每个现有租户创建默认项目,为所有用户关联默认项目
-- =============================================
-- Step 1: 为每个现有租户创建默认项目
INSERT INTO system_project (tenant_id, name, code, status, remark, creator, updater, deleted)
SELECT id, name, 'DEFAULT', 0, '系统自动生成默认项目', 'system', 'system', 0
FROM system_tenant WHERE deleted = 0;
-- Step 2: 为所有用户关联默认项目
INSERT INTO system_user_project (user_id, project_id, tenant_id, creator, updater, deleted)
SELECT u.id, p.id, u.tenant_id, 'system', 'system', 0
FROM system_users u
JOIN system_project p ON p.tenant_id = u.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
WHERE u.deleted = 0;
-- 验证
SELECT '默认项目数量' AS metric, COUNT(*) AS value FROM system_project WHERE code = 'DEFAULT' AND deleted = 0
UNION ALL
SELECT '用户-项目关联数量', COUNT(*) FROM system_user_project WHERE deleted = 0;