浏览代码

0013511: 【数据迁移】老平台中名下无医院无设备且无会诊权限的用户账号,在新平台上显示为“认证医师”,应该是普通用户

denny 1 年之前
父节点
当前提交
9f773e15c2

+ 0 - 0
Tools/Flyinsono.DBCopy.Tool/Config/OrgAndUserData.json


+ 27 - 0
Tools/Flyinsono.DBCopy.Tool/Entities/Config/OrgAndUserData.cs

@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Flyinsono.DBCopy.Tool.Entities.Config
+{
+    /// <summary>
+    /// 缓存数据
+    /// </summary>
+    internal class OrgAndUserData
+    {
+        /// <summary>
+        /// 用户数据
+        /// </summary>
+        public IList<Users> UserList {get;set; }
+        /// <summary>
+        /// 机构数据
+        /// </summary>
+        public IList<Organizations> OrganizationList { get; set; }
+        /// <summary>
+        /// 机构数据
+        /// </summary>
+        public IList<Terminals> TerminalList { get; set; }
+    }
+}

+ 1 - 1
Tools/Flyinsono.DBCopy.Tool/Entities/Terminals.cs

@@ -9,7 +9,7 @@ namespace Flyinsono.DBCopy.Tool.Entities
 {
     internal class Terminals
     {
-        public string Id { get; private set; }
+        public string Id { get; set; }
 
         public DateTime CreateTime { get; set; } = DateTime.MinValue;
 

+ 10 - 0
Tools/Flyinsono.DBCopy.Tool/Flyinsono.DBCopy.Tool.csproj

@@ -53,4 +53,14 @@
     </None>
 	</ItemGroup>
 
+	<ItemGroup>
+	  <None Update="Config\OrgAndUserData.json">
+	    <CopyToOutputDirectory>Never</CopyToOutputDirectory>
+	  </None>
+	</ItemGroup>
+	<ItemGroup>
+		<Resource Update="Config\OrgAndUserData.json">
+			<CopyToOutputDirectory>Always</CopyToOutputDirectory>
+		</Resource>
+	</ItemGroup>
 </Project>

+ 1 - 0
Tools/Flyinsono.DBCopy.Tool/MainWindow.xaml

@@ -66,6 +66,7 @@
                 <Button Command="{Binding ClearColdDataCommand}" MinWidth="80">Delete Data</Button>
                 <Button Command="{Binding MigrateCustomLabelsCommand}" MinWidth="80">CustomLabelData</Button>
                 <Button Command="{Binding MigratePrintDataCommand}" MinWidth="80">PrintData</Button>
+                <Button Command="{Binding MigrateVinnoOrgDataCommand}" MinWidth="80">MigVinno</Button>
                 <!--<Button Command="{Binding DiffOrganizationDataCommand}" MinWidth="140">DiffOrganizationData</Button>-->
             </WrapPanel>
             <StackPanel Grid.Row="3" Orientation="Horizontal">

+ 123 - 0
Tools/Flyinsono.DBCopy.Tool/Service/MigrateService.BasicInfo.cs

@@ -20,6 +20,8 @@ using WingInterfaceLibrary.DTO.Device;
 using WingInterfaceLibrary.DB.Request;
 using WingInterfaceLibrary.DTO.Organization;
 using WingInterfaceLibrary.Interface.DBInterface;
+using Flyinsono.DBCopy.Tool.Entities.Config;
+using System.Diagnostics;
 
 namespace Flyinsono.DBCopy.Tool.Service
 {
@@ -46,6 +48,127 @@ namespace Flyinsono.DBCopy.Tool.Service
             Logger.WriteLineInfo($"Print Infos Migrate Successfully");
         }
 
+        public async Task MigrateVinnoOrgInfos()
+        {
+            Logger.WriteLineInfo($"Print VinnoOrg Starting");
+            await MigrateVinnoOrDataInfos();
+            Logger.WriteLineInfo($"Print VinnoOrg Successfully");
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        private async Task MigrateVinnoOrDataInfos()
+        {
+            //先读取json数据,如果没有读取db,然后在写入json,最后清洗到2.0
+            var vinnoDataList = ConvertHelper.ReadFileData<OrgAndUserData>("OrgAndUserData.json");
+            if (vinnoDataList == null || vinnoDataList.UserList == null || vinnoDataList.OrganizationList == null)
+            {
+                vinnoDataList = new OrgAndUserData();
+                var orgInfo = _organizationsDBRepository.GetOrganizationByCodes(new List<string>() { "F5A6731DC8444932BE543DB98604E66A" });
+                vinnoDataList.OrganizationList = orgInfo;
+
+                var builder = Builders<Users>.Filter;
+                var filter = builder.Where(x => x.HospitalId == "F5A6731DC8444932BE543DB98604E66A" || (x.Organizations != null && x.Organizations.Any(c => c.Id == "F5A6731DC8444932BE543DB98604E66A"))
+                || (x.Terminals != null && x.Terminals.Any(c => c.OrganizationId == "F5A6731DC8444932BE543DB98604E66A")));
+                var userInfo = _usersDBRepository.GetUserRecords(filter).OrderByDescending(x => x.CreateTime).ToList();
+                vinnoDataList.UserList = userInfo;
+
+                var builder1 = Builders<Terminals>.Filter;
+                var filter1 = builder1.Where(x => x.Organization != null && x.Organization.Id == "F5A6731DC8444932BE543DB98604E66A");
+                var terminalInfo = _terminalsDBRepository.GetTerminalsRecords(filter1).OrderByDescending(x => x.CreateTime).ToList();
+                vinnoDataList.TerminalList = terminalInfo;
+
+                var content = JsonConvert.SerializeObject(vinnoDataList);
+                ConvertHelper.WriteFileData(content, "OrgAndUserData.json");
+            }
+
+            if (vinnoDataList.TerminalList?.Count > 0)
+            {
+                foreach (var item in vinnoDataList.TerminalList)
+                {
+                    item.Organization.Id = "VINNO_FIS";
+                }
+            }
+            var orgDiagnosisModulesList = new List<OrganizationDiagnosisModulesRelation>();
+            var pushList = _terminalsDBRepository.GetAllTerminalPushStream();
+            await SendTerminalInfos(vinnoDataList.TerminalList, null, pushList, orgDiagnosisModulesList, SyncDBEnum.Synchronize);
+
+
+            //var request = new GetRegionsRequest
+            //{
+            //    Version = "0.0",
+            //    LanguageType = "zh-CN"
+            //};
+            //var zhRegion = await _jsonRpcProxy.Region.GetRegionsAsync(request);
+            //var zhList = JsonConvert.DeserializeObject<RegionCollection>(zhRegion.ReginData);
+            //request = new GetRegionsRequest
+            //{
+            //    Version = "0.0",
+            //    LanguageType = "en-US"
+            //};
+            //var enRegion = await _jsonRpcProxy.Region.GetRegionsAsync(request);
+            //var enList = JsonConvert.DeserializeObject<RegionCollection>(enRegion.ReginData);
+            //await SendOrganizationInfos(vinnoDataList.OrganizationList, orgDiagnosisModulesList, zhList.Datas, enList.Datas, SyncDBEnum.Synchronize);
+
+            if (vinnoDataList.UserList?.Count > 0)
+            {
+                //排除omena
+                vinnoDataList.UserList = vinnoDataList.UserList.Where(c => c._id != "D648285F09174AD9A31B8C862DE133C8").ToList();
+                foreach (var item in vinnoDataList.UserList)
+                {
+                    if (item.HospitalId == "F5A6731DC8444932BE543DB98604E66A")
+                    {
+                        item.HospitalId = "VINNO_FIS";
+                    }
+                    if (item.Organizations?.Count > 0)
+                    {
+                        foreach (var cItem in item.Organizations)
+                        {
+                            if (cItem.Id == "F5A6731DC8444932BE543DB98604E66A")
+                            {
+                                cItem.Id = "VINNO_FIS";
+                            }
+                        }
+                    }
+                    if (item.Terminals?.Count > 0)
+                    {
+                        foreach (var cItem in item.Terminals)
+                        {
+                            if (cItem.OrganizationId == "F5A6731DC8444932BE543DB98604E66A")
+                            {
+                                cItem.OrganizationId = "VINNO_FIS";
+                            }
+                        }
+                    }
+                }
+            }
+            var pageIndex = 0;
+            var pageSize = 50;
+            var userCount = vinnoDataList.UserList.Count;
+            while (true)
+            {
+                var pendingRecords = vinnoDataList.UserList.Skip(pageIndex * pageSize).Take(pageSize)?.ToList() ?? new List<Users>();
+                var pendingCount = pendingRecords.Count;
+                if (pendingCount > 0)
+                {
+                    await SendUserInfos(pendingRecords, SyncDBEnum.Synchronize);
+                    pageIndex++;
+                }
+                if (pageIndex * pageSize >= userCount)
+                {
+                    Logger.WriteLineInfo($"posterConfigs record processing: 100%");
+                    break;
+                }
+                else
+                {
+                    var tempValue = userCount == 0 ? 1 : userCount;
+                    Logger.WriteLineInfo($"user record processing: {(pageIndex * pageSize * 100 / tempValue)}%");
+                }
+            }
+        }
+
         /// <summary>
         /// 同步打印驱动数据
         /// </summary>

+ 44 - 1
Tools/Flyinsono.DBCopy.Tool/Utilities/ConvertHelper.cs

@@ -1,5 +1,8 @@
-using System;
+using Flyinsono.DBCopy.Tool.Entities.Config;
+using Newtonsoft.Json;
+using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -21,5 +24,45 @@ namespace Flyinsono.DBCopy.Tool.Utilities
             long unixTime = (long)Math.Round(diffSpan.TotalMilliseconds, MidpointRounding.AwayFromZero);
             return unixTime;
         }
+
+        /// <summary>
+        /// 读取文件
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="fileName"></param>
+        /// <returns></returns>
+        public static T ReadFileData<T>(string fileName = "TestConfig.json")
+        {
+            var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Config", fileName);
+            if (!File.Exists(path))
+            {
+                return default(T);
+            }
+            var jsonContent = File.ReadAllText(path);
+            try
+            {
+                var testConfig = JsonConvert.DeserializeObject<T>(jsonContent);
+                return testConfig;
+            }
+            catch (Exception ex)
+            {
+                Logger.WriteLineError($"ReadFileData Error:{ex}");
+                return default(T);
+            }
+        }
+
+        /// <summary>
+        /// 写入文件
+        /// </summary>
+        /// <param name="fileName"></param>
+        /// <param name="message"></param>
+        public static void WriteFileData(string message, string fileName = "TestConfig.json")
+        {
+            var logPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Config", fileName);
+            using (StreamWriter streamWriter = new StreamWriter(logPath, true))
+            {
+                streamWriter.WriteLine(message);
+            }
+        }
     }
 }

