iotsaas/backend/sql/V13__add_product_module.sql
2995840376 0ce191c448 chore: 初始化 iotsaas 版本库基线
纳入范围:
- backend/  Spring Boot 多模块后端(iot-common/device/rule/data/alarm/auth)
- frontend/admin/  Vue3 + Element Plus 管理后台
- Android/   涂鸦原生 APP (com.xhai.iot)
- backend/sql/  Flyway 风格迁移脚本(V2~V21)
- docs/       对接文档与设计文档

排除范围:
- 构建产物: node_modules/ target/ build/ dist/ .gradle/
- 签名密钥: *.jks *.keystore (严禁入库)
- 本机配置: Android/local.properties
- 运行日志: logs/ *.log
- AI 协作本地数据 .codebuddy/ 与第三方 demo tuya-demo/

.gitattributes 统一以 LF 存储, Windows 批处理保留 CRLF
2026-10-27 12:00:41 +08:00

133 lines
7.0 KiB
SQL
Raw Permalink 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.

-- ============================================================
-- 产品管理模块(Product & TSL & OTA)
-- 新增产品、物模型(属性/事件/服务)、固件、OTA 任务;
-- device 表新增 product_id(保留原 model/manufacturer 作为兼容快照,后续再废弃)。
-- ============================================================
CREATE TABLE IF NOT EXISTS `product` (
`id` BIGINT NOT NULL COMMENT '主键',
`product_key` VARCHAR(64) NOT NULL COMMENT '产品业务编码',
`name` VARCHAR(128) NOT NULL COMMENT '产品名称',
`category` VARCHAR(32) DEFAULT '' COMMENT '品类(light/switch/ac/security...)',
`manufacturer` VARCHAR(64) DEFAULT '' COMMENT '厂商',
`model` VARCHAR(64) DEFAULT '' COMMENT '型号',
`platform` VARCHAR(32) DEFAULT 'tuya' COMMENT '接入平台(tuya/local/matter)',
`platform_product_id` VARCHAR(64) DEFAULT '' COMMENT '平台产品ID(如涂鸦productId)',
`connect_type` VARCHAR(32) DEFAULT '' COMMENT '联网方式(wifi/ble/zigbee/matter)',
`net_config_type` VARCHAR(32) DEFAULT '' COMMENT '配网方式',
`icon` VARCHAR(255) DEFAULT '' COMMENT '图标',
`description` VARCHAR(512) DEFAULT '' COMMENT '说明',
`status` VARCHAR(16) DEFAULT 'draft' COMMENT 'draft/published',
`spec_version` INT DEFAULT 1 COMMENT '物模型版本',
`tenant_id` BIGINT DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`deleted` INT DEFAULT 0,
`create_by` BIGINT DEFAULT NULL,
`update_by` BIGINT DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_product_key` (`product_key`),
KEY `idx_platform_product` (`platform`, `platform_product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品表';
CREATE TABLE IF NOT EXISTS `product_property` (
`id` BIGINT NOT NULL COMMENT '主键',
`product_id` BIGINT NOT NULL COMMENT '产品ID',
`code` VARCHAR(64) NOT NULL COMMENT '功能点编码(如 switch_1)',
`name` VARCHAR(128) DEFAULT '' COMMENT '名称',
`access` VARCHAR(16) DEFAULT 'read' COMMENT 'read/write/notify',
`type` VARCHAR(16) DEFAULT 'bool' COMMENT 'bool/int/enum/float/string/json',
`min` VARCHAR(32) DEFAULT '' COMMENT '最小值',
`max` VARCHAR(32) DEFAULT '' COMMENT '最大值',
`step` VARCHAR(32) DEFAULT '' COMMENT '步长',
`unit` VARCHAR(32) DEFAULT '' COMMENT '单位',
`enum_list` TEXT COMMENT '枚举值(JSON数组)',
`dp_id` VARCHAR(32) DEFAULT '' COMMENT '平台DP点映射(如涂鸦DP)',
`default_value` VARCHAR(128) DEFAULT '' COMMENT '默认值',
`sort` INT DEFAULT 0 COMMENT '排序',
`tenant_id` BIGINT DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`deleted` INT DEFAULT 0,
`create_by` BIGINT DEFAULT NULL,
`update_by` BIGINT DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_product_property` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品属性(物模型)';
CREATE TABLE IF NOT EXISTS `product_event` (
`id` BIGINT NOT NULL COMMENT '主键',
`product_id` BIGINT NOT NULL COMMENT '产品ID',
`code` VARCHAR(64) NOT NULL COMMENT '事件编码',
`name` VARCHAR(128) DEFAULT '' COMMENT '名称',
`type` VARCHAR(16) DEFAULT 'info' COMMENT 'info/alert/fault',
`params` TEXT COMMENT '事件参数(JSON)',
`tenant_id` BIGINT DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`deleted` INT DEFAULT 0,
`create_by` BIGINT DEFAULT NULL,
`update_by` BIGINT DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_product_event` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品事件(物模型)';
CREATE TABLE IF NOT EXISTS `product_action` (
`id` BIGINT NOT NULL COMMENT '主键',
`product_id` BIGINT NOT NULL COMMENT '产品ID',
`code` VARCHAR(64) NOT NULL COMMENT '服务编码',
`name` VARCHAR(128) DEFAULT '' COMMENT '名称',
`input` TEXT COMMENT '输入参数(JSON)',
`output` TEXT COMMENT '输出参数(JSON)',
`tenant_id` BIGINT DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`deleted` INT DEFAULT 0,
`create_by` BIGINT DEFAULT NULL,
`update_by` BIGINT DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_product_action` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品服务(物模型)';
CREATE TABLE IF NOT EXISTS `firmware` (
`id` BIGINT NOT NULL COMMENT '主键',
`product_id` BIGINT NOT NULL COMMENT '产品ID',
`version` VARCHAR(64) NOT NULL COMMENT '固件版本',
`file_url` VARCHAR(512) DEFAULT '' COMMENT '升级包地址',
`file_md5` VARCHAR(64) DEFAULT '' COMMENT '校验MD5',
`size` BIGINT DEFAULT 0 COMMENT '大小(字节)',
`release_note` VARCHAR(512) DEFAULT '' COMMENT '更新说明',
`is_latest` INT DEFAULT 0 COMMENT '是否最新(0/1)',
`status` VARCHAR(16) DEFAULT 'draft' COMMENT 'draft/published',
`tenant_id` BIGINT DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`deleted` INT DEFAULT 0,
`create_by` BIGINT DEFAULT NULL,
`update_by` BIGINT DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_firmware_product` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='固件表';
CREATE TABLE IF NOT EXISTS `ota_task` (
`id` BIGINT NOT NULL COMMENT '主键',
`product_id` BIGINT NOT NULL COMMENT '产品ID',
`firmware_id` BIGINT DEFAULT NULL COMMENT '目标固件ID',
`target_version` VARCHAR(64) DEFAULT '' COMMENT '目标版本',
`scope` VARCHAR(16) DEFAULT 'all' COMMENT 'all/designated/gray',
`device_ids` TEXT COMMENT '指定设备ID(JSON数组)',
`status` VARCHAR(16) DEFAULT 'running' COMMENT 'running/done/paused/failed',
`success_count` INT DEFAULT 0 COMMENT '成功数',
`fail_count` INT DEFAULT 0 COMMENT '失败数',
`tenant_id` BIGINT DEFAULT NULL,
`create_time` DATETIME DEFAULT NULL,
`update_time` DATETIME DEFAULT NULL,
`deleted` INT DEFAULT 0,
`create_by` BIGINT DEFAULT NULL,
`update_by` BIGINT DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_ota_product` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='OTA升级任务';
ALTER TABLE `device` ADD COLUMN `product_id` BIGINT DEFAULT NULL COMMENT '所属产品ID' AFTER `home_id`;