using Newtonsoft.Json; using System; using System.IO; using System.Text; using Vinno.IUS.Common.Configuration; using Vinno.IUS.Common.Log; using Vinno.vCloud.Protocol.Infrastructures; using WingInterfaceLibrary.DTO.Comment; using WingInterfaceLibrary.DTO.Measure; using WingInterfaceLibrary.Interface; namespace Vinno.vCloud.Common.FIS.Remedicals { static class vCloudScanData2Serializer { /// /// Serialize scan data content to a file. /// /// the scan data. /// The file path to store the content. public static void Serialize(this vCloudScanDataV2 data, string filePath) { var stringBuilder = new StringBuilder(); stringBuilder.AppendLine("[ScanData]"); //Id stringBuilder.AppendLine($"Id = {data.Id}"); if (!string.IsNullOrEmpty(data.ExamRecordId)) { stringBuilder.AppendLine($"ExamRecordId = {data.ExamRecordId}"); } //examId stringBuilder.AppendLine($"ExamId = {data.ExamId}"); //workOrderId stringBuilder.AppendLine($"WorkOrderId = {data.WorkOrderId}"); //DataType stringBuilder.AppendLine($"DataType = {data.DataType}"); //Description stringBuilder.AppendLine($"Description = {data.Description}"); //Application stringBuilder.AppendLine($"Description = {data.Application}"); //ApplicationCategory stringBuilder.AppendLine($"Description = {data.ApplicationCategory}"); //FilePath stringBuilder.AppendLine($"VidFilePath = {data.VidFilePath}"); //Status stringBuilder.AppendLine($"Status = {data.Status}"); //PatientInfo var patientInfo = data.PatientInfo; if (patientInfo != null) { var patientInfoString = JsonConvert.SerializeObject(data.PatientInfo); stringBuilder.AppendLine($"PatientInfo = {patientInfoString}"); } var measuredResults = data.MeasuredResults; if (measuredResults != null) { var measuredResultsString = JsonConvert.SerializeObject(data.MeasuredResults); stringBuilder.AppendLine($"MeasuredResults = {measuredResultsString}"); } var commentResults = data.CommentResults; if (commentResults != null) { var commentResultsString = JsonConvert.SerializeObject(data.CommentResults); stringBuilder.AppendLine($"CommonResults = {commentResultsString}"); } File.WriteAllText(filePath, stringBuilder.ToString()); } /// /// Deserialize a scan data from a file. /// /// The leaf to create the scan data. /// /// public static vCloudScanDataV2 Deserialize(IRemedicalService remedicalService, IStorageService storageService, string token, string scanDataFilePath) { if (File.Exists(scanDataFilePath)) { try { var configContent = File.ReadAllText(scanDataFilePath); var configLoader = new ConfigLoader(); var sections = configLoader.LoadConfig(configContent); var id = string.Empty; var examId = string.Empty; var examRecordId = string.Empty; var workOrderId = string.Empty; var filePath = string.Empty; var dataType = VidType.VinnoVidSingle; var description = string.Empty; var application = string.Empty; var applicationCategory = string.Empty; var status = UploadStatus.Idle; var patientInfo = new PatientScanInfo(); MeasuredResultsDTO measuredResults = null; ScanImageDTO commentResults = null; foreach (var section in sections) { switch (section.Name) { case "ScanData": { foreach (var item in section.Items) { switch (item.Key) { case "Id": id = item.Value; break; case "ExamId": examId = item.Value; break; case "WorkOrderId": workOrderId = item.Value; break; case "DataType": Enum.TryParse(item.Value, out dataType); break; case "Description": description = item.Value; break; case "Application": application = item.Value; break; case "ApplicationCategory": applicationCategory = item.Value; break; case "Status": Enum.TryParse(item.Value, out status); break; case "ExamRecordId": examRecordId = item.Value; break; case "VidFilePath": filePath = item.Value; break; case "PatientInfo": patientInfo = JsonConvert.DeserializeObject(item.Value); break; case "MeasuredResults": measuredResults = JsonConvert.DeserializeObject(item.Value); break; case "CommentResults": commentResults = JsonConvert.DeserializeObject(item.Value); break; } } } break; } } var record = new vCloudExamRecord(examRecordId, examId, workOrderId); var scanData = new vCloudScanDataV2(record, id, filePath, dataType, description, patientInfo, status, remedicalService, storageService, token, measuredResults, commentResults); return scanData; } catch (Exception ex) { Logger.WriteLineError($"Load scan data2 error: {ex}"); } } return null; } } }