fix(withdraw): 修复dmepa提现withdraw_info字段长度截断问题及自动升级表结构

这个提交包含在:
chen
2026-09-21 14:51:33 +08:00
父节点 a2220427e2
当前提交 3bd0954df1
共有 5 个文件被更改,包括 332 次插入 和 15 次删除

查看文件

@@ -148,6 +148,19 @@ mkdir -p "${PROJECT_DIR}/runtime/cache" "${PROJECT_DIR}/runtime/temp" "${PROJECT
chown -R ${WEB_USER}:${WEB_USER} "${PROJECT_DIR}/runtime" 2>/dev/null || true
chmod -R 777 "${PROJECT_DIR}/runtime" 2>/dev/null || true
if [ -f "${PROJECT_DIR}/scripts/migrate_withdraw_schema.php" ]; then
log "执行数据库表结构安全升级迁移..."
PHP_EXEC="$PHP_BIN"
if [ ! -x "$PHP_EXEC" ] && [ -x "/www/server/php/74/bin/php" ]; then
PHP_EXEC="/www/server/php/74/bin/php"
fi
if [ -x "$PHP_EXEC" ]; then
$PHP_EXEC "${PROJECT_DIR}/scripts/migrate_withdraw_schema.php" 2>&1 | tee -a "$LOG_FILE" || log "数据库升级脚本执行警告(已跳过)"
else
php "${PROJECT_DIR}/scripts/migrate_withdraw_schema.php" 2>&1 | tee -a "$LOG_FILE" || true
fi
fi
if [ -x "/www/server/panel/pyenv/bin/supervisorctl" ]; then
log "重启 Supervisor 队列守护进程..."
/www/server/panel/pyenv/bin/supervisorctl restart henglian-shopro:henglian-shopro_00 henglian-shopro-high:henglian-shopro-high_00 2>&1 | tee -a "$LOG_FILE" || true

查看文件

@@ -0,0 +1,80 @@
<?php
/**
* 提现与收益中心数据表结构升级迁移脚本
* 解决问题:
* 1. hla_shopro_withdraw.withdraw_info 字段由 varchar(255) 升级为 text,杜绝 SQLSTATE[22001] 截断报错
* 2. hla_shopro_withdraw.charge_rate 升级为 decimal(10, 4),支持高精度提现手续费率
* 3. hla_shopro_withdraw.platform 升级为 varchar(50),增强多端客户端兼容
* 4. hla_shopro_withdraw.payment_json 升级为 text,支持长交易回包
* 5. hla_shopro_withdraw_log.content 升级为 text,记录完整日志
* 6. hla_shopro_partner_reward.reward_type 扩容至 varchar(64)
*/
define('APP_PATH', __DIR__ . '/../application/');
define('ROOT_PATH', dirname(realpath(APP_PATH)) . '/');
if (file_exists(__DIR__ . '/../thinkphp/base.php')) {
require_once __DIR__ . '/../thinkphp/base.php';
require_once __DIR__ . '/../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");
}
}
}
\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);
}
use think\Db;
function runWithdrawMigration()
{
echo "========================================================\n";
echo " 开始执行提现模块与收益中心表结构安全升级迁移\n";
echo "========================================================\n";
$prefix = config('database.prefix') ?: 'hla_';
$sqls = [
"ALTER TABLE `{$prefix}shopro_withdraw` MODIFY COLUMN `withdraw_info` text NULL COMMENT '提现信息'",
"ALTER TABLE `{$prefix}shopro_withdraw` MODIFY COLUMN `charge_rate` decimal(10, 4) NOT NULL DEFAULT '0.0000' COMMENT '手续费率'",
"ALTER TABLE `{$prefix}shopro_withdraw` MODIFY COLUMN `platform` varchar(50) NULL DEFAULT NULL COMMENT '平台'",
"ALTER TABLE `{$prefix}shopro_withdraw` MODIFY COLUMN `payment_json` text NULL COMMENT '交易原始数据'",
"ALTER TABLE `{$prefix}shopro_withdraw_log` MODIFY COLUMN `content` text NULL COMMENT '日志内容'",
"ALTER TABLE `{$prefix}shopro_partner_reward` MODIFY COLUMN `reward_type` varchar(64) NOT NULL COMMENT '收益类型标识'",
"ALTER TABLE `{$prefix}shopro_partner_reward` MODIFY COLUMN `ext` text NULL COMMENT '扩展信息与计算公式 JSON'",
];
$successCount = 0;
foreach ($sqls as $sql) {
try {
Db::execute($sql);
echo "[SUCCESS] " . $sql . "\n";
$successCount++;
} catch (\Exception $e) {
echo "[WARN/SKIP] " . $sql . " => " . $e->getMessage() . "\n";
}
}
echo "\n迁移执行完毕,成功执行 {$successCount}/" . count($sqls) . " 条语句。\n";
return true;
}
if (php_sapi_name() === 'cli') {
try {
runWithdrawMigration();
} catch (\Throwable $e) {
echo "迁移执行异常: " . $e->getMessage() . "\n";
exit(1);
}
}