refactor(pay): 统一流水号,移除订单/流水/提现三类号码前缀
订单号、资金流水号、提现单号此前各自带前缀配置,同一笔业务在不同界面会
呈现多个号码口径,对账与客诉排查都要先做一次前缀换算。现收敛为单一流水号
分配器,不再按业务类型区分号码形态。
- 删除 payment_order_prefix / payment_flow_prefix /
payment_withdrawal_prefix 三项配置项及其生成、校验链路
- BusinessNumber::allocate() 成为唯一入口,输出 {YmdHis}{6 位随机},
共 20 位无前缀,满足 VARCHAR(32) 与网关 out_trade_no ≤ 32 的限制
- 订单、资金流水、提现、卡密渠道交易号四处生成点全部改走该分配器
- 后台支付中心表头「订单号 / 提现单号」统一为「流水号」
- 前台用户中心与订单卡片文案同步统一;前台订单详情合并为单行流水号,
账本流水号不再下发到前台,避免同一单据出现两个对外号码
- 同步更新 financial-flow / pay-card / card-pass-order-numbers 契约测试
与 BusinessNumberTest 断言
按用户要求不做双路逻辑与数据迁移,直接替换为统一方案,历史行不做转换。
验证:node --test tests/**/*.test.cjs 362/364 通过,新增 37 项契约;失败的
2 项在改动前的干净 HEAD 基线上同样失败(基线 327 项 / 失败 2 项),分别命中
遗留的 fa fa- 标记与 FA 版本号断言,与本次改动无关。phpunit 44 项 / 103
断言全部通过;php -l 全部改动的 PHP 文件通过。
This commit is contained in:
@@ -104,7 +104,7 @@ final class FinancialFlowService {
|
||||
*
|
||||
* 卡密是平台自发的预付凭证:核销那一刻既没有第三方现金流入,也不产生账本资产分录,
|
||||
* 订单金额还可能为 0(会员卡)或以积分计价(积分卡)。因此这里只落一条与订单关联的
|
||||
* order_payment 流水,不生成任何现金/资产分录,让订单在详情页具备可追溯的「支付流水号」。
|
||||
* order_payment 流水,不生成任何现金/资产分录,让订单在详情页具备可追溯的「账本流水号」。
|
||||
*
|
||||
* 余额卡与积分卡的核销走账本(LedgerService::credit),其流水由 record_ledger() 落库;
|
||||
* 本方法供会员卡这类无账本参与的卡种调用。
|
||||
@@ -122,7 +122,7 @@ final class FinancialFlowService {
|
||||
* 卡密核销的资产入账走账本,但订单号是随机生成的、不能进 LedgerCommand
|
||||
* (payload_hash 覆盖 metadata,塞入随机号会破坏账本幂等重放)。因此账本
|
||||
* 提交之后再调用本方法补挂关联;同时把 event_type 归一为 order_payment,
|
||||
* 让订单详情页的「支付流水号」能反查到它。
|
||||
* 让订单详情页的「账本流水号」能反查到它。
|
||||
*
|
||||
* @return bool 是否发生了更新
|
||||
*/
|
||||
@@ -218,12 +218,10 @@ final class FinancialFlowService {
|
||||
return new \WP_Error('aksrt_flow_db', __('无法开启资金流水事务', 'aksrt'), ['status' => 500]);
|
||||
}
|
||||
|
||||
$settings = \AKSRT\Settings\Settings::get_order_settings();
|
||||
$prefix = BusinessNumber::normalize_prefix($settings['flow_prefix'] ?? 'AK', 'AK');
|
||||
$flow_id = 0;
|
||||
$flow_number = '';
|
||||
for ($attempt = 1; $attempt <= self::MAX_NUMBER_ATTEMPTS; $attempt++) {
|
||||
$flow_number = BusinessNumber::candidate($prefix);
|
||||
$flow_number = BusinessNumber::allocate();
|
||||
$metadata = is_array($flow['metadata'] ?? null) ? $flow['metadata'] : [];
|
||||
$inserted = $wpdb->insert($this->flow_table(), [
|
||||
'flow_number' => $flow_number,
|
||||
|
||||
Reference in New Issue
Block a user