GetReportInfo.cs 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.IO;
  3. using System.Threading.Tasks;
  4. using Vinno.IUS.Common.IO;
  5. using Vinno.vCloud.Common.Storage.Download;
  6. using Vinno.vCloud.Report.Models;
  7. namespace ReportConverter
  8. {
  9. class GetReportInfo
  10. {
  11. private readonly string _storageServerUrl = string.Empty;
  12. private readonly int _storageType = 0;
  13. private readonly string _fileCacheFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DownloadFileCacheFolder");
  14. public GetReportInfo(string storageServerUrl, int storageType)
  15. {
  16. _storageServerUrl = storageServerUrl ?? string.Empty;
  17. _storageType = storageType;
  18. }
  19. /// <summary>
  20. /// get report image from storage server
  21. /// </summary>
  22. /// <param name="reportInfo">reportInfo entitys</param>
  23. /// <returns></returns>
  24. public async Task<ReportInfo> GetReportInfoAsync(ReportInfo reportInfo)
  25. {
  26. foreach (var elementValue in reportInfo.ElementValues.Values)
  27. {
  28. if (elementValue is ImageListElementValue imageListElementValue)
  29. {
  30. var fileImageValues = imageListElementValue.Value;
  31. if (fileImageValues != null)
  32. {
  33. foreach (var fileImage in fileImageValues)
  34. {
  35. if (fileImage is FileImageValue fileImageValue)
  36. {
  37. if (!string.IsNullOrEmpty(fileImageValue.Value) && !fileImageValue.Value.Equals(fileImageValue.ExamDataId))
  38. {
  39. fileImageValue.ImageBuffer = new ByteBuffer(await GetFileAsync(fileImageValue.Value));
  40. }
  41. else
  42. {
  43. WriteErrorLog($"GetFileAsync {fileImageValue.Value} error");
  44. return null;
  45. }
  46. }
  47. }
  48. }
  49. }
  50. else if (elementValue is FileImageValue fileImageValue)
  51. {
  52. fileImageValue.ImageBuffer = new ByteBuffer(await GetFileAsync(fileImageValue.Value));
  53. }
  54. }
  55. return reportInfo;
  56. }
  57. private async Task<byte[]> GetFileAsync(string token)
  58. {
  59. try
  60. {
  61. var buffer = await DownloadHelper.GetFileAsync(token, _fileCacheFolder, null, null, 10000);
  62. var data = new byte[0];
  63. if (buffer is ByteBuffer byteBuffer)
  64. {
  65. data = byteBuffer.GetBytes();
  66. }
  67. else if (buffer is FileBuffer fileBuffer)
  68. {
  69. data = fileBuffer.ReadBytes(0, fileBuffer.Size);
  70. fileBuffer.DeleteFile();
  71. }
  72. return data;
  73. }
  74. catch (Exception e)
  75. {
  76. WriteErrorLog($"GetFileAsync {token} error:{e}");
  77. return new byte[0];
  78. }
  79. }
  80. private void WriteErrorLog(string content)
  81. {
  82. string errPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Error");
  83. if (!Directory.Exists(errPath)) {
  84. Directory.CreateDirectory(errPath);
  85. }
  86. File.AppendAllText(Path.Combine(errPath, $"{DateTime.Now.ToString("yyyyMMdd_HHmmss")}.log"),content);
  87. }
  88. }
  89. }