vCloudScanDataSerializerV2.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.IO;
  4. using System.Text;
  5. using Vinno.IUS.Common.Configuration;
  6. using Vinno.IUS.Common.Log;
  7. using Vinno.vCloud.Protocol.Infrastructures;
  8. using WingInterfaceLibrary.DTO.Comment;
  9. using WingInterfaceLibrary.DTO.Measure;
  10. using WingInterfaceLibrary.Interface;
  11. namespace Vinno.vCloud.Common.FIS.Remedicals
  12. {
  13. static class vCloudScanData2Serializer
  14. {
  15. /// <summary>
  16. /// Serialize scan data content to a file.
  17. /// </summary>
  18. /// <param name="data">the scan data.</param>
  19. /// <param name="filePath">The file path to store the content.</param>
  20. public static void Serialize(this vCloudScanDataV2 data, string filePath)
  21. {
  22. var stringBuilder = new StringBuilder();
  23. stringBuilder.AppendLine("[ScanData]");
  24. //Id
  25. stringBuilder.AppendLine($"Id = {data.Id}");
  26. if (!string.IsNullOrEmpty(data.ExamRecordId))
  27. {
  28. stringBuilder.AppendLine($"ExamRecordId = {data.ExamRecordId}");
  29. }
  30. //examId
  31. stringBuilder.AppendLine($"ExamId = {data.ExamId}");
  32. //workOrderId
  33. stringBuilder.AppendLine($"WorkOrderId = {data.WorkOrderId}");
  34. //DataType
  35. stringBuilder.AppendLine($"DataType = {data.DataType}");
  36. //Description
  37. stringBuilder.AppendLine($"Description = {data.Description}");
  38. //Application
  39. stringBuilder.AppendLine($"Description = {data.Application}");
  40. //ApplicationCategory
  41. stringBuilder.AppendLine($"Description = {data.ApplicationCategory}");
  42. //FilePath
  43. stringBuilder.AppendLine($"VidFilePath = {data.VidFilePath}");
  44. //Status
  45. stringBuilder.AppendLine($"Status = {data.Status}");
  46. //PatientInfo
  47. var patientInfo = data.PatientInfo;
  48. if (patientInfo != null)
  49. {
  50. var patientInfoString = JsonConvert.SerializeObject(data.PatientInfo);
  51. stringBuilder.AppendLine($"PatientInfo = {patientInfoString}");
  52. }
  53. var measuredResults = data.MeasuredResults;
  54. if (measuredResults != null)
  55. {
  56. var measuredResultsString = JsonConvert.SerializeObject(data.MeasuredResults);
  57. stringBuilder.AppendLine($"MeasuredResults = {measuredResultsString}");
  58. }
  59. var commentResults = data.CommentResults;
  60. if (commentResults != null)
  61. {
  62. var commentResultsString = JsonConvert.SerializeObject(data.CommentResults);
  63. stringBuilder.AppendLine($"CommonResults = {commentResultsString}");
  64. }
  65. File.WriteAllText(filePath, stringBuilder.ToString());
  66. }
  67. /// <summary>
  68. /// Deserialize a scan data from a file.
  69. /// </summary>
  70. /// <param name="leaf">The leaf to create the scan data.</param>
  71. /// <param name="scanDataFilePath"></param>
  72. /// <returns><see cref="vCloudScanData"/></returns>
  73. public static vCloudScanDataV2 Deserialize(IRemedicalService remedicalService, IStorageService storageService, string token, string scanDataFilePath)
  74. {
  75. if (File.Exists(scanDataFilePath))
  76. {
  77. try
  78. {
  79. var configContent = File.ReadAllText(scanDataFilePath);
  80. var configLoader = new ConfigLoader();
  81. var sections = configLoader.LoadConfig(configContent);
  82. var id = string.Empty;
  83. var examId = string.Empty;
  84. var examRecordId = string.Empty;
  85. var workOrderId = string.Empty;
  86. var filePath = string.Empty;
  87. var dataType = VidType.VinnoVidSingle;
  88. var description = string.Empty;
  89. var application = string.Empty;
  90. var applicationCategory = string.Empty;
  91. var status = UploadStatus.Idle;
  92. var patientInfo = new PatientScanInfo();
  93. MeasuredResultsDTO measuredResults = null;
  94. ScanImageDTO commentResults = null;
  95. foreach (var section in sections)
  96. {
  97. switch (section.Name)
  98. {
  99. case "ScanData":
  100. {
  101. foreach (var item in section.Items)
  102. {
  103. switch (item.Key)
  104. {
  105. case "Id":
  106. id = item.Value;
  107. break;
  108. case "ExamId":
  109. examId = item.Value;
  110. break;
  111. case "WorkOrderId":
  112. workOrderId = item.Value;
  113. break;
  114. case "DataType":
  115. Enum.TryParse(item.Value, out dataType);
  116. break;
  117. case "Description":
  118. description = item.Value;
  119. break;
  120. case "Application":
  121. application = item.Value;
  122. break;
  123. case "ApplicationCategory":
  124. applicationCategory = item.Value;
  125. break;
  126. case "Status":
  127. Enum.TryParse(item.Value, out status);
  128. break;
  129. case "ExamRecordId":
  130. examRecordId = item.Value;
  131. break;
  132. case "VidFilePath":
  133. filePath = item.Value;
  134. break;
  135. case "PatientInfo":
  136. patientInfo = JsonConvert.DeserializeObject<PatientScanInfo>(item.Value);
  137. break;
  138. case "MeasuredResults":
  139. measuredResults = JsonConvert.DeserializeObject<MeasuredResultsDTO>(item.Value);
  140. break;
  141. case "CommentResults":
  142. commentResults = JsonConvert.DeserializeObject<ScanImageDTO>(item.Value);
  143. break;
  144. }
  145. }
  146. }
  147. break;
  148. }
  149. }
  150. var record = new vCloudExamRecord(examRecordId, examId, workOrderId);
  151. var scanData = new vCloudScanDataV2(record, id, filePath, dataType, description, patientInfo, status, remedicalService, storageService, token, measuredResults, commentResults);
  152. return scanData;
  153. }
  154. catch (Exception ex)
  155. {
  156. Logger.WriteLineError($"Load scan data2 error: {ex}");
  157. }
  158. }
  159. return null;
  160. }
  161. }
  162. }