ether-docs/_archive/domains-old/REVERSE-OPS.md

37 KiB
Raw Permalink Blame History

运维工单域功能详细设计文档(代码反推版)

文档来源: 基于 module-wo 模块实际代码反推
生成日期: 2026-04-23
代码基线: ether-pms/module-wo, ether-admin
对照文档: 02-OPERATIONS.md运营调度领域技术方案


一、领域概述

1.1 领域职责

运维工单域module-wo负责管理物业运维全生命周期涵盖

  • 综合工单管理:多来源工单的创建、分配、执行、完成、验收全流程
  • 维保计划管理:设备周期性维保计划的制定与调度
  • 维保任务管理:维保工单的触发、执行、验收闭环
  • 巡检模板管理:设备点检模板与检查项的配置
  • 工单明细管理:工单下的备件/巡检项/检查点明细
  • 统计看板:工单与维保任务的多维度统计

1.2 核心概念

概念 说明 对应实体 数据库表
工单 综合业务单据支持6种来源6种类型 WorkOrder ops_work_order
工单明细 工单下的备件/巡检项/检查点 WorkOrderItem ops_work_order_item
维保计划 设备周期性维保计划 MaintenancePlan ops_maintenance_plan
维保任务 维保工单(设备维保执行单元) MaintenanceTask ops_maintenance_task
巡检模板 设备点检模板 InspectionTemplate ops_inspection_template
巡检项 模板下的检查项 InspectionItem ops_inspection_item

1.3 领域边界

实际实现中,运维工单域与原需求文档的边界存在显著差异:

  • 原需求运营调度域ether-ops包含工单 + 消息通知系统
  • 实际实现module-wo 仅包含工单/维保/巡检,消息通知系统未实现
  • 前端分裂:维保计划存在两套前端 APImaintenance.ts vs maintenance-plan.ts),巡检标准项归属 MDM 域

二、数据结构设计

2.1 WorkOrder工单

表名: ops_work_order

字段 类型 必填 默认值 说明
id UUID 自动生成 主键
workNo VARCHAR(50) 自动生成 工单编号,格式: WO-YYYYMMDD-XXXX
source ENUM - 工单来源
type ENUM - 工单类型
priority ENUM MEDIUM 优先级
status ENUM PENDING 工单状态
title VARCHAR(200) - 工单标题
description VARCHAR(2000) - 工单描述
projectId UUID - 所属项目
equipmentId UUID - 关联设备
spaceId UUID - 关联空间
planId UUID - 关联维保计划
triggerType ENUM - 触发类型
assignedTo VARCHAR(200) - 负责人
assignedVendor VARCHAR(200) - 服务商
assignedDate DATE - 派单日期
actualStart TIMESTAMP - 实际开始时间
actualEnd TIMESTAMP - 实际结束时间
actualHours DECIMAL(6,2) - 实际工时(小时)
faultCause VARCHAR(2000) - 故障原因
solution VARCHAR(5000) - 解决方案
result VARCHAR(2000) - 处理结果
laborCost DECIMAL(12,2) - 人工费
partsCost DECIMAL(12,2) - 备件费
totalCost DECIMAL(12,2) - 总费用
completedBy VARCHAR(200) - 完成人
completedDate DATE - 完成日期
verifiedBy VARCHAR(200) - 验收人
verifiedDate DATE - 验收日期
rating INTEGER - 评分1-5星
remark VARCHAR(1000) - 备注
photos JSONB - 照片URL列表
signature VARCHAR(2000) - 签名
createdAt TIMESTAMP now() 创建时间
updatedAt TIMESTAMP now() 更新时间
createdBy VARCHAR(200) - 创建人

枚举定义

枚举 中文
Source OWNER 业主报修
MAINTENANCE 维保计划
INSPECTION 巡检触发
FAULT 故障触发
REGULATORY 法规巡检
MANUAL 手动创建
Type REPAIR 维修
INSPECTION 巡检
SECURITY 安保
CLEANING 保洁
PROPERTY 物业
CONSULTATION 咨询
Priority LOW / MEDIUM / HIGH / URGENT 低/中/高/紧急
Status PENDING / ASSIGNED / IN_PROGRESS / COMPLETED / VERIFIED / CANCELLED 见状态机
TriggerType PLAN / INSPECTION / FAULT / MANUAL 计划/巡检/故障/手动

索引

