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

29 KiB
Raw Blame History

物业报修管理模块 - 数据库设计

📋 文档信息

文档名称:物业报修管理模块数据库设计
文档版本: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 系统配置表 模块系统参数配置 配置表

📈 数据流转关系

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

存储优化建议

  1. 定期归档:超过 2 年的已完成工单可归档到历史表
  2. 附件清理:定期清理无效或重复的附件文件
  3. 索引维护:定期重建和优化索引
  4. 分区策略:可考虑按年份或状态分区存储

🔄 数据初始化脚本

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);

📋 数据迁移计划

迁移脚本版本规划

  1. V1.0.1 - 创建基础表结构
  2. V1.0.2 - 插入初始化数据
  3. V1.0.3 - 创建性能优化索引
  4. V1.1.0 - 功能扩展字段添加

部署验证清单

  • 表结构创建成功
  • 基础索引创建完成
  • 初始化数据插入成功
  • 性能索引创建完成
  • 数据完整性约束验证
  • 权限配置正确
  • 备份恢复测试通过

文档状态:✅ 初稿完成
关联文档:功能需求清单.md
下一步:API 接口设计