手动关闭状态不要自动打开重启同步

This commit is contained in:
root
2026-07-07 14:56:39 +08:00
parent 2e621bf970
commit 92b4faf61f
12 changed files with 166 additions and 14 deletions
@@ -19,6 +19,31 @@ class SplitTicketRuleService
$this->ratioDeferredService = $ratioDeferredService ?? new SplitNumberRatioDeferredService();
}
/**
* 手动关闭的工单(manual_manage=1):禁止自动同步改写 status,须用户手动开启
*/
public function isManuallyClosed(Ticket $ticket): bool
{
return (int) ($ticket['manual_manage'] ?? 0) === 1;
}
/**
* 列表/编辑切换状态时同步 manual_manage 标记
*
* @param array<string, mixed> $values
*/
public function applyManualManageForStatusChange(array &$values): void
{
if (!isset($values['status'])) {
return;
}
if ((string) $values['status'] === 'hidden') {
$values['manual_manage'] = 1;
} elseif ((string) $values['status'] === 'normal') {
$values['manual_manage'] = 0;
}
}
/**
* 同步后应用工单开关规则;号码开关由 applyNumberRules 综合裁决(平台在线 + 单号上限 + 下号比率)
*/
@@ -190,10 +215,13 @@ class SplitTicketRuleService
}
/**
* 完成量、时间窗口决定工单开关(定时与手动同步均适用)
* 完成量、时间窗口决定工单开关(定时与手动同步均适用;手动关闭工单除外
*/
public function applyTicketStatusRules(Ticket $ticket, int $completeCount): void
{
if ($this->isManuallyClosed($ticket)) {
return;
}
$status = $this->resolveTicketStatus($ticket, $completeCount);
if ($status !== (string) ($ticket['status'] ?? 'hidden')) {
Ticket::where('id', (int) $ticket['id'])->update([