Browse Source

新老平台同步,增加病例记录同步功能

jeremy 1 year ago
parent
commit
a3c265ad0c

+ 5 - 1
Tools/Flyinsono.DBCopy.Tool/Config/AppSetting.json

@@ -10,7 +10,11 @@
   },
   "Database": {
     "DbName": "vCloudDb",
-    "Host": "192.168.6.62",
+    "Host": "localhost",
     "Port": 9100
+  },
+  "TerminalRecordSync": {
+    "StartTime": "2023-10-21 19:00:00",
+    "EndTime": "2023-10-23 08:30:00"
   }
 }

+ 21 - 0
Tools/Flyinsono.DBCopy.Tool/Entities/Config/AppSetting.cs

@@ -25,6 +25,11 @@ namespace Flyinsono.DBCopy.Tool.Entities.Config
         /// 目标服务
         /// </summary>
         public DirectServerEntity DirectServer { get; set; }
+
+        /// <summary>
+        /// 病例同步配置
+        /// </summary>
+        public TerminalRecordSyncSetting TerminalRecordSync { get; set; }
     }
 
     /// <summary>
@@ -82,4 +87,20 @@ namespace Flyinsono.DBCopy.Tool.Entities.Config
         /// </summary>
         public int Port { get; set; }
     }
+
+    /// <summary>
+    /// 病例同步配置
+    /// </summary>
+    internal class TerminalRecordSyncSetting
+    {
+        /// <summary>
+        /// StartTime
+        /// </summary>
+        public DateTime StartTime { get; set; }
+
+        /// <summary>
+        /// EndTime
+        /// </summary>
+        public DateTime EndTime { get; set; }
+    }
 }

+ 10 - 2
Tools/Flyinsono.DBCopy.Tool/MainWindow.xaml

@@ -9,8 +9,8 @@
         Title="MainWindow" Height="1020" Width="880">
     <Grid>
         <Grid.RowDefinitions>
-            <RowDefinition Height="0.58*"/>
-            <RowDefinition Height="0.42*"/>
+            <RowDefinition Height="0.5*"/>
+            <RowDefinition Height="0.5*"/>
         </Grid.RowDefinitions>
         <GroupBox Header="Log Info"  Margin="7">
             <Grid>
@@ -40,6 +40,7 @@
                 <RowDefinition Height="Auto"></RowDefinition>
                 <RowDefinition Height="Auto"></RowDefinition>
                 <RowDefinition Height="Auto"></RowDefinition>
+                <RowDefinition Height="Auto"></RowDefinition>
             </Grid.RowDefinitions>
 
             <StackPanel Grid.Row="0" Orientation="Horizontal">
@@ -133,6 +134,13 @@
                     </StackPanel>
                 </StackPanel>
             </GroupBox>
+
+            <StackPanel Grid.Row="10" Orientation="Horizontal">
+                <Label VerticalAlignment="Center">TerminalRecords Sync:</Label>
+                <TextBox Text="{Binding TerminalRecordCode}" MinWidth="280"></TextBox>
+                <Button Command="{Binding ConnectDbServerCommand}" MinWidth="250">Connect Local Flyinsono1.7 DB</Button>
+                <Button Command="{Binding SynchronizeTerminalRecordCommand}" MinWidth="150">OnSync</Button>
+            </StackPanel>
         </Grid>
         
     </Grid>

+ 103 - 0
Tools/Flyinsono.DBCopy.Tool/Service/MigrateService.TerminalRecord.cs