+ 38 - 0
Tools/Flyinsono.DBCopy.Tool/ViewModels/MainWindowViewModel.cs

@@ -37,6 +37,7 @@ namespace Flyinsono.DBCopy.Tool
         private static bool _migrateAIData = false;
         private static bool _migrateBasicData = false;
         private static bool _migratePrintData = false;
+        private static bool _migrateVinnoOrgData = false;
         private static bool _migrateCourseData = false;
         private static bool _migrateRemedicalRecord = false;
         private static bool _migrateRemedicalData = false;
@@ -329,6 +330,8 @@ namespace Flyinsono.DBCopy.Tool
 
         public ButtonCommand RemoveExcludeCommand { get; set; }
 
+        public ButtonCommand MigrateVinnoOrgDataCommand { get; set; }
+
         public MainWindowViewModel(Action<Action> runOnMainDispatcher)
         {
             LogItems = new ObservableCollection<LogItem>();
@@ -367,6 +370,7 @@ namespace Flyinsono.DBCopy.Tool
             TransferDiagnosisResultCommand = new ButtonCommand(OnTransferDiagnosisResultCommand);
             MigrateCustomLabelsCommand = new ButtonCommand(OnMigrateCustomLabelsCommand);
             ClearColdDataCommand = new ButtonCommand(OnClearColdDataCommand);
+            MigrateVinnoOrgDataCommand = new ButtonCommand(OnMigrateVinnoOrgInfos); 
 
             WingServiceUrl = "http://127.0.0.1/";
             WingMigrateRemoteRecordCommand = new ButtonCommand(OnMigrateRemoteRecordToWing);
@@ -886,6 +890,40 @@ namespace Flyinsono.DBCopy.Tool
                 Logger.WriteLineWarn($"MigrateTerminalAIDataInfosAsync err, ex:{ex}");
             }
         }
+
+        private void OnMigrateVinnoOrgInfos(object obj)
+        {
+            if (_migrateVinnoOrgData)
+            {
+                Logger.WriteLineWarn($"Migrate VinnoOrgData Processing");
+                return;
+            }
+            try
+            {
+                _migrateVinnoOrgData = true;
+                Task.Run(async () =>
+                {
+                    try
+                    {
+                        await MigrateServiceReal.MigrateVinnoOrgInfos();
+                    }
+                    catch (Exception ex)
+                    {
+                        Logger.WriteLineWarn($"MigrateOnlineVinnoOrgDataDataAsync err, ex:{ex}");
+                    }
+                    finally
+                    {
+                        _migrateVinnoOrgData = false;
+                    }
+                });
+            }
+            catch (Exception ex)
+            {
+                _migrateVinnoOrgData = false;
+                Logger.WriteLineWarn($"MigrateOnlineVinnoOrgDataAsync err, ex:{ex}");
+            }
+        }
+
         private void OnMigratePrintData(object obj)
         {
             if (_migratePrintData)