Преглед изворни кода

fix 0012853: 【数据迁移】迁移到新平台上的AI病例,图像上不显示AI诊断结果(新平台和账号所在的医院已开启AI应用)reviewer:fly

Jeremy пре 1 година
родитељ
комит
c9179b8cd2
2 измењених фајлова са 87 додато и 13 уклоњено
  1. 9 3
      Manage/AIDiagnosisPerImageModel.cs
  2. 78 10
      Service/AIDiagnosisService.cs

+ 9 - 3
Manage/AIDiagnosisPerImageModel.cs

@@ -62,6 +62,7 @@ namespace WingAIDiagnosisService.Manage
         public DiagnosisOrganEnum Organ { get; set; }
         public AIDiagnosisRect OrganBoundBox { get; set; }
         public List<AIDiagnosisPoint2D> OrganContours { get; set; }
+        public List<AIDiagnosisPoint2D> OrganContour { get; set; }
         public List<AIDiagnosisDescription> OrganDescriptions { get; set; }
         public List<AIDetectedObject> DetectedObjects { get; set; }
     }
@@ -78,8 +79,8 @@ namespace WingAIDiagnosisService.Manage
             Width = rect.Width;
             Height = rect.Height;
         }
-        public int Right { get; }
-        public int Bottom { get; }
+        public int Right { get; set; }
+        public int Bottom { get; set; }
         public int Left { get; set; }
         public int Top { get; set; }
         public int Width { get; set; }
@@ -146,6 +147,7 @@ namespace WingAIDiagnosisService.Manage
         public float Confidence { get; set; }
         public AIDiagnosisRect BoundingBox { get; set; }
         public List<AIDiagnosisPoint2D> Contours { get; set; }
+        public List<AIDiagnosisPoint2D> Contour { get; set; }
         public List<AIDiagnosisDescription> Descriptions { get; set; }
     }
 
@@ -221,7 +223,7 @@ namespace WingAIDiagnosisService.Manage
             {
                 Value = liverEcho.Value.ToString();
             }
-            
+
             else if (description is DescriptionThyroidEchoPattern thyroidEcho)
             {
                 Value = thyroidEcho.Value.ToString();
@@ -243,6 +245,10 @@ namespace WingAIDiagnosisService.Manage
         public DiagnosisDescription Type { get; set; }
 
         public string Value { get; set; }
+
+        public DiagnosisDescription DescriptionType { get; set; }
+
+        public string DescriptionValue { get; set; }
     }
 
     public class AIDiagnosisLesionSize

+ 78 - 10
Service/AIDiagnosisService.cs

@@ -213,7 +213,7 @@ namespace WingAIDiagnosisService.Service
         {
             public int Index { get; set; }
 
-            public AIDiagResultPerImg ImageDiagResult { get; set; }
+            public AIDiagnosisPerImageModel ImageDiagResult { get; set; }
 
         }
 
@@ -257,19 +257,87 @@ namespace WingAIDiagnosisService.Service
                 var createTime = request.CreateTime;
                 var upateTime = request.UpdateTime;
                 //乳腺、肝脏
