hl-api-changelog/changelogs-v2/2026-05/18_test_订单创建-修改接口-管理后台.md
yaosutu 1701cf7a23 docs(order-v3): §4/§5/§9/§11/§12/§13 清理后端实现/派生/前端 use case 备注
前端 changelog 只写接口契约(入参/出参/类型/枚举/错误码/边界/示例)。
本次砍掉 7 类无效内容:
1. 后端字段来源(JWT 派生 / 产品快照派生)
2. 后端实现细节(雪花 ID JSON String / DB 层 AES / 从 Nacos 拼接)
3. 后端 DB 字段(写入 order_main.room_count / order_tag tag_type=PERSONAL)
4. 后端运维(端口 / DDL / Redis key / 重启 / 回滚耗时)
5. 前端 use case(弹窗标题用 / 前端拼催款话术)
6. 其他接口跳转(出行人不在本接口传,调 §2 单独添加)
7. 影响其他后端服务

字段 +46 / -75 净减 29 行,聚焦接口契约。
2026-05-18 15:44:12 +08:00

13 KiB

【修改接口·管理后台】v3 admin 订单创建(测试 changelog

PR: 无(测试 changelog | 服务: hl-order-service-v3 | 更新时间: 2026-05-18 22:00

1. 接口背景

定制师在 B 端管理后台代客户下单的入口。客户通过电话 / 微信 / 线下渠道委托定制师下单,定制师选好产品档位 + 团期 + 出行人数 + 客户信息后调用本接口生成订单,订单进入「待支付」状态,同时返回支付页 URL 用于催款。

v5.17 起入参扩展为 13 字段(新增 createSource / groupBatchId / roomCount / tags,v5.18 起出参扩展为 20 字段(增加 productName / depositAmount / payUrl 等弹窗渲染所需字段)。

2. 变更清单

# 接口 方法 路径 变更类型 说明
1 创建订单 POST /v3/admin/order 修改接口 v5.17 入参 + v5.18 出参扩展;服务从 v2 切到 hl-order-service-v3

3. 接口详情

3.1 创建订单

  • 使用场景:定制师 B 端代下单(电话 / 微信 / 线下渠道委托场景)
  • 认证JWTadmin 角色,Gateway 校验)
  • 幂等性:否(同一定制师重复点击会创建多笔订单,前端按钮防抖兜底)
  • 限流B 端低频)
  • 响应时间预期P95 ≤ 500ms

4. 接口入参

4.1 路径参数 / Query 参数

4.2 请求体字段(OrderCreateReqVO,共 13 字段)

字段 类型 必填 说明 校验规则
productId Long 产品 ID @NotNull
tierSeq Integer 档位序号 @NotNull
departureDate LocalDate 出发日期 @NotNullv4.9 改必填)
adultCount Integer 成人数 @NotNull @Min(1)
childCount Integer 儿童数 @Min(0),默认 0
youngChildCount Integer 幼儿数 @Min(0),默认 0
babyCount Integer 婴儿数 @Min(0),默认 0
customerName String 客户姓名 @NotBlank
customerPhone String 客户手机明文传,11 位数字) @NotBlank
customerRemark String 客户备注 @Size(max=500)
createSource String 创建来源(不传默认 CONSULTANT @Size(max=20),枚举见 §6.1
groupBatchId Long 拼团批次 ID自由出团传空
roomCount Integer 房间数 @Min(1)
tags List<String> 订单标签名列表

5. 出参(响应)

5.1 响应字段(Result<OrderCreateRespVO>,data 共 20 字段)

字段 类型 说明
id String 订单主键
orderNo String 订单号,格式 HL{yyyyMMddHHmmss}{3 位序号},例 HL20260510143025001
displayOrderNo String 展示订单号 = orderNo + teamNoteamNo 为空时等同 orderNo
orderStatus String 订单粗状态,创单后固定 待支付(枚举见 §6.2
flowStatus String 订单细状态,创单后固定 待支付订金(枚举见 §6.3
consultantId String 实际绑定的定制师 ID
consultantSource String 定制师来源(枚举见 §6.4
tags List<String> 标签列表(含入参 tags + 系统自动标签,如 "含儿童"、"二次复购"
createdAt LocalDateTime 创单时间
productName String 产品名称
tierName String 档位名
groupBatchName String 拼团批次名(自由出团时 null
departureDate LocalDate 出发日
returnDate LocalDate 返团日
totalAmount BigDecimal 订单总价元,2 位小数)
depositAmount BigDecimal 建议定金金额元,2 位小数)
depositRatio Integer 定金比例百分比(DEPOSIT 模式有值;FULL 模式恒为 100
paymentMode String 支付模式(枚举见 §6.5
expiryMinutes Integer 支付时限分钟数,默认 1440=24h
payUrl String 支付页绝对 URL
customerName String 客户姓名(回显)

6. 枚举 / 数据字典

接口里出现的枚举按字段分开列。本接口共 5 个枚举字段。

6.1 createSourceOrderCreateSource

所属字段:入参 createSource | 类型String | 必填(不传默认 CONSULTANT

中文 说明
CUSTOMER 客户自助 客户在小程序自助下单
CONSULTANT 定制师代下单 默认值,B 端代下单
OTA OTA 渠道 携程 / 美团等 OTA 引流
WALK_IN 门店步入 线下门店现场下单
B2B B2B 渠道 旅行社代下单
VIP_REPURCHASE VIP 复购 老客户回购通道
REFERRAL 老客户转介绍
PROMOTION 营销活动
INTERNAL 内部测试 不计入业绩

6.2 orderStatusOrderStatus

所属字段:出参 orderStatus(订单粗状态)| 类型String

中文 说明
待支付 待支付 创单后默认状态
待完善 待完善 订金到账后进入
定制中 定制中 出行人 + 房车齐后
已确认 已确认
出行中 出行中
已完成 已完成
已取消 已取消

6.3 flowStatusOrderFlowStatus

所属字段:出参 flowStatus(订单细状态)| 类型String

中文 说明
待支付订金 待支付订金 创单后默认细状态

本节仅列创单接口能返回的细状态值;完整 flowStatus 枚举见订单状态机文档。

6.4 consultantSourceConsultantSource

所属字段:出参 consultantSource(定制师分配来源)| 类型String

中文 说明
DEFAULT_ASSIGNED 系统默认分配 走轮询规则
LINK_BOUND 链接绑定 客户扫了定制师专属码
MANUAL 手动指定 B 端 admin 强制指派

6.5 paymentModePaymentMode

所属字段:出参 paymentMode(支付模式)| 类型String

中文 说明
DEPOSIT 定金模式 30% 定金 + 余款
FULL 全款模式 100% 一次付清

7. 错误码

code 含义 触发场景
510101 产品不存在 / 已下架 资源域反查 productId 失败
510102 档位不存在 tierSeq 与产品 pricing_tier 表不匹配
510103 出发日期早于今天 departureDate < LocalDate.now()
510104 出发日期超过报名截止 拼团模式 departureDate < batch.signupDeadline
510105 拼团批次不存在 / 已满员 groupBatchId 反查失败或剩余人数不足
510106 总人数 = 0 adultCount + childCount + youngChildCount + babyCount == 0
510107 createSource 枚举非法 不在 §6 9 个值范围内
510108 客户手机格式非法 非 11 位数字
510109 系统未配置默认定制师 DEFAULT_ASSIGNED 时轮询池为空

只写契约,不写前端处理建议(前端建议属于消费方决策)

8. 示例3 组:典型 / 边界 / 异常)

8.1 典型成功

请求

POST /v3/admin/order
Authorization: Bearer {admin_jwt}
Content-Type: application/json

{
  "productId": 30001234567,
  "tierSeq": 1,
  "departureDate": "2026-06-01",
  "adultCount": 2,
  "childCount": 1,
  "youngChildCount": 0,
  "babyCount": 0,
  "customerName": "张三",
  "customerPhone": "13800002046",
  "customerRemark": "希望住朝阳房",
  "createSource": "CONSULTANT",
  "groupBatchId": 80001234567890,
  "roomCount": 2,
  "tags": ["VIP 客户", "二次复购"]
}

响应

{
  "code": 200,
  "data": {
    "id": "60123456789012",
    "orderNo": "HL20260518220000001",
    "displayOrderNo": "HL20260518220000001",
    "orderStatus": "待支付",
    "flowStatus": "待支付订金",
    "consultantId": "50001234567890",
    "consultantSource": "DEFAULT_ASSIGNED",
    "tags": ["VIP 客户", "二次复购", "含儿童"],
    "createdAt": "2026-05-18T22:00:00",
    "productName": "小蒙马夏季亲子营",
    "tierName": "经典档",
    "groupBatchName": "第 2 期",
    "departureDate": "2026-06-01",
    "returnDate": "2026-06-06",
    "totalAmount": 140800.00,
    "depositAmount": 42240.00,
    "depositRatio": 30,
    "paymentMode": "DEPOSIT",
    "expiryMinutes": 1440,
    "payUrl": "https://pay.hulalv.com/pay/HL20260518220000001",
    "customerName": "张三"
  },
  "msg": "success"
}

8.2 边界情况

场景说明:自由出团(无拼团批次)+ 全款模式 + 无标签 + 无备注。groupBatchId / customerRemark / tags / roomCount 均省略。

请求

{
  "productId": 30001234567,
  "tierSeq": 2,
  "departureDate": "2026-12-31",
  "adultCount": 1,
  "customerName": "李四",
  "customerPhone": "13912340001"
}

响应(关注 groupBatchName=null / tags 仅含系统标签 / paymentMode=FULL / depositRatio=100

{
  "code": 200,
  "data": {
    "id": "60123456789013",
    "orderNo": "HL20260518220500001",
    "displayOrderNo": "HL20260518220500001",
    "orderStatus": "待支付",
    "flowStatus": "待支付订金",
    "consultantId": "50001234567890",
    "consultantSource": "DEFAULT_ASSIGNED",
    "tags": [],
    "createdAt": "2026-05-18T22:05:00",
    "productName": "小蒙马夏季亲子营",
    "tierName": "VIP 档",
    "groupBatchName": null,
    "departureDate": "2026-12-31",
    "returnDate": "2027-01-05",
    "totalAmount": 18800.00,
    "depositAmount": 18800.00,
    "depositRatio": 100,
    "paymentMode": "FULL",
    "expiryMinutes": 1440,
    "payUrl": "https://pay.hulalv.com/pay/HL20260518220500001",
    "customerName": "李四"
  },
  "msg": "success"
}

8.3 业务失败(异常)

场景说明:拼团批次已满员(510105

请求:(同 8.1,但 groupBatchId 指向已满批次)

{
  "productId": 30001234567,
  "tierSeq": 1,
  "departureDate": "2026-06-01",
  "adultCount": 2,
  "customerName": "王五",
  "customerPhone": "13700001234",
  "groupBatchId": 80001999999999
}

响应

{
  "code": 510105,
  "data": null,
  "msg": "拼团批次不存在或已满员"
}

9. 业务边界

  • 适用场景:产品状态 = 上架;档位有效;出发日期 ≥ 今天;总人数 ≥ 1;客户手机合法11 位数字)
  • 拒绝场景
    • 产品已下架 → 510101
    • 出发日期早于今天 → 510103
    • 拼团批次过报名截止 → 510104
    • 拼团批次满员 → 510105
    • 总人数为 04 个 count 都是 0 或 null510106
    • createSource 枚举非法 → 510107
    • 客户手机格式非法 → 510108
  • ⚠️ 可选字段省略行为
    • 不传 createSource → 接受,使用默认 CONSULTANT
    • 不传 roomCount → 接受,返回的订单 roomCount 为 null
    • 不传 tags → 接受,返回的 tags 仅含系统自动标签

10. 修改前后对比

测试 changelog,对比口径以 v5.16 → v5.18 跨度展示。

10.1 字段级对比

入参

字段 v5.16 及之前 v5.17 起
createSource 新增(可选)
groupBatchId 新增(可选)
roomCount 新增(可选)
tags 新增(可选)

出参

字段 v5.17 及之前 v5.18 起
productName / tierName / groupBatchName 新增
departureDate / returnDate 新增
totalAmount / depositAmount / depositRatio / paymentMode 新增
expiryMinutes / payUrl / customerName 新增

10.2 行为级对比

行为 v5.17 及之前 v5.18 起
创单成功响应字段 9 字段(仅订单元数据) 20 字段(含产品名 / 价格 / 支付 URL
是否需要二次调详情接口拿弹窗信息 否(响应已含全部弹窗字段)

11. 影响评估

  • 是否破坏向后兼容:否(入参新增字段全可选;出参字段为追加)
  • 前端是否必须同步上线:否(旧前端忽略新出参字段,行为不变)

12. 注意事项

  • 前端可清理的历史 workaround
    • "创单后二次调详情接口拼弹窗" → 可撤;响应已含 20 字段
    • "按比例硬编码计算定金" → 可撤;响应直接返 depositAmount / depositRatio

13. 关联

  • Issue: 无(测试 changelog,验证 changelogs-v2/ 目录推送流程)
  • PR: 无
  • 设计文档: docs/order-v3/srs/order-cloud-v3-srs-v5.48.html §1.0 ~ §1.3
  • 后端负责人: @yaosutu