修复随机号码前先按权重随机工单,并修复降权号码筛选与清理
This commit is contained in:
@@ -12,6 +12,13 @@ use app\admin\model\split\Ticket;
|
||||
*/
|
||||
class SplitTicketRuleService
|
||||
{
|
||||
private SplitNumberRatioDeferredService $ratioDeferredService;
|
||||
|
||||
public function __construct(?SplitNumberRatioDeferredService $ratioDeferredService = null)
|
||||
{
|
||||
$this->ratioDeferredService = $ratioDeferredService ?? new SplitNumberRatioDeferredService();
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步后应用工单开关规则;号码开关由 applyNumberRules 综合裁决(平台在线 + 单号上限 + 下号比率)
|
||||
*/
|
||||
@@ -108,14 +115,13 @@ class SplitTicketRuleService
|
||||
foreach ($numbers as $number) {
|
||||
$visitCount = (int) $number['visit_count'];
|
||||
$inboundCount = (int) $number['inbound_count'];
|
||||
$lastVisit = (int) ($number['last_sync_visit_count'] ?? 0);
|
||||
$lastInbound = (int) ($number['last_sync_inbound_count'] ?? 0);
|
||||
$streak = (int) ($number['no_inbound_click_streak'] ?? 0);
|
||||
|
||||
if ($visitCount > $lastVisit && $inboundCount <= $lastInbound) {
|
||||
$streak += ($visitCount - $lastVisit);
|
||||
} elseif ($inboundCount > $lastInbound) {
|
||||
if ($visitCount <= 0) {
|
||||
$streak = 0;
|
||||
} else {
|
||||
$streak = $this->ratioDeferredService->computeStreakForSync($number, $streak);
|
||||
}
|
||||
|
||||
$update = [
|
||||
@@ -125,20 +131,25 @@ class SplitTicketRuleService
|
||||
'updatetime' => time(),
|
||||
];
|
||||
|
||||
// 手动管理(含用户手动关闭)的号码:仅更新统计字段,不改状态与降权标记
|
||||
$clearDeferred = [
|
||||
'ratio_deferred' => 0,
|
||||
'ratio_deferred_at' => null,
|
||||
];
|
||||
|
||||
// 手动管理:更新统计;无效降权(无落地页访问)一并清除
|
||||
if ((int) $number['manual_manage'] === 1) {
|
||||
if ($this->ratioDeferredService->isInvalidDeferredRecord($number) || $visitCount <= 0) {
|
||||
$update = array_merge($update, $clearDeferred);
|
||||
if ($visitCount <= 0) {
|
||||
$update['no_inbound_click_streak'] = 0;
|
||||
}
|
||||
}
|
||||
Number::where('id', (int) $number['id'])->update($update);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 同步裁决 ratio_deferred:进线增长则解除降权;触线且无进线增长则关号并清除降权
|
||||
if ($inboundCount > $lastInbound) {
|
||||
$update['ratio_deferred'] = 0;
|
||||
$update['ratio_deferred_at'] = null;
|
||||
} else {
|
||||
$update['ratio_deferred'] = 0;
|
||||
$update['ratio_deferred_at'] = null;
|
||||
}
|
||||
// 同步裁决 ratio_deferred:同步时清除访问侧降权,由 streak 决定是否关号
|
||||
$update = array_merge($update, $clearDeferred);
|
||||
|
||||
$update['status'] = $this->resolveAutomatedStatus(
|
||||
$ticket,
|
||||
|
||||
Reference in New Issue
Block a user