livia-test/Livia/Models/Data/ServerJobData.cs
2025-03-28 14:31:53 +08:00

103 lines
3.4 KiB
C#

using System.Globalization;
using System.Text.Json.Serialization;
using System.Windows;
using CommunityToolkit.Mvvm.ComponentModel;
using JetBrains.Annotations;
namespace Livia.Models.Data;
public record DataHistory
{
[JsonPropertyName("key"), UsedImplicitly]
public string? Key { get; init; }
[JsonPropertyName("import_time"), UsedImplicitly]
public string? ImportTimeString { get; init; }
public DateTime? ImportTime
{
get
{
if (ImportTimeString == null)
return null;
if (DateTime.TryParseExact(ImportTimeString, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime))
return dateTime;
return null;
}
}
[JsonPropertyName("errno"), UsedImplicitly]
public int? ErrNo { get; init; }
[JsonPropertyName("status"), UsedImplicitly]
public int Status { get; init; }
public string StatusString => (string)Application.Current.TryFindResource($"ServerJobStatus{Status}");
public string Tooltip => (string)(Application.Current.TryFindResource($"ServerError{ErrNo}") ?? StatusString);
}
[UsedImplicitly]
public class ServerJobData : ObservableObject
{
public string? Key => HistoryList?.FirstOrDefault(item => item.Status == 4)?.Key ?? FirstHistory?.Key ?? null;
public DateTime? ImportTime => FirstHistory?.ImportTime ?? null;
public int Status => _canceled ? 5 : FirstHistory?.Status ?? -1;
[JsonPropertyName("id"), UsedImplicitly]
public int? Id { get; init; }
[JsonPropertyName("patient_name"), UsedImplicitly]
public string? PatientName { get; init; }
[JsonPropertyName("patient_id"), UsedImplicitly]
public string? PatientId { get; init; }
[JsonPropertyName("patient_age"), UsedImplicitly]
public int? PatientAge { get; init; }
[JsonPropertyName("patient_sex"), UsedImplicitly]
public string? PatientSex { get; init; }
[JsonPropertyName("study_date"), UsedImplicitly]
public string? StudyDateString { get; init; }
public DateTime? StudyDate
{
get
{
if (StudyDateString == null)
return null;
if (DateTime.TryParseExact(StudyDateString, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime))
return dateTime;
return null;
}
}
[JsonPropertyName("sequence"), UsedImplicitly]
public List<SeriesGroup>? Sequence { get; init; }
[JsonPropertyName("history"), UsedImplicitly]
public List<DataHistory>? HistoryList { get; init; }
public bool JobSuccess => HistoryList?.Any(item => item.Status == 4) ?? false;
public bool ContainsMultipleHistory => (HistoryList?.Count ?? 0) > 1;
public bool CancelButtonVisible => Status < 4 && !_canceled;
public bool DeleteButtonVisible => Status >= 4;
public bool SelectSeriesButtonVisible => Status == 6;
public string Tooltip => FirstHistory?.Tooltip ?? "";
public string StatusString => FirstHistory?.StatusString ?? "";
private DataHistory? FirstHistory => HistoryList?.Count > 0 ? HistoryList[0] : null;
private bool _canceled;
public void SetJobCanceled()
{
_canceled = true;
OnPropertyChanged(nameof(Status));
OnPropertyChanged(nameof(CancelButtonVisible));
OnPropertyChanged(nameof(Tooltip));
OnPropertyChanged(nameof(StatusString));
}
}