- 新增 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>
40 lines
1.6 KiB
SQL
40 lines
1.6 KiB
SQL
-- 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='子系统';
|