Browse Source

数据迁移接口 机构结构调整

denny 1 year ago
parent
commit
8621df6563

+ 22 - 0
Tools/Flyinsono.DBCopy.Tool/Entities/ReportTemplates.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Flyinsono.DBCopy.Tool.Entities
+{
+    internal class ReportTemplates
+    {
+        public string Id { get; private set; }
+
+        public DateTime CreateTime { get; private set; }
+
+        public DateTime UpdateTime { get; set; }
+        public bool IsDeleted { get; set; }
+        public string Name { get; set; }
+        public string Description { get; set; }
+        public string FileName { get; set; }
+        public string TemplateUrl { get; set; }
+    }
+}

+ 184 - 7
Tools/Flyinsono.DBCopy.Tool/Service/MigrateService.BasicInfo.cs

@@ -6,18 +6,14 @@ using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Security.Cryptography.Xml;
-using System.Text;
+using System.Net.Http;
+using System.Net;
 using System.Threading.Tasks;
 using WingInterfaceLibrary.DTO;
-using WingInterfaceLibrary.DTO.DataCenter;
-using WingInterfaceLibrary.DTO.Management;
-using WingInterfaceLibrary.DTO.Region;
 using WingInterfaceLibrary.Enum;
-using WingInterfaceLibrary.Internal.Request;
-using WingInterfaceLibrary.Request;
 using WingInterfaceLibrary.Request.Management;
 using WingInterfaceLibrary.Request.User;
+using WingServerCommon.Interfaces.FileTransfer;
 
 namespace Flyinsono.DBCopy.Tool.Service
 {
@@ -33,9 +29,190 @@ namespace Flyinsono.DBCopy.Tool.Service
             var orgDiagnosisModulesList = await MigrateTerminalsInfos(relationList);
             await MigrateOrganizationInfos(orgDiagnosisModulesList);
             await MigrateUserInfos();
+            await MigrateAdminInfos();
+            await MigrateReportTemplateInfos();
             Logger.WriteLineInfo($"Basic Infos Migrate Successfully");
         }
 
