Browse Source

数据迁移,兼容自建存储

jeremy 9 months ago
parent
commit
f4465ee604

+ 18 - 3
Tools/Flyinsono.DBCopy.Tool/Service/MigrateService.cs

@@ -80,6 +80,7 @@ namespace Flyinsono.DBCopy.Tool.Service
         private ReportTemplateDBRepository _reportTemplateDBRepository;
         private ReportInfoResultDBRepository _reportInfoResultDBRepository;
         private CustomLabelDBRepository _customLabelDBRepository;
+        private StorageFileInfoesDBRepository _storageFileInfoesDBRepository;
         protected readonly object locker = new object();
         protected ProbeAppHepler _probeAppHepler;
 
@@ -111,6 +112,8 @@ namespace Flyinsono.DBCopy.Tool.Service
             _adminDBRepository = new AdminDBRepository();
             _reportInfoResultDBRepository = new ReportInfoResultDBRepository();
             _customLabelDBRepository = new CustomLabelDBRepository();
+
+            _storageFileInfoesDBRepository = new StorageFileInfoesDBRepository();
             _probeAppHepler = new ProbeAppHepler();
         }
 
@@ -2207,7 +2210,7 @@ namespace Flyinsono.DBCopy.Tool.Service
                             UpdateTime = reportInfoResult.UpdateTime,
                             RecordCode = reportInfoResult.RecordId,
                             ReportTemplateJson = reportInfoResult.Template,
-                            ReportDatasJson = ReportElementsSerializer.ConvertReportElementsToJson(isAI, reportInfoResult.Template, reportInfoResult.ElementCollection),
+                            ReportDatasJson = ReportElementsSerializer.ConvertReportElementsToJson(isAI, reportInfoResult.Template, reportInfoResult.ElementCollection, GetFileUrl),
                             ReportPreviewList = new List<ReportPreviewDTO>(),
                             ReportOrgan = (DiagnosisOrganEnum)reportInfoResult.Organ,
                             DiagnosisLabels = diagnosisLabels,
@@ -2283,9 +2286,21 @@ namespace Flyinsono.DBCopy.Tool.Service
         private string GetFileUrl(string fileUrl)
         {
             var prefix = "1!U$";
-            if (!string.IsNullOrWhiteSpace(fileUrl) && fileUrl.StartsWith(prefix))
+            if (!string.IsNullOrWhiteSpace(fileUrl))
             {
-                return fileUrl.Replace(prefix, "");
+                if (fileUrl.StartsWith(prefix))
+                {
+                    return fileUrl.Replace(prefix, "");
+                }
+                else
+                {
+                    var fileToken = fileUrl.Substring(fileUrl.LastIndexOf('/') + 1);
+                    var storageInfo = _storageFileInfoesDBRepository.GetTerminalRecordByToken(fileToken);
+                    if (storageInfo != null && !string.IsNullOrWhiteSpace(storageInfo.FileName))
+                    {
+                        return $"http://218.95.167.40:8098/FlyinsonoStorage/{storageInfo.FolderName}/{storageInfo.FileName}";
+                    }
+                }
             }
             return fileUrl ?? string.Empty;
         }

+ 3 - 13
Tools/Flyinsono.DBCopy.Tool/Service/ReportElementsSerializer.cs

@@ -1,4 +1,5 @@
 using Flyinsono.DBCopy.Tool.Entities;
+using Flyinsono.DBCopy.Tool.Service.Repositories;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using System;
@@ -12,7 +13,7 @@ namespace Flyinsono.DBCopy.Tool.Service
 {
     internal class ReportElementsSerializer
     {
-        public static string ConvertReportElementsToJson(bool isAI, string template, IList<ReportInfoElement> reportElements)
+        public static string ConvertReportElementsToJson(bool isAI, string template, IList<ReportInfoElement> reportElements, Func<string,string> funGetFileUrl)
         {
             try
             {
@@ -61,7 +62,7 @@ namespace Flyinsono.DBCopy.Tool.Service
                             var images = JsonConvert.DeserializeObject<ImageListElemet>(item.ElementValue.Value.ToString())?.ImageList;
                             if (images?.Count > 0)
                             { 
-                                detail.Value = images.Select(x => GetFileUrl(x.Value?.ToString()));
+                                detail.Value = images.Select(x => funGetFileUrl?.Invoke(x.Value?.ToString()));
                                 if (isAI)
                                 {
                                     if (images.FirstOrDefault().ToString().Contains("-bj."))
@@ -114,17 +115,6 @@ namespace Flyinsono.DBCopy.Tool.Service
             internal List<TextElementValue> TextList { get; set; }
         }
 
-
-        private static string GetFileUrl(string fileUrl)
-        {
-            var prefix = "1!U$";
-            if (!string.IsNullOrWhiteSpace(fileUrl) && fileUrl.StartsWith(prefix))
-            {
-                return fileUrl.Replace(prefix, "");
-            }
-            return fileUrl ?? string.Empty;
-        }
-
         private static void ExtractTagNodesAndParentIds(JToken token, List<(string ParentId, JToken TagNode)> tagNodesWithParentIds)
         {
             var currentParentId = token.Parent?.Type == JTokenType.Object && token.Parent["Id"] != null ? token.Parent["Id"].ToString() : "";

+ 38 - 0
Tools/Flyinsono.DBCopy.Tool/Service/Repositories/StorageFileInfoesDBRepository.cs

@@ -0,0 +1,38 @@
+using Flyinsono.DBCopy.Tool.Entities;
+using Flyinsono.DBCopy.Tool.Utilities;
+using MongoDB.Driver;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using WingServerCommon.Mapper;
+
+namespace Flyinsono.DBCopy.Tool.Service.Repositories
+{
+    internal class StorageFileInfoesDBRepository : BaseDBRepository
+    {
+        public IList<StorageFileInfoes> GetTerminalRecords(FilterDefinition<StorageFileInfoes> filter)
+        {
+            var entities = LargerQuery(MongoDbClientSingle.Instance.StorageFileInfoes, filter)?.ToList() ?? new List<StorageFileInfoes>();
+            return entities;
+        }
+
+        public IList<StorageFileInfoes> GetTerminalRecordByCodes(IList<string> ids)
+        {
+            var builder = Builders<StorageFileInfoes>.Filter;
+            var filter = builder.Where(x => ids.Contains(x.Id));
+            var entities = MongoDbClientSingle.Instance.StorageFileInfoes.Find(filter)?.ToList() ?? new List<StorageFileInfoes>();
+            return entities;
+        }
+
+        public StorageFileInfoes GetTerminalRecordByToken(string token)
+        {
+            var builder = Builders<StorageFileInfoes>.Filter;
+            var filter = builder.Where(x => x.Token == token);
+            var entities = MongoDbClientSingle.Instance.StorageFileInfoes.Find(filter)?.ToList() ?? new List<StorageFileInfoes>();
+            return entities.FirstOrDefault();
+        }
+    }
+}