123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523 |
- using Flyinsono.DBCopy.Tool.Entities.Config;
- using MongoDB.Bson.Serialization.Conventions;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using NPOI.Util.Collections;
- using System;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net.Http.Json;
- using System.Net.Mail;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using WingServerCommon.Config;
- using WingServerCommon.Config.Parameters;
- namespace Flyinsono.DBCopy.Tool.Utilities
- {
- internal class CommonConfigManager
- {
- /// <summary>
- /// 初始化读取数据
- /// </summary>
- static CommonConfigManager()
- {
- //GetCountryData();
- //LoadExportToExcelData();
- var jsonContent = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Config", "Config.json"));
- var testConfig = JsonConvert.DeserializeObject<TestConfig>(jsonContent);
- if (testConfig != null)
- {
- if (testConfig.FilterUsers?.Count > 0)
- {
- FilterUsers = testConfig.FilterUsers;
- }
- if (testConfig.FilterTerminals?.Count > 0)
- {
- FilterTerminals = testConfig.FilterTerminals;
- }
- if (testConfig.FilterOrganizations?.Count > 0)
- {
- FilterOrganizations = testConfig.FilterOrganizations;
- }
- if (testConfig.FilterLectureContests?.Count > 0)
- {
- FilterLectureContests = testConfig.FilterLectureContests;
- }
- if (testConfig.FilterExaminationPaper?.Count > 0)
- {
- FilterExaminationPaper = testConfig.FilterExaminationPaper;
- }
- if (testConfig.FilterCourses?.Count > 0)
- {
- FilterCourses = testConfig.FilterCourses;
- }
- if (testConfig.FilterPatients?.Count > 0)
- {
- FilterPatients = testConfig.FilterPatients;
- }
- if (testConfig.FilterGeneral != null)
- {
- FilterGeneral = testConfig.FilterGeneral;
- }
- if (testConfig.FilterReportPosters?.Count > 0)
- {
- FilterReportPosters = testConfig.FilterReportPosters;
- }
- if (testConfig.FilterPatientType?.Count > 0)
- {
- FilterPatientType = testConfig.FilterPatientType;
- }
- if (testConfig.FilterAgent?.Count > 0)
- {
- FilterAgent = testConfig.FilterAgent;
- }
- if (testConfig.MedicalConsortiums?.Count > 0)
- {
- MedicalConsortiums = testConfig.MedicalConsortiums;
- }
- if (testConfig.CorrectOrganizations?.Count > 0)
- {
- CorrectOrganizations = testConfig.CorrectOrganizations;
- }
- if (!string.IsNullOrEmpty(testConfig.FilterOrgCode))
- {
- FilterOrgCode = testConfig.FilterOrgCode;
- }
- if (!string.IsNullOrEmpty(testConfig.FilterAdminCode))
- {
- FilterAdminCode = testConfig.FilterAdminCode;
- }
- if (testConfig.IsNeedSpeicalUser)
- {
- IsNeedSpeicalUser = testConfig.IsNeedSpeicalUser;
- }
- if (testConfig.SpecialOrgCodes?.Count > 0)
- {
- SpecialOrgCodes = testConfig.SpecialOrgCodes;
- }
- if (testConfig.DeviceShortCodes?.Count > 0)
- {
- DeviceShortCodes = testConfig.DeviceShortCodes;
- }
- if (testConfig.UserDataDiff?.Count > 0)
- {
- UserDataDiff = testConfig.UserDataDiff;
- }
- if (testConfig.SpecicalDeviceCodes?.Count > 0)
- {
- SpecicalDeviceCodes = testConfig.SpecicalDeviceCodes;
- }
- if (testConfig.SpecicalUserDeviceCodes?.Count > 0)
- {
- SpecicalUserDeviceCodes = testConfig.SpecicalUserDeviceCodes;
- }
- }
- var appSettingContent = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Config", "AppSetting.json"));
- var appConfig = JsonConvert.DeserializeObject<AppSetting>(appSettingContent);
- if (appConfig != null)
- {
- if (appConfig.Database != null)
- {
- DatabaseInfo = appConfig.Database;
- }
- if (appConfig.MigrateRule != null)
- {
- MigrateRuleInfo = appConfig.MigrateRule;
- }
- if (appConfig.DirectServer != null)
- {
- DirectServer = appConfig.DirectServer;
- }
- if (appConfig.TerminalRecordSync != null)
- {
- TerminalRecordSync = appConfig.TerminalRecordSync;
- }
- if (appConfig.SignStudentRecordSync != null)
- {
- SignStudentRecordSync = appConfig.SignStudentRecordSync;
- }
- if (appConfig.ThirdPartyServer != null)
- {
- ThirdPartyServer = appConfig.ThirdPartyServer;
- }
- }
- var cacheConfig = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Config", "cacheSyn.json"));
- var cacheConfigData = JsonConvert.DeserializeObject<CacheSynData>(cacheConfig);
- if (cacheConfigData != null)
- {
- CacheSynDataInfo = cacheConfigData;
- }
- RemoveExpireCacheConfig();
- }
- private static void GetCountryData()
- {
- string folderPath = "F:\\USA"; // 将此处替换为要查询的文件夹路径
- var provinceList = new List<string>();
- try
- {
- string[] fileNames = Directory.GetFiles(folderPath);
- foreach (string fileName in fileNames)
- {
- //F:\USA\Alabama.xlsx
- var name = Path.GetFileNameWithoutExtension(fileName).Trim();
- provinceList.Add(name);
- }
- var provinceInfos = new List<ProvinceInfo>();
- foreach (var item in provinceList)
- {
- var path = System.IO.Path.Combine(folderPath, (item + ".xlsx"));
- ExcelHelper excelHelper = new ExcelHelper(path);
- var dataList = excelHelper.ReadExcelToList<CountryInfo>("Sheet1", true);
- var m = new ProvinceInfo()
- {
- province = item,
- citys = dataList.Where(c => !string.IsNullOrEmpty(c.County.Trim())).Select(c => c.County.Trim()).Distinct().ToList()
- };
- provinceInfos.Add(m);
- }
- var regionTable = new RegionTable()
- {
- lang = "en-US",
- datas = new List<RegionInfo>()
- {
- new RegionInfo()
- {
- c = "4000000",
- g = "0",
- f = "0",
- n = "USA"
- }
- }
- };
- for (int i = 1; i <= provinceInfos.Count; i++)
- {
- var tempInfo = provinceInfos[(i - 1)];
- var provinceIndex = 4000000 + (i * 10000);
- var pInfo = new RegionInfo()
- {
- c = provinceIndex.ToString(),
- g = "1",
- f = "4000000",
- n = tempInfo.province
- };
- regionTable.datas.Add(pInfo);
- for (int j = 1; j <= tempInfo.citys.Count; j++)
- {
- var cityInfo = tempInfo.citys[(j - 1)];
- var cityIndex = provinceIndex + j;
- var cInfo = new RegionInfo()
- {
- c = cityIndex.ToString(),
- g = "2",
- f = pInfo.c,
- n = cityInfo
- };
- regionTable.datas.Add(cInfo);
- }
- }
- var jsonContent = Newtonsoft.Json.JsonConvert.SerializeObject(regionTable);
- var writePath = System.IO.Path.Combine(folderPath, "regionTable.json");
- using (StreamWriter streamWriter = new StreamWriter(writePath, true))
- {
- streamWriter.WriteLine(jsonContent);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("发生错误:" + ex.Message);
- }
- }
- private static void LoadExportToExcelData()
- {
- var terminalRecordJson = File.ReadAllText("D:\\Project\\git\\wingsolutionMaster01\\WingCloudServer\\src\\bin\\Debug\\net6.0\\Resource\\Languge\\DefaultReportTemplateData.json", Encoding.UTF8);
- JObject json = JObject.Parse(terminalRecordJson);
-
- JArray array = (JArray)json["TermainalRecordInfos"];
- string aa = "";
- foreach (JToken jObject in array)
- {
- //赋值属性
- aa = jObject["_id"].ToString();//获取字符串中id值
- }
- var terminalRecordData = JsonConvert.DeserializeObject<TermainalRecordJson>(terminalRecordJson);
- foreach (var terminalRecord in terminalRecordData.TermainalRecordInfos)
- {
- if (terminalRecord.PatientInfo.Birthday != null)
- {
- var dateDiff = terminalRecord.CreateTime - terminalRecord.PatientInfo.Birthday.Value;
- terminalRecord.PatientInfo.Age = Convert.ToInt32(dateDiff.TotalDays / 365);
- }
- }
- var reportRecordJson = File.ReadAllText("F:\\360MoveData\\Users\\VINNO\\Desktop\\ReportRecord.json", Encoding.UTF8);
- var reportRecordData = JsonConvert.DeserializeObject<ReportRecordJson>(reportRecordJson);
- foreach (var reportRecordInfo in reportRecordData.ReportRecord)
- {
- reportRecordInfo.CreateTime = reportRecordInfo.CreateTime.AddHours(8);
- }
- List<ExportHNData> dataList = new List<ExportHNData>();
- foreach (var terminalRecord in terminalRecordData.TermainalRecordInfos)
- {
- var findReportInfo = reportRecordData.ReportRecord.FirstOrDefault(c => c.RecordId == terminalRecord._id) ?? new ReportRecordInfo();
- var checkTime = (findReportInfo.CreateTime > DateTime.MinValue) ? findReportInfo.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") : "";
- var diffTimeStr = "";
- if (!string.IsNullOrEmpty(checkTime))
- {
- var diffTime = findReportInfo.CreateTime - terminalRecord.CreateTime;
- TimeSpan ts = new TimeSpan(0, 0, Convert.ToInt32(diffTime.TotalSeconds));
- int _hours = 0;
- if (ts.Days > 0)
- {
- _hours = ts.Days * 24;
- }
- if (ts.Hours > 0)
- {
- diffTimeStr = (ts.Hours + _hours).ToString() + ":" + ts.Minutes + ":" + ts.Seconds;
- }
- if (ts.Hours == 0 && ts.Minutes > 0)
- {
- diffTimeStr = "0:";
- if (_hours > 0)
- {
- diffTimeStr = (ts.Hours + _hours).ToString() + ":";
- }
- diffTimeStr += ts.Minutes + ":" + ts.Seconds;
- }
- if (ts.Hours == 0 && ts.Minutes == 0)
- {
- diffTimeStr = "0:";
- if (_hours > 0)
- {
- diffTimeStr = (ts.Hours + _hours).ToString() + ":";
- }
- diffTimeStr += "0:" + ts.Seconds;
- }
- }
- var model = new ExportHNData()
- {
- 申请机构 = terminalRecord.Organization.Name,
- 检查编号 = terminalRecord._id,
- 患者姓名 = (string.IsNullOrEmpty(terminalRecord.PatientInfo.LastName) ? terminalRecord.PatientInfo.FirstName : terminalRecord.PatientInfo.LastName) ?? string.Empty,
- 年龄 = terminalRecord.PatientInfo.Age > 0 ? terminalRecord.PatientInfo.Age.ToString() : "",
- 检查时间 = terminalRecord.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
- 诊断时间 = checkTime,
- 时效性 = diffTimeStr,
- 诊断机构 = terminalRecord.Organization.Name
- };
- dataList.Add(model);
- }
- var headList = new List<string>() { "申请机构", "检查编号", "患者姓名", "年龄", "检查时间", "诊断时间", "时效性", "诊断机构" };
- var path = "F:\\360MoveData\\Users\\VINNO\\Desktop\\Statistic.xlsx";
- ExcelHelper excelHelper = new ExcelHelper(path);
- var count = excelHelper.ListToExcel<ExportHNData>(dataList, "超声", true);
- }
- /// <summary>
- /// 移除过期的缓存
- /// </summary>
- private static void RemoveExpireCacheConfig()
- {
- Task.Run(async () =>
- {
- while (true)
- {
- try
- {
- var curTime = DateTime.UtcNow;
- foreach (var key in CacheSynDataInfo.CacheDic.Keys) {
- if (CacheSynDataInfo.CacheDic[key]?.Count > 0)
- {
- //var expiredData = curData.Where(c => c.CacheTime > curTime)?.ToList() ?? new List<CacheBasicInfo>();
- var keys = new List<string>();
- foreach (var keyItem in CacheSynDataInfo.CacheDic[key].Keys)
- {
- CacheSynDataInfo.CacheDic[key].TryGetValue(keyItem, out DateTime val);
- if (val.AddMinutes(CommonConfigManager.MigrateRuleInfo.StartTimeDiffMintues) < curTime)
- {
- //待移除key
- keys.Add(keyItem);
- }
- }
- //CacheSynDataInfo.CacheDic[key] = newData;
- if (keys?.Count > 0)
- {
- foreach (var item in keys)
- {
- CacheSynDataInfo.CacheDic[key].TryRemove(item, out _);
- }
- }
- }
- }
- await Task.Delay(2000 * 60);
- }
- catch (Exception ex)
- {
- Logger.WriteLineError($"ListenStorageError:{ex}");
- }
- }
- });
- }
- /// <summary>
- /// 过滤用户
- /// </summary>
- public static IList<FilterUsersConfig> FilterUsers { get; set; }
- /// <summary>
- /// 过滤超声机
- /// </summary>
- public static IList<string> FilterTerminals { get; set; }
- /// <summary>
- /// 过滤机构
- /// </summary>
- public static IList<string> FilterOrganizations { get; set; }
- /// <summary>
- /// 过滤指定的测试讲课比赛
- /// </summary>
- public static IList<string> FilterLectureContests { get; set; }
- /// <summary>
- /// 过滤指定的测试考试
- /// </summary>
- public static IList<string> FilterExaminationPaper { get; set; }
- /// <summary>
- /// 过滤指定的测试课程
- /// </summary>
- public static IList<string> FilterCourses { get; set; }
- /// <summary>
- /// 过滤指定的测试病人
- /// </summary>
- public static IList<string> FilterPatients { get; set; }
- /// <summary>
- /// 清理工具基础配置
- /// </summary>
- public static FilterGeneralConfig FilterGeneral { get; set; }
- /// <summary>
- /// 过滤指定的测试推送报告
- /// </summary>
- public static IList<string> FilterReportPosters { get; set; }
- /// <summary>
- /// 过滤指定的病人类型
- /// </summary>
- public static IList<string> FilterPatientType { get; set; }
- /// <summary>
- /// 配置默认服务地址,本地
- /// </summary>
- public static bool IsLocalHost { get; set; } = true;
- /// <summary>
- /// 配置默认服务地址,本地
- /// </summary>
- public static MigrateRuleEntity MigrateRuleInfo { get; set; }
- /// <summary>
- /// 目标服务
- /// </summary>
- public static DirectServerEntity DirectServer { get; set; }
- /// <summary>
- /// 配置默认服务地址,本地
- /// </summary>
- public static DatabaseEntity DatabaseInfo { get; set; }
- /// <summary>
- /// 病例同步配置
- /// </summary>
- public static TerminalRecordSyncSetting TerminalRecordSync { get; set; }
- /// <summary>
- /// 病例同步配置
- /// </summary>
- public static TerminalRecordSyncSetting SignStudentRecordSync { get; set; }
- /// <summary>
- /// 过滤指定的代理商
- /// </summary>
- public static IList<string> FilterAgent { get; set; }
- /// <summary>
- /// 医联体关键字
- /// </summary>
- public static IList<MedicalConsortium> MedicalConsortiums { get; set; } = new List<MedicalConsortium>();
- /// <summary>
- /// 校准后医院
- /// </summary>
- public static IList<CorrectOrganization> CorrectOrganizations { get; set; } = new List<CorrectOrganization>();
- /// <summary>
- /// 过滤机构
- /// </summary>
- public static string FilterOrgCode { get; set; }
- /// <summary>
- /// 过滤Admin Code
- /// </summary>
- public static string FilterAdminCode { get; set; }
- /// <summary>
- /// 设备短码列表
- /// </summary>
- public static IList<string> DeviceShortCodes { get; set; } = new List<string>();
- /// <summary>
- /// 特殊处理机构
- /// </summary>
- public static IList<string> SpecialOrgCodes { get; set; }
- /// <summary>
- /// 是否特殊处理用户
- /// </summary>
- public static bool IsNeedSpeicalUser { get; set; }
- /// <summary>
- /// 第三方服务
- /// </summary>
- public static ThirdPartyServer ThirdPartyServer { get; set; }
- /// <summary>
- /// 差异用户数据
- /// </summary>
- public static IList<string> UserDataDiff { get; set; } = new List<string>();
- /// <summary>
- /// 缓存数据
- /// </summary>
- public static CacheSynData CacheSynDataInfo { get; set; } = new CacheSynData();
- /// <summary>
- /// 特殊就设备短码
- /// </summary>
- public static IList<string> SpecicalDeviceCodes { get; set; } = new List<string>();
- /// <summary>
- /// 特殊用户关联设备短码
- /// </summary>
- public static IList<string> SpecicalUserDeviceCodes { get; set; } = new List<string>();
- }
- }
|