修正 Proxied、 SSL/TLS 设为 Flexible、开启 Always Use HTTPS
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 汇总工单进线人数(仅开启状态的号码)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user