find(); if (!$order) { echo " [✗ 错误] 目标订单不存在!\n"; return 1; } echo " [✓] 目标订单: ID {$order->id}, 单号 {$order->order_sn}, 实付 {$order->pay_fee} 元, 买家 {$order->user_id}\n"; // 2. 校验受益人分销商身份 $agent = AgentModel::where('user_id', self::TARGET_USER_ID)->find(); if (!$agent || !$agent->is_county) { echo " [✗ 错误] 用户 " . self::TARGET_USER_ID . " 不是有效的区县代理!\n"; return 1; } echo " [✓] 受益区县代理: User ID {$agent->user_id}, 等级 V{$agent->level}, 酒道馆: {$agent->is_venue}, 区县代: {$agent->is_county}, 现有累计收益: {$agent->total_income}\n"; // 3. 幂等性核查:检查是否已经发放过 $existingWalletLog = WalletLog::where('user_id', self::TARGET_USER_ID) ->where('event', 'team_county') ->where('ext', 'like', '%"order_id":' . self::TARGET_ORDER_ID . '%') ->find(); if ($existingWalletLog) { echo " [!] 警告:钱包日志中已存在该订单的 team_county 记录 (Log ID: {$existingWalletLog->id}, 金额: {$existingWalletLog->amount}),无需重复补发!\n"; return 0; } // 4. 检查跳过的流水记录 ID 631 $skipReward = RewardModel::where('order_id', self::TARGET_ORDER_ID) ->where('reward_type', 'team_county') ->find(); if (!$skipReward) { echo " [✗ 错误] 未找到订单 {$order->id} 的 team_county 流水记录!\n"; return 1; } echo " [✓] 找到流水记录: ID {$skipReward->id}, 当前状态: {$skipReward->status}, 金额: {$skipReward->amount}, 原归属: {$skipReward->user_id}\n"; if ($skipReward->status == 1 && (float)$skipReward->amount > 0 && $skipReward->user_id == self::TARGET_USER_ID) { echo " [!] 流水记录已经是发放状态,跳过执行。\n"; return 0; } $walletType = PartnerConfig::rewardWalletType(); echo " [✓] 结算钱包类型: {$walletType}, 计划补发金额: ¥ " . number_format(self::REWARD_AMOUNT, 2) . "\n"; if (!$isCommit) { echo "\n>>> 预检通过!若要正式执行并入账,请使用参数 --commit 执行。\n"; return 0; } // 5. 开启事务执行补发 try { Db::startTrans(); // 5.1 更新流水记录为正常入账 $skipReward->user_id = self::TARGET_USER_ID; $skipReward->role = 'county'; $skipReward->amount = self::REWARD_AMOUNT; $skipReward->base_amount = self::REWARD_AMOUNT; $skipReward->status = 1; $extData = is_array($skipReward->ext) ? $skipReward->ext : (json_decode($skipReward->ext ?: '[]', true) ?: []); $extData['original_skip_reason'] = $extData['skip_reason'] ?? 'not_county'; $extData['formula'] = '区县统筹奖 50(馆兼县补发)'; $extData['repaired_at'] = time(); $extData['repair_note'] = '修复双重身份查找起始索引缺陷后补发'; $skipReward->ext = $extData; $skipReward->save(); // 5.2 变动钱包 Wallet::change(self::TARGET_USER_ID, $walletType, self::REWARD_AMOUNT, 'team_county', [ 'partner_reward_id' => (string) $skipReward->id, 'order_id' => self::TARGET_ORDER_ID, ], '区县统筹奖补发'); // 5.3 累计分销商收益 AgentModel::where('user_id', self::TARGET_USER_ID)->setInc('total_income', self::REWARD_AMOUNT); Db::commit(); echo " [✓ SUCCESS] 事务提交成功!订单 " . self::TARGET_ORDER_ID . " 区县统筹奖 50 元已入账 user_id: " . self::TARGET_USER_ID . "\n"; // 输出更新后的数据 $updatedAgent = AgentModel::where('user_id', self::TARGET_USER_ID)->find(); echo " [✓] 更新后分销商累计收益: {$updatedAgent->total_income}\n"; return 0; } catch (\Exception $e) { Db::rollback(); echo " [✗ FAIL] 执行异常回滚: " . $e->getMessage() . "\n"; return 1; } } } // CLI 执行入口 $isCommit = in_array('--commit', $argv ?? []); $repair = new RepairOrder12CountyReward(); exit($repair->run($isCommit));