文件
Henglianshutong/scripts/transfer_all_commission_to_money.php

104 行
3.7 KiB
PHP

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
/**
* 恒联数通 · 全量历史收益结转至钱包余额独立执行脚本
*
* 生产环境执行命令:
* 1. 试算预览(不改动数据):
* /www/server/php/80/bin/php /www/wwwroot/qbw.gynhc.com/scripts/transfer_all_commission_to_money.php --dry-run
*
* 2. 正式执行结转:
* /www/server/php/80/bin/php /www/wwwroot/qbw.gynhc.com/scripts/transfer_all_commission_to_money.php --force
*/
define('APP_PATH', __DIR__ . '/../application/');
define('ROOT_PATH', dirname(realpath(APP_PATH)) . '/');
require_once ROOT_PATH . 'thinkphp/base.php';
require_once ROOT_PATH . 'thinkphp/helper.php';
if (is_file(ROOT_PATH . '.env')) {
$env = parse_ini_file(ROOT_PATH . '.env', true);
foreach ($env as $key => $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);