修复号码数量列的数据统计方式
This commit is contained in:
@@ -27,6 +27,7 @@ CREATE TABLE `fa_split_ticket` (
|
||||
`number_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '号码数量含离线封号(同步)',
|
||||
`number_offline_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '离线号码数(同步)',
|
||||
`number_banned_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '封号号码数(同步)',
|
||||
`active_number_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '本地开启号码数(status=normal)',
|
||||
`online_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '在线人数(同步)',
|
||||
`sync_status` enum('success','error','pending') NOT NULL DEFAULT 'pending' COMMENT '同步状态',
|
||||
`sync_time` bigint(16) DEFAULT NULL COMMENT '最近同步时间',
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
-- 工单表:本地开启号码数(status=normal),列表直接读字段,避免子查询
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
ALTER TABLE `fa_split_ticket`
|
||||
ADD COLUMN `active_number_count` int(10) unsigned NOT NULL DEFAULT 0
|
||||
COMMENT '本地开启号码数(status=normal)' AFTER `number_banned_count`;
|
||||
|
||||
-- 历史数据回填
|
||||
UPDATE `fa_split_ticket` t
|
||||
SET t.`active_number_count` = (
|
||||
SELECT COUNT(*)
|
||||
FROM `fa_split_number` n
|
||||
WHERE n.`admin_id` = t.`admin_id`
|
||||
AND n.`split_link_id` = t.`split_link_id`
|
||||
AND n.`ticket_name` = t.`ticket_name`
|
||||
AND n.`status` = 'normal'
|
||||
);
|
||||
|
||||
-- 加速按工单统计 status=normal 数量
|
||||
ALTER TABLE `fa_split_number`
|
||||
ADD KEY `idx_ticket_active` (`admin_id`, `split_link_id`, `ticket_name`(50), `status`);
|
||||
@@ -18,6 +18,7 @@ use think\console\Output;
|
||||
* 用法:
|
||||
* php think split:sync-tickets
|
||||
* php think split:sync-tickets --ticket=12
|
||||
* php think split:sync-tickets --ticket=12 --mode=auto
|
||||
*/
|
||||
class SplitSyncTickets extends Command
|
||||
{
|
||||
@@ -25,21 +26,24 @@ class SplitSyncTickets extends Command
|
||||
{
|
||||
$this->setName('split:sync-tickets')
|
||||
->addOption('ticket', 't', Option::VALUE_OPTIONAL, '指定工单 ID(强制同步,忽略周期)', '')
|
||||
->addOption('mode', 'm', Option::VALUE_OPTIONAL, '同步方式: auto=定时自动, manual=手动触发', 'manual')
|
||||
->setDescription('同步分流工单云控数据');
|
||||
}
|
||||
|
||||
protected function execute(Input $input, Output $output): void
|
||||
{
|
||||
set_time_limit(0);
|
||||
$syncMode = $this->resolveSyncMode($input);
|
||||
SplitTicketSyncLogger::log('cli', 'command start', [
|
||||
'ticketOption' => trim((string) $input->getOption('ticket')),
|
||||
'syncMode' => $syncMode,
|
||||
'appDebug' => SplitTicketSyncLogger::isEnabled(),
|
||||
]);
|
||||
$service = new SplitTicketSyncService();
|
||||
$ticketId = trim((string) $input->getOption('ticket'));
|
||||
|
||||
if ($ticketId !== '' && ctype_digit($ticketId)) {
|
||||
$result = $service->syncOne((int) $ticketId, true);
|
||||
$result = $service->syncOne((int) $ticketId, true, false, $syncMode);
|
||||
if (!empty($result['skipped'])) {
|
||||
$output->writeln('<comment>跳过: ' . ($result['message'] ?? '') . '</comment>');
|
||||
return;
|
||||
@@ -71,4 +75,14 @@ class SplitSyncTickets extends Command
|
||||
$output->writeln('<comment>详细调试日志已写入 runtime/log/split_sync.log</comment>');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析 CLI 同步方式,供 sync_success_mode 落库
|
||||
*/
|
||||
private function resolveSyncMode(Input $input): string
|
||||
{
|
||||
$mode = strtolower(trim((string) $input->getOption('mode')));
|
||||
|
||||
return in_array($mode, ['auto', 'manual'], true) ? $mode : 'manual';
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user