29 KiB
29 KiB
物业报修管理模块 - 数据库设计
📋 文档信息
文档名称:物业报修管理模块数据库设计
文档版本:v1.0
创建日期:2025-01-23
设计规范:严格遵循 docs/设计文档/database/mysql-database-standard.md
依据文档:功能需求清单.md
🎯 数据库设计原则
核心设计理念
- 严格遵循项目规范:所有表必须包含标准基础字段
- 业务导向设计:基于实际业务流程设计表结构
- 性能优化:合理设计索引,支持高效查询
- 扩展性考虑:预留扩展字段和机制
- 数据完整性:通过应用层维护关联关系
关键约束
- ✅ 使用雪花 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 |
系统配置表 | 模块系统参数配置 | 配置表 |
📈 数据流转关系
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)
核心业务表:存储报修申请的所有核心信息,是整个模块的数据中心
-- ----------------------------
-- 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)
附件管理表:存储报修过程中上传的图片、视频等多媒体文件信息
-- ----------------------------
-- 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)
进度跟踪表:记录维修过程中的每一个状态变更和进度更新
-- ----------------------------
-- 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)
评价反馈表:存储用户对维修服务的多维度评价和反馈信息
-- ----------------------------
-- 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)
分类字典表:存储维修类型的分类信息,支持层级结构
-- ----------------------------
-- 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)
配置管理表:存储物业报修模块的系统参数和配置信息
-- ----------------------------
-- 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. 核心业务查询索引
-- 报修工单表的核心查询索引
-- 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. 附件查询索引
-- 附件表的查询索引
-- 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. 进度查询索引
-- 进度表的查询索引
-- 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 |
存储优化建议
- 定期归档:超过 2 年的已完成工单可归档到历史表
- 附件清理:定期清理无效或重复的附件文件
- 索引维护:定期重建和优化索引
- 分区策略:可考虑按年份或状态分区存储
🔄 数据初始化脚本
1. 维修类型初始化数据
-- 插入基础维修类型分类
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. 系统配置初始化数据
-- 插入系统配置参数
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);
📋 数据迁移计划
迁移脚本版本规划
- V1.0.1 - 创建基础表结构
- V1.0.2 - 插入初始化数据
- V1.0.3 - 创建性能优化索引
- V1.1.0 - 功能扩展字段添加
部署验证清单
- 表结构创建成功
- 基础索引创建完成
- 初始化数据插入成功
- 性能索引创建完成
- 数据完整性约束验证
- 权限配置正确
- 备份恢复测试通过
文档状态:✅ 初稿完成
关联文档:功能需求清单.md
下一步:API 接口设计