fix(accounting): note列CONCAT前LEFT(200)限长——失败重试轮note已写~185字符(出账异常长文案),出账成功再CONCAT'|accounted:'+orderid直接1406溢出→异常路径回写failed→'修好定价也永远出不了账'死循环(2026-09-16 qwen-image-3.0-pro 39笔实测:钱包已扣+客户账已记但流水状态置failed,重跑靠幂等守卫才安全)

This commit is contained in:
yumoqing 2026-09-16 14:21:10 +08:00
parent e7a5d43bd4
commit 28c7726ff9

View File

@ -193,9 +193,13 @@ async def _settle_one(sor, row):
supplier_cost = float((result or {}).get('supplier_cost', 0) or 0)
await _deduct_wallet(sor, row, supplier_cost)
# 回填客户应付 + 成本侧金额 + 置已出账
# ⚠ note=varchar(200)CONCAT 前必须限长——失败重试轮曾把 note 写到 ~185 字符
# (出账异常长文案),出账成功再 CONCAT '|accounted:'+orderid 直接 1406 溢出 →
# 异常回写 failed → 「修好定价也永远出不了账」死循环2026-09-16 qwen-image-3.0-pro
# 39 笔实测。LEFT(...,200) 保底:宁可截尾巴也不让成功账落不下。
await sor.sqlExe(
"UPDATE llm_usage SET charge=${c}$, cost=${k}$, accounting_status='accounted', "
"note=CONCAT(COALESCE(note,''),'|accounted:',${o}$) WHERE id=${i}$",
"note=LEFT(CONCAT(COALESCE(note,''),'|accounted:',${o}$),200) WHERE id=${i}$",
{"c": float((result or {}).get('customer_amount', 0) or 0),
"k": round(supplier_cost, 6),
"o": str((result or {}).get('orderid', ''))[:40],