索引名 字段 用途
idx_wo_project_status project_id, status 项目+状态查询
idx_wo_priority_status priority, status 优先级+状态查询
idx_wo_plan_createdat plan_id, created_at 计划关联查询
idx_wo_status_createdat status, created_at 状态+时间查询
idx_wo_createdat_desc created_at DESC 时间倒序

2.2 WorkOrderItem工单明细

表名: ops_work_order_item

字段 类型 必填 默认值 说明
id UUID 自动生成 主键
workOrderId UUID - 所属工单ID
itemType ENUM - 明细类型
itemName VARCHAR(200) - 明细名称
quantity DECIMAL(10,2) 1 数量
unit VARCHAR(50) - 单位
unitPrice DECIMAL(12,2) - 单价
totalPrice DECIMAL(12,2) - 总价
isNormal BOOLEAN - 是否正常
observation VARCHAR(2000) - 观察记录
suggestion VARCHAR(2000) - 建议
sortOrder INTEGER 0 排序序号
createdAt TIMESTAMP now() 创建时间

枚举定义

枚举 中文
ItemType PART 备件
INSPECTION_ITEM 巡检项
CHECKPOINT 检查点

2.3 MaintenanceTask维保任务

表名: ops_maintenance_task

字段 类型 必填 默认值 说明
id UUID 自动生成 主键
taskNo VARCHAR(50) 自动生成 任务编号,格式: EQ-YYYYMMDD-XXXX
planId UUID - 关联维保计划ID
equipmentId UUID - 关联设备ID
projectId UUID - 所属项目
taskType ENUM - 任务类型
triggerType ENUM - 触发类型
priority ENUM 自动判定 优先级
status ENUM PENDING 任务状态
title VARCHAR(200) - 任务标题
description VARCHAR(2000) - 任务描述
assignedTo VARCHAR(200) - 负责人
assignedVendor VARCHAR(200) - 服务商
assignedDate DATE - 派单日期
actualStart TIMESTAMP - 实际开始时间
actualEnd TIMESTAMP - 实际结束时间
actualHours DECIMAL(6,2) - 实际工时
faultCause VARCHAR(2000) - 故障原因
solution VARCHAR(5000) - 解决方案
result VARCHAR(2000) - 处理结果
partsUsed JSONB - 使用备件列表
laborCost DECIMAL(12,2) - 人工费
partsCost DECIMAL(12,2) - 备件费
totalCost DECIMAL(12,2) - 总费用
completedBy VARCHAR(200) - 完成人
completedDate DATE - 完成日期
verifiedBy VARCHAR(200) - 验收人
verifiedDate DATE - 验收日期
rating INTEGER - 评分1-5
remark VARCHAR(1000) - 备注
photos JSONB - 照片URL列表
signature VARCHAR(2000) - 签名
createdAt TIMESTAMP now() 创建时间
updatedAt TIMESTAMP now() 更新时间
createdBy VARCHAR(200) - 创建人

枚举定义

枚举 中文
TaskType PREVENTIVE 预防性维护
CORRECTIVE 纠正性维护
EMERGENCY 紧急维修
TriggerType PLAN 计划触发
INSPECTION 巡检触发
FAULT 故障触发
MANUAL 手动创建
Priority LOW / MEDIUM / HIGH / URGENT 低/中/高/紧急
Status PENDING / ASSIGNED / IN_PROGRESS / COMPLETED / VERIFIED / CANCELLED 见状态机

partsUsed JSONB 结构

[
  {
    "partsId": "uuid",
    "partsName": "备件名称",
    "quantity": 2,
    "unitPrice": 100.00,
    "totalPrice": 200.00
  }
]

索引

索引名 字段 用途
idx_mt_equipment_status equipment_id, status 设备+状态查询
idx_mt_project_status project_id, status 项目+状态查询
idx_mt_plan_createdat plan_id, created_at 计划关联查询
idx_mt_status_assigneddate status, assigned_date 状态+派单日期查询

2.4 MaintenancePlan维保计划

表名: ops_maintenance_plan

字段 类型 必填 默认值 说明
id UUID 自动生成 主键
planCode VARCHAR(50) 自动生成 计划编码(唯一)
planName VARCHAR(200) - 计划名称
planContent VARCHAR(5000) - 计划内容
projectId UUID - 所属项目
equipmentId UUID - 关联设备
planType ENUM - 计划类型
cycleDays INTEGER - 周期天数
estimatedHours DECIMAL(6,2) - 预估工时
assignedVendor VARCHAR(200) - 指定服务商
status ENUM ACTIVE 计划状态
lastDate DATE - 上次执行日期
nextDate DATE - 下次执行日期
createdAt TIMESTAMP now() 创建时间
updatedAt TIMESTAMP now() 更新时间
createdBy VARCHAR(200) - 创建人

