123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- using Flyinsono.DBCopy.Tool.Entities;
- using Microsoft.VisualBasic;
- using MongoDB.Bson;
- using MongoDB.Driver.Core.Misc;
- using MongoDB.Driver;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics.Metrics;
- using System.Diagnostics;
- using System.IO.Packaging;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Input;
- using Flyinsono.DBCopy.Tool.Properties;
- using System.Xml.Linq;
- using System.Net;
- namespace Flyinsono.DBCopy.Tool.Utilities
- {
- internal class MongoDbClient
- {
- private const int ConnnectTimeOut = 3000;
- private const int WaitQueueTimeout = 3000;
- private const int ServerSelectionTimeout = 20000;
- private const int SocketTimeout = 20000;
- private string _databaseName = "vCloudDb";
- private string _host = "localhost";
- private int _port = 8333;
- private IMongoDatabase _database;
- private MongoClient _mongoClient;
- public MongoDbClient()
- {
- BuilderClient();
- RegisterEntities();
- }
- /// <summary>
- /// 构造MongoClient
- /// </summary>
- private void BuilderClient()
- {
- bool isLocalHost = CommonConfigManager.IsLocalHost;
- if (isLocalHost)
- {
- _databaseName = "vCloudDb";
- _host = "localhost";
- _port = 8333;
- }
- else
- {
- _databaseName = CommonConfigManager.DatabaseInfo.DbName;
- _host = CommonConfigManager.DatabaseInfo.Host;
- _port = CommonConfigManager.DatabaseInfo.Port;
- }
- var mongoSetting = new MongoClientSettings
- {
- ConnectTimeout = TimeSpan.FromSeconds(ConnnectTimeOut),
- Server = new MongoServerAddress(_host, _port),
- MaxConnectionPoolSize = 2000,
- WaitQueueSize = 200,
- WaitQueueTimeout = TimeSpan.FromSeconds(WaitQueueTimeout),
- ServerSelectionTimeout = TimeSpan.FromSeconds(ServerSelectionTimeout),
- SocketTimeout = TimeSpan.FromSeconds(SocketTimeout),
- };
- Logger.WriteLineInfo($"DBServer {_host}:{_port}");
- _mongoClient = new MongoClient(mongoSetting);
- _database = _mongoClient.GetDatabase(_databaseName);
- }
- /// <summary>
- /// 关闭Mongo服务
- /// </summary>
- public void CloseMongodbServer()
- {
- Stopwatch stopwatch = new Stopwatch();
- stopwatch.Start();
- try
- {
- var adminDatabase = _mongoClient.GetDatabase("admin");
- adminDatabase.RunCommandAsync(new JsonCommand<BsonDocument>("{shutdown : 1, force : true}"));
- }
- catch (Exception e)
- {
- Logger.WriteLineError($"Close Mongodb Server exception: {e}");
- }
- finally
- {
- stopwatch.Stop();
- Logger.WriteLineInfo($"Close Mongodb Server used: {stopwatch.ElapsedMilliseconds}Milliseconds");
- }
- }
- private IMongoDatabase GetUsedDatabase()
- {
- int tryCount = 0;
- while (_database.Client.Cluster.Description.State == MongoDB.Driver.Core.Clusters.ClusterState.Disconnected && tryCount < 3)
- {
- _database.Client.Cluster.Initialize();
- tryCount++;
- Logger.WriteLineInfo($"Rebuilder MongodbClient finish");
- Thread.Sleep(1000);
- }
- return _database;
- }
- public bool DatabaseExist()
- {
- Stopwatch stopwatch = new Stopwatch();
- stopwatch.Start();
- try
- {
- var database = _mongoClient.GetDatabase("vCloudDb");
- return database.ListCollectionNames().Any();
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"Exist Mongodb Server exception: {ex}");
- throw new Exception("Database connection timeout,Please restart server!");
- }
- finally
- {
- stopwatch.Stop();
- Logger.WriteLineInfo($"Exist Mongodb Server used: {stopwatch.ElapsedMilliseconds}Milliseconds");
- }
- }
- public bool MongodServerIsRunning()
- {
- try
- {
- var collections = GetUsedDatabase().RunCommand(new JsonCommand<BsonDocument>("{ listCollections: 1 }"));
- if (collections.ElementCount > 0)
- {
- return true;
- }
- return false;
- }
- catch
- {
- return false;
- }
- }
- /// <summary>
- /// 获取数据集对象
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="collectionName"></param>
- /// <returns></returns>
- public IMongoCollection<T> GetCollection<T>(string collectionName)
- {
- IMongoCollection<T> collection = _database.GetCollection<T>(collectionName);
- return collection;
- }
- //private MongoCollectionProxy<T> GetCollectionProxy<T>(string collectionName)
- //{
- // //return _database.GetCollectionProxy<T>(collectionName);
- // _database.GetCollection<T>(collectionName);
- //}
- public void RunScript(string command)
- {
- _database.RunCommand(new JsonCommand<BsonDocument>(command));
- }
- public IMongoCollection<Admins> Admins { get; private set; }
- public IMongoCollection<Carotid3dModelData> Carotid3dModelDatas { get; private set; }
- public IMongoCollection<ChatMessages> ChatMessages { get; private set; }
- public IMongoCollection<ConsultationEvaluates> ConsultationEvaluates { get; private set; }
- public IMongoCollection<ConsultationRecords> ConsultationRecords { get; private set; }
- public IMongoCollection<Conversations> Conversations { get; private set; }
- public IMongoCollection<CourseNoticeReminds> CourseNoticeReminds { get; private set; }
- public IMongoCollection<Courses> Courses { get; private set; }
- public IMongoCollection<CourseStudents> CourseStudents { get; private set; }
- public IMongoCollection<DiagnosisResult> DiagnosisResult { get; private set; }
- public IMongoCollection<ExaminationPaper> ExaminationPaper { get; private set; }
- public IMongoCollection<ExamScores> ExamScores { get; private set; }
- public IMongoCollection<FinishedTerminalRecords> FinishedTerminalRecords { get; private set; }
- public IMongoCollection<LectureContestBrowserRecords> LectureContestBrowserRecords { get; private set; }
- public IMongoCollection<LectureContestEntryScoreRecords> LectureContestEntryScoreRecords { get; private set; }
- public IMongoCollection<LectureContestMessages> LectureContestMessages { get; private set; }
- public IMongoCollection<LectureContestResults> LectureContestResults { get; private set; }
- public IMongoCollection<LectureContests> LectureContests { get; private set; }
- public IMongoCollection<Locations> Locations { get; private set; }
- public IMongoCollection<Organizations> Organizations { get; private set; }
- public IMongoCollection<PosterConfigs> PosterConfigs { get; private set; }
- public IMongoCollection<PosterHistories> PosterHistories { get; private set; }
- public IMongoCollection<ReportInfoResults> ReportInfoResults { get; private set; }
- public IMongoCollection<StorageFileInfoes> StorageFileInfoes { get; private set; }
- public IMongoCollection<TerminalAIDataExcuteRecords> TerminalAIDataExcuteRecords { get; private set; }
- public IMongoCollection<TerminalAIDatas> TerminalAIDatas { get; private set; }
- public IMongoCollection<TerminalDatas> TerminalDatas { get; private set; }
- public IMongoCollection<TerminalRecordReportAISelectResults> TerminalRecordReportAISelectResults { get; private set; }
- public IMongoCollection<TerminalRecords> TerminalRecords { get; private set; }
- public IMongoCollection<Terminals> Terminals { get; private set; }
- public IMongoCollection<UploadStorageFileInfo> UploadStorageFileInfo { get; private set; }
- public IMongoCollection<Users> Users { get; private set; }
- public IMongoCollection<UsersBak> UsersBak { get; private set; }
- public IMongoCollection<OrganizationsBak> OrganizationsBak { get; private set; }
- public IMongoCollection<TerminalsBak> TerminalsBak { get; private set; }
- public IMongoCollection<TerminalRecordsBak> TerminalRecordsBak { get; private set; }
- public IMongoCollection<ConsultationRecordsBak> ConsultationRecordsBak { get; private set; }
- public IMongoCollection<LectureContestEntries> LectureContestEntries { get; private set; }
- public IMongoCollection<ExamPapers> ExamPapers { get; private set; }
- public IMongoCollection<PatientInfos> PatientInfos { get; private set; }
- public IMongoCollection<Patients> Patients { get; private set; }
- public IMongoCollection<TerminalRecordReportStates> TerminalRecordReportStates { get; private set; }
- public IMongoCollection<ReportInfoResultsBak> ReportInfoResultsBak { get; private set; }
- public IMongoCollection<UserRoleTypes> UserRoleTypes { get; private set; }
- public IMongoCollection<TerminalPushLiveConfigs> TerminalPushLiveConfigs { get; private set; }
- 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; }
- public IMongoCollection<CourseAvailabilityExtensions> CourseAvailabilityExtensions { get; private set; }
- public IMongoCollection<CustomLabel> CustomLabels { get; private set; }
- public IMongoCollection<VideoCategories> VideoCategories { get; private set; }
- public IMongoCollection<VideoSecoundCategories> VideoSecoundCategories { get; private set; }
- public IMongoCollection<CloudFiles> CloudFiles { get; private set; }
- public IMongoCollection<UserLinkVideos> UserLinkVideos { get; private set; }
- public IMongoCollection<TeachingTerminalDatas> TeachingTerminalDatas { get; private set; }
- public IMongoCollection<Questionnaires> Questionnaires { get; private set; }
- public IMongoCollection<ExamTemplates> ExamTemplates { get; private set; }
- public IMongoCollection<DistributionRecords> DistributionRecords { get; private set; }
- public IMongoCollection<AnswerSheets> AnswerSheets { get; private set; }
- public IMongoCollection<ReportInfoResultsInfo> ReportInfoResultsInfo { get; private set; }
- public IMongoCollection<FollowUpVisitInfos> FollowUpVisitInfos { get; private set; }
- public IMongoCollection<TrainingBrowsedRecords> TrainingBrowsedRecords { get; private set; }
- public IMongoCollection<PrinterDrives> PrinterDrives { get; private set; }
- public IMongoCollection<Patch> Patches { get; private set; }
- public IMongoCollection<Entities.Package> Packages { get; private set; }
- private void RegisterEntities()
- {
- Admins = GetCollection<Admins>("Admins");
- Carotid3dModelDatas = GetCollection<Carotid3dModelData>("Carotid3dModelDatas");
- ChatMessages = GetCollection<ChatMessages>("ChatMessages");
- ConsultationEvaluates = GetCollection<ConsultationEvaluates>("ConsultationEvaluates");
- ConsultationRecords = GetCollection<ConsultationRecords>("ConsultationRecords");
- ConsultationRecordsBak = GetCollection<ConsultationRecordsBak>("ConsultationRecordsBak");
- Conversations = GetCollection<Conversations>("Conversations");
- CourseNoticeReminds = GetCollection<CourseNoticeReminds>("CourseNoticeReminds");
- Courses = GetCollection<Courses>("Courses");
- CourseStudents = GetCollection<CourseStudents>("CourseStudents");
- DiagnosisResult = GetCollection<DiagnosisResult>("DiagnosisResult");
- ExaminationPaper = GetCollection<ExaminationPaper>("ExaminationPaper");
- ExamScores = GetCollection<ExamScores>("ExamScores");
- FinishedTerminalRecords = GetCollection<FinishedTerminalRecords>("FinishedTerminalRecords");
- LectureContestBrowserRecords = GetCollection<LectureContestBrowserRecords>("LectureContestBrowserRecords");
- LectureContestEntryScoreRecords = GetCollection<LectureContestEntryScoreRecords>("LectureContestEntryScoreRecords");
- LectureContestMessages = GetCollection<LectureContestMessages>("LectureContestMessages");
- LectureContestResults = GetCollection<LectureContestResults>("LectureContestResults");
- LectureContests = GetCollection<LectureContests>("LectureContests");
- Locations = GetCollection<Locations>("Locations");
- Organizations = GetCollection<Organizations>("Organizations");
- OrganizationsBak = GetCollection<OrganizationsBak>("OrganizationsBak");
- PosterConfigs = GetCollection<PosterConfigs>("PosterConfigs");
- PosterHistories = GetCollection<PosterHistories>("PosterHistories");
- ReportInfoResults = GetCollection<ReportInfoResults>("ReportInfoResults");
- StorageFileInfoes = GetCollection<StorageFileInfoes>("StorageFileInfoes");
- TerminalAIDataExcuteRecords = GetCollection<TerminalAIDataExcuteRecords>("TerminalAIDataExcuteRecords");
- TerminalAIDatas = GetCollection<TerminalAIDatas>("TerminalAIDatas");
- TerminalDatas = GetCollection<TerminalDatas>("TerminalDatas");
- TerminalRecordReportAISelectResults = GetCollection<TerminalRecordReportAISelectResults>("TerminalRecordReportAISelectResults");
- TerminalRecords = GetCollection<TerminalRecords>("TerminalRecords");
- TerminalRecordsBak = GetCollection<TerminalRecordsBak>("TerminalRecordsBak");
- Terminals = GetCollection<Terminals>("Terminals");
- TerminalsBak = GetCollection<TerminalsBak>("TerminalsBak");
- UploadStorageFileInfo = GetCollection<UploadStorageFileInfo>("UploadStorageFileInfo");
- Users = GetCollection<Users>("Users");
- UsersBak = GetCollection<UsersBak>("UsersBak");
- LectureContestEntries = GetCollection<LectureContestEntries>("LectureContestEntries");
- ExamPapers = GetCollection<ExamPapers>("ExamPapers");
- TerminalRecordReportStates = GetCollection<TerminalRecordReportStates>("TerminalRecordReportStates");
- PatientInfos = GetCollection<PatientInfos>("PatientInfos");
- Patients = GetCollection<Patients>("Patients");
- ReportInfoResultsBak = GetCollection<ReportInfoResultsBak>("ReportInfoResultsBak");
- UserRoleTypes = GetCollection<UserRoleTypes>("UserRoleTypes");
- TerminalPushLiveConfigs = GetCollection<TerminalPushLiveConfigs>("TerminalPushLiveConfigs");
- Videos = GetCollection<Video>("Videos");
- UserGroups = GetCollection<UserGroup>("UserGroups");
- UltrasonicClasses = GetCollection<UltrasonicClass>("UltrasonicClasses");
- ReportTemplates = GetCollection<ReportTemplates>("ReportTemplates");
- CourseAvailabilityExtensions = GetCollection<CourseAvailabilityExtensions>("CourseAvailabilityExtensions");
- CustomLabels = GetCollection<CustomLabel>("CustomLabels");
- VideoCategories = GetCollection<VideoCategories>("VideoCategories");
- VideoSecoundCategories = GetCollection<VideoSecoundCategories>("VideoSecoundCategories");
- UserLinkVideos = GetCollection<UserLinkVideos>("UserLinkVideos");
- TeachingTerminalDatas = GetCollection<TeachingTerminalDatas>("TeachingTerminalDatas");
- Questionnaires = GetCollection<Questionnaires>("Questionnaires");
- ExamTemplates = GetCollection<ExamTemplates>("ExamTemplate");
- DistributionRecords = GetCollection<DistributionRecords>("DistributionRecords");
- AnswerSheets = GetCollection<AnswerSheets>("AnswerSheets");
- CloudFiles = GetCollection<CloudFiles>("CloudFiles");
- ReportInfoResultsInfo = GetCollection<ReportInfoResultsInfo>("ReportInfoResults");
- FollowUpVisitInfos = GetCollection<FollowUpVisitInfos>("FollowUpVisitInfos");
- TrainingBrowsedRecords = GetCollection<TrainingBrowsedRecords>("TrainingBrowsedRecords");
- PrinterDrives = GetCollection<PrinterDrives>("PrinterDrives");
- Patches = GetCollection<Patch>("Patches");
- Packages = GetCollection<Entities.Package>("Packages");
- }
- }
- internal class MongoDbClientSingle : Singleton<MongoDbClient>
- {
- private MongoDbClientSingle() { }
- }
- /// <summary>
- /// 统一单例构造类
- /// </summary>
- /// <typeparam name="T"></typeparam>
- public abstract class Singleton<T> where T : class, new()
- {
- /// <summary>
- /// 统一单例实例
- /// </summary>
- public static T Instance { get; set; } = new T();
- }
- }
|