# 物业报修管理模块 - 数据库设计 ## 📋 文档信息 **文档名称**:物业报修管理模块数据库设计 **文档版本**:v1.0 **创建日期**:2025-01-23 **设计规范**:严格遵循 `docs/设计文档/database/mysql-database-standard.md` **依据文档**:功能需求清单.md ## 🎯 数据库设计原则 ### 核心设计理念 1. **严格遵循项目规范**:所有表必须包含标准基础字段 2. **业务导向设计**:基于实际业务流程设计表结构 3. **性能优化**:合理设计索引,支持高效查询 4. **扩展性考虑**:预留扩展字段和机制 5. **数据完整性**:通过应用层维护关联关系 ### 关键约束 - ✅ **使用雪花 ID**作为主键 - ✅ **强制逻辑删除**,禁止物理删除 - ✅ **多租户支持**,所有表包含 tenant_id - ✅ **禁用外键约束**,关联关系通过应用层维护 - ✅ **完整中文注释**,便于理解和维护 ## 📊 数据模型概览 ### 🗂️ 表结构清单 | 表名 | 中文名称 | 用途 | 关联关系 | | --------------------------- | ---------- | ---------------------- | ------------ | | `hq_pm_repair_order` | 报修工单表 | 存储报修申请的核心信息 | 核心表 | | `hq_pm_repair_attachment` | 报修附件表 | 存储报修相关附件文件 | 关联报修工单 | | `hq_pm_repair_progress` | 维修进度表 | 记录维修过程状态变更 | 关联报修工单 | | `hq_pm_service_evaluation` | 服务评价表 | 存储用户服务质量评价 | 关联报修工单 | | `hq_pm_repair_category` | 维修类型表 | 报修类型分类配置 | 字典表 | | `hq_pm_system_config` | 系统配置表 | 模块系统参数配置 | 配置表 | ### 📈 数据流转关系 ```mermaid graph TD A[用户提交报修] --> B[hq_pm_repair_order 报修工单] B --> C[hq_pm_repair_attachment 附件] B --> D[hq_pm_repair_progress 进度] B --> E[hq_pm_service_evaluation 评价] F[hq_pm_repair_category 类型] --> B G[hq_pm_system_config 配置] --> B H[sys_user 系统用户] --> B H --> D ``` ## 🏗️ 详细表结构设计 ### 1. 报修工单表 (hq_pm_repair_order) > **核心业务表**:存储报修申请的所有核心信息,是整个模块的数据中心 ```sql -- ---------------------------- -- Table structure for hq_pm_repair_order -- ---------------------------- DROP TABLE IF EXISTS `hq_pm_repair_order`; CREATE TABLE `hq_pm_repair_order` ( -- 标准基础字段(必须) `id` bigint(20) NOT NULL COMMENT '主键ID', `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)', -- 业务基础信息 `order_no` varchar(50) NOT NULL COMMENT '工单编号,格式:RO+年月日+4位流水号', `title` varchar(200) NOT NULL COMMENT '报修标题', `description` text NOT NULL COMMENT '问题描述', `repair_location` varchar(200) NOT NULL COMMENT '报修地点', -- 分类和紧急程度 `category_id` bigint(20) NOT NULL COMMENT '维修类型ID,关联hq_pm_repair_category.id', `priority_level` tinyint(1) NOT NULL DEFAULT 3 COMMENT '紧急程度:1-非常紧急,2-紧急,3-一般,4-不紧急,5-可延后', `expected_finish_time` datetime DEFAULT NULL COMMENT '期望完成时间', -- 报修人信息 `reporter_id` bigint(20) NOT NULL COMMENT '报修人ID,关联sys_user.id', `reporter_name` varchar(50) NOT NULL COMMENT '报修人姓名', `reporter_phone` varchar(20) NOT NULL COMMENT '报修人电话', `reporter_dept` varchar(100) DEFAULT NULL COMMENT '报修人部门', -- 工单状态和处理信息 `order_status` char(1) NOT NULL DEFAULT '1' COMMENT '工单状态:1-待分派,2-已分派,3-进行中,4-已完成,5-已评价,6-已归档,9-已取消', `assign_time` datetime DEFAULT NULL COMMENT '分派时间', `assignee_id` bigint(20) DEFAULT NULL COMMENT '分派维修员ID,关联sys_user.id', `assignee_name` varchar(50) DEFAULT NULL COMMENT '分派维修员姓名', `assign_remark` varchar(500) DEFAULT NULL COMMENT '分派备注说明', -- 处理时间信息 `start_time` datetime DEFAULT NULL COMMENT '开始处理时间', `finish_time` datetime DEFAULT NULL COMMENT '完成时间', `total_duration` int(11) DEFAULT NULL COMMENT '总处理时长(分钟)', -- 处理结果 `repair_result` text DEFAULT NULL COMMENT '维修结果描述', `used_materials` varchar(500) DEFAULT NULL COMMENT '使用材料清单', `follow_suggestions` varchar(500) DEFAULT NULL COMMENT '后续建议', -- 评价相关 `evaluation_score` decimal(3,1) DEFAULT NULL COMMENT '综合评价得分(1.0-5.0)', `evaluation_time` datetime DEFAULT NULL COMMENT '评价时间', -- 统计字段 `attachment_count` int(11) DEFAULT 0 COMMENT '附件数量', `progress_count` int(11) DEFAULT 0 COMMENT '进度记录数量', -- 其他字段 `cancel_reason` varchar(500) DEFAULT NULL COMMENT '取消原因', `remark` varchar(500) DEFAULT NULL COMMENT '备注信息', -- 主键和索引 PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `uk_order_no` (`order_no`, `tenant_id`), KEY `idx_tenant_id` (`tenant_id`), KEY `idx_deleted` (`deleted`), KEY `idx_order_status` (`order_status`), KEY `idx_priority_level` (`priority_level`), KEY `idx_create_time` (`create_time`), KEY `idx_reporter_id` (`reporter_id`), KEY `idx_assignee_id` (`assignee_id`), KEY `idx_category_id` (`category_id`), KEY `idx_assign_time` (`assign_time`), KEY `idx_finish_time` (`finish_time`), KEY `idx_tenant_status` (`tenant_id`, `order_status`, `deleted`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报修工单表'; ``` ### 2. 报修附件表 (hq_pm_repair_attachment) > **附件管理表**:存储报修过程中上传的图片、视频等多媒体文件信息 ```sql -- ---------------------------- -- Table structure for hq_pm_repair_attachment -- ---------------------------- DROP TABLE IF EXISTS `hq_pm_repair_attachment`; CREATE TABLE `hq_pm_repair_attachment` ( -- 标准基础字段(必须) `id` bigint(20) NOT NULL COMMENT '主键ID', `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)', -- 关联信息 `order_id` bigint(20) NOT NULL COMMENT '报修工单ID,关联hq_pm_repair_order.id', -- 文件信息 `file_name` varchar(200) NOT NULL COMMENT '文件原始名称', `file_path` varchar(500) NOT NULL COMMENT '文件存储路径', `file_size` bigint(20) NOT NULL COMMENT '文件大小(字节)', `file_type` varchar(20) NOT NULL COMMENT '文件类型:image-图片,video-视频', `file_extension` varchar(10) NOT NULL COMMENT '文件扩展名', `file_mime_type` varchar(100) DEFAULT NULL COMMENT '文件MIME类型', -- 上传信息 `upload_stage` char(1) NOT NULL DEFAULT '1' COMMENT '上传阶段:1-报修申请,2-维修过程,3-完成确认', `uploader_id` bigint(20) NOT NULL COMMENT '上传人ID,关联sys_user.id', `uploader_name` varchar(50) NOT NULL COMMENT '上传人姓名', -- 文件处理 `thumbnail_path` varchar(500) DEFAULT NULL COMMENT '缩略图路径(图片文件)', `duration` int(11) DEFAULT NULL COMMENT '时长(视频文件,秒)', `resolution` varchar(20) DEFAULT NULL COMMENT '分辨率(如:1920x1080)', -- 业务信息 `description` varchar(200) DEFAULT NULL COMMENT '文件描述说明', `sort_order` int(11) DEFAULT 0 COMMENT '排序顺序', -- 主键和索引 PRIMARY KEY (`id`) USING BTREE, KEY `idx_tenant_id` (`tenant_id`), KEY `idx_deleted` (`deleted`), KEY `idx_order_id` (`order_id`), KEY `idx_upload_stage` (`upload_stage`), KEY `idx_uploader_id` (`uploader_id`), KEY `idx_create_time` (`create_time`), KEY `idx_file_type` (`file_type`), KEY `idx_order_stage` (`order_id`, `upload_stage`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报修附件表'; ``` ### 3. 维修进度表 (hq_pm_repair_progress) > **进度跟踪表**:记录维修过程中的每一个状态变更和进度更新 ```sql -- ---------------------------- -- Table structure for hq_pm_repair_progress -- ---------------------------- DROP TABLE IF EXISTS `hq_pm_repair_progress`; CREATE TABLE `hq_pm_repair_progress` ( -- 标准基础字段(必须) `id` bigint(20) NOT NULL COMMENT '主键ID', `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)', -- 关联信息 `order_id` bigint(20) NOT NULL COMMENT '报修工单ID,关联hq_pm_repair_order.id', -- 进度信息 `progress_type` char(1) NOT NULL COMMENT '进度类型:1-工单分派,2-接收确认,3-到达现场,4-开始维修,5-进度更新,6-完成维修,7-用户评价,8-工单归档,9-其他', `progress_status` varchar(50) NOT NULL COMMENT '进度状态描述', `progress_detail` text DEFAULT NULL COMMENT '进度详细描述', -- 操作人信息 `operator_id` bigint(20) NOT NULL COMMENT '操作人ID,关联sys_user.id', `operator_name` varchar(50) NOT NULL COMMENT '操作人姓名', `operator_role` varchar(20) NOT NULL COMMENT '操作人角色:user-用户,admin-管理员,worker-维修员', -- 位置信息 `location_info` varchar(200) DEFAULT NULL COMMENT '操作位置信息', `gps_latitude` decimal(10,7) DEFAULT NULL COMMENT 'GPS纬度', `gps_longitude` decimal(10,7) DEFAULT NULL COMMENT 'GPS经度', -- 时间信息 `operation_time` datetime NOT NULL COMMENT '操作时间', `estimated_duration` int(11) DEFAULT NULL COMMENT '预计耗时(分钟)', -- 附加信息 `attachment_ids` varchar(500) DEFAULT NULL COMMENT '关联附件ID列表(逗号分隔)', `next_step` varchar(200) DEFAULT NULL COMMENT '下一步计划', `issues_encountered` varchar(500) DEFAULT NULL COMMENT '遇到的问题', `materials_needed` varchar(200) DEFAULT NULL COMMENT '需要的材料', -- 其他信息 `remark` varchar(500) DEFAULT NULL COMMENT '备注信息', -- 主键和索引 PRIMARY KEY (`id`) USING BTREE, KEY `idx_tenant_id` (`tenant_id`), KEY `idx_deleted` (`deleted`), KEY `idx_order_id` (`order_id`), KEY `idx_progress_type` (`progress_type`), KEY `idx_operator_id` (`operator_id`), KEY `idx_operation_time` (`operation_time`), KEY `idx_create_time` (`create_time`), KEY `idx_order_time` (`order_id`, `operation_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='维修进度表'; ``` ### 4. 服务评价表 (hq_pm_service_evaluation) > **评价反馈表**:存储用户对维修服务的多维度评价和反馈信息 ```sql -- ---------------------------- -- Table structure for hq_pm_service_evaluation -- ---------------------------- DROP TABLE IF EXISTS `hq_pm_service_evaluation`; CREATE TABLE `hq_pm_service_evaluation` ( -- 标准基础字段(必须) `id` bigint(20) NOT NULL COMMENT '主键ID', `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)', -- 关联信息 `order_id` bigint(20) NOT NULL COMMENT '报修工单ID,关联hq_pm_repair_order.id', `evaluator_id` bigint(20) NOT NULL COMMENT '评价人ID,关联sys_user.id', `evaluator_name` varchar(50) NOT NULL COMMENT '评价人姓名', `evaluated_worker_id` bigint(20) NOT NULL COMMENT '被评价维修员ID,关联sys_user.id', `evaluated_worker_name` varchar(50) NOT NULL COMMENT '被评价维修员姓名', -- 评价得分(1-5星,支持小数) `overall_score` decimal(3,1) NOT NULL COMMENT '综合评价得分(1.0-5.0)', `quality_score` decimal(3,1) NOT NULL COMMENT '维修质量得分(1.0-5.0)', `attitude_score` decimal(3,1) NOT NULL COMMENT '服务态度得分(1.0-5.0)', `response_speed_score` decimal(3,1) NOT NULL COMMENT '响应速度得分(1.0-5.0)', `communication_score` decimal(3,1) NOT NULL COMMENT '沟通效果得分(1.0-5.0)', -- 评价内容 `evaluation_content` text DEFAULT NULL COMMENT '文字评价内容', `satisfaction_level` char(1) NOT NULL COMMENT '满意度等级:1-非常满意,2-满意,3-一般,4-不满意,5-非常不满意', -- 评价设置 `is_anonymous` tinyint(1) DEFAULT 0 COMMENT '是否匿名评价(0-实名,1-匿名)', `is_public` tinyint(1) DEFAULT 1 COMMENT '是否公开显示(0-不公开,1-公开)', -- 时间信息 `evaluation_time` datetime NOT NULL COMMENT '评价时间', `service_start_time` datetime DEFAULT NULL COMMENT '服务开始时间', `service_end_time` datetime DEFAULT NULL COMMENT '服务结束时间', `service_duration` int(11) DEFAULT NULL COMMENT '服务时长(分钟)', -- 标签和建议 `positive_tags` varchar(200) DEFAULT NULL COMMENT '正面标签(逗号分隔)', `negative_tags` varchar(200) DEFAULT NULL COMMENT '负面标签(逗号分隔)', `improvement_suggestions` varchar(500) DEFAULT NULL COMMENT '改进建议', -- 其他信息 `remark` varchar(500) DEFAULT NULL COMMENT '备注信息', -- 主键和索引 PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `uk_order_evaluation` (`order_id`, `tenant_id`), KEY `idx_tenant_id` (`tenant_id`), KEY `idx_deleted` (`deleted`), KEY `idx_evaluator_id` (`evaluator_id`), KEY `idx_evaluated_worker_id` (`evaluated_worker_id`), KEY `idx_overall_score` (`overall_score`), KEY `idx_satisfaction_level` (`satisfaction_level`), KEY `idx_evaluation_time` (`evaluation_time`), KEY `idx_create_time` (`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务评价表'; ``` ### 5. 维修类型表 (hq_pm_repair_category) > **分类字典表**:存储维修类型的分类信息,支持层级结构 ```sql -- ---------------------------- -- Table structure for hq_pm_repair_category -- ---------------------------- DROP TABLE IF EXISTS `hq_pm_repair_category`; CREATE TABLE `hq_pm_repair_category` ( -- 标准基础字段(必须) `id` bigint(20) NOT NULL COMMENT '主键ID', `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)', -- 分类信息 `category_name` varchar(50) NOT NULL COMMENT '类型名称', `category_code` varchar(20) NOT NULL COMMENT '类型编码', `category_description` varchar(200) DEFAULT NULL COMMENT '类型描述', -- 层级结构 `parent_id` bigint(20) DEFAULT 0 COMMENT '父级ID,顶级为0', `ancestor_ids` varchar(500) DEFAULT '0' COMMENT '祖级列表(逗号分隔)', `level_depth` tinyint(2) DEFAULT 1 COMMENT '层级深度(1-顶级,2-二级...)', `children_count` int(11) DEFAULT 0 COMMENT '子类数量', -- 专业技能 `required_skills` varchar(200) DEFAULT NULL COMMENT '所需专业技能(逗号分隔)', `skill_level` char(1) DEFAULT '1' COMMENT '技能等级要求:1-初级,2-中级,3-高级', -- 时间和成本预估 `estimated_duration` int(11) DEFAULT NULL COMMENT '预估维修时长(分钟)', `standard_cost` decimal(10,2) DEFAULT NULL COMMENT '标准成本(元)', -- 显示控制 `icon_url` varchar(200) DEFAULT NULL COMMENT '分类图标URL', `color_code` varchar(10) DEFAULT '#1890ff' COMMENT '分类颜色代码', `sort_order` int(11) DEFAULT 0 COMMENT '排序顺序', `status` char(1) DEFAULT '1' COMMENT '状态(0-停用,1-正常)', -- 统计信息 `usage_count` int(11) DEFAULT 0 COMMENT '使用次数统计', `last_used_time` datetime DEFAULT NULL COMMENT '最后使用时间', -- 其他信息 `remark` varchar(500) DEFAULT NULL COMMENT '备注信息', -- 主键和索引 PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `uk_category_code` (`category_code`, `tenant_id`), KEY `idx_tenant_id` (`tenant_id`), KEY `idx_deleted` (`deleted`), KEY `idx_parent_id` (`parent_id`), KEY `idx_status` (`status`), KEY `idx_sort_order` (`sort_order`), KEY `idx_level_depth` (`level_depth`), KEY `idx_usage_count` (`usage_count`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='维修类型表'; ``` ### 6. 系统配置表 (hq_pm_system_config) > **配置管理表**:存储物业报修模块的系统参数和配置信息 ```sql -- ---------------------------- -- Table structure for hq_pm_system_config -- ---------------------------- DROP TABLE IF EXISTS `hq_pm_system_config`; CREATE TABLE `hq_pm_system_config` ( -- 标准基础字段(必须) `id` bigint(20) NOT NULL COMMENT '主键ID', `tenant_id` varchar(20) NOT NULL DEFAULT '000000' COMMENT '租户编号', `create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门', `create_by` bigint(20) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` bigint(20) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志(0代表存在 1代表删除)', -- 配置信息 `config_key` varchar(100) NOT NULL COMMENT '配置键名', `config_value` text DEFAULT NULL COMMENT '配置值', `config_type` varchar(20) NOT NULL COMMENT '配置类型:string-字符串,number-数字,boolean-布尔,json-JSON对象', `config_group` varchar(50) NOT NULL COMMENT '配置分组:file-文件设置,time-时间设置,notice-通知设置,workflow-流程设置', -- 配置描述 `config_name` varchar(100) NOT NULL COMMENT '配置名称', `config_description` varchar(500) DEFAULT NULL COMMENT '配置描述说明', `default_value` text DEFAULT NULL COMMENT '默认值', -- 配置约束 `is_system` tinyint(1) DEFAULT 0 COMMENT '是否系统内置(0-否,1-是,系统内置不可删除)', `is_editable` tinyint(1) DEFAULT 1 COMMENT '是否可编辑(0-否,1-是)', `validation_rule` varchar(200) DEFAULT NULL COMMENT '验证规则(正则表达式或范围)', -- 显示控制 `sort_order` int(11) DEFAULT 0 COMMENT '排序顺序', `status` char(1) DEFAULT '1' COMMENT '状态(0-停用,1-正常)', -- 其他信息 `remark` varchar(500) DEFAULT NULL COMMENT '备注信息', -- 主键和索引 PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `uk_config_key` (`config_key`, `tenant_id`), KEY `idx_tenant_id` (`tenant_id`), KEY `idx_deleted` (`deleted`), KEY `idx_config_group` (`config_group`), KEY `idx_status` (`status`), KEY `idx_sort_order` (`sort_order`), KEY `idx_is_system` (`is_system`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表'; ``` ## 📝 数据字典 ### 1. 工单状态枚举 (order_status) | 状态码 | 状态名称 | 描述 | 可执行操作 | | ------ | -------- | -------------------------- | ------------------------ | | 1 | 待分派 | 用户刚提交,等待管理员分派 | 分派、取消、修改 | | 2 | 已分派 | 已分派给维修员,等待接收 | 接收、拒绝、重新分派 | | 3 | 进行中 | 维修员已接收,正在处理 | 更新进度、完成、上报问题 | | 4 | 已完成 | 维修已完成,等待评价 | 评价、重新打开 | | 5 | 已评价 | 用户已评价,等待归档 | 归档 | | 6 | 已归档 | 工单已归档,流程结束 | 查看历史 | | 9 | 已取消 | 工单已取消 | 查看原因 | ### 2. 紧急程度枚举 (priority_level) | 等级 | 名称 | 描述 | 响应时限 | 颜色标识 | | ---- | -------- | ------------------ | --------- | -------- | | 1 | 非常紧急 | 影响安全或正常运转 | 1 小时内 | 红色 | | 2 | 紧急 | 影响重要功能使用 | 4 小时内 | 橙色 | | 3 | 一般 | 常规维修需求 | 24 小时内 | 蓝色 | | 4 | 不紧急 | 不影响使用的问题 | 72 小时内 | 绿色 | | 5 | 可延后 | 可以安排时间处理 | 一周内 | 灰色 | ### 3. 进度类型枚举 (progress_type) | 类型码 | 类型名称 | 操作人角色 | 描述 | | ------ | -------- | ----------- | ------------------ | | 1 | 工单分派 | 管理员 | 工单分派给维修员 | | 2 | 接收确认 | 维修员 | 维修员确认接收工单 | | 3 | 到达现场 | 维修员 | 维修员到达维修现场 | | 4 | 开始维修 | 维修员 | 开始进行维修作业 | | 5 | 进度更新 | 维修员 | 维修过程进度更新 | | 6 | 完成维修 | 维修员 | 维修工作已完成 | | 7 | 用户评价 | 用户 | 用户提交服务评价 | | 8 | 工单归档 | 系统/管理员 | 工单归档处理 | | 9 | 其他 | 任意角色 | 其他类型操作 | ### 4. 文件类型枚举 (file_type) | 类型 | 名称 | 支持格式 | 大小限制 | | ----- | ---- | ------------------- | -------- | | image | 图片 | jpg, jpeg, png, gif | 5MB | | video | 视频 | mp4, avi, mov | 50MB | ### 5. 上传阶段枚举 (upload_stage) | 阶段码 | 阶段名称 | 描述 | | ------ | -------- | ---------------------- | | 1 | 报修申请 | 用户提交报修时上传 | | 2 | 维修过程 | 维修员维修过程中上传 | | 3 | 完成确认 | 维修完成时上传结果照片 | ## 🔧 索引优化策略 ### 1. 核心业务查询索引 ```sql -- 报修工单表的核心查询索引 -- 1. 按状态和时间查询(管理员常用) CREATE INDEX idx_status_time ON hq_pm_repair_order (order_status, create_time); -- 2. 按维修员查询其工单(维修员常用) CREATE INDEX idx_assignee_status ON hq_pm_repair_order (assignee_id, order_status); -- 3. 按报修人查询(用户查看自己的工单) CREATE INDEX idx_reporter_time ON hq_pm_repair_order (reporter_id, create_time); -- 4. 按紧急程度和分派时间查询(工单分派) CREATE INDEX idx_priority_assign ON hq_pm_repair_order (priority_level, assign_time); ``` ### 2. 附件查询索引 ```sql -- 附件表的查询索引 -- 1. 按工单查询附件(最常用) CREATE INDEX idx_order_stage ON hq_pm_repair_attachment (order_id, upload_stage); -- 2. 按上传者查询附件 CREATE INDEX idx_uploader_time ON hq_pm_repair_attachment (uploader_id, create_time); ``` ### 3. 进度查询索引 ```sql -- 进度表的查询索引 -- 1. 按工单查询进度(时间线显示) CREATE INDEX idx_order_operation_time ON hq_pm_repair_progress (order_id, operation_time); -- 2. 按操作人查询进度 CREATE INDEX idx_operator_time ON hq_pm_repair_progress (operator_id, operation_time); ``` ## 📊 数据存储预估 ### 表数据量预估 | 表名 | 日增长量 | 年数据量 | 存储空间预估 | | --------------------------- | ---------- | ------------ | ------------ | | hq_pm_repair_order | 50-100 条 | 2-4 万条 | 50-100MB | | hq_pm_repair_attachment | 200-400 条 | 8-16 万条 | 100-200MB | | hq_pm_repair_progress | 300-600 条 | 12-24 万条 | 150-300MB | | hq_pm_service_evaluation | 40-80 条 | 1.6-3.2 万条 | 20-40MB | | hq_pm_repair_category | 0-5 条 | 100-200 条 | <1MB | | hq_pm_system_config | 0-2 条 | 50-100 条 | <1MB | ### 存储优化建议 1. **定期归档**:超过 2 年的已完成工单可归档到历史表 2. **附件清理**:定期清理无效或重复的附件文件 3. **索引维护**:定期重建和优化索引 4. **分区策略**:可考虑按年份或状态分区存储 ## 🔄 数据初始化脚本 ### 1. 维修类型初始化数据 ```sql -- 插入基础维修类型分类 INSERT INTO `hq_pm_repair_category` ( `id`, `tenant_id`, `category_name`, `category_code`, `category_description`, `parent_id`, `level_depth`, `required_skills`, `skill_level`, `estimated_duration`, `icon_url`, `color_code`, `sort_order`, `status`, `create_time`, `create_by` ) VALUES (1, '000000', '电路维修', 'ELECTRIC', '电路、照明、开关、插座等电气设备维修', 0, 1, '电工技能', '2', 60, '/icons/electric.svg', '#ff6b35', 1, '1', NOW(), 1), (2, '000000', '水暖维修', 'PLUMBING', '水管、暖气、卫生间、厨房设备维修', 0, 1, '水暖技能', '2', 90, '/icons/plumbing.svg', '#1890ff', 2, '1', NOW(), 1), (3, '000000', '土建维修', 'CONSTRUCTION', '墙面、地面、天花板、门窗等土建维修', 0, 1, '泥工技能,木工技能', '2', 120, '/icons/construction.svg', '#52c41a', 3, '1', NOW(), 1), (4, '000000', '设备维修', 'EQUIPMENT', '空调、电梯、监控等设备维修', 0, 1, '设备维修技能', '3', 90, '/icons/equipment.svg', '#722ed1', 4, '1', NOW(), 1), (5, '000000', '园林维修', 'GARDEN', '绿化、草坪、树木修剪等园林维护', 0, 1, '园林技能', '1', 45, '/icons/garden.svg', '#13c2c2', 5, '1', NOW(), 1), (6, '000000', '清洁维护', 'CLEANING', '日常清洁、垃圾处理、环境维护', 0, 1, '清洁技能', '1', 30, '/icons/cleaning.svg', '#fa8c16', 6, '1', NOW(), 1); ``` ### 2. 系统配置初始化数据 ```sql -- 插入系统配置参数 INSERT INTO `hq_pm_system_config` ( `id`, `tenant_id`, `config_key`, `config_value`, `config_type`, `config_group`, `config_name`, `config_description`, `default_value`, `is_system`, `is_editable`, `sort_order`, `status`, `create_time`, `create_by` ) VALUES (1, '000000', 'file.upload.image.max_size', '5242880', 'number', 'file', '图片文件最大大小', '图片文件上传的最大字节数(5MB)', '5242880', 1, 1, 1, '1', NOW(), 1), (2, '000000', 'file.upload.video.max_size', '52428800', 'number', 'file', '视频文件最大大小', '视频文件上传的最大字节数(50MB)', '52428800', 1, 1, 2, '1', NOW(), 1), (3, '000000', 'file.upload.allowed_image_types', 'jpg,jpeg,png,gif', 'string', 'file', '允许的图片类型', '允许上传的图片文件类型(逗号分隔)', 'jpg,jpeg,png,gif', 1, 1, 3, '1', NOW(), 1), (4, '000000', 'file.upload.allowed_video_types', 'mp4,avi,mov', 'string', 'file', '允许的视频类型', '允许上传的视频文件类型(逗号分隔)', 'mp4,avi,mov', 1, 1, 4, '1', NOW(), 1), (5, '000000', 'workflow.auto_assign_enabled', 'true', 'boolean', 'workflow', '启用自动分派', '是否启用智能自动分派功能', 'false', 1, 1, 11, '1', NOW(), 1), (6, '000000', 'workflow.auto_archive_days', '7', 'number', 'workflow', '自动归档天数', '工单评价后多少天自动归档', '7', 1, 1, 12, '1', NOW(), 1), (7, '000000', 'time.priority1_response_hours', '1', 'number', 'time', '非常紧急响应时限', '非常紧急工单的响应时限(小时)', '1', 1, 1, 21, '1', NOW(), 1), (8, '000000', 'time.priority2_response_hours', '4', 'number', 'time', '紧急响应时限', '紧急工单的响应时限(小时)', '4', 1, 1, 22, '1', NOW(), 1), (9, '000000', 'time.priority3_response_hours', '24', 'number', 'time', '一般响应时限', '一般工单的响应时限(小时)', '24', 1, 1, 23, '1', NOW(), 1), (10, '000000', 'time.working_hours_start', '08:00', 'string', 'time', '工作时间开始', '工作日开始时间(HH:mm格式)', '08:00', 1, 1, 31, '1', NOW(), 1), (11, '000000', 'time.working_hours_end', '18:00', 'string', 'time', '工作时间结束', '工作日结束时间(HH:mm格式)', '18:00', 1, 1, 32, '1', NOW(), 1); ``` ## 📋 数据迁移计划 ### 迁移脚本版本规划 1. **V1.0.1** - 创建基础表结构 2. **V1.0.2** - 插入初始化数据 3. **V1.0.3** - 创建性能优化索引 4. **V1.1.0** - 功能扩展字段添加 ### 部署验证清单 - [ ] 表结构创建成功 - [ ] 基础索引创建完成 - [ ] 初始化数据插入成功 - [ ] 性能索引创建完成 - [ ] 数据完整性约束验证 - [ ] 权限配置正确 - [ ] 备份恢复测试通过 --- **文档状态**:✅ 初稿完成 **关联文档**:功能需求清单.md **下一步**:API 接口设计