枚举定义

枚举 中文
PlanType PREVENTIVE 预防性维护
CORRECTIVE 纠正性维护
PlanStatus ACTIVE 启用
INACTIVE 停用
SUSPENDED 暂停

2.5 InspectionTemplate巡检模板

表名: ops_inspection_template

字段 类型 必填 默认值 说明
id UUID 自动生成 主键
templateCode VARCHAR(50) 自动生成 模板编码(唯一)
templateName VARCHAR(200) - 模板名称
description VARCHAR(2000) - 描述
projectId UUID - 所属项目
spaceId UUID - 关联空间
category VARCHAR(50) - 分类
status ENUM ACTIVE 模板状态
createdAt TIMESTAMP now() 创建时间
updatedAt TIMESTAMP now() 更新时间
createdBy VARCHAR(200) - 创建人
items List<InspectionItem> - - 检查项列表(@Transient非持久化

枚举定义

枚举 中文
TemplateStatus ACTIVE 启用
INACTIVE 停用

2.6 InspectionItem巡检项

表名: ops_inspection_item

字段 类型 必填 默认值 说明
id UUID 自动生成 主键
templateId UUID - 所属模板ID
itemName VARCHAR(200) - 检查项名称
description VARCHAR(2000) - 描述
checkMethod VARCHAR(2000) - 检查方法
standard VARCHAR(2000) - 检查标准
isMandatory BOOLEAN true 是否必检
isNormalRequired BOOLEAN true 是否需要正常判定
sortOrder INTEGER 0 排序序号
createdAt TIMESTAMP now() 创建时间

2.7 实体关系图

MaintenancePlan ──1:N──> MaintenanceTask
       │                      │
       │ planId               │ equipmentId
       ▼                      ▼
  WorkOrder ──1:N──> WorkOrderItem
       │
       │ (关联)
       ▼
InspectionTemplate ──1:N──> InspectionItem

关系说明

  • WorkOrder.planId → MaintenancePlan.id工单可关联维保计划
  • WorkOrderItem.workOrderId → WorkOrder.id工单明细属于工单
  • MaintenanceTask.planId → MaintenancePlan.id维保任务由计划触发
  • InspectionItem.templateId → InspectionTemplate.id检查项属于模板
  • WorkOrder 与 MaintenanceTask 为独立实体,无直接外键关联

三、API 接口设计

3.1 WorkOrderController

基础路径: /api/wo/work-orders

方法 路径 说明 请求体 响应
POST / 创建工单 WorkOrder WorkOrder
GET / 查询工单列表 QueryParams List<WorkOrder>
GET /{id} 获取工单详情 - WorkOrder
PUT /{id} 更新工单 WorkOrder WorkOrder
DELETE /{id} 删除工单 - Void
POST /{id}/assign 派单 AssignRequest WorkOrder
POST /{id}/start 开始执行 - WorkOrder
POST /{id}/complete 完成工单 WorkOrder WorkOrder
POST /{id}/verify 验收工单 VerifyRequest WorkOrder
POST /{id}/cancel 取消工单 - WorkOrder
GET /stats 工单统计 - WorkOrderStatsDTO
GET /{id}/items 获取工单明细 - List<WorkOrderItem>
POST /{id}/items 批量添加工单明细 List<WorkOrderItem> WorkOrder

查询参数GET /

参数 类型 必填 说明
projectId UUID 按项目筛选
equipmentId UUID 按设备筛选
source Enum 按来源筛选
type Enum 按类型筛选
status Enum 按状态筛选
assignedTo String 按负责人筛选

注意:查询参数互斥,按优先级 projectId > equipmentId > source > type > status > assignedTo 依次判断

请求体定义

// 派单请求
AssignRequest {
    String assignedTo;       // 负责人
    String assignedVendor;   // 服务商
    LocalDate assignedDate;  // 派单日期
}

// 验收请求
VerifyRequest {
    String verifiedBy;  // 验收人
    String remark;      // 备注
    Integer rating;     // 评分1-5
}

WorkOrderStatsDTO

字段 类型 说明
total long 工单总数
pending long 待分配数
assigned long 已派单数
inProgress long 执行中数
completed long 已完成数
verified long 已验收数
cancelled long 已取消数
completedToday long 今日完成数
createdToday long 今日创建数
overdue long 逾期数
avgCompleteHours BigDecimal 平均完成工时
avgRating BigDecimal 平均评分
bySource Map<String, Long> 按来源分布
byType Map<String, Long> 按类型分布
byPriority Map<String, Long> 按优先级分布

3.2 MaintenanceTaskController

基础路径: /api/ops/maintenance-tasks

方法 路径 说明 请求体 响应
POST / 创建维保任务 MaintenanceTask MaintenanceTask
GET / 查询维保任务列表 QueryParams List<MaintenanceTask>
GET /{id} 获取任务详情 - MaintenanceTask
PUT /{id} 更新任务 MaintenanceTask MaintenanceTask
DELETE /{id} 删除任务 - Void
POST /{id}/assign 分配任务 AssignRequest MaintenanceTask
POST /{id}/start 开始执行 - MaintenanceTask
POST /{id}/complete 完成任务(简版) CompleteRequest MaintenanceTask
POST /{id}/complete-details 完成任务(详版) MaintenanceTask MaintenanceTask
POST /{id}/verify 验收任务 VerifyRequest MaintenanceTask
POST /{id}/cancel 取消任务 - MaintenanceTask
POST /{id}/rate 评分 rating (query) MaintenanceTask
GET /stats 任务统计 - MaintenanceTaskStatsDTO

查询参数GET /

参数 类型 必填 说明
equipmentId UUID 按设备筛选
planId UUID 按计划筛选
status Enum 按状态筛选
priority Enum 按优先级筛选
assignedTo String 按负责人筛选
overdueDate LocalDate 逾期截止日期

同样互斥优先级equipmentId > planId > status > priority > assignedTo > overdueDate

请求体定义

// 分配请求
AssignRequest {
    String assignedTo;       // 负责人
    LocalDate assignedDate;  // 派单日期
}

// 完成请求(简版)
CompleteRequest {
    String result;            // 处理结果
    BigDecimal actualHours;   // 实际工时
    BigDecimal cost;          // 总费用
    String completedBy;       // 完成人
}

// 验收请求
VerifyRequest {
    String verifiedBy;  // 验收人
    String remark;      // 备注
    Integer rating;     // 评分
}

MaintenanceTaskStatsDTO

字段 类型 说明
total long 任务总数
pending long 待分配数
assigned long 已派单数
inProgress long 执行中数
completed long 已完成数
verified long 已验收数
cancelled long 已取消数
completedToday long 今日完成数
createdToday long 今日创建数
overdue long 逾期数
avgCompleteHours BigDecimal 平均完成工时
avgRating BigDecimal 平均评分
byPriority Map<String, Long> 按优先级分布
byTriggerType Map<String, Long> 按触发类型分布
totalLaborCost BigDecimal 人工费总计
totalPartsCost BigDecimal 备件费总计
totalCost BigDecimal 费用总计

3.3 前端独立 API无后端 Controller 对应)

