Files
ulthon_admin/extend/base/admin/service/adminUpdateCodeData/v2.3.0.php
augushong 236a343fa9 feat(timer): 新增并发数/触发节点/触发时间三字段及幂等分发
Scheme 定义 concurrency(nullable)/trigger_node_id/last_trigger_time 三字段,Model 声明属性,v2.3.0 分发代码幂等 ALTER 保证升级自动同步。

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-25 21:57:14 +08:00

86 lines
2.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @internal-framework
*
* 此文件为框架内置功能
*
* 用途框架版本更新代码v2.3.0- system_timer_config 新增定时器动态管控三字段
* 维护者:框架维护者
*
* 变更:
* - concurrency INT UNSIGNED NULL 并发数:NULL=继承代码默认
* - trigger_node_id VARCHAR(100) NULL 手动触发目标节点ID
* - last_trigger_time INT UNSIGNED NULL 手动触发设置时间戳,用于TTL自动复位
*
* 三字段均允许 NULL用于区分"继承代码默认"与"显式覆盖"。
*
* 注意:此文件属于框架内核,业务开发者不应修改
*/
use think\console\Input;
use think\console\Output;
use think\facade\Db;
class UpdateFunction
{
/**
* @var Input
*/
public $input;
/**
* @var Output
*/
public $output;
/**
* 待新增字段定义.
*/
public $newColumns = [
'concurrency' => "ADD COLUMN `concurrency` INT UNSIGNED NULL COMMENT '并发数:NULL=继承代码默认'",
'trigger_node_id' => "ADD COLUMN `trigger_node_id` VARCHAR(100) NULL COMMENT '手动触发目标节点ID'",
'last_trigger_time' => "ADD COLUMN `last_trigger_time` INT UNSIGNED NULL COMMENT '手动触发设置时间戳,用于TTL自动复位'",
];
public function update()
{
$this->output->writeln('更新代码');
$this->output->info('v2.3.0:为 system_timer_config 表新增定时器动态管控字段concurrency / trigger_node_id / last_trigger_time');
$table = config('database.connections.mysql.prefix', 'ul_') . 'system_timer_config';
// 确认表存在
$tableExists = Db::query(
"SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ?",
[$table]
);
if (empty($tableExists)) {
$this->output->warning("{$table} 不存在,跳过字段新增。请先执行 scheme:sync 或 migrate:run 初始化表结构。");
return;
}
// 幂等:读取现有字段,已存在的跳过
$columns = Db::query("SHOW COLUMNS FROM `{$table}`");
$exists = array_column($columns, 'Field');
$added = 0;
$skipped = 0;
foreach ($this->newColumns as $field => $sqlFragment) {
if (in_array($field, $exists)) {
$this->output->writeln(" - 字段 {$field} 已存在,跳过");
++$skipped;
continue;
}
Db::execute("ALTER TABLE `{$table}` {$sqlFragment}");
$this->output->writeln(" - 新增字段 {$field} 完成");
++$added;
}
$this->output->info("本次新增 {$added} 个字段,跳过 {$skipped} 个已存在字段");
$this->output->writeln('更新代码完成');
}
}