feat(commission): 完善分销订单支付时数据同步机制

- 新增 syncExistingCommissionOrderOnPay 方法处理已存在分销单的支付同步场景
- 添加 encodeCommissionRulesSnapshot 和 commissionRulesSnapshotEquals 辅助方法
- 优化佣金规则快照存储方式,统一JSON编码格式
- 增加已入账奖励数量检查,防止对已结算订单进行错误同步

fix(wallet-settlement): 调整分账和佣金结算的余额处理逻辑

- 新增 shouldSettleCommissionViaWalletHook 和 shouldSettleRegionalViaWalletHook
  方法控制分账成功后的钱包入账行为
- 修改 shouldDeferRegionalWallet 调用为 shouldSettleRegionalViaWalletHook
- 修复分账成功时仍可能重复入钱包的问题
- 统一佣金和区域代理的钩子结算判断逻辑

refactor(hook): 优化佣金钩子触发条件和订单查询逻辑

- 在 CommissionHook 中使用新的钱包结算判断方法
- 修正 orderFinish 事件中的订单项遍历逻辑
- 增加订单有效性检查,避免空值异常
- 统一各事件中的结算条件判断

test(sql): 更新分账佣金验证SQL脚本

- 修正注释说明,明确分账成功不入余额的控制逻辑
- 补充区域代理佣金缺失汇付接收方的查询
- 重构单笔订单深度核验脚本,提供更详细的订单分析信息
- 增加分账成功与钱包流水的对比检查逻辑
```
这个提交包含在:
可乐加冰
2026-10-22 11:44:24 +08:00
父节点 b457b9b434
当前提交 b5142ff780
共有 5 个文件被更改,包括 345 次插入 和 43 次删除

查看文件

@@ -38,6 +38,38 @@ class SplitWalletSettlement
return self::shouldDeferWalletUntilGatewaySplitResolves($order);
}
/**
* 分销钩子是否应把待发佣金写入余额(false = 等分账 finalize 或已走通道,避免与汇付/微信分账重复)
*/
public static function shouldSettleCommissionViaWalletHook($order, $event)
{
$commissionEvent = (new CommissionConfig())->getCommissionEvent();
if ($commissionEvent !== $event && $event !== 'admin') {
return false;
}
if (self::shouldDeferWalletUntilGatewaySplitResolves($order)) {
return false;
}
return true;
}
/**
* 区域代理钩子是否应把待发佣金写入余额
*/
public static function shouldSettleRegionalViaWalletHook($order, $event)
{
$regionalEvent = (new RegionalConfig())->getCommissionEvent();
if ($regionalEvent !== $event && $event !== 'admin') {
return false;
}
if (self::shouldDeferWalletUntilGatewaySplitResolves($order)) {
return false;
}
return true;
}
/**
* 分销/区域结算事件(如 payed)早于 split_timing(如 confirm)时,仍应等分账结束再入钱包
*/
@@ -54,8 +86,9 @@ class SplitWalletSettlement
if (!$config->isEnable() || !$config->shouldSkipWallet()) {
return false;
}
// 分账已成功:佣金应由 finalizeAfterSplitAttempt 处理(或已标记通道到账),钩子不得再入余额
if (self::isSplitSuccessful($order['id'])) {
return false;
return true;
}
if (class_exists('\\addons\\shopro_huifu\\library\\Bridge')