以下前端 API 存在但后端无对应 Controller 实现:

前端文件 API 路径 说明
maintenance-plan.ts /api/mdm/maintenance-plans 维保计划 CRUD归属 MDM 域)
maintenance.ts /api/ops/maintenance-plans 维保计划 CRUD另一套含 accept 操作)
maintenance.ts /api/ops/maintenance-tasks 维保任务(含 accept 操作,状态含 ACCEPTED
inspection-template.ts /api/ops/inspection-templates 巡检模板 CRUD
inspection-item.ts /api/mdm/inspection-items 巡检标准项 CRUD归属 MDM 域)
inspection-record.ts /api/mdm/inspection-records 巡检记录 CRUD归属 MDM 域)

四、业务规则

4.1 工单状态机

┌─────────────┐
│   PENDING   │ ← 创建工单(默认状态)
│   (待分配)   │
└──────┬──────┘
       │ 派单 (assign)
       ▼
┌─────────────┐
│  ASSIGNED   │ ← 分配负责人/服务商
│   (已派单)   │
└──────┬──────┘
       │ 开始执行 (start)
       ▼
┌─────────────┐
│ IN_PROGRESS │ ← 记录实际开始时间
│   (执行中)   │
└──────┬──────┘
       │ 完成 (complete)
       ▼
