同步失败原因,最近同步成功的时间记录
This commit is contained in:
@@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace app\admin\model\split;
|
||||
|
||||
use app\common\service\SplitSyncConfigService;
|
||||
use think\Db;
|
||||
use think\Model;
|
||||
|
||||
@@ -31,6 +32,9 @@ class Ticket extends Model
|
||||
'ticket_progress_text',
|
||||
'inbound_ratio_text',
|
||||
'sync_display_text',
|
||||
'sync_success_text',
|
||||
'sync_tooltip_text',
|
||||
'sync_auto_paused',
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -152,13 +156,35 @@ class Ticket extends Model
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步状态展示文案
|
||||
* 是否因连续失败暂停自动同步(工单仍为开启状态)
|
||||
*
|
||||
* @param array<string, mixed> $data
|
||||
*/
|
||||
public static function isAutoSyncPaused(array $data): bool
|
||||
{
|
||||
if ((string) ($data['status'] ?? '') !== 'normal') {
|
||||
return false;
|
||||
}
|
||||
$threshold = SplitSyncConfigService::getFailPauseThreshold();
|
||||
if ($threshold <= 0) {
|
||||
return false;
|
||||
}
|
||||
return (int) ($data['sync_fail_count'] ?? 0) >= $threshold;
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步状态展示文案(列表列默认显示,异常详情见 tooltip)
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param array<string, mixed> $data
|
||||
*/
|
||||
public function getSyncDisplayTextAttr($value, $data): string
|
||||
{
|
||||
if (self::isAutoSyncPaused($data)) {
|
||||
$threshold = SplitSyncConfigService::getFailPauseThreshold();
|
||||
return sprintf((string) __('Sync display auto paused'), $threshold);
|
||||
}
|
||||
|
||||
$status = (string) ($data['sync_status'] ?? 'pending');
|
||||
$online = (int) ($data['online_count'] ?? 0);
|
||||
if ($status === 'success') {
|
||||
@@ -170,6 +196,66 @@ class Ticket extends Model
|
||||
return (string) __('Sync display error');
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步状态列 tooltip 完整说明
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param array<string, mixed> $data
|
||||
*/
|
||||
public function getSyncTooltipTextAttr($value, $data): string
|
||||
{
|
||||
$parts = [];
|
||||
if (self::isAutoSyncPaused($data)) {
|
||||
$threshold = SplitSyncConfigService::getFailPauseThreshold();
|
||||
$parts[] = sprintf(
|
||||
(string) __('Sync tooltip auto paused'),
|
||||
(int) ($data['sync_fail_count'] ?? 0),
|
||||
$threshold
|
||||
);
|
||||
}
|
||||
|
||||
$message = trim((string) ($data['sync_message'] ?? ''));
|
||||
if ($message !== '') {
|
||||
$parts[] = (string) __('Sync tooltip error prefix') . $message;
|
||||
}
|
||||
|
||||
return implode("\n", $parts);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否暂停自动同步(供前端样式判断)
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param array<string, mixed> $data
|
||||
*/
|
||||
public function getSyncAutoPausedAttr($value, $data): bool
|
||||
{
|
||||
return self::isAutoSyncPaused($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 最近一次同步成功时间及方式
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param array<string, mixed> $data
|
||||
*/
|
||||
public function getSyncSuccessTextAttr($value, $data): string
|
||||
{
|
||||
$ts = (int) ($data['sync_success_time'] ?? 0);
|
||||
if ($ts <= 0) {
|
||||
return '';
|
||||
}
|
||||
$timeText = date('Y-m-d H:i:s', $ts);
|
||||
$mode = (string) ($data['sync_success_mode'] ?? '');
|
||||
if ($mode === 'auto') {
|
||||
return $timeText . ' (' . (string) __('Sync mode auto') . ')';
|
||||
}
|
||||
if ($mode === 'manual') {
|
||||
return $timeText . ' (' . (string) __('Sync mode manual') . ')';
|
||||
}
|
||||
return $timeText;
|
||||
}
|
||||
|
||||
public function setStartTimeAttr($value): ?int
|
||||
{
|
||||
return self::parseTimeValue($value);
|
||||
|
||||
Reference in New Issue
Block a user