```
feat(commission): 完善分销订单支付时数据同步机制 - 新增 syncExistingCommissionOrderOnPay 方法处理已存在分销单的支付同步场景 - 添加 encodeCommissionRulesSnapshot 和 commissionRulesSnapshotEquals 辅助方法 - 优化佣金规则快照存储方式,统一JSON编码格式 - 增加已入账奖励数量检查,防止对已结算订单进行错误同步 fix(wallet-settlement): 调整分账和佣金结算的余额处理逻辑 - 新增 shouldSettleCommissionViaWalletHook 和 shouldSettleRegionalViaWalletHook 方法控制分账成功后的钱包入账行为 - 修改 shouldDeferRegionalWallet 调用为 shouldSettleRegionalViaWalletHook - 修复分账成功时仍可能重复入钱包的问题 - 统一佣金和区域代理的钩子结算判断逻辑 refactor(hook): 优化佣金钩子触发条件和订单查询逻辑 - 在 CommissionHook 中使用新的钱包结算判断方法 - 修正 orderFinish 事件中的订单项遍历逻辑 - 增加订单有效性检查,避免空值异常 - 统一各事件中的结算条件判断 test(sql): 更新分账佣金验证SQL脚本 - 修正注释说明,明确分账成功不入余额的控制逻辑 - 补充区域代理佣金缺失汇付接收方的查询 - 重构单笔订单深度核验脚本,提供更详细的订单分析信息 - 增加分账成功与钱包流水的对比检查逻辑 ```
这个提交包含在:
@@ -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')
|
||||
|
||||
在新工单中引用
屏蔽一个用户