fix(withdraw): 修复dmepa提现withdraw_info字段长度截断问题及自动升级表结构
这个提交包含在:
@@ -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);
|
||||
}
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户