@@ -0,0 +1,103 @@
+using Flyinsono.DBCopy.Tool.Entities;
+using MongoDB.Driver;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using WingInterfaceLibrary.Enum;
+
+namespace Flyinsono.DBCopy.Tool.Service
+{
+    internal partial class MigrateService
+    {
+        public async Task SynchronizeByTimeRange(DateTime startTime, DateTime endTime)
+        {
+            var builder = Builders<TerminalRecords>.Filter;
+            var filter = builder.Where(x => (x.CreateTime > startTime && x.CreateTime <= endTime) || (x.UpdateTime > startTime && x.UpdateTime <= endTime));
+            var terminalRecords = _terminalRecordDBRepository.GetTerminalRecords(filter).OrderByDescending(x => x.CreateTime).ToList();
+
+            var totalCount = terminalRecords.Count;
+            Logger.WriteLineInfo($"SynchronizeTerminalRecordByTimeRange totalCount:{terminalRecords.Count}");
+
+            var minute = DateTime.Now.Minute;
+            for (int i = 0; i < terminalRecords.Count; i++)
+            {
+                await Task.Delay(200);
+                await OnSynchronizeTerminalRecord(terminalRecords[i]);
+                if (DateTime.Now.Minute != minute || i == (totalCount - 1))
+                {
+                    minute = DateTime.Now.Minute;
+                    Logger.WriteLineInfo($"SynchronizeTerminalRecordByTimeRange processing: {i * 100 / totalCount}%");
+                }
+            }
+            Logger.WriteLineInfo($"SynchronizeTerminalRecordByTimeRange successfully");
+        }
+
+        public async Task SynchronizeByTerminalRecordCode(string terminalRecordCode)
+        {
+            var builder = Builders<TerminalRecords>.Filter;
+            var filter = builder.Where(x => x.Id == terminalRecordCode);
+            var terminalRecords = _terminalRecordDBRepository.GetTerminalRecords(filter).OrderByDescending(x => x.CreateTime).ToList();
+            if (terminalRecords.Any())
+            {
+                foreach (var item in terminalRecords)
+                {
+                    await OnSynchronizeTerminalRecord(item);
+                }
+                Logger.WriteLineInfo($"SynchronizeByTerminalRecordCode successfully");
+            }
+            else
+            {
+                Logger.WriteLineWarn($"SynchronizeByTerminalRecordCode fail, record not existed");
+            }
+        }
+
+        private async Task OnSynchronizeTerminalRecord(TerminalRecords terminalRecord)
+        {
+            var terminalRecordId = terminalRecord.Id;
+            // 病例
+            SendRemedicalRecordInfos(new List<TerminalRecords> { terminalRecord }, SyncDBEnum.Synchronize);
+            {
+                // 云端图像
+                var builder = Builders<TerminalDatas>.Filter;
+                var filter = builder.Where(x => x.TerminalRecordId == terminalRecordId);
+                var terminalDatas = _terminalDatasDBRepository.GetTerminalDatas(filter).OrderByDescending(x => x.CreateTime).ToList();
+                //只保留有预览图的数据,如果生成中会在生成后修改update时间,会再次同步
+                terminalDatas = terminalDatas.Where(x => !string.IsNullOrWhiteSpace(x.PreviewImageFileToken))?.ToList() ?? new List<TerminalDatas>();
+                if (terminalDatas != null && terminalDatas.Any())
+                {
+                    SendRemedicalDatas(terminalDatas, SyncDBEnum.Synchronize);
+                    // AI诊断结果
+                    var terminalDataIds = terminalDatas.Select(x => x.Id);
+                    var builder2 = Builders<TerminalAIDatas>.Filter;
+                    var filter2 = builder2.Where(x => terminalDataIds.Contains(x.TerminalDataId));
+                    var terminalAIDatas = _terminalAIDatasDBRepository.GetTerminalAIDatas(filter2).OrderByDescending(x => x.CreateTime).ToList();
+                    if (terminalAIDatas != null && terminalAIDatas.Any())
+                    {
+                        SendRemedicalAIDatas(terminalAIDatas, SyncDBEnum.Synchronize);
+                    }
+                }
+            }
+            {
+                // 报告
+                var builder = Builders<ReportInfoResults>.Filter;
+                var filter = builder.Where(x => x.RecordId == terminalRecordId);
+                var reportInfoResults = _reportInfoResultDBRepository.GetReports(filter).OrderByDescending(x => x.CreateTime).ToList();
+                if (reportInfoResults != null && reportInfoResults.Any())
+                {
+                    SendRemedicalreportInfoResults(reportInfoResults, SyncDBEnum.Synchronize);
+                }
+            }
+            {
+                // 颈动脉
+                var builder = Builders<Carotid3dModelData>.Filter;
+                var filter = builder.Where(x => x.ExamRecordId == terminalRecordId);
+                var carotid3dModelDatas = _carotid3dModelDatasDBRepository.GetCarotid3dModelDatas(filter).OrderByDescending(x => x.CreateTime).ToList();
+                if (carotid3dModelDatas != null && carotid3dModelDatas.Any())
+                {
+                    SendRemedicalCarotidDatas(carotid3dModelDatas, SyncDBEnum.Synchronize);
+                }
+            }
+        }
+    }
+}