┌─────────────┐
│  COMPLETED  │ ← 记录故障原因/解决方案/费用
│   (已完成)   │
└──────┬──────┘
       │ 验收 (verify)
       ▼
┌─────────────┐
│  VERIFIED   │ ← 记录验收人/评分/备注
│   (已验收)   │
└─────────────┘

特殊状态:
- CANCELLED (已取消): PENDING/ASSIGNED/IN_PROGRESS 可转入

状态流转规则

当前状态 允许操作 下一状态 前置条件 自动处理
PENDING 派单 ASSIGNED - 设置 assignedTo/assignedVendor/assignedDate
ASSIGNED 开始执行 IN_PROGRESS - 设置 actualStart = now()
IN_PROGRESS 完成 COMPLETED - 设置 actualEnd = now(),自动计算 actualHours
COMPLETED 验收 VERIFIED - 设置 verifiedBy/verifiedDate/rating
PENDING/ASSIGNED/IN_PROGRESS 取消 CANCELLED - -
COMPLETED/VERIFIED 取消 不允许 - 抛出异常"无法取消已完成的工单"

工单编号生成规则WO-YYYYMMDD-XXXX4位序号按日期递增

完成工单自动计算工时

actualHours = Duration.between(actualStart, actualEnd).toMinutes() / 60.0

4.2 维保任务状态机

┌─────────────┐
│   PENDING   │ ← 创建任务(默认状态)
│   (待分配)   │
└──────┬──────┘
       │ 分配 (assign)
       ▼
┌─────────────┐
│  ASSIGNED   │ ← 指定负责人
│   (已派单)   │
└──────┬──────┘
       │ 开始执行 (start)
       ▼
┌─────────────┐
│ IN_PROGRESS │ ← 记录实际开始时间
│   (执行中)   │
└──────┬──────┘
       │ 完成 (complete / complete-details)
       ▼
┌─────────────┐
│  COMPLETED  │ ← 记录执行详情/费用/备件
│   (已完成)   │
└──────┬──────┘
       │ 验收 (verify)
       ▼
┌─────────────┐
│  VERIFIED   │ ← 记录验收人/评分
│   (已验收)   │
└─────────────┘

特殊状态:
- CANCELLED (已取消): PENDING/ASSIGNED/IN_PROGRESS 可转入

与工单状态机的差异