-                var settings = new JsonSerializerSettings
+                // var settings = new JsonSerializerSettings
+                // {
+                //     Converters = new List<JsonConverter> { new DescriptionConverter() }
+                // };
+                var aiDiagResultPerImgList = JsonConvert.DeserializeObject<List<TempAIResult>>(aiResult);
+                foreach (var item in aiDiagResultPerImgList)
                 {
-                    Converters = new List<JsonConverter> { new DescriptionConverter() }
-                };
-                var aiDiagResultPerImgList = JsonConvert.DeserializeObject<List<TempAIResult>>(aiResult, settings);
-                var results = aiDiagResultPerImgList.ToDictionary(x => x.Index);
-                //AI实体有很多参数仅支持get,为了方便后续反序列化,db入库前先做个转换
-                var diagnosisPerImages = results.Select(x => new AIDiagnosisPerImageModel(x.Key, x.Value.ImageDiagResult, 1)).ToList();
-                var organs = GetDiagnosisOrgans(diagnosisPerImages);
+                    item.ImageDiagResult.Index = item.Index;
+                }
+                var diagnosisPerImages = aiDiagResultPerImgList.Select(x => x.ImageDiagResult)?.ToList() ?? new List<AIDiagnosisPerImageModel>();
+                foreach (var perImage in diagnosisPerImages)
+                {
+                    foreach (var perOrgan in perImage.DiagResultsForEachOrgan)
+                    {
+                        var detectedObjects = new List<WingAIDiagnosisService.Manage.AIDetectedObject>();
+                        foreach (var perDetectedObject in perOrgan.DetectedObjects)
+                        {
+                            if (perDetectedObject.Descriptions != null && perDetectedObject.Descriptions.Any())
+                            {
+                                foreach (var item in perDetectedObject.Descriptions)
+                                {
+                                    item.Type = item.DescriptionType;
+                                    item.Value = item.DescriptionValue;
+                                }
+                            }
 
+                            detectedObjects.Add(perDetectedObject);
+                        }
+                        perOrgan.DetectedObjects = detectedObjects;
+                    }
+                }
+                var organs = GetDiagnosisOrgans(diagnosisPerImages);
                 await AddDiagnosisResultInfosAsync(relationCode, fileUrl, diagnosisPerImages, createTime, upateTime, false);
                 //轮廓线分隔处理
-                diagnosisPerImages = results.Select(x => new AIDiagnosisPerImageModel(x.Key, x.Value.ImageDiagResult, _contourInterval)).ToList();
+                foreach (var perImage in diagnosisPerImages)
+                {
+                    foreach (var perOrgan in perImage.DiagResultsForEachOrgan)
+                    {
+                        var organContours = new List<WingAIDiagnosisService.Manage.AIDiagnosisPoint2D>();
+                        if (perOrgan.OrganContour != null && perOrgan.OrganContour.Count > 0)
+                        {
+                            var coutours = perOrgan.OrganContour;
+                            if (coutours != null && coutours.Count > 0)
+                            {
+                                for (var i = 0; i < coutours.Count; i++)
+                                {
+                                    if (i % _contourInterval == 0)
+                                    {
+                                        organContours.Add(coutours[i]);
+                                    }
+                                }
+                            }
+                        }
+                        perOrgan.OrganContours = organContours;
+                        perOrgan.OrganContour = new List<Manage.AIDiagnosisPoint2D>();
+                        var detectedObjects = new List<WingAIDiagnosisService.Manage.AIDetectedObject>();
+                        foreach (var perDetectedObject in perOrgan.DetectedObjects)
+                        {
+                            var contours = new List<WingAIDiagnosisService.Manage.AIDiagnosisPoint2D>();
+                            if (perDetectedObject.Contour != null && perDetectedObject.Contour.Count > 0)
+                            {
+                                var coutours = perDetectedObject.Contour;
+                                if (coutours != null && coutours.Count > 0)
+                                {
+                                    for (var i = 0; i < coutours.Count; i++)
+                                    {
+                                        if (i % _contourInterval == 0)
+                                        {
+                                            contours.Add(coutours[i]);
+                                        }
+                                    }
+                                }
+                            }
+                            perDetectedObject.Contours = contours;
+                            perDetectedObject.Contour = new List<Manage.AIDiagnosisPoint2D>();
+
+                            detectedObjects.Add(perDetectedObject);
+                        }
+                        perOrgan.DetectedObjects = detectedObjects;
+                    }
+                }
                 var diagnosisResult = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AIDiagnosisPerImageDTO>>(Newtonsoft.Json.JsonConvert.SerializeObject(diagnosisPerImages));
                 var resultData = new DiagnosisImageResult()
                 {