修正 Proxied、 SSL/TLS 设为 Flexible、开启 Always Use HTTPS

This commit is contained in:
root
2026-06-10 06:44:57 +08:00
parent a68b83fcbd
commit 5dea4c8b28
31 changed files with 950 additions and 160 deletions
@@ -26,13 +26,19 @@ class SplitTicketNumberSyncService
return;
}
$randomShuffle = SplitNumberWeighService::isRandomShuffleEnabled($linkId);
// 使用独立 number 字段存储,避免纯数字号码作为数组 key 被 PHP 自动转为 int
$syncedNumbers = [];
foreach ($data->numbers as $row) {
$number = trim((string) ($row['number'] ?? ''));
$number = self::normalizeNumber($row['number'] ?? '');
if ($number === '') {
continue;
}
$syncedNumbers[$number] = $row;
$syncedNumbers[] = [
'number' => $number,
'row' => $row,
];
}
$existingList = Number::where('admin_id', $adminId)
@@ -45,7 +51,12 @@ class SplitTicketNumberSyncService
$existingMap[(string) $item['number']] = $item;
}
foreach ($syncedNumbers as $number => $row) {
$syncedNumberSet = [];
$pendingInserts = [];
foreach ($syncedNumbers as $entry) {
$number = $entry['number'];
$row = $entry['row'];
$syncedNumberSet[$number] = true;
$platformStatus = ($row['status'] ?? '') === 'online' ? 'online' : 'offline';
$newFollowers = (int) ($row['newFollowersToday'] ?? 0);
@@ -54,11 +65,30 @@ class SplitTicketNumberSyncService
continue;
}
$this->insertNumber($ticket, $number, $platformStatus, $newFollowers);
$pendingInserts[] = [
'number' => $number,
'platform_status' => $platformStatus,
'new_followers' => $newFollowers,
];
}
if ($pendingInserts !== []) {
// 随机打乱:打乱待插入批次顺序,按随机顺序逐条 insert 以获得乱序自增 id
if ($randomShuffle && count($pendingInserts) > 1) {
shuffle($pendingInserts);
}
foreach ($pendingInserts as $item) {
$this->insertNumber(
$ticket,
$item['number'],
$item['platform_status'],
$item['new_followers']
);
}
}
foreach ($existingMap as $number => $item) {
if (isset($syncedNumbers[$number])) {
if (isset($syncedNumberSet[$number])) {
continue;
}
if ((int) $item['manual_manage'] === 1) {
@@ -86,17 +116,17 @@ class SplitTicketNumberSyncService
return;
}
$update['status'] = $platformStatus === 'online' ? 'normal' : 'hidden';
if ($update['status'] === 'normal') {
$update['inbound_count'] = max(0, $newFollowers);
}
// 进线人数由同步写入,最终开关由 applyNumberRules 统一判定(单号上限/下号比率等)
$update['inbound_count'] = max(0, $newFollowers);
Number::where('id', (int) $row['id'])->update($update);
}
private function insertNumber(Ticket $ticket, string $number, string $platformStatus, int $newFollowers): void
{
$status = $platformStatus === 'online' ? 'normal' : 'hidden';
private function insertNumber(
Ticket $ticket,
string $number,
string $platformStatus,
int $newFollowers
): void {
$now = time();
$data = [
'admin_id' => (int) $ticket['admin_id'],
@@ -106,10 +136,10 @@ class SplitTicketNumberSyncService
'number_type' => (string) $ticket['number_type'],
'number_type_custom' => (string) ($ticket['number_type_custom'] ?? ''),
'visit_count' => 0,
'inbound_count' => $status === 'normal' ? max(0, $newFollowers) : 0,
'inbound_count' => max(0, $newFollowers),
'manual_manage' => 0,
'platform_status' => $platformStatus,
'status' => $status,
'status' => 'hidden',
'createtime' => $now,
'updatetime' => $now,
];
@@ -126,6 +156,17 @@ class SplitTicketNumberSyncService
}
}
/**
* 统一号码为字符串(云控 API 可能返回 int)
*/
private static function normalizeNumber($value): string
{
if ($value === null || $value === '') {
return '';
}
return trim((string) $value);
}
/**
* 汇总工单进线人数(仅开启状态的号码)
*/