-- ======================================== -- FastBee项目管理数据库表创建脚本 -- 创建日期: 2026-06-28 -- 更新日期: 2026-08-01 -- 描述: 创建项目表,实现User→Project→Device直接关联 -- ======================================== -- 创建项目表(iot_project) -- 实现 User → Project 层级(通过responsible_user_id字段) CREATE TABLE `iot_project` ( `project_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '项目ID', `project_name` VARCHAR(100) NOT NULL COMMENT '项目名称', `project_code` VARCHAR(50) DEFAULT NULL COMMENT '项目编码', `tenant_id` BIGINT(20) NOT NULL COMMENT '租户ID', `tenant_name` VARCHAR(30) DEFAULT '' COMMENT '租户名称', `responsible_user_id` BIGINT(20) DEFAULT NULL COMMENT '负责人ID', `responsible_user_name` VARCHAR(30) DEFAULT '' COMMENT '负责人姓名', `longitude` DOUBLE(11,6) DEFAULT NULL COMMENT '项目经度', `latitude` DOUBLE(11,6) DEFAULT NULL COMMENT '项目纬度', `address` VARCHAR(255) DEFAULT NULL COMMENT '项目地址', `project_status` TINYINT(1) DEFAULT 2 COMMENT '项目状态(1-预警,2-运行中,3-完结)', `start_time` DATETIME DEFAULT NULL COMMENT '开始时间', `end_time` DATETIME DEFAULT NULL COMMENT '结束时间', `project_desc` VARCHAR(500) DEFAULT NULL COMMENT '项目描述', `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)', `create_by` VARCHAR(64) DEFAULT '' COMMENT '创建者', `create_time` DATETIME DEFAULT NULL COMMENT '创建时间', `update_by` VARCHAR(64) DEFAULT '' COMMENT '更新者', `update_time` DATETIME DEFAULT NULL COMMENT '更新时间', `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`project_id`), KEY `idx_tenant_user` (`tenant_id`, `responsible_user_id`), KEY `idx_project_status` (`project_status`), KEY `idx_create_time` (`create_time`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='业务项目表'; -- 1. 设备表新增所属项目字段 ALTER TABLE `iot_device` ADD COLUMN `project_id` BIGINT(20) DEFAULT NULL COMMENT '所属项目ID' AFTER `tenant_name`, ADD COLUMN project_name VARCHAR(64) COMMENT '所属项目名称', ADD INDEX `idx_project_id` (`project_id`); -- ======================================== -- 层级关系说明: -- User (responsible_user_id) → Project (project_id) → Device (project_id) -- -- 项目与设备的关系: -- - 一个设备最多属于一个项目(通过 iot_device.project_id 外键) -- - 一个项目可以包含多个设备 -- - iot_device.project_id 为 NULL 表示设备未关联项目 -- -- 与现有逻辑兼容的关键点: -- 1. iot_group / iot_device_group 表保持不变(独立的设备分组管理功能) -- 2. iot_device_user 表保持不变(设备归属关系独立) -- -- 用户查询设备的两种路径: -- 路径1:查询用户负责的项目设备(项目维度) -- SELECT d.* FROM iot_device d -- INNER JOIN iot_project p ON d.project_id = p.project_id -- WHERE p.responsible_user_id = #{userId} AND p.del_flag='0' AND d.del_flag='0' -- -- 路径2:查询设备归属用户的设备(用户维度) -- SELECT d.* FROM iot_device d -- INNER JOIN iot_device_user du ON d.device_id = du.device_id -- WHERE du.user_id = #{userId} AND d.del_flag='0' -- ========================================