+ 9 - 0
Tools/Flyinsono.DBCopy.Tool/Utilities/CommonConfigManager.cs

@@ -113,6 +113,10 @@ namespace Flyinsono.DBCopy.Tool.Utilities
                 {
                     DirectServer = appConfig.DirectServer;
                 }
+                if (appConfig.TerminalRecordSync != null)
+                {
+                    TerminalRecordSync = appConfig.TerminalRecordSync;
+                }
             }
         }
         /// <summary>
@@ -185,6 +189,11 @@ namespace Flyinsono.DBCopy.Tool.Utilities
         /// </summary>
         public static DatabaseEntity DatabaseInfo { get; set; }
 
+        /// <summary>
+        /// 病例同步配置
+        /// </summary>
+        public static TerminalRecordSyncSetting TerminalRecordSync { get; set; }
+
         /// <summary>
         /// 过滤指定的代理商
         /// </summary>

+ 74 - 5
Tools/Flyinsono.DBCopy.Tool/ViewModels/MainWindowViewModel.cs

@@ -25,6 +25,7 @@ namespace Flyinsono.DBCopy.Tool
         private DateTime _reportEndDate;
         private string _fileNameText;
         private string _excludeSelectText;
+        private string _terminalRecordCode;
         private ObservableCollection<string> _excludeList = new();
         private ObservableCollection<string> _searchedList = new();
         private MigrateService _migrateService;
@@ -56,6 +57,7 @@ namespace Flyinsono.DBCopy.Tool
         private static bool _migrateReportResult = false;
         private static bool _migrateUpgrade = false;
         private static bool _migrateUserInfo = false;
+        private static bool _synchronizeTerminalRecord = false;
         private COSClear _cosClear = new COSClear();
         private readonly Action<Action> _runOnMainDispatcher;
 
@@ -231,6 +233,19 @@ namespace Flyinsono.DBCopy.Tool
             }
         }
 
+        public string TerminalRecordCode
+        {
+            get => _terminalRecordCode;
+            set
+            {
+                if (_terminalRecordCode != value)
+                {
+                    _terminalRecordCode = value;
+                    OnPropertyChanged(() => TerminalRecordCode);
+                }
+            }
+        }
+
         public MigrateService MigrateService
         {
             get
@@ -260,6 +275,7 @@ namespace Flyinsono.DBCopy.Tool
                 {
                     throw new Exception($"WingService Url Is Empty");
                 }
+                Logger.WriteLineInfo($"WingServiceUrl:{WingServiceUrl}");
                 _migrateServiceReal = new MigrateService(WingServiceUrl);
                 return _migrateServiceReal;
             }
@@ -374,6 +390,7 @@ namespace Flyinsono.DBCopy.Tool
         public ButtonCommand SynUserDeviceOrgDataCommand { get; set; }
         public ButtonCommand SynIsUserReportInfoAsyncCommand { get; set; }
         public ButtonCommand ValidateOrganizationParentDataInfosCommand { get; set; }
