财务管理-结算记录:状态列部分行显示成空的/裸字母标签

Status: ready-for-agent
领域: 支付链路(自动结算与结算记录)
来源: 用户工单「【财务管理】结算记录:状态没有显示出来」(截图:2026-09-18 两条流水状态列红框为空标签)
日期: 2026-09-18

现象

「财务管理 → 结算记录」列表里,状态列**大部分行正常显示「已结算」**,但**最新日期(2026-09-18)的两条**
(个人进件验证商户、景区服务-卡)只显示一个几乎空白的小标签——实际是标签里只有**一个裸字母 I**,
看起来像"状态没显示出来"。

根因

状态值直接来自斗拱结算流水的 trans_stat,前端只映射了三个值,其余原样输出:

  • 后端:MerchantSettlementAdminService.decode(...) 第 116 行 row.put("status", record.get("trans_stat"));
  • 前端:MerchantSettlementView.vue
    settleStatusLabel() 只映射了 S→已结算 / F→结算失败 / P→处理中,其它值走 || String(value || '-') 原样显示。

当天还没结算完成的流水,斗拱返回的是 trans_stat = "I"(处理中/未终态),不在映射表里,于是标签里
只剩下一个裸的 I。更早的流水都是 S,所以显示正常——这也解释了为什么"只有最新的两行看起来是空的"。

证据

  1. 截图:2026-09-18 两行状态列是空标签,其余 2026-09-17 / 09-15 / 08-29 / 08-26 都是「已结算」。
  2. 代码里 I 是确实存在的交易状态:
  • PendingPaymentConfirmationTests:105 "trans_stat", "I", "resp_code", "00000000";
  • MerchantVerificationServiceTests:228 "trans_stat", "I", "resp_code", "00000000";
  • PaymentReconciliationService:629 把 "I" 和失败/未找到一起归为"未终态"。
  1. 通道状态取值说明见 talent-card-server/docs/huifu-payment-integration.md:103
    (trans_stat:S/SUCCESS/PAID、F/FAILED、P/PROCESSING/PENDING 等)。

建议改法(支付链路负责人)

  1. 前端 settleStatusLabel() / settleStatusType() 补上缺失取值,至少:
    I → 处理中(warning),并顺手兼容长写法 SUCCESS/FAILED/PROCESSING/PENDING(与后端文档口径一致)。
  2. 更稳的做法是后端 decode() 里把 trans_stat 归一化(I/PROCESSING/PENDING → P,
    SUCCESS/PAID → S,FAILED → F),前端只认三种值,避免以后每出现一个新码就再崩一次。
  3. 另:结算记录页的「状态」筛选下拉目前是空的(statusOptions 对 settlements 返回 [],
    MerchantSettlementView.vue:36),归一化后建议一并把 S/F/P 三个选项补上,方便按状态筛流水。

Comments

  • 2026-09-18:由「其余业务」侧的会话只读排查后归档(按仓库约定,支付链路代码未改动)。待转交支付链路负责人。