$val) { $name = 'PHP_' . strtoupper($key); if (is_array($val)) { foreach ($val as $k => $v) { $item = $name . '_' . strtoupper($k); putenv("$item=$v"); } } else { putenv("$name=$val"); } } } require_once ROOT_PATH . 'application/common.php'; \think\Config::set(\think\Config::load(APP_PATH . 'config.php')); \think\Config::set(include APP_PATH . 'database.php', 'database'); \think\Loader::addNamespace('app', APP_PATH); \think\Loader::addNamespace('addons', ROOT_PATH . 'addons/'); require_once ROOT_PATH . 'addons/shopro/helper/helper.php'; use addons\shopro\service\partner\WalletMigrationService; echo "========================================================\n"; echo " 恒联数通 · 历史收益全量结转至钱包余额独立脚本\n"; echo "========================================================\n"; $args = $argv ?? []; $dryRun = in_array('--dry-run', $args) || in_array('-d', $args); $force = in_array('--force', $args) || in_array('-f', $args); $service = new WalletMigrationService(); $preview = $service->preview(); echo "待处理会员总数: {$preview['total_users']} 人\n"; echo "待结转收益总金额: ¥{$preview['total_commission']} 元\n"; if ($preview['total_users'] === 0) { echo "\n当前无任何待结转佣金余额,无需处理。\n"; exit(0); } echo "\n待结转会员抽样(前 10 名):\n"; foreach (array_slice($preview['samples'], 0, 10) as $i => $s) { $idx = $i + 1; echo " [{$idx}] 会员ID: {$s['id']} | 手机: {$s['mobile']} | 当前佣金: ¥{$s['current_commission']} -> 钱包余额: ¥{$s['current_money']} (预计转后: ¥{$s['target_money']})\n"; } if ($dryRun) { echo "\n【DRY-RUN 试算模式结束】未修改数据库。\n"; exit(0); } if (!$force) { echo "\n【安全警告】即将对 {$preview['total_users']} 名会员执行结转,将 ¥{$preview['total_commission']} 元转入钱包余额!\n"; echo "若确认执行,请增加参数 --force 或 -f,例如:\n"; echo "php scripts/transfer_all_commission_to_money.php --force\n"; exit(1); } echo "\n>>> 开始执行资金划转...\n"; $startTime = microtime(true); $res = $service->transferAll(false, function ($current, $total, $userId, $amount, $err) { if ($err) { echo " [{$current}/{$total}] 会员 {$userId} 结转失败: {$err}\n"; } else { echo " [{$current}/{$total}] 会员 {$userId} 成功结转 ¥" . number_format($amount, 2, '.', '') . " 元至钱包余额\n"; } }); $cost = round(microtime(true) - $startTime, 2); echo "\n========================================================\n"; echo "结转完成!耗时: {$cost} 秒\n"; echo "成功处理: {$res['success_count']} 人\n"; echo "失败人数: {$res['fail_count']} 人\n"; echo "累计结转资金: ¥{$res['transferred_amount']} 元\n"; echo "========================================================\n"; exit($res['fail_count'] > 0 ? 1 : 0);