+        public ButtonCommand SynchronizeTerminalRecordCommand { get; set; }
 
         public MainWindowViewModel(Action<Action> runOnMainDispatcher)
         {
@@ -417,9 +434,9 @@ namespace Flyinsono.DBCopy.Tool
             MigrateCustomLabelsCommand = new ButtonCommand(OnMigrateCustomLabelsCommand);
             ClearColdDataCommand = new ButtonCommand(OnClearColdDataCommand);
             MigrateVinnoOrgDataCommand = new ButtonCommand(OnMigrateVinnoOrgInfos);
-            ValidateOrganizationParentDataInfosCommand = new ButtonCommand(OnValidateOrganizationParentDataInfos); 
+            ValidateOrganizationParentDataInfosCommand = new ButtonCommand(OnValidateOrganizationParentDataInfos);
             SynUserDeviceOrgDataCommand = new ButtonCommand(OnSynUserDeviceOrgDatas);
-            SynIsUserReportInfoAsyncCommand = new ButtonCommand(OnSynIsUserReportInfoAsync); 
+            SynIsUserReportInfoAsyncCommand = new ButtonCommand(OnSynIsUserReportInfoAsync);
             WingServiceUrl = CommonConfigManager.DirectServer.Host;
             ReportBeginDate = DateTime.Now.AddDays(-1);
             ReportEndDate = DateTime.Now;
@@ -430,6 +447,7 @@ namespace Flyinsono.DBCopy.Tool
             WingMigrateCarotidCommand = new ButtonCommand(OnMigrateCarotidToWing);
             WingMigrateConsultationCommand = new ButtonCommand(OnMigrateConsultationToWing);
             WingMigrateReportCommand = new ButtonCommand(OnMigrateReportToWing);
+            SynchronizeTerminalRecordCommand = new ButtonCommand(OnSynchronizeTerminalRecord);
 
             ExcludeList.Add("FlyinsonoDeploymentTool-en.zip");
             ExcludeList.Add("FlyinsonoDeploymentTool-zh.zip");
@@ -978,7 +996,7 @@ namespace Flyinsono.DBCopy.Tool
                 Logger.WriteLineWarn($"Syn SynIsUserReportInfoAsync err, ex:{ex}");
             }
         }
-        
+
 
         private void OnSynUserDeviceOrgDatas(object obj)
         {
@@ -1114,7 +1132,7 @@ namespace Flyinsono.DBCopy.Tool
                 Logger.WriteLineWarn($"MigrateOnlinePrintDataAsync err, ex:{ex}");
             }
         }
-        
+
         private void OnMigratePatchData(object obj)
         {
             if (_migratePatchData)
@@ -1179,7 +1197,7 @@ namespace Flyinsono.DBCopy.Tool
                 Logger.WriteLineWarn($"BussinessData err, ex:{ex}");
             }
         }
-        
+
 
         private void OnReadFeedBackExcelData(object obj)
         {
@@ -1682,6 +1700,57 @@ namespace Flyinsono.DBCopy.Tool
             }
         }
 
+        //报告
+        private void OnSynchronizeTerminalRecord(object obj)
+        {
+            if (_synchronizeTerminalRecord)
+            {
+                Logger.WriteLineWarn($"OnSynchronizeTerminalRecord Processing");
+            }
+            else if (!string.IsNullOrWhiteSpace(WingServiceUrl))
+            {
+                try
+                {
+                    _synchronizeTerminalRecord = true;
+                    Task.Run(async () =>
+                    {
+                        try
+                        {
+                            if (!string.IsNullOrWhiteSpace(TerminalRecordCode))
+                            {
+                                await MigrateServiceReal.SynchronizeByTerminalRecordCode(TerminalRecordCode);
+                            }
+                            else
+                            {
+                                var startTime = CommonConfigManager.TerminalRecordSync.StartTime;
+                                var endTime = CommonConfigManager.TerminalRecordSync.EndTime;
+                                Logger.WriteLineInfo($"OnSynchronizeTerminalRecord startTime:{startTime}");
+                                Logger.WriteLineInfo($"OnSynchronizeTerminalRecord endTime:{endTime}");
+                                await MigrateServiceReal.SynchronizeByTimeRange(startTime, endTime);
+                            }
+                            _synchronizeTerminalRecord = false;
+                        }
+                        catch (Exception ex)
+                        {
+                            Logger.WriteLineWarn($"OnSynchronizeTerminalRecord err, ex:{ex}");
+                        }
+                        finally
+                        {
+                            _synchronizeTerminalRecord = false;
+                        }
+                    });
+                }
+                catch (Exception ex)
+                {
+                    Logger.WriteLineWarn($"OnSynchronizeTerminalRecord err, ex:{ex}");
+                }
+            }
+            else
+            {
+                Logger.WriteLineWarn($"2.0Server Url Is Empty");
+            }
+        }
+
     }
 
 }