Files
aiot-platform-cloud/sql/iot/V2.0.2__iot_subsystem.sql
lzh 6649e1abb6 feat(iot): B10 iot_subsystem 表 + CRUD + Redis 设备计数聚合
- 新增 sql/iot/V2.0.2__iot_subsystem.sql(iot_project + iot_subsystem)
- 新增 server 模块 subsystem/ 下 DO + Mapper + Service + Controller + VO(7 端点)
- 新增 IotSubsystemDeviceCountRedisDAO(HINCRBY + rebuild + ApplicationReadyEvent 触发)
- api 模块 ErrorCodeConstants 新增子系统段(1-050-020-xxx)
- server 模块 RedisKeyConstants 新增 SUBSYSTEM_DEVCOUNT
- 测试:8 个单元用例全绿(mvn test IotSubsystemServiceImplTest)
- Known Pitfalls 落地:
  ⚠️ 评审 A4:UK(name, tenant_id, project_id, deleted) + 应用层 existsByNameAndProject 兜底 NULL
  ⚠️ 评审 A6:device-stats 走 Redis Hash,避免 GROUP BY
  ⚠️ 评审 A7:simple-list 权限码 iot:device:query,返回字段仅 id/name/code
  ⚠️ 删除校验:Redis 计数 > 0 抛 SUBSYSTEM_HAS_DEVICES
  ⚠️ Redis 重建:ApplicationReadyEvent + try/catch + log.warn 不阻塞启动

说明:iot_device 当前无 subsystem_id 列(rebuild 逻辑标 TODO B11),
待 B11 加列后启用 DB 重建查询。

Co-Authored-By: Claude Sonnet (B10 subagent) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context, orchestrator) <noreply@anthropic.com>
2026-04-23 21:08:00 +08:00

40 lines
1.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- B10: iot_project + iot_subsystem 表创建
-- 版本: V2.0.2
CREATE TABLE IF NOT EXISTS iot_project (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(128) NOT NULL,
description TEXT,
icon VARCHAR(256),
status TINYINT NOT NULL DEFAULT 1,
sort INT DEFAULT 0,
tenant_id BIGINT NOT NULL,
creator VARCHAR(64),
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64),
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted BIT NOT NULL DEFAULT b'0',
UNIQUE KEY uk_name (name, tenant_id, deleted)
) COMMENT='项目(架构预留,本期不开放 API';
CREATE TABLE IF NOT EXISTS iot_subsystem (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(128) NOT NULL,
code VARCHAR(64) NOT NULL,
description TEXT,
icon VARCHAR(256),
status TINYINT NOT NULL DEFAULT 1,
sort INT DEFAULT 0,
project_id BIGINT COMMENT '预留(允许 NULL',
config JSON,
tenant_id BIGINT NOT NULL,
creator VARCHAR(64),
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64),
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted BIT NOT NULL DEFAULT b'0',
-- 【评审 A4】加 project_id 维度MySQL NULL 不参与 UK 唯一性 → 应用层兜底
UNIQUE KEY uk_name (name, tenant_id, project_id, deleted),
UNIQUE KEY uk_code (code, tenant_id, project_id, deleted)
) COMMENT='子系统';