差异点 WorkOrder MaintenanceTask
完成方式 仅一种 complete 两种complete简版+ complete-details详版
评分方式 验收时评分 验收时评分 + 独立 rate 接口
取消条件 COMPLETED/VERIFIED 不可取消
删除行为 物理删除 逻辑删除(设为 CANCELLED
完成后联动 自动更新设备维保记录maintenanceVendor/nextInspectionDate

任务编号生成规则EQ-YYYYMMDD-XXXX4位序号按日期递增

4.3 维保任务触发机制

触发类型 枚举值 说明 优先级自动判定规则
计划触发 PLAN 由维保计划周期性触发 MEDIUM
巡检触发 INSPECTION 巡检发现异常时触发 HIGH
故障触发 FAULT 设备故障时触发 HIGH含紧急关键词时 URGENT
手动创建 MANUAL 人工手动创建 MEDIUM

自动优先级判定规则MaintenanceTaskServiceImpl.autoDeterminePriority

1. 紧急维修类型(EMERGENCY) → URGENT
2. 故障触发(FAULT) + 紧急关键词 → URGENT
   紧急关键词: 困人/漏水/停电/火灾/爆炸/漏电/冒烟/故障停机
3. 故障触发(FAULT) 无紧急关键词 → HIGH
4. 巡检触发(INSPECTION) → HIGH
5. 计划触发(PLAN) → MEDIUM
6. 其他 → MEDIUM

4.4 维保计划管理规则

规则 说明
计划状态 ACTIVE启用/ INACTIVE停用/ SUSPENDED暂停
删除行为 逻辑删除,将状态设为 INACTIVE
周期调度 通过 cycleDays 计算下次执行日期nextDate
计划类型 PREVENTIVE预防性/ CORRECTIVE纠正性

4.5 巡检模板管理规则

规则 说明
模板状态 ACTIVE启用/ INACTIVE停用
检查项关联 InspectionItem 通过 templateId 关联模板
必检项 isMandatory = true 的检查项不可跳过
正常判定 isNormalRequired = true 的检查项需要判定正常/异常
排序 通过 sortOrder 控制检查项顺序

4.6 工单明细管理规则

规则 说明
明细类型 PART备件/ INSPECTION_ITEM巡检项/ CHECKPOINT检查点
批量添加 支持批量添加,受 BatchOperationValidator 限制
费用计算 前端计算totalPrice = quantity × unitPricepartsCost = Σ totalPrice
总费用 totalCost = laborCost + partsCost

4.7 维保任务完成后联动

维保任务完成completeTaskWithDetails时自动更新设备信息

1. 更新设备维保商: equipment.maintenanceVendor = task.assignedVendor
2. 更新下次巡检日期(仅预防性维护):
   equipment.nextInspectionDate = now() + equipment.inspectionCycle
   默认周期: 30天
3. 异常容错: 更新设备失败不影响工单完成

五、前端操作流程

5.1 工单管理WorkOrder.vue

页面路径: /ops/work-order

操作流程

1. 选择项目 → 加载工单列表
2. 筛选: 项目/来源/类型/状态/优先级/关键词
3. 查看统计卡片: 总工单/待分配/执行中/今日完成/逾期/平均评分
4. 工单操作:
   ├─ 新建工单 → 填写来源/类型/优先级/标题/描述/负责人/服务商
   ├─ 查看详情 → 抽屉展示: 基本信息/问题描述/派单信息/执行信息/工单项/费用/验收
   ├─ 编辑工单 → 修改基本信息
   ├─ 派单 → 指定负责人/服务商/派单日期PENDING → ASSIGNED
   ├─ 开始执行 → 确认弹窗ASSIGNED → IN_PROGRESS
   ├─ 完成工单 → 填写工时/故障原因/解决方案/结果/工单项/费用IN_PROGRESS → COMPLETED
   ├─ 验收工单 → 填写验收人/评分/备注COMPLETED → VERIFIED
   ├─ 取消工单 → 确认弹窗PENDING/ASSIGNED/IN_PROGRESS → CANCELLED
   └─ 删除工单 → 确认弹窗

完成工单时的工单项录入

添加工单项:
  ├─ 选择类型: 备件/巡检项/检查点
  ├─ 输入名称
  ├─ 输入数量 + 单价 → 自动计算 totalPrice
  └─ 自动汇总: partsCost = Σ(各工单项totalPrice)
                 totalCost = laborCost + partsCost

前端状态颜色映射

状态 颜色 优先级 颜色
PENDING default (灰) LOW green
ASSIGNED blue MEDIUM blue
IN_PROGRESS orange HIGH orange
COMPLETED green URGENT red
VERIFIED cyan
CANCELLED red

5.2 维保计划PlanList.vue

页面路径: /maintenance/plans

注意:此页面使用 maintenance.ts API/api/ops/maintenance-plans与后端 MaintenancePlan 实体对应的是 maintenance-plan.ts API/api/mdm/maintenance-plans存在两套前端实现

操作流程

1. 选择项目 → 加载维保计划列表
2. 筛选: 项目/触发类型
3. 计划操作:
   ├─ 新建计划 → 填写名称/项目/触发类型/Cron表达式/描述/启用状态
   ├─ 编辑计划 → 修改计划信息
   └─ 停用计划 → 确认弹窗(逻辑删除)

前端触发类型(与后端不一致):

前端枚举 中文 后端枚举 差异
MANUAL 手动 - 前端独有
SCHEDULED 定时 - 前端独有
AUTOMATIC 自动 - 前端独有
- - PLAN 后端独有
- - INSPECTION 后端独有
- - FAULT 后端独有
- - MANUAL 后端有但含义不同

5.3 维保任务TaskList.vue

页面路径: /maintenance/tasks

注意:此页面使用 maintenance.ts API状态包含 ACCEPTED与后端 MaintenanceTaskController 的6状态不一致

操作流程

1. 选择项目 → 加载维保任务列表
2. 筛选: 项目/状态/负责人
3. 任务操作:
   ├─ 接受任务 → PENDING → ACCEPTED前端独有状态
   ├─ 开始任务 → ACCEPTED → IN_PROGRESS
   ├─ 完成任务 → 弹窗输入完成备注 → IN_PROGRESS → COMPLETED
   └─ 取消任务 → 确认弹窗

前端状态映射(与后端不一致):

前端状态 中文 后端状态 差异
PENDING 待接受 PENDING (待分配) 含义不同
ACCEPTED 已接受 - 前端独有
IN_PROGRESS 进行中 IN_PROGRESS 一致
COMPLETED 已完成 COMPLETED 一致
CANCELLED 已取消 CANCELLED 一致
- - ASSIGNED 后端独有
- - VERIFIED 后端独有

5.4 点检模板管理TemplateList.vue

页面路径: /inspection/templates

操作流程

1. 选择项目 → 加载模板列表
2. 模板操作:
   ├─ 新建模板 → 填写名称/设备类型/项目/启用状态 + 添加点检项目
   ├─ 编辑模板 → 修改模板信息 + 编辑点检项目
   ├─ 复制模板 → 创建副本(名称加"_副本"后缀)
   └─ 删除模板 → 确认弹窗

添加点检项目:
  ├─ 输入项目名称
  ├─ 输入检查方法
  ├─ 输入检查标准
  ├─ 设置是否必检
  └─ 添加到列表

前端设备类型选项(中文,与后端 category 字段不一致):

电梯/消防设备/空调/给排水/配电/安防/其他

5.5 前端页面与 API 对照表

页面 前端文件 API 文件 后端 Controller API 基础路径
工单管理 WorkOrder.vue work-order.ts WorkOrderController /api/wo/work-orders
维保计划 PlanList.vue maintenance.ts 无对应 /api/ops/maintenance-plans
维保任务 TaskList.vue maintenance.ts MaintenanceTaskController /api/ops/maintenance-tasks
点检模板 TemplateList.vue inspection-template.ts 无对应 /api/ops/inspection-templates

六、与原需求文档 02-OPERATIONS.md 的差异对比

6.1 状态机差异(核心差异)

对比项 需求文档 实际实现 差异分析
工单初始状态 CREATED已创建 PENDING待分配 实现简化,合并创建与待分配
接单状态 ACCEPTED已接单 不存在 实现中 ASSIGNED 直接进入 IN_PROGRESS省略接单环节
关闭状态 CLOSED已关闭 不存在 实现用 VERIFIED已验收替代关闭
验收状态 不存在 VERIFIED已验收 实现新增,强调验收确认环节
挂起状态 SUSPENDED已挂起 不存在 实现未支持挂起/恢复
退回状态 RETURNED已退回 不存在 实现未支持退回重分配
取消状态 未提及 CANCELLED已取消 实现新增,支持工单取消

状态机对比图

需求文档:  CREATED → ASSIGNED → ACCEPTED → IN_PROGRESS → COMPLETED → CLOSED
           + SUSPENDED任意状态可挂起
           + RETURNEDASSIGNED 可退回)

实际实现:  PENDING → ASSIGNED → IN_PROGRESS → COMPLETED → VERIFIED
           + CANCELLEDPENDING/ASSIGNED/IN_PROGRESS 可取消)

6.2 实体差异

对比项 需求文档 实际实现 差异分析
WorkOrderFlow 有(工单流转记录) 不存在 实现未记录流转历史
NotificationChannel 有(通知渠道) 不存在 消息通知系统未实现
NotificationTemplate 有(消息模板) 不存在 消息通知系统未实现
NotificationRule 有(通知规则) 不存在 消息通知系统未实现
NotificationHistory 有(通知历史) 不存在 消息通知系统未实现
WorkOrderItem 不存在 有(工单明细) 实现新增,支持备件/巡检项/检查点
MaintenancePlan 不存在 有(维保计划) 实现新增,支持周期性维保调度
MaintenanceTask 不存在 有(维保任务) 实现新增,独立于 WorkOrder 的维保工单
InspectionTemplate 不存在 有(巡检模板) 实现新增,支持点检模板管理
InspectionItem 不存在 有(巡检项) 实现新增,模板下的检查项

6.3 字段差异WorkOrder

字段 需求文档 实际实现 差异分析
orderNo WO2024021000001 workNo: WO-YYYYMMDD-XXXX 编号格式不同,实现用连字符分隔
orderType REPAIR/COMPLAINT/CLEANING/SECURITY/OTHER type: REPAIR/INSPECTION/SECURITY/CLEANING/PROPERTY/CONSULTATION 枚举值完全不同
source APP/PHONE/INSPECTION/IOT/SYSTEM OWNER/MAINTENANCE/INSPECTION/FAULT/REGULATORY/MANUAL 枚举值完全不同
reporterId/reporterName/reporterPhone/reporterAddress 不存在 实现无报修人信息
assigneeId/assigneeName UUID引用 assignedTo: String 实现用字符串而非用户ID引用
acceptedAt/startedAt/completedAt/closedAt actualStart/actualEnd/completedDate/verifiedDate 字段名和粒度不同
materialCost partsCost 字段名不同
resultDescription result + faultCause + solution 实现拆分为3个字段
satisfactionScore/satisfactionComment rating + remark 实现简化,无评论字段
images/attachments String photos: JSONB (List<String>) 实现用JSONB数组
attributes JSONB 不存在 实现无扩展属性
spaceNodeId spaceId 字段名不同
planId/triggerType 不存在 实现新增,关联维保计划
assignedVendor 不存在 实现新增,支持服务商
laborCost/partsCost/totalCost 不存在 实现新增,费用明细
signature 不存在 实现新增,签名确认

6.4 API 差异

对比项 需求文档 实际实现 差异分析
API 版本 /api/v1/ops/work-orders /api/wo/work-orders 路径不同,实现无版本号
分页查询 Page<WorkOrderVO> List<WorkOrder> 实现无分页,全量返回
接单接口 POST /{id}/accept 不存在 无 ACCEPTED 状态
关闭接口 POST /{id}/close 不存在 用 verify 替代
挂起/恢复 POST /{id}/suspend, /{id}/resume 不存在 未实现
退回 不存在 不存在 需求有但实现无
流转记录 GET /{id}/flows 不存在 未实现 WorkOrderFlow
通知 API 完整的渠道/模板/规则/历史 不存在 消息通知系统未实现
统计 API 独立 Controller多维度 GET /stats嵌入工单 Controller 实现简化
工单明细 不存在 GET/POST /{id}/items 实现新增
维保任务 API 不存在 完整的 CRUD + 状态流转 实现新增

6.5 业务规则差异

对比项 需求文档 实际实现 差异分析
工单编号格式 WO + yyyyMMdd + 5位序号 WO-YYYYMMDD-XXXX4位 格式不同
通知触发 工单状态变更自动触发通知 无通知 消息通知未实现
SLA 监控 提及但未实现 未实现 均未实现
智能派单 提及但未实现 未实现 均未实现
维保优先级自动判定 未提及 有(基于触发类型+关键词) 实现新增
设备联动更新 未提及 有(完成维保后更新设备记录) 实现新增
维保任务双完成接口 未提及 complete + complete-details 实现新增,简版/详版
删除策略 未明确 WorkOrder 物理删除MaintenanceTask 逻辑删除 不一致

6.6 前端实现差异

对比项 需求文档 实际实现 差异分析
维保计划 API 单一 两套maintenance.ts + maintenance-plan.ts 前端分裂
维保计划触发类型 - MANUAL/SCHEDULED/AUTOMATIC vs PLAN/INSPECTION/FAULT/MANUAL 前后端不一致
维保任务状态 - 前端含 ACCEPTED后端含 ASSIGNED/VERIFIED 前后端不一致
巡检模板 未提及 inspection-template.ts + TemplateList.vue 实现新增
巡检标准项 未提及 inspection-item.ts归属 MDM 域) 实现新增
巡检记录 未提及 inspection-record.ts归属 MDM 域) 实现新增

6.7 差异总结

类别 需求文档有/实现无 实现有/需求文档无 说明
状态 CREATED, ACCEPTED, CLOSED, SUSPENDED, RETURNED VERIFIED, CANCELLED 状态机完全重构
实体 WorkOrderFlow, NotificationChannel/Template/Rule/History WorkOrderItem, MaintenancePlan/Task, InspectionTemplate/Item 实体体系完全不同
功能 消息通知系统, 工单流转记录 维保计划/任务, 巡检模板, 工单明细 功能重心偏移
字段 报修人信息, 扩展属性 服务商, 费用明细, 签名, 触发类型 字段侧重不同

核心结论: 实际实现与需求文档是两套不同的设计方案。需求文档侧重"运营调度+消息通知",实际实现侧重"运维工单+维保管理+巡检模板"。状态机从7状态简化为6状态去掉了接单/挂起/退回环节,新增了验收/取消环节。消息通知系统完全未实现,但新增了维保计划/任务/巡检模板等需求文档未涵盖的功能。