reference, 'TEST-') || str_contains($order->package_name, '测试')) { return; } $agent = $enterprise->agent; if (!$agent || (int) $agent->status !== 1) { return; } $level = $this->level($agent); if ($level === null) { return; } $baseAmount = (int) $order->amount_cents; $rate = WaterCommissionPolicy::rate($level, true); WaterCommission::query()->create([ 'order_id' => (int) $order->id, 'enterprise_id' => (int) $enterprise->id, 'enterprise_name' => $enterprise->name, 'agent_id' => (int) $agent->id, 'agent_level' => $level, 'rate_basis_points' => $rate, 'base_amount_cents' => $baseAmount, 'amount_cents' => WaterCommissionPolicy::amountAtRate($baseAmount, $rate), 'status' => 'pending', 'created_at' => $order->created_at, ]); } private function level(WaterAgent $agent): ?int { $level = 1; $seen = []; while (true) { $id = (int) $agent->id; if (isset($seen[$id]) || $level > 3) { throw new DomainException('代理上下级关系异常,无法计提佣金'); } $seen[$id] = true; if ($agent->parent_id === null) { return null; } if ((int) $agent->parent_id === 0) { return $level; } $agent = WaterAgent::query()->find((int) $agent->parent_id) ?? throw new DomainException('代理上级不存在,无法计提佣金'); $level++; } } }