SELECT pay_no, status, update_time FROM pay_order WHERE status = 'PROCESSING' AND update_time < NOW() - INTERVAL 5 MINUTE;
支付单状态停在 PROCESSING 已经 12 小时,前端查询页一直转圈,用户打了三次客服。渠道侧流水号其实早就成功了。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:状态推进只靠渠道回调,回调那次网络超时也没有重发。系统里没有主动查询渠道的兜底任务,软状态就一直没有出口。
「软状态终态」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
处理上按这个顺序:加扫描任务 把超过 5 分钟还在 PROCESSING 的单捞出来;逐笔调渠道查询接口 以渠道结果为准推进;查询也失败的单标成 UNKNOWN 转人工 不要一直 PROCESSING;状态更新带 from_status 条件 防止覆盖终态。
确认没问题再收工,PROCESSING 超过五分钟的单会被任务捞走 状态分布里不再有停留超过一小时的单。