+        /// <summary>
+        /// 同步报告模板
+        /// </summary>
+        /// <returns></returns>
+        private async Task MigrateReportTemplateInfos()
+        {
+            var startTime = _migrateRecord.StartTime;
+            var endTime = _migrateRecord.EndTime;
+            var builder = Builders<ReportTemplates>.Filter;
+            var filter = builder.Where(x => (x.CreateTime > startTime && x.CreateTime <= endTime) || (x.UpdateTime > startTime && x.UpdateTime <= endTime));
+            var reportTemplateRecords = _reportTemplateDBRepository.GetReportTemplateRecords(filter).OrderByDescending(x => x.CreateTime).ThenBy(x => x.Id).ToList();
+            Logger.WriteLineInfo($"ReportTemplates totalCount:{reportTemplateRecords.Count}");
+
+            var reportTemplateCount = reportTemplateRecords.Count;
+            var processNumbers = 0;
+            var processNumber = 100;
+            while (true)
+            {
+                var pendingRecords = reportTemplateRecords.Skip(processNumbers).Take(processNumber)?.ToList() ?? new List<ReportTemplates>();
+                var pendingCount = pendingRecords.Count;
+                if (pendingCount > 0)
+                {
+                    await SendReportTemplatesInfos(pendingRecords);
+                    processNumbers += pendingCount;
+                }
+                if (processNumbers % (processNumber * 100) == 0)
+                {
+                    Logger.WriteLineInfo($"ReportTemplates record processing: {(processNumbers * 100 / reportTemplateCount)}%");
+                }
+
+                if (pendingCount < processNumber)
+                {
+                    break;
+                }
+            }
+        }
+        /// <summary>
+        /// 发送报告模板数据
+        /// </summary>
+        /// <param name="userRecords"></param>
+        private async Task SendReportTemplatesInfos(IList<ReportTemplates> reportTemplateRecords)
+        {
+            try
+            {
+                Logger.WriteLineInfo($"ReportTemplates Infos Migrate Starting");
+                var reportTemplateList = new List<ReportTemplateMigratoryInfo>();
+                foreach (var reportTemplateItem in reportTemplateRecords)
+                {
+                    bool isAnimals = false;
+                    if (CommonConfigManager.FilterPatientType?.Count > 0)
+                    {
+                        foreach (var item in CommonConfigManager.FilterPatientType)
+                        {
+                            if (reportTemplateItem.Name.Contains(item))
+                            {
+                                isAnimals = true;
+                                break;
+                            }
+                        }
+                    }
+                    //下载文件,并读取文件内容
+                    var fileUrl = GetFileUrl(reportTemplateItem.TemplateUrl);
+                    var model = new ReportTemplateMigratoryInfo()
+                    {
+                        ReportTemplateCode = reportTemplateItem.Id,
+                        CreateTime = reportTemplateItem.CreateTime,
+                        UpdateTime = reportTemplateItem.UpdateTime,
+                        ReportTemplateName = reportTemplateItem.Name,
+                        ReportTemplateUsageType = isAnimals ? ReportTemplateUsageTypeEnum.Animal : ReportTemplateUsageTypeEnum.People,
+                        ReportTemplateJson = fileUrl
+                    };
+                    reportTemplateList.Add(model);
+                }
+                var request = new BatchInsertReportTemplateRequest
+                {
+                    ReportTemplateMigratorys = reportTemplateList,
+                    Token = DefaultToken
+                };
+                var result = await _jsonRpcProxy.Management.BatchInsertReportTemplateDataAsync(request);
+                if (result)
+                {
+                    Logger.WriteLineInfo($"ReportTemplates Infos Migrate Successfully");
+                }
+            }
+            catch (Exception ex)
+            {
+                Logger.WriteLineError($"Send ReportTemplates Infos Error, ex:{ex}");
+            }
+        }
+
+        /// <summary>
+        /// 同步管理员数据
+        /// </summary>
+        /// <returns></returns>
+        private async Task MigrateAdminInfos()
+        {
+            var startTime = _migrateRecord.StartTime;
+            var endTime = _migrateRecord.EndTime;
+            var builder = Builders<Admins>.Filter;
+            var filter = builder.Where(x => (x.CreateTime > startTime && x.CreateTime <= endTime) || (x.UpdateTime > startTime && x.UpdateTime <= endTime));
+            var adminRecords = _adminDBRepository.GetAdminsRecords(filter).OrderByDescending(x => x.CreateTime).ThenBy(x => x._id).ToList();
+            Logger.WriteLineInfo($"admin totalCount:{adminRecords.Count}");
+
+            var adminCount = adminRecords.Count;
+            var processNumbers = 0;
+            var processNumber = 100;
+            while (true)
+            {
+                var pendingRecords = adminRecords.Skip(processNumbers).Take(processNumber)?.ToList() ?? new List<Admins>();
+                var pendingCount = pendingRecords.Count;
+                if (pendingCount > 0)
+                {
+                    await SendAdminInfos(pendingRecords);
+                    processNumbers += pendingCount;
+                }
+                if (processNumbers % (processNumber * 100) == 0)
+                {
+                    Logger.WriteLineInfo($"Admins record processing: {(processNumbers * 100 / adminCount)}%");
+                }
+
+                if (pendingCount < processNumber)
+                {
+                    break;
+                }
+            }
+        }
+
+        /// <summary>
+        /// 发送管理员数据
+        /// </summary>
+        /// <param name="userRecords"></param>
+        private async Task SendAdminInfos(IList<Admins> adminRecords)
+        {
+            try
+            {
+                Logger.WriteLineInfo($"Admins Infos Migrate Starting");
+                var adminList = new List<AdminMigratoryInfo>();
+                foreach (var adminItem in adminRecords)
+                {
+                    var fullName = string.IsNullOrEmpty(adminItem.FullName) ? adminItem.LastName : adminItem.FullName;
+                    var model = new AdminMigratoryInfo()
+                    {
+                        AdminCode = adminItem._id,
+                        CreateTime = adminItem.CreateTime,
+                        UpdateTime = adminItem.UpdateTime,
+                        FatherCode = "PrimaryAdmin01",
+                        AdminName = adminItem.Name,
+                        SecretPassword = adminItem.Password,
+                        Phone = adminItem.Phone,
+                        Email = adminItem.Email,
+                        FullName = fullName,
+                    };
+                    if (adminItem.Level == 2)
+                    {
+                        model.AdminRole = AdminMigratoryRoleEnum.GeneralAdmin;
+                    }
+                    else if (adminItem.Level == 1)
+                    {
+                        model.AdminRole = AdminMigratoryRoleEnum.PrimaryAdmin01;
+                    }
+                    adminList.Add(model);
+                }
+                var request = new BatchInsertAdminRequest
+                {
+                    AdminMigratorys = adminList,
+                    Token = DefaultToken
+                };
+                var result = await _jsonRpcProxy.Management.BatchInsertAdminDataAsync(request);
+                if (result)
+                {
+                    Logger.WriteLineInfo($"Admins Infos Migrate Successfully");
+                }
+            }
+            catch (Exception ex)
+            {
+                Logger.WriteLineError($"Send Admins Infos Error, ex:{ex}");
+            }
+        }
+
         /// <summary>
         /// 同步机构数据
         /// </summary>

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

@@ -40,6 +40,8 @@ namespace Flyinsono.DBCopy.Tool.Service
         private UserGroupDBRepository _userGroupDBRepository;
         private UltrasonicClassDBRepository _ultrasonicClassDBRepository;
         private CoursesDBRepository _coursesDBRepository;
+        private ReportTemplateDBRepository _reportTemplateDBRepository;
+        private AdminDBRepository _adminDBRepository;
 
         public MigrateService(string dcServiceUrl)
         {
@@ -58,6 +60,8 @@ namespace Flyinsono.DBCopy.Tool.Service
             _userGroupDBRepository = new UserGroupDBRepository();
             _ultrasonicClassDBRepository = new UltrasonicClassDBRepository();
             _coursesDBRepository = new CoursesDBRepository();
+            _reportTemplateDBRepository = new ReportTemplateDBRepository();
+            _adminDBRepository = new AdminDBRepository();
         }
 
         public async Task WriteMigrateStaticAsync()

+ 25 - 0
Tools/Flyinsono.DBCopy.Tool/Service/Repositories/AdminDBRepository.cs

@@ -0,0 +1,25 @@
+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.Threading.Tasks;
+
+namespace Flyinsono.DBCopy.Tool.Service.Repositories
+{
+    internal class AdminDBRepository : BaseDBRepository
+    {
+        /// <summary>
+        /// 分页查询
+        /// </summary>
+        /// <param name="filter"></param>
+        /// <returns></returns>
+        public IList<Admins> GetAdminsRecords(FilterDefinition<Admins> filter)
+        {
+            var entities = LargerQuery(MongoDbClientSingle.Instance.Admins, filter)?.ToList() ?? new List<Admins>();
+            return entities;
+        }
+    }
+}

+ 25 - 0
Tools/Flyinsono.DBCopy.Tool/Service/Repositories/ReportTemplateDBRepository.cs

@@ -0,0 +1,25 @@
+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.Threading.Tasks;
+
+namespace Flyinsono.DBCopy.Tool.Service.Repositories
+{
+    internal class ReportTemplateDBRepository : BaseDBRepository
+    {
+        /// <summary>
+        /// 分页查询
+        /// </summary>
+        /// <param name="filter"></param>
+        /// <returns></returns>
+        public IList<ReportTemplates> GetReportTemplateRecords(FilterDefinition<ReportTemplates> filter)
+        {
+            var entities = LargerQuery(MongoDbClientSingle.Instance.ReportTemplates, filter)?.ToList() ?? new List<ReportTemplates>();
+            return entities;
+        }
+    }
+}

+ 2 - 0
Tools/Flyinsono.DBCopy.Tool/Utilities/MongoDbClient.cs

@@ -202,6 +202,7 @@ namespace Flyinsono.DBCopy.Tool.Utilities
         public IMongoCollection<Video> Videos { get; private set; }
         public IMongoCollection<UserGroup> UserGroups { get; private set; }
         public IMongoCollection<UltrasonicClass> UltrasonicClasses { get; private set; }
+        public IMongoCollection<ReportTemplates> ReportTemplates { get; private set; }
         private void RegisterEntities()
         {
             Admins = GetCollection<Admins>("Admins");
@@ -251,6 +252,7 @@ namespace Flyinsono.DBCopy.Tool.Utilities
             Videos = GetCollection<Video>("Videos");
             UserGroups = GetCollection<UserGroup>("UserGroups");
             UltrasonicClasses = GetCollection<UltrasonicClass>("UltrasonicClasses");
+            ReportTemplates = GetCollection<ReportTemplates>("ReportTemplates");
         }