hl-api-changelog/changelogs-v2/2026-06/22_4229_发票财务列表未申请tab与列表行订单信息-修改接口-管理后台.md

11 KiB

发票财务列表 - 未申请 Tab 与列表行订单信息补齐(管理后台)

Issue: #4228 / #4229 PR: #4233 / #4235 日期: 2026-06-22 服务: hl-order-service-v3invoice 域) 端类型: 管理后台


1. 接口背景

发票财务管理列表GET /v3/admin/order/invoice/page本次做两处补齐

  1. NONE Tab未申请:新增 tab 可选值 NONE,返回「已完成COMPLETED且尚无有效发票」的订单列表,作为财务「代客申请」入口的候选。NONE Tab 下每行是「订单维度」,发票相关字段均为空,status 固定返回 NONE、statusText 固定返回「未申请」。
  2. 列表行补订单冗余信息:所有 Tab 下的列表行新增 5 个订单展示字段产品名、档位名、客户名、定制师名、出发日期,供列表直接渲染,无需二次请求。另,orderNo订单号字段此前已定义但未正确回填,本次修复。
  3. tabCounts 新增 noneCountTab 计数对象新增 noneCount 字段,表示「已完成且无发票」的订单数;allCount 含义不变(仍为 requested + issued + pushed 之和,不含 none

关联 PR #4233 修复 orderNo 回填 + 新增 5 个订单字段;PR #4235 新增 NONE Tab 查询与 noneCount 统计。


2. 变更清单

# 接口 变更类型 说明
1 GET /v3/admin/order/invoice/page 修改接口 入参 tab 新增可选值 NONE
2 GET /v3/admin/order/invoice/page 修改接口 出参 records[] 新增 5 个字段productName / tierName / contactName / customizerName / departureDate
3 GET /v3/admin/order/invoice/page 修改接口 出参 records[].orderNo 字段由恒 null 修复为正确回填
4 GET /v3/admin/order/invoice/page 修改接口 出参 tabCounts 新增 noneCount 字段

3. 接口详情

接口GET /v3/admin/order/invoice/page 功能描述:发票管理分页列表,含 Tab 过滤、统计数据与关键词搜索。 认证:管理后台 JWT,Header 携带 Authorization: Bearer 。 请求方式GET,参数均以 Query String 传入。 幂等性:只读查询,天然幂等。 限流:网关全局限流,无接口级特殊限流。


4. 接口入参

4.1 路径参数 / Query 参数

参数名 类型 必填 说明
page Integer 页码,默认 1
pageSize Integer 每页条数,默认 20
tab String Tab 过滤,默认 ALL;本次新增可选值 NONE,见 6 节枚举
keyword String 关键词搜索(发票号 / 申请人;NONE Tab 下该参数暂不生效
startDate String 申请开始日期,格式 yyyy-MM-dd;NONE Tab 下暂不生效
endDate String 申请结束日期,格式 yyyy-MM-dd;NONE Tab 下暂不生效

4.2 请求体字段

GET 接口无请求体。

5. 出参字段

响应结构Result<PageResult>

字段 类型 说明
records Array 发票 / 订单列表(见下方单条字段表)
total Long 总记录数
page Integer 当前页码
pageSize Integer 每页条数
tabCounts Object 各 Tab 计数,见下方 tabCounts 字段表
stats Object 当月统计currentMonthIssuedCount / currentMonthIssuedAmount

records 单条字段(含本次新增字段,标注 NEW

字段 类型 说明
id String 发票 IDLong 序列化;NONE Tab 下为 null
orderId String 所属订单 IDLong 序列化)
orderNo String 订单号(此前未回填,本次修复)
productName String 产品名 [NEW]
tierName String 档位名 [NEW]
contactName String 客户名(订单联系人) [NEW]
customizerName String 定制师名 [NEW]
departureDate String 出发日期,格式 yyyy-MM-dd [NEW]
status String 发票状态枚举,见 6 节;NONE Tab 下固定返回 NONE
statusText String 发票状态中文名;NONE Tab 下固定返回「未申请」
amount String 开票金额字符串,单位元;NONE Tab 下为 null
invoiceType String 发票类型枚举;NONE Tab 下为 null
invoiceTypeName String 发票类型中文名;NONE Tab 下为 null
titleType String 抬头类型;NONE Tab 下为 null
title String 发票抬头;NONE Tab 下为 null
taxNo String 税号;NONE Tab 下为 null
fileUrl String 发票 PDF 地址;NONE Tab 下为 null
pdfName String PDF 文件名;NONE Tab 下为 null
pdfSize Long PDF 文件大小字节;NONE Tab 下为 null
invoiceNo String 发票号码;NONE Tab 下为 null
issuedAt String 开票时间ISO 8601;NONE Tab 下为 null
issuedBy String 开票人姓名;NONE Tab 下为 null
requestedAt String 申请时间ISO 8601;NONE Tab 下为 null
requestedBy String 申请人;NONE Tab 下为 null
createTime String 记录创建时间;NONE Tab 下为 null

tabCounts 字段(含本次新增字段,标注 NEW

字段 类型 说明
requestedCount Integer 待开票数量
issuedCount Integer 已开票数量
pushedCount Integer 已推送数量
allCount Integer 全部(= requested + issued + pushed,不含 none
noneCount Integer 未申请(已完成订单无发票)数量 [NEW]

6. 枚举 / 数据字典

Tab 过滤值(入参 tab 字段)

说明
ALL 全部(默认),仅含有发票记录的数据
REQUESTED 仅待开票
ISSUED 仅已开票
PUSHED 仅已推送
NONE 未申请(已完成订单且无发票)[NEW]

InvoiceStatus - 发票状态records[].status

枚举值 中文名 说明
REQUESTED 待开票 用户 / 定制师已申请,等待财务处理
ISSUED 已开票 财务已完成开票并上传 PDF
PUSHED 已推送 发票已推送给客户
VOIDED 已作废 发票已作废
NONE 未申请 仅 NONE Tab 下返回,表示该订单尚无发票 [NEW]

InvoiceType - 发票类型

枚举值 中文名
VAT_NORMAL 增值税普通发票
VAT_SPECIAL 增值税专用发票
ELECTRONIC 电子发票

7. 错误码

本次修改为纯出参扩展与入参新增可选值,无新增错误码。已有行为:

情况 行为
tab 传入非法枚举值(如 tab=INVALID HTTP 400 参数校验错误

8. 示例

8.1 典型成功ALL Tab 列表(含新增 5 个订单字段)

请求:

响应:

8.2 边界情况NONE Tab代客申请候选列表,发票字段全 null

请求:

响应NONE Tab 下发票相关字段均为 null,id 为 null,status 固定 NONE

8.3 业务失败tab 传入非法枚举值

请求:

响应:


9. 业务边界

适用:

  • 财务人员查看所有发票记录,按 Tab 分类处理
  • NONE Tab列出已完成COMPLETED且尚未申请发票的订单,财务可点击「代客申请」按钮调 POST /v3/admin/order/{orderId}/invoice/apply,该接口本次未变更

不适用:

  • NONE Tab 不展示非 COMPLETED 订单(如 CUSTOMIZING、PAID、TRAVELLING 等状态的订单不出现在 NONE Tab
  • VOIDED 发票不算有效发票,该订单仍可出现在 NONE Tab后端实现口径以实测为准

特殊边界:

  • NONE Tab 下 keyword关键词与 startDate / endDate日期范围参数暂不生效,传了也不做过滤
  • noneCount 不计入 allCount;两者相互独立,前端 Tab 计数需分别展示
  • NONE Tab 每行「id」字段为 null,前端渲染「代客申请」按钮时须使用 orderId,而非 id

10. 修改前后对比

入参 tab 字段变化:

tab 可选值 变更前 变更后
ALL 支持 不变
REQUESTED 支持 不变
ISSUED 支持 不变
PUSHED 支持 不变
NONE 不存在 新增(未申请订单)

出参 records[] 字段变化:

字段名 变更前 变更后
orderNo 有定义但恒 nullbug 正确回填订单号
productName 不存在 新增(产品名)
tierName 不存在 新增(档位名)
contactName 不存在 新增(客户名)
customizerName 不存在 新增(定制师名)
departureDate 不存在 新增出发日期,yyyy-MM-dd

出参 tabCounts 字段变化:

字段名 变更前 变更后
requestedCount 存在 不变
issuedCount 存在 不变
pushedCount 存在 不变
allCount 存在(= requested+issued+pushed 不变(仍不含 none
noneCount 不存在 新增(未申请订单数)

11. 影响评估 / 回滚

破坏兼容性:

  • 出参新增字段productName / tierName / contactName / customizerName / departureDate / noneCount为纯新增,不破坏旧字段,向后兼容。
  • orderNo 由 null 变为有值:如前端已有 null 防护(判 null 不渲染),行为不变;原先已渲染 orderNo 列但始终空白,现在将正常显示。
  • tab=NONE 为新可选值;旧版前端不传,不影响现有功能。

前端同步上线:

  • 新增 NONE Tab 入口与「代客申请」按钮需前端接线,否则 NONE Tab 功能不可见。
  • 新增 5 个订单字段可直接接线渲染到列表列,无需二次请求。

回滚方案: 回滚后端至旧版本后新增字段消失、orderNo 重新恒 null、tab=NONE 入参不识别(返回空列表或 400、noneCount 消失。前端可对缺失字段做 null 防护兜底。


12. 注意事项

  1. NONE Tab 列表行的 id 为 null,前端渲染「代客申请」按钮须用 orderIdLong 序列化字符串)传给 POST /v3/admin/order/{orderId}/invoice/apply。
  2. departureDate 类型为字符串,格式固定 yyyy-MM-dd,前端直接展示,无需额外格式化。
  3. noneCount 与 allCount 互不包含,前端 Tab 头需分别渲染。
  4. NONE Tab 暂不支持 keyword / startDate / endDate 过滤;前端可在 NONE Tab 时隐藏对应搜索框,或保留但提示「当前 Tab 不支持筛选」。
  5. orderNo 恒 null 为历史 bug,本次修复后所有 Tab 下均有值;原先前端若有「有 orderNo 才渲染」的逻辑可直接保留,无需改动。
  6. amount 等金额字段均为 String 类型,前端须按字符串接收,避免 JS 大数精度丢失。

13. 关联 / 联系人

  • Issue订单字段补齐: wx/HL#4228
  • IssueNONE Tab: wx/HL#4229
  • PR订单字段补齐 + orderNo 修复 #4233: wx/HL#4233
  • PRNONE Tab + noneCount #4235: wx/HL#4235
  • 后端负责人: yaosutu