---
date: 2026-05-07
type: backend-fix
module: hl-order-service-v2/work-order
priority: high
notify: ["@mmg"]
status: deployed-pending
restart_service: hl-order-service-v2
gitea_pr: 1803
gitea_issue: 1787
related_cases: [GD-001]
---

# 工单新增漏 setWorkOrderNo / setOrderNo + 清理 title 死字段

## 现象（GD-001）

```
POST /admin/order/work-order
Body: {"orderId":1,"type":"OTHER","description":"...","priority":"NORMAL"}
响应: {"code":400,"message":"字段【work_order_no】未填写，请填写后重试"}
```

## 修复

PR #1803 已合并 dev。改动：

1. `WorkOrderService.create()` 新增 `generateWorkOrderNo()` 私有方法，格式 `WO + yyyyMMddHHmmss + 4位随机`（20 字符），落库前 set 到 entity
2. 同时 `setOrderNo(order.getOrderNo())` 拷贝订单号
3. 删除 `CreateWorkOrderRequest.title` 死字段（DDL/entity 没列）
4. 删除 `WorkOrderVO.title` 死字段，新增 `workOrderNo` 字段（响应里返工单号给前端）
5. `sql/work_order.sql` `type` COMMENT 对齐枚举（`CHANGE/COMPLAINT/SUPPLEMENT/OTHER`）

## 前端配合（@mmg）

### 1. 请求 body 不再传 title

之前如果前端传了 title，会被静默吞掉（无 setter）。现在 DTO 删了 title 字段，传过来会被 Jackson 忽略（项目 FAIL_ON_UNKNOWN_PROPERTIES=false），不影响业务但建议清理。

### 2. 响应 body 多了 workOrderNo 字段

工单列表/详情响应现在包含：

```json
{
  "id": "2052278173260824577",
  "workOrderNo": "WO20260507150123ABCD",  // ← 新增字段
  "orderNo": "HL26050700001",              // ← 新增字段
  "orderId": "...",
  "type": "OTHER",
  "status": "PENDING",
  ...
}
```

前端工单列表/详情页可以展示这两个字段。

## 重启服务

`hl-order-service-v2` 已合并到 dev，运维部署测试服后即可使用。如本地启动需重启 `hl-order-service-v2`。

## 验收

- [ ] 测试服部署后 admin token POST 工单 → 返 code:200 + workOrderNo + orderNo
- [ ] 前端工单列表展示工单号
- [ ] 工单详情展示工单号 + 订单号

## 关联工单
Gitea #1787 已 Closes 关闭。
