feat(iot): B2 RuleChain/Node/Link 数据模型 + CRUD(单 Trigger/DAG 无环/乐观锁)
- 新增 sql/iot/V2.0.1__iot_rule_chain.sql(iot_rule_chain/node/link 三表 + idx_binding 索引)
- 新增 rule 模块 dal/(3 个 DO + 4 个封闭枚举 + 3 个 Mapper)
- 新增 rule 模块 service/(CRUD + 单 Trigger 校验 + DAG DFS 无环 + 乐观锁 + 级联软删)
- 新增 rule 模块 controller/admin/(7 REST 端点 + @PreAuthorize + VO)
- 新增 resources/mapper/rule/(3 个 MyBatis XML)
- api 模块 ErrorCodeConstants 新增规则链段(1-050-030-xxx)
- **补 B1 遗漏依赖**:rule/pom.xml 追加 viewsh-spring-boot-starter-{web,security,biz-tenant}
- 测试:8 个单元用例全绿(BaseMockitoUnitTest)
- Known Pitfalls 落地:
⚠️ 评审 B4:relation_type VARCHAR + 应用层 RuleLinkRelationType.isValid 校验
⚠️ 评审 B9:updateWithVersion 乐观锁原子 SQL + idx_update_time 索引支撑 B9 拉模式兜底扫描
⚠️ 评审 B10:单 Trigger 校验在 Service 层(validateSingleTrigger)
⚠️ 评审 A4:name UK(name, tenant_id, deleted)
⚠️ 评审 §十一-B:idx_binding (tenant_id, subsystem_id, product_id, device_id) 最左匹配
Co-Authored-By: Claude Sonnet (B2 subagent) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context, orchestrator) <noreply@anthropic.com>
This commit is contained in:
66
sql/iot/V2.0.1__iot_rule_chain.sql
Normal file
66
sql/iot/V2.0.1__iot_rule_chain.sql
Normal file
@@ -0,0 +1,66 @@
|
||||
-- IoT 规则引擎三张核心表
|
||||
-- [B2] RuleChain/Node/Link 数据模型
|
||||
|
||||
CREATE TABLE IF NOT EXISTS iot_rule_chain (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
name VARCHAR(128) NOT NULL COMMENT '规则链名称',
|
||||
description TEXT COMMENT '规则链描述',
|
||||
type VARCHAR(32) NOT NULL COMMENT 'SCENE / DATA / CUSTOM',
|
||||
status TINYINT NOT NULL DEFAULT 1 COMMENT '0=禁用 1=启用 2=WARNING(物模型变更导致)',
|
||||
priority INT NOT NULL DEFAULT 100 COMMENT 'ASC 排序,评审 A5',
|
||||
version BIGINT NOT NULL DEFAULT 0 COMMENT '变更时+1,评审 B9 多实例校验用',
|
||||
debug_mode TINYINT NOT NULL DEFAULT 0 COMMENT '调试模式',
|
||||
|
||||
-- 三层绑定(评审 §十一-B)
|
||||
subsystem_id BIGINT COMMENT 'NULL = 全局规则',
|
||||
product_id BIGINT COMMENT 'NULL = 不限产品',
|
||||
device_id BIGINT COMMENT 'NULL/0 = 范围内所有设备',
|
||||
|
||||
tenant_id BIGINT NOT NULL COMMENT '租户编号',
|
||||
creator VARCHAR(64) COMMENT '创建者',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updater VARCHAR(64) COMMENT '更新者',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
deleted BIT NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
||||
|
||||
INDEX idx_binding (tenant_id, subsystem_id, product_id, device_id),
|
||||
INDEX idx_status (tenant_id, status, priority),
|
||||
INDEX idx_update_time (update_time)
|
||||
) COMMENT = '规则链';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS iot_rule_node (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
rule_chain_id BIGINT NOT NULL COMMENT '所属规则链编号',
|
||||
name VARCHAR(128) COMMENT '节点名称',
|
||||
category VARCHAR(32) NOT NULL COMMENT 'trigger / condition / action',
|
||||
type VARCHAR(64) NOT NULL COMMENT 'Provider 标识(device_property / alarm_trigger 等)',
|
||||
configuration JSON NOT NULL COMMENT '节点配置',
|
||||
position_x INT COMMENT '画布 X 坐标',
|
||||
position_y INT COMMENT '画布 Y 坐标',
|
||||
tenant_id BIGINT NOT NULL COMMENT '租户编号',
|
||||
creator VARCHAR(64) COMMENT '创建者',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updater VARCHAR(64) COMMENT '更新者',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
deleted BIT NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
||||
|
||||
INDEX idx_chain (rule_chain_id, deleted)
|
||||
) COMMENT = '规则节点';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS iot_rule_link (
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||
rule_chain_id BIGINT NOT NULL COMMENT '所属规则链编号',
|
||||
source_node_id BIGINT NOT NULL COMMENT '源节点编号',
|
||||
target_node_id BIGINT NOT NULL COMMENT '目标节点编号',
|
||||
relation_type VARCHAR(32) NOT NULL COMMENT '【封闭枚举 评审 B4】Success/Failure/True/False/Timeout/Skip',
|
||||
condition JSON COMMENT '连线条件(可选)',
|
||||
sort_order INT DEFAULT 0 COMMENT '排序',
|
||||
tenant_id BIGINT NOT NULL COMMENT '租户编号',
|
||||
creator VARCHAR(64) COMMENT '创建者',
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updater VARCHAR(64) COMMENT '更新者',
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
deleted BIT NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
||||
|
||||
INDEX idx_source (rule_chain_id, source_node_id, deleted)
|
||||
) COMMENT = '规则连线';
|
||||
Reference in New Issue
Block a user