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>
216 lines
8.6 KiB
SQL
216 lines
8.6 KiB
SQL
-- =============================================
|
||
-- 租户-项目两级架构 - 业务表增加 project_id 字段
|
||
-- 执行顺序:ADD NULL → UPDATE 回填 → MODIFY NOT NULL → ADD INDEX
|
||
-- 前置条件:02-default-data.sql 已执行,system_project 中已有默认项目数据
|
||
-- =============================================
|
||
|
||
-- -----------------------------------------------
|
||
-- 1. iot_device
|
||
-- -----------------------------------------------
|
||
ALTER TABLE iot_device ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE iot_device d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE iot_device MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE iot_device ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 2. ops_order
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_order ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_order d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_order MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_order ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 3. ops_order_event
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_order_event ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_order_event d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_order_event MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_order_event ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 4. ops_order_dispatch
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_order_dispatch ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_order_dispatch d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_order_dispatch MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_order_dispatch ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 5. ops_order_queue
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_order_queue ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_order_queue d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_order_queue MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_order_queue ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 6. ops_bus_area
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_bus_area ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_bus_area d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_bus_area MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_bus_area ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 7. ops_area_device_relation
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_area_device_relation ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_area_device_relation d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_area_device_relation MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_area_device_relation ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 8. ops_order_security_ext
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_order_security_ext ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_order_security_ext d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_order_security_ext MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_order_security_ext ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 9. ops_area_security_user
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_area_security_user ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_area_security_user d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_area_security_user MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_area_security_user ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 10. ops_order_clean_ext
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_order_clean_ext ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_order_clean_ext d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_order_clean_ext MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_order_clean_ext ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 11. ops_cleaner_status
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_cleaner_status ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_cleaner_status d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_cleaner_status MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_cleaner_status ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 12. ops_cleaner_performance_monthly
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_cleaner_performance_monthly ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_cleaner_performance_monthly d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_cleaner_performance_monthly MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_cleaner_performance_monthly ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 13. ops_device_trajectory
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_device_trajectory ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_device_trajectory d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_device_trajectory MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_device_trajectory ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 14. ops_inspection_record
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_inspection_record ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_inspection_record d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_inspection_record MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_inspection_record ADD INDEX idx_project_id (project_id);
|
||
|
||
-- -----------------------------------------------
|
||
-- 15. ops_inspection_record_item
|
||
-- -----------------------------------------------
|
||
ALTER TABLE ops_inspection_record_item ADD COLUMN project_id BIGINT NULL COMMENT '项目编号';
|
||
|
||
UPDATE ops_inspection_record_item d
|
||
JOIN system_project p ON p.tenant_id = d.tenant_id AND p.code = 'DEFAULT' AND p.deleted = 0
|
||
SET d.project_id = p.id
|
||
WHERE d.project_id IS NULL;
|
||
|
||
ALTER TABLE ops_inspection_record_item MODIFY COLUMN project_id BIGINT NOT NULL COMMENT '项目编号';
|
||
|
||
ALTER TABLE ops_inspection_record_item ADD INDEX idx_project_id (project_id);
|