hl-api-changelog/changelogs-v2/2026-07/18_5055_核团核算列表详情-修改接口-管理后台.md

24 KiB

【新增/修改接口·管理后台】核团核算列表与详情聚合 (#5055)

PR: #5058 | 服务: hl-order-service-v3 | 更新时间: 2026-07-18 18:20

1. 接口背景

核团核算页面需要一个常规产品订单入口列表,并且详情页需要一次性拿到订单信息、出行人、司机车辆、应收构成、线上支付和线下收款记录。此前详情接口字段不完整,前端需要自行合并多个接口;本次把核团入口和详情聚合契约收敛到订单服务接口。

2. 变更清单

# 接口 方法 路径 变更类型 说明
1 核团核算任务列表 GET /v3/admin/order-settlement/tasks 新增接口 查询常规 CORE 产品、无团期批次、已完成订单的核团任务列表
2 查询核团详情 GET /v3/admin/order/{orderId}/settlement/return-detail 修改接口 扩展订单信息、出行人中文枚举、司机车辆集合、应收汇总/明细、支付+线下收款合并记录

3. 接口详情

3.1 核团核算任务列表

  • 使用场景: 核团核算页的常规产品列表。
  • 认证: 需要管理后台 JWT。
  • 幂等性: 是,只读查询。
  • 请求体: 无。
  • 响应结构: Result<PageResult<SettlementTaskRespVO>>

3.1.1 Query 入参

字段 类型 必填 默认值 校验规则 说明
page number 1 最小 1 当前页码
pageSize number 20 1100 每页条数
keyword string - - 关键词,按订单号、团号、产品名模糊查询
departureDateFrom string - yyyy-MM-dd 出发日期开始
departureDateTo string - yyyy-MM-dd 出发日期结束
settlementStatus string - NONE / PENDING / COMPLETED 核算状态筛选

3.1.2 响应字段

顶层统一响应:

字段 类型 说明
code number 成功为 200
message string 成功为 成功
data object 分页数据
traceId string/null 链路追踪 ID
success boolean 是否成功

data 分页字段:

字段 类型 说明
records array 核团任务行列表,空结果返回 []
total number 总记录数
page number 当前页码
pageSize number 每页条数

records[] 字段:

字段 类型 说明
orderId string 订单 ID
orderNo string 订单号
teamNo string/null 团号
productName string 产品名称
departureDate string/null 出发日期,格式 yyyy-MM-dd
returnDate string/null 返团日期,格式 yyyy-MM-dd
peopleCount number 出行人总数
peopleSummary string 人数文案,如 2成人2儿童2成人1婴儿0人
systemBalanceAmount number 系统计算待收尾款
settlementStatus string 核算状态
settlementStatusName string 核算状态中文名

列表不返回 routeNamedriverNamevehiclePlateNo

3.1.3 示例

典型成功:

请求

GET /v3/admin/order-settlement/tasks?page=1&pageSize=10&settlementStatus=COMPLETED
Authorization: Bearer <JWT>

响应

{
  "code": 200,
  "message": "成功",
  "data": {
    "records": [
      {
        "orderId": "2077233886248534018",
        "orderNo": "HL202607180001",
        "teamNo": "T20260718001",
        "productName": "呼伦贝尔草原 5 日游",
        "departureDate": "2026-07-20",
        "returnDate": "2026-07-24",
        "peopleCount": 3,
        "peopleSummary": "2成人1婴儿",
        "systemBalanceAmount": 0.00,
        "settlementStatus": "COMPLETED",
        "settlementStatusName": "已结算"
      }
    ],
    "total": 12,
    "page": 1,
    "pageSize": 10
  },
  "traceId": null,
  "success": true
}

空结果:

请求

GET /v3/admin/order-settlement/tasks?page=1&pageSize=10&keyword=不存在的订单
Authorization: Bearer <JWT>

响应

{
  "code": 200,
  "message": "成功",
  "data": {
    "records": [],
    "total": 0,
    "page": 1,
    "pageSize": 10
  },
  "traceId": null,
  "success": true
}

3.2 查询核团详情

  • 使用场景: 点击核团任务后进入返团核算详情页。
  • 认证: 需要管理后台 JWT。
  • 幂等性: 是,只读查询。
  • 请求体: 无。
  • 响应结构: Result<SettlementReturnDetailRespVO>

3.2.1 路径入参

字段 类型 必填 校验规则 说明
orderId string 长整型字符串,必须大于 0 订单 ID

3.2.2 响应字段

data 顶层字段:

字段 类型 说明
orderInfo object/null 订单信息;取消订单可能为空
travelers array 出行人列表,敏感字段已脱敏
driverVehicles array 当前有效司机车辆连续服务区间;无有效派车返回 []
receivableSummary object/null 应收汇总
receivableItems array 应收计算明细
collectionSummary object/null 收款汇总
collectionRecords array 线上支付和线下收款合并记录

orderInfo 字段:

字段 类型 说明
orderId string 订单 ID
orderNo string 订单号
teamNo string/null 团号
productName string 产品名称
departureDate string/null 出发日期,格式 yyyy-MM-dd
returnDate string/null 返团日期,格式 yyyy-MM-dd
peopleCount number 出行人总数
adultCount number 成人数
childCount number 儿童数
youngChildCount number 幼童数
babyCount number 婴儿数
peopleSummary string 人数文案
consultantId string/null 定制师 ID
consultantName string/null 定制师姓名
houseStaffId string/null 房务人员 ID
houseStaffName string/null 房务人员姓名
fleetStaffId string/null 车务人员 ID
fleetStaffName string/null 车务人员姓名
settlementStatus string 核算状态
settlementStatusName string 核算状态中文名

travelers[] 字段:

字段 类型 说明
travelerId string 出行人 ID
travelerName string 出行人姓名
travelerType string 出行人类型
travelerTypeName string 出行人类型中文名
idType string/null 证件类型
idTypeName string/null 证件类型中文名
phone string/null 脱敏手机号
idCardNo string/null 脱敏证件号

driverVehicles[] 字段:

字段 类型 说明
driverId string/null 司机 ID
driverName string/null 司机姓名
driverPhone string/null 脱敏司机手机号
vehicleId string/null 车辆 ID
vehiclePlateNo string/null 车牌号
vehicleModelName string/null 车型名称
seatCount number/null 座位数
startDate string 连续服务开始日期,格式 yyyy-MM-dd
endDate string 连续服务结束日期,格式 yyyy-MM-dd

receivableSummary 字段:

字段 类型 说明
orderAmount number 订单基础金额
surchargeAmount number 附加费金额
discountAmount number 优惠金额
payableAmount number 应收总额
formulaText string 应收总额公式文案,固定为 订单金额 + 附加费 - 优惠 = 应收总额

receivableItems[] 字段:

字段 类型 说明
sourceRecordId string/null 来源记录 ID
itemType string 应收项类型
itemTypeName string 应收项类型中文名
itemCode string/null 应收项编码
itemName string/null 应收项名称
direction string 方向,ADD 增加应收,DEDUCT 减少应收
amount number 金额

collectionSummary 字段:

字段 类型 说明
payableAmount number 应收总额
paidAmount number 累计已收
refundedAmount number 累计已退
netPaidAmount number 净已收,等于已收减已退
balanceAmount number 待收尾款
depositPaidAmount number 已收订金
balancePaidAmount number 已收尾款
fullPaidAmount number 已收全款

collectionRecords[] 字段:

字段 类型 说明
recordId string 收款记录 ID
recordType string 记录类型,线上支付或线下收款
recordTypeName string 记录类型中文名
payType string/null 款项类型
payTypeName string/null 款项类型中文名
channel string/null 支付或收款渠道
channelName string/null 支付或收款渠道中文名
receiptMethod string/null 线下收款方式;在线支付和对公转账可为空
receiptMethodName string/null 线下收款方式中文名
amount number 金额
collectedAt string/null 收款时间,格式 yyyy-MM-dd HH:mm:ss 或 ISO 时间字符串
status string/null 收款记录状态
statusName string/null 收款记录状态中文名
collectorName string/null 代收人姓名
operatorName string/null 登记人姓名
thirdPartyNoMasked string/null 脱敏第三方交易号
transferRef string/null 转账流水号
voucherUrls string[]/null 凭证图片 URL
remark string/null 备注
includedInPaidAmount boolean 是否计入已收金额

详情接口不返回 needsVehiclevehicleControlStatusvehicleControlStatusName

3.2.3 示例

典型成功:

请求

GET /v3/admin/order/2077233886248534018/settlement/return-detail
Authorization: Bearer <JWT>

响应

{
  "code": 200,
  "message": "成功",
  "data": {
    "orderInfo": {
      "orderId": "2077233886248534018",
      "orderNo": "HL202607180001",
      "teamNo": "T20260718001",
      "productName": "呼伦贝尔草原 5 日游",
      "departureDate": "2026-07-20",
      "returnDate": "2026-07-24",
      "peopleCount": 3,
      "adultCount": 2,
      "childCount": 0,
      "youngChildCount": 0,
      "babyCount": 1,
      "peopleSummary": "2成人1婴儿",
      "consultantId": "1001",
      "consultantName": "admin",
      "houseStaffId": "20001",
      "houseStaffName": "房务A",
      "fleetStaffId": "30001",
      "fleetStaffName": "车务A",
      "settlementStatus": "COMPLETED",
      "settlementStatusName": "已结算"
    },
    "travelers": [
      {
        "travelerId": "2077233886248535001",
        "travelerName": "张三",
        "travelerType": "ADULT",
        "travelerTypeName": "成人",
        "idType": "ID_CARD",
        "idTypeName": "身份证",
        "phone": "138****0000",
        "idCardNo": "150***********1234"
      }
    ],
    "driverVehicles": [
      {
        "driverId": "2078304714008522754",
        "driverName": "李师傅",
        "driverPhone": "176****3787",
        "vehicleId": "2065329514644152321",
        "vehiclePlateNo": "蒙C01E01",
        "vehicleModelName": "丰田埃尔法",
        "seatCount": 7,
        "startDate": "2026-07-20",
        "endDate": "2026-07-24"
      }
    ],
    "receivableSummary": {
      "orderAmount": 6000.00,
      "surchargeAmount": 200.00,
      "discountAmount": 90.00,
      "payableAmount": 6110.00,
      "formulaText": "订单金额 + 附加费 - 优惠 = 应收总额"
    },
    "receivableItems": [
      {
        "sourceRecordId": "2077233886248534018",
        "itemType": "BASE_ORDER",
        "itemTypeName": "订单基础应收",
        "itemCode": "ORDER_AMOUNT",
        "itemName": "呼伦贝尔草原 5 日游",
        "direction": "ADD",
        "amount": 6000.00
      },
      {
        "sourceRecordId": "2077233886248536001",
        "itemType": "SURCHARGE",
        "itemTypeName": "附加费",
        "itemCode": "SINGLE_ROOM",
        "itemName": "单房差",
        "direction": "ADD",
        "amount": 200.00
      },
      {
        "sourceRecordId": "2077233886248537001",
        "itemType": "DISCOUNT",
        "itemTypeName": "优惠",
        "itemCode": "PROMOTION",
        "itemName": "活动优惠",
        "direction": "DEDUCT",
        "amount": 90.00
      }
    ],
    "collectionSummary": {
      "payableAmount": 6110.00,
      "paidAmount": 6110.00,
      "refundedAmount": 0.00,
      "netPaidAmount": 6110.00,
      "balanceAmount": 0.00,
      "depositPaidAmount": 1000.00,
      "balancePaidAmount": 5110.00,
      "fullPaidAmount": 0.00
    },
    "collectionRecords": [
      {
        "recordId": "2077233886248538001",
        "recordType": "ONLINE_PAYMENT",
        "recordTypeName": "在线支付",
        "payType": "DEPOSIT",
        "payTypeName": "订金",
        "channel": "WECHAT",
        "channelName": "微信支付",
        "receiptMethod": null,
        "receiptMethodName": null,
        "amount": 1000.00,
        "collectedAt": "2026-07-10 10:30:00",
        "status": "SUCCEEDED",
        "statusName": "支付成功",
        "collectorName": null,
        "operatorName": null,
        "thirdPartyNoMasked": "4200****0001",
        "transferRef": null,
        "voucherUrls": null,
        "remark": null,
        "includedInPaidAmount": true
      },
      {
        "recordId": "2077233886248539001",
        "recordType": "MANUAL_RECEIPT",
        "recordTypeName": "线下收款",
        "payType": "BALANCE",
        "payTypeName": "尾款",
        "channel": "DRIVER_CASH",
        "channelName": "报账人收款",
        "receiptMethod": "WECHAT_TRANSFER",
        "receiptMethodName": "微信转账",
        "amount": 5110.00,
        "collectedAt": "2026-07-20 18:30:00",
        "status": "CONFIRMED",
        "statusName": "已确认",
        "collectorName": "李师傅",
        "operatorName": "admin",
        "thirdPartyNoMasked": null,
        "transferRef": null,
        "voucherUrls": [
          "https://oss.example.com/receipt/a.jpg"
        ],
        "remark": "现场收尾款",
        "includedInPaidAmount": true
      }
    ]
  },
  "traceId": null,
  "success": true
}

边界成功:无司机车辆、无收款记录。

请求

GET /v3/admin/order/2077233886248534019/settlement/return-detail
Authorization: Bearer <JWT>

响应

{
  "code": 200,
  "message": "成功",
  "data": {
    "orderInfo": {
      "orderId": "2077233886248534019",
      "orderNo": "HL202607180002",
      "teamNo": null,
      "productName": "呼伦贝尔草原 5 日游",
      "departureDate": "2026-07-20",
      "returnDate": "2026-07-24",
      "peopleCount": 1,
      "adultCount": 1,
      "childCount": 0,
      "youngChildCount": 0,
      "babyCount": 0,
      "peopleSummary": "1成人",
      "consultantId": "1001",
      "consultantName": "admin",
      "houseStaffId": null,
      "houseStaffName": null,
      "fleetStaffId": null,
      "fleetStaffName": null,
      "settlementStatus": "NONE",
      "settlementStatusName": "未结算"
    },
    "travelers": [],
    "driverVehicles": [],
    "receivableSummary": {
      "orderAmount": 3000.00,
      "surchargeAmount": 0.00,
      "discountAmount": 0.00,
      "payableAmount": 3000.00,
      "formulaText": "订单金额 + 附加费 - 优惠 = 应收总额"
    },
    "receivableItems": [
      {
        "sourceRecordId": "2077233886248534019",
        "itemType": "BASE_ORDER",
        "itemTypeName": "订单基础应收",
        "itemCode": "ORDER_AMOUNT",
        "itemName": "呼伦贝尔草原 5 日游",
        "direction": "ADD",
        "amount": 3000.00
      }
    ],
    "collectionSummary": {
      "payableAmount": 3000.00,
      "paidAmount": 0.00,
      "refundedAmount": 0.00,
      "netPaidAmount": 0.00,
      "balanceAmount": 3000.00,
      "depositPaidAmount": 0.00,
      "balancePaidAmount": 0.00,
      "fullPaidAmount": 0.00
    },
    "collectionRecords": []
  },
  "traceId": null,
  "success": true
}

业务失败:订单不存在。

请求

GET /v3/admin/order/999999999999999999/settlement/return-detail
Authorization: Bearer <JWT>

响应

{
  "code": 581007,
  "message": "订单不存在",
  "data": null,
  "traceId": null,
  "success": false
}

4. 入参汇总

接口 入参位置 字段
GET /v3/admin/order-settlement/tasks Query pagepageSizekeyworddepartureDateFromdepartureDateTosettlementStatus
GET /v3/admin/order/{orderId}/settlement/return-detail Path orderId

5. 出参汇总

接口 出参根结构 主要字段
GET /v3/admin/order-settlement/tasks PageResult<SettlementTaskRespVO> records[]totalpagepageSize
GET /v3/admin/order/{orderId}/settlement/return-detail SettlementReturnDetailRespVO orderInfotravelersdriverVehiclesreceivableSummaryreceivableItemscollectionSummarycollectionRecords

6. 枚举 / 数据字典

6.1 settlementStatus

所属字段: settlementStatusrecords[].settlementStatusorderInfo.settlementStatus | 类型: String

中文 说明
NONE 未结算 初始态,尚未提交核单
PENDING 待财务复核 已提交核单,等待财务复核
COMPLETED 已结算 财务复核已完成

6.2 travelerType

所属字段: travelers[].travelerType | 类型: String

中文 说明
ADULT 成人 成人出行人
CHILD 儿童 儿童出行人
YOUNG_CHILD 幼童 幼童出行人
BABY 婴儿 婴儿出行人

6.3 idType

所属字段: travelers[].idType | 类型: String

中文 说明
ID_CARD 身份证 居民身份证
PASSPORT 护照 护照
BIRTH_CERT 出生证明 出生医学证明

6.4 itemType

所属字段: receivableItems[].itemType | 类型: String

中文 说明
BASE_ORDER 订单基础应收 订单基础金额
SURCHARGE 附加费 附加费用,增加应收
DISCOUNT 优惠 优惠项目,减少应收

6.5 direction

所属字段: receivableItems[].direction | 类型: String

中文 说明
ADD 增加 计入应收增加项
DEDUCT 扣减 计入应收扣减项

6.6 recordType

所属字段: collectionRecords[].recordType | 类型: String

中文 说明
ONLINE_PAYMENT 在线支付 线上支付流水
MANUAL_RECEIPT 线下收款 管理后台登记的线下收款

6.7 payType

所属字段: collectionRecords[].payType | 类型: String

中文 说明
DEPOSIT 订金 订金
FULL 全款 全款
BALANCE 尾款 尾款

6.8 channel

所属字段: collectionRecords[].channel | 类型: String

中文 说明
WECHAT 微信支付 在线微信支付
ALIPAY 支付宝 在线支付宝支付
OFFLINE_TRANSFER 线下转账 线下转账渠道
DRIVER_CASH 报账人收款 报账人代收
BANK_TRANSFER 对公转账 对公银行转账
CONSULTANT_COLLECTION 定制师代收 定制师代收

6.9 receiptMethod

所属字段: collectionRecords[].receiptMethod | 类型: String

中文 说明
WECHAT_TRANSFER 微信转账 线下微信转账
CASH 现金收款 现金收款

6.10 collectionRecords[].status

所属字段: collectionRecords[].status | 类型: String

中文 说明
SUCCEEDED 支付成功 成功在线支付,计入已收
PENDING 待支付 在线支付待支付,不计入已收
CLOSED 已关闭 在线支付已关闭,不计入已收
REFUNDED 已退款 在线支付已退款
CONFIRMED 已确认 线下收款已确认,计入已收
VOIDED 已撤销 线下收款已撤销,不计入已收

7. 错误码

code 含义 触发场景
200 成功 查询成功
400 参数校验失败 page < 1pageSize > 100orderId <= 0、日期格式非法、settlementStatus 非法
401 未认证 未携带有效管理后台 JWT
581007 订单不存在 详情接口查询不存在的订单
581045 房务角色无权查看订单详情,房务仅可配房 房务管理员或房务组长访问列表或详情
584072 车务司机车辆信息暂时不可用,请稍后重试 详情接口读取司机车辆信息不可用

8. 示例

示例已按接口放在 3.1.33.2.3:列表接口包含典型成功和空结果;详情接口包含典型成功、无司机车辆/无收款记录边界成功、订单不存在业务失败。

9. 业务边界

  • 列表只包含常规 CORE 产品、无团期批次、已完成订单;团期、小蒙马、导游/摄影团队独立列表不在本接口范围。
  • 列表按返团日期倒序、订单 ID 倒序返回。
  • 详情接口取消订单返回成功响应,但 orderInfo、汇总对象可为空,数组字段为空数组。
  • 详情中的手机号、身份证号、第三方交易号、司机手机号均为脱敏值。
  • collectionRecords 已合并在线支付和线下收款,前端不需要再把支付记录接口与线下收款接口自行合并。
  • receivableSummary.payableAmount 是应收总额,计算项通过 receivableItems 返回。

10. 修改前后对比

10.1 列表接口

修改前 修改后
常规产品核团列表 无专用接口 新增 GET /v3/admin/order-settlement/tasks
人数文案 返回 peopleSummary
核算状态中文 返回 settlementStatusName
司机/车牌 不适用 列表不返回司机和车牌字段

10.2 详情接口

字段/结构 修改前 修改后
orderInfo.peopleSummary 新增
orderInfo.adultCount/childCount/youngChildCount/babyCount 新增
orderInfo.consultantId/consultantName 新增
orderInfo.houseStaffId/houseStaffName 新增
orderInfo.fleetStaffId/fleetStaffName 新增
orderInfo.settlementStatusName 新增
travelers[].travelerTypeName 新增
travelers[].idTypeName 新增
driverVehicles 新增司机车辆集合
receivableSummary 不完整 新增订单金额、附加费、优惠、应收总额、公式文案
receivableItems 新增应收计算明细
collectionSummary 不完整 新增已收/已退/净已收/待收/订金/尾款/全款汇总
collectionRecords 新增在线支付+线下收款合并记录
needsVehicle/vehicleControlStatus/vehicleControlStatusName 可能需要前端关注 本接口不返回

11. 影响评估 / 回滚

11.1 影响评估

  • 是否破坏向后兼容: 否。列表为新增接口;详情为新增出参字段和新增集合结构。
  • 前端是否必须同步上线: 建议同步。核团列表页应改用新增列表接口;详情页可直接使用新增聚合字段,减少前端合并接口逻辑。
  • 影响已有数据: 不需要数据迁移。

11.2 回滚方案

  • 回滚方式: 回滚 PR #5058。
  • 回滚后前端影响: 新增列表接口不可用,详情新增字段消失;前端需要回退到原有多接口合并方案或旧页面逻辑。

12. 注意事项

  • orderIdtravelerIddriverIdvehicleId 等长整型 ID 均按字符串处理,避免 JS 精度丢失。
  • 列表不要展示司机和车牌;司机车辆只在详情的 driverVehicles 中展示。
  • 详情里的线下收款和在线支付已经按统一记录结构返回,recordType 用于区分来源。
  • 金额字段单位均为元。

13. 关联 / 联系人

13.1 链接

13.2 联系人

  • 后端负责人: @yst
  • 需求确认: @yaosutu