Files
hzdyjs/docs/业务模块/property-maintenance/技术设计/数据库设计.md
T
zlwu f969e4ff7d refactor: 物业报修模块重构
1. 重命名物业报修相关类,统一添加Hq前缀
2. 更新相关文档和SQL文件
3. 优化前端样式和视图
4. 清理无用的测试文件

Issue #123
2025-07-09 16:55:24 +08:00

633 lines
29 KiB
Markdown
Raw 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.
# 物业报修管理模块 - 数据库设计
## 📋 文档信息
**文档名称**:物业报修管理模块数据库设计
**文档版本**: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 接口设计