using HL_FristAidPlatform_Help; using HL_FristAidPlatform_IDataBase; using HL_FristAidPlatform_Models; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HL_FristAidPlatform_DataBase { /// /// 大屏数据统计 /// public class MassiveDataStatisticsDB : BaseDB, IMassiveDataStatistics { public SqlSugarClient db = GetClient(); #region 胸痛大屏数据展示查询 /// /// 来院方式统计--胸痛大屏数据 /// /// /// public List GetChestPainToHospitalWay(string hosptialGuid) { List list = new List(); List lst = new List(); lst = db.Queryable((a, b) => a.GUID == b.PatientGuid) .Where((a, b) => a.HospitalGuid == hosptialGuid && a.SystemModuleID == 2 && a.DeleteFlag == 0) .Select((a, b) => new MassiveDataStatisticsModel() { name = b.CW_Coming_Way_Code }).ToList(); MassiveDataStatisticsModel m1 = new MassiveDataStatisticsModel(); m1.name = "120来院"; MassiveDataStatisticsModel m2 = new MassiveDataStatisticsModel(); m2.name = "转院"; MassiveDataStatisticsModel m3 = new MassiveDataStatisticsModel(); m3.name = "自行来院"; MassiveDataStatisticsModel m4 = new MassiveDataStatisticsModel(); m4.name = "院内发病"; //CW_Coming_Way_Code 1:呼叫(120或其他)出车 2:转院(包含任何机构) 3:自行来院 4:院内发病 if (lst.Count > 0) { m1.value = lst.Where(i => i.name == "1").Count(); m2.value = lst.Where(i => i.name == "2").Count(); m3.value = lst.Where(i => i.name == "3").Count(); m4.value = lst.Where(i => i.name == "4").Count(); } list.Add(m1); list.Add(m2); list.Add(m3); list.Add(m4); return list; } /// /// 胸痛单元数据统计--胸痛大屏数据 /// /// /// public List GetChestPainToNetworkHospital(string hosptialGuid) { List list = new List(); //网络医院 List Networklist = new List(); //救治单元 List Unitlist = new List(); var highlist = db.Queryable().Where(it => it.GUID == hosptialGuid).Select(it => it.Name).First(); var temphighlist = db.Queryable().Where(it => it.ParentGUID == hosptialGuid).Select(it => it.Name).ToList(); var templist = db.Queryable((a, b) => a.GUID == b.PatientGuid) .Where((a, b) => a.HospitalGuid == hosptialGuid && a.SystemModuleID == 2 && a.DeleteFlag == 0 && b.CW_ZY_Trans_Type == "1" || b.CW_ZY_Trans_Type == "2") .GroupBy((a, b) => b.CW_ZY_Trans_Hospital_Name) .Select((a, b) => new MassiveDataStatisticsHospitalModel() { lowname = b.CW_ZY_Trans_Hospital_Name, highname = "", value = SqlFunc.AggregateCount(b.CW_ZY_Trans_Hospital_Name) }).ToList(); for (int i = 0; i < temphighlist.Count(); i++) { MassiveDataStatisticsHospitalModel model = new MassiveDataStatisticsHospitalModel(); model.highname = highlist; model.lowname = temphighlist[i]; model.value = 0; foreach (var item in templist) { if (!string.IsNullOrEmpty(item.lowname)) { if (temphighlist[i] == item.lowname) { model.value = item.value; //var copyTempList = templist.Remove(item); } } } Unitlist.Add(model); } foreach (var item in Unitlist) { list.Add(item); } foreach (var item in templist) { if (!string.IsNullOrEmpty(item.lowname)) { item.highname = highlist; list.Add(item); } } return list; } /// /// 绕行统计 /// /// /// public List GetChestPainDetour(string hosptialGuid) { List list = new List(); List lst = new List(); lst = db.Queryable().Where(i => i.HospitalGuid == hosptialGuid && i.SystemModuleID == 2 && i.DeleteFlag == 0).ToList(); /// 1:未绕行 2:单绕 3:双绕 4:三绕 MassiveDataStatisticsModel m1 = new MassiveDataStatisticsModel(); m1.name = "未绕行"; MassiveDataStatisticsModel m2 = new MassiveDataStatisticsModel(); m2.name = "单绕"; MassiveDataStatisticsModel m3 = new MassiveDataStatisticsModel(); m3.name = "双绕"; MassiveDataStatisticsModel m4 = new MassiveDataStatisticsModel(); m4.name = "三绕"; if (lst.Count > 0) { m1.value = lst.Where(i => i.IsGreenChannel == 1).Count(); m2.value = lst.Where(i => i.IsGreenChannel == 2).Count(); m3.value = lst.Where(i => i.IsGreenChannel == 3).Count(); m4.value = lst.Where(i => i.IsGreenChannel == 4).Count(); } list.Add(m1); list.Add(m2); list.Add(m3); list.Add(m4); return list; } /// /// 人群分布统计-性别,年龄 /// /// /// public PopulationDistributionModel GetPopulationDistribution(string hosptialGuid) { List lst = new List(); lst = db.Queryable().Where(i => i.HospitalGuid == hosptialGuid && i.SystemModuleID == 2 && i.DeleteFlag == 0).ToList(); PopulationDistributionModel population = new PopulationDistributionModel(); if (lst.Count > 0) { int i = lst.Where(i => i.Gender == 1).Count(); int j = lst.Where(i => i.Gender == 2).Count(); if ((i + j) > 0) { double temp1 = i / ((double)i + (double)j); population.manProprtion = temp1.ToString("#0.00"); double temp2 = 1 - temp1; population.womanProprtion = temp2.ToString("#0.00"); } population.data = new List(); MassiveDataStatisticsModel m1 = new MassiveDataStatisticsModel(); m1.name = "50岁以下"; m1.value = lst.Where(x => x.Age < 50 && x.Age >= 0).Count(); population.data.Add(m1); MassiveDataStatisticsModel m2 = new MassiveDataStatisticsModel(); m2.name = "50-60岁"; m2.value = lst.Where(x => x.Age >= 50 && x.Age < 60).Count(); population.data.Add(m2); MassiveDataStatisticsModel m3 = new MassiveDataStatisticsModel(); m3.name = "60-70岁"; m3.value = lst.Where(x => x.Age >= 60 && x.Age < 70).Count(); population.data.Add(m3); MassiveDataStatisticsModel m4 = new MassiveDataStatisticsModel(); m4.name = "70-80岁"; m4.value = lst.Where(x => x.Age >= 70 && x.Age < 80).Count(); population.data.Add(m4); MassiveDataStatisticsModel m5 = new MassiveDataStatisticsModel(); m5.name = "80-90岁"; m5.value = lst.Where(x => x.Age >= 80 && x.Age < 90).Count(); population.data.Add(m5); MassiveDataStatisticsModel m6 = new MassiveDataStatisticsModel(); m6.name = "90岁以上"; m5.value = lst.Where(x => x.Age >= 90).Count(); population.data.Add(m6); } return population; } /// /// 病例个数统计 /// /// /// public List GetChestPainDataStatistics(string hosptialGuid) { List list = new List(); List lst = new List(); lst = db.Queryable().Where(i => i.HospitalGuid == hosptialGuid && i.SystemModuleID == 2 && i.DeleteFlag == 0).ToList(); MassiveDataStatisticsModel m1 = new MassiveDataStatisticsModel(); m1.name = "今日新增"; MassiveDataStatisticsModel m2 = new MassiveDataStatisticsModel(); m2.name = "本周新增"; MassiveDataStatisticsModel m3 = new MassiveDataStatisticsModel(); m3.name = "本月新增"; MassiveDataStatisticsModel m4 = new MassiveDataStatisticsModel(); m4.name = "本季新增"; MassiveDataStatisticsModel m5 = new MassiveDataStatisticsModel(); m5.name = "本年新增"; MassiveDataStatisticsModel m6 = new MassiveDataStatisticsModel(); m6.name = "累计新增"; if (lst.Count > 0) { DateTime dt = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")); m1.value = lst.Where(i => i.CreationDate >= dt && i.CreationDate < dt.AddDays(1)).Count(); DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d"))); DateTime endWeek = startWeek.AddDays(6); m2.value = lst.Where(i => i.CreationDate >= startWeek && i.CreationDate <= endWeek).Count(); DateTime startMonth = dt.AddDays(1 - dt.Day); DateTime endMonth = startMonth.AddMonths(1).AddDays(-1); m3.value = lst.Where(i => i.CreationDate >= startMonth && i.CreationDate <= endMonth).Count(); DateTime startQuarter = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day); DateTime endQuarter = startQuarter.AddMonths(3).AddDays(-1); m4.value = lst.Where(i => i.CreationDate >= startQuarter && i.CreationDate <= endQuarter).Count(); DateTime startYear = new DateTime(dt.Year, 1, 1); DateTime endYear = new DateTime(dt.Year, 12, 31); m5.value = lst.Where(i => i.CreationDate >= startYear && i.CreationDate <= endYear).Count(); m6.value = lst.Count(); } list.Add(m1); list.Add(m2); list.Add(m3); list.Add(m4); list.Add(m5); list.Add(m6); return list; } /// /// 随访统计 /// /// /// public List GetFollowUpStatostocs(string hosptialGuid) { List list = new List(); List lst = new List(); lst = db.Queryable((a, b) => a.GUID == b.registerId).Where((a, b) => a.HospitalGuid == hosptialGuid && a.SystemModuleID == 2 && a.DeleteFlag == 0).Select((a, b) => new MassiveDataStatisticsModel() { name = b.month, value = b.isFollowUp == "1" ? 1 : 0 }).ToList(); ChesPainFollowUpStatostocsModel m1 = new ChesPainFollowUpStatostocsModel(); m1.name = "已随访"; m1.data = new List(); Data d1 = new Data(); d1.value = lst.Where(i => i.name == "1" && i.value == 1).Count(); m1.data.Add(d1); Data d3 = new Data(); d3.value = lst.Where(i => i.name == "3" && i.value == 1).Count(); m1.data.Add(d3); Data d6 = new Data(); d6.value = lst.Where(i => i.name == "6" && i.value == 1).Count(); m1.data.Add(d6); Data d12 = new Data(); d12.value = lst.Where(i => i.name == "12" && i.value == 1).Count(); m1.data.Add(d12); ChesPainFollowUpStatostocsModel m2 = new ChesPainFollowUpStatostocsModel(); m2.name = "未随访"; m2.data = new List(); Data t1 = new Data(); t1.value = lst.Where(i => i.name == "1" && i.value != 1).Count(); m2.data.Add(t1); Data t3 = new Data(); t3.value = lst.Where(i => i.name == "3" && i.value != 1).Count(); m2.data.Add(t3); Data t6 = new Data(); t6.value = lst.Where(i => i.name == "6" && i.value != 1).Count(); m2.data.Add(t6); Data t12 = new Data(); t12.value = lst.Where(i => i.name == "12" && i.value != 1).Count(); m2.data.Add(t12); list.Add(m1); list.Add(m2); return list; } /// /// (胸痛/卒中)地图数据 /// /// 医院GUID /// 2胸痛 3卒中 /// 1 省级地图数据 2 市级地图数据 /// 区域上级 /// 所有区域名称逗号分隔 /// public List GetChestPainMapDistributionData(string hosptialGuid, int systemModuleID, int type, string name1, string name2) { List list = new List(); List lst = new List(); string _name1 = ""; string _name2 = ""; string[] str = null; string[] str1 = null; if (type == 1) { if (name1.Contains("省")) _name1 = name1.Replace("省", ""); if (name1.Contains("自治区")) _name1 = name1.Replace("自治区", ""); if (!string.IsNullOrEmpty(name2)) { str = name2.Split(","); if (str.Length > 0) { str1 = new string[str.Length]; for (int i = 0; i < str.Length; i++) { if (str[i].Contains("市")) _name2 = str[i].Replace("市", ""); if (str[i].Contains("自治区")) _name2 = str[i].Replace("自治区", ""); if (str[i].Contains("自治州")) _name2 = str[i].Replace("自治州", ""); if (str[i].Contains("地区")) _name2 = str[i].Replace("地区", ""); if (str[i].Contains("地区")) _name2 = str[i].Replace("地区", ""); str1[i] = _name2; } } } lst = db.Queryable() .Where(i => i.HospitalGuid == hosptialGuid && i.SystemModuleID == systemModuleID && i.DeleteFlag == 0) .Where(i => i.Province.Contains(_name1)) .Select(i => new AttackAddressModel { Address = i.City, CreationDate = i.CreationDate }) .ToList(); } if (type == 2) { if (name1.Contains("市")) _name1 = name1.Replace("市", ""); if (!string.IsNullOrEmpty(name2)) { str = name2.Split(","); if (str.Length > 0) { str1 = new string[str.Length]; for (int i = 0; i < str.Length; i++) { if (str[i].Contains("区")) _name2 = str[i].Replace("区", ""); if (str[i].Contains("市")) _name2 = str[i].Replace("市", ""); if (str[i].Contains("县")) _name2 = str[i].Replace("县", ""); str1[i] = _name2; } } lst = db.Queryable() .Where(i => i.HospitalGuid == hosptialGuid && i.SystemModuleID == systemModuleID && i.DeleteFlag == 0) .Where(i => i.City.Contains(_name1)) .Select(i => new AttackAddressModel { Address = i.Area, CreationDate = i.CreationDate }) .ToList(); } } if (type == 3) { if (name1.Contains("市")) _name1 = name1.Replace("市", ""); if (name1.Contains("区")) _name1 = name1.Replace("区", ""); if (name1.Contains("区")) _name1 = name1.Replace("区", ""); if (!string.IsNullOrEmpty(name1)) { str = name1.Split(","); if (str.Length > 0) { str1 = new string[str.Length]; for (int i = 0; i < str.Length; i++) { if (str[i].Contains("区")) _name2 = str[i].Replace("区", ""); if (str[i].Contains("市")) _name2 = str[i].Replace("市", ""); if (str[i].Contains("县")) _name2 = str[i].Replace("县", ""); str1[i] = _name2; } } lst = db.Queryable() .Where(i => i.HospitalGuid == hosptialGuid && i.SystemModuleID == systemModuleID && i.DeleteFlag == 0) .Where(i => i.Area.Contains(_name1)) .Select(i => new AttackAddressModel { Address = i.Area, CreationDate = i.CreationDate }) .ToList(); } } if (str.Length > 0) { for (int i = 0; i < str.Length; i++) { MapDistributionDataModel model = new MapDistributionDataModel(); model.name = str[i].ToString(); string dt = DateTime.Now.ToString("yyyy-MM-dd"); model.value = lst.Where(j => j.CreationDate >= Convert.ToDateTime(dt) && j.CreationDate < Convert.ToDateTime(dt).AddDays(1) && j.Address == str1[i]).Count(); model.total = lst.Where(j => j.Address == str1[i]).Count(); list.Add(model); } } return list; } #endregion #region 卒中大屏数据展示查询 /// /// 来院方式统计--卒中大屏数据 /// /// /// public List GetApoplexyPainToHospitalWay(string hosptialGuid) { List list = new List(); List lst = new List(); lst = db.Queryable((a, b) => a.GUID == b.PatientGuid) .Where((a, b) => a.HospitalGuid == hosptialGuid && a.SystemModuleID == 3 && a.DeleteFlag == 0) .Select((a, b) => new MassiveDataStatisticsModel() { name = b.BCLyType }).ToList(); MassiveDataStatisticsModel m1 = new MassiveDataStatisticsModel(); m1.name = "当地120"; MassiveDataStatisticsModel m2 = new MassiveDataStatisticsModel(); m2.name = "自行来院"; MassiveDataStatisticsModel m3 = new MassiveDataStatisticsModel(); m3.name = "外院转院"; MassiveDataStatisticsModel m4 = new MassiveDataStatisticsModel(); m4.name = "本院急救车"; //MassiveDataStatisticsModel m5 = new MassiveDataStatisticsModel(); if (lst.Count > 0) { //BCLyType :1.本院急救车 2.当地 120 3.外院转院 4.自行来院 5:院内发病 m1.value = lst.Where(i => i.name == "1").Count(); m2.value = lst.Where(i => i.name == "2").Count(); m3.value = lst.Where(i => i.name == "3").Count(); m4.value = lst.Where(i => i.name == "4").Count(); } list.Add(m1); list.Add(m2); list.Add(m3); list.Add(m4); return list; } /// /// 治疗类型统计--卒中大屏数据 /// /// /// public List GetApoplexyPainACZLType(string hosptialGuid) { List list = new List(); List lst = new List(); lst = db.Queryable().Where(i => i.HospitalGuid == hosptialGuid && i.SystemModuleID == 3 && i.DeleteFlag == 0).ToList(); MassiveDataStatisticsModel m1 = new MassiveDataStatisticsModel(); m1.name = "静脉溶栓"; MassiveDataStatisticsModel m2 = new MassiveDataStatisticsModel(); m2.name = "血管内介入治疗"; MassiveDataStatisticsModel m3 = new MassiveDataStatisticsModel(); m3.name = "脑出血"; MassiveDataStatisticsModel m4 = new MassiveDataStatisticsModel(); m4.name = "颅内动脉瘤"; MassiveDataStatisticsModel m5 = new MassiveDataStatisticsModel(); m5.name = "CEA/CAS"; if (lst.Count > 0) { // 01.静脉溶栓 02.血管内介入治疗 03.脑出血 04.颅内动脉瘤05.CEA/CAS m1.value = lst.Where(i => i.acZLType != "" && i.acZLType != null && i.acZLType.Contains("01")).Count(); m2.value = lst.Where(i => i.acZLType != "" && i.acZLType != null && i.acZLType.Contains("02")).Count(); m3.value = lst.Where(i => i.acZLType != "" && i.acZLType != null && i.acZLType.Contains("03")).Count(); m4.value = lst.Where(i => i.acZLType != "" && i.acZLType != null && i.acZLType.Contains("04")).Count(); m5.value = lst.Where(i => i.acZLType != "" && i.acZLType != null && i.acZLType.Contains("05")).Count(); } list.Add(m1); list.Add(m2); list.Add(m3); list.Add(m4); list.Add(m5); return list; } /// /// DNT中位数统计--卒中大屏数据 /// /// /// public List GetApoplexyPainDNTMedian(string hosptialGuid) { List list = new List(); List lst = new List(); lst = db.Queryable ((a, b, c) => new JoinQueryInfos(JoinType.Inner, a.GUID == b.PatientGuid, JoinType.Inner, a.GUID == c.PatientGuid)) .Where((a, b, c) => a.HospitalGuid == hosptialGuid && a.SystemModuleID == 3 && a.DeleteFlag == 0 && !SqlFunc.IsNullOrEmpty(c.NGSJZDaoYuanTime) && !SqlFunc.IsNullOrEmpty(b.RSDNT)) .Select((a, b, c) => new ThrombolysisMedianModel() { Value = int.Parse(b.RSDNT) }).ToList(); if (lst.Count > 0) { List rsdnt1 = new List(); for (int i = 0; i < lst.Count; i++) { MassiveDataStatisticsModel m = new MassiveDataStatisticsModel(); if (lst[i].Value < 90) { m.value = lst[i].Value; rsdnt1.Add(m); } } List rsdnt2 = new List(); for (int i = 0; i < lst.Count; i++) { MassiveDataStatisticsModel m = new MassiveDataStatisticsModel(); if (lst[i].Value >= 90 && lst[i].Value < 180) { m.value = lst[i].Value; rsdnt2.Add(m); } } List rsdnt3 = new List(); for (int i = 0; i < lst.Count; i++) { MassiveDataStatisticsModel m = new MassiveDataStatisticsModel(); if (lst[i].Value > 180) { m.value = lst[i].Value; rsdnt3.Add(m); } } if (rsdnt1.Count > 0) { MassiveDataStatisticsModel t1 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel t2 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel model = new MassiveDataStatisticsModel(); if (rsdnt1.Count % 2 == 0) { int k1 = rsdnt1.Count() / 2; int k2 = k1 + 1; t1 = rsdnt1.SkipWhile((n, index) => index == k1).First(); t2 = rsdnt1.SkipWhile((n, index) => index == k2).First(); int sum = t1.value + t2.value; model.value = sum / 2; } else { int k = (rsdnt1.Count - 1) / 2 + 1; t1 = rsdnt1.SkipWhile((n, index) => index == k).First(); model.value = t1.value; } model.name = "<90分钟"; list.Add(model); } if (rsdnt2.Count > 0) { MassiveDataStatisticsModel t1 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel t2 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel model = new MassiveDataStatisticsModel(); if (rsdnt2.Count % 2 == 0) { int k1 = rsdnt2.Count() / 2; int k2 = k1 + 1; t1 = rsdnt2.SkipWhile((n, index) => index == k1).First(); t2 = rsdnt2.SkipWhile((n, index) => index == k2).First(); int sum = t1.value + t2.value; model.value = sum / 2; } else { int k = (rsdnt2.Count - 1) / 2 + 1; t1 = rsdnt2.SkipWhile((n, index) => index == k).First(); model.value = t1.value; } model.name = "90~180分钟"; list.Add(model); } if (rsdnt3.Count > 0) { MassiveDataStatisticsModel t1 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel t2 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel model = new MassiveDataStatisticsModel(); if (rsdnt3.Count % 2 == 0) { int k1 = rsdnt3.Count() / 2; int k2 = k1 + 1; t1 = rsdnt3.SkipWhile((n, index) => index == k1).First(); t2 = rsdnt3.SkipWhile((n, index) => index == k2).First(); int sum = t1.value + t2.value; model.value = sum / 2; } else { int k = (rsdnt3.Count - 1) / 2 + 1; t1 = rsdnt3.SkipWhile((n, index) => index == k).First(); model.value = t1.value; } model.name = ">180分钟"; list.Add(model); } } return list; } /// /// DPT中位数统计--卒中大屏数据 /// /// /// public List GetApoplexyPainDPTMedian(string hosptialGuid) { List list = new List(); List lst = new List(); lst = db.Queryable ((a, b) => new JoinQueryInfos(JoinType.Inner, a.GUID == b.PatientGuid)) .Where((a, b) => a.HospitalGuid == hosptialGuid && a.SystemModuleID == 3 && a.DeleteFlag == 0 && !SqlFunc.IsNullOrEmpty(b.XGDPT) && b.XGDPT != "不详") .Select((a, b) => new ThrombolysisMedianModel() { Value = Convert.ToInt32(b.XGDPT) }).ToList(); if (lst.Count > 0) { List rsdnt1 = new List(); for (int i = 0; i < lst.Count; i++) { MassiveDataStatisticsModel m = new MassiveDataStatisticsModel(); if (lst[i].Value < 90) { m.value = lst[i].Value; rsdnt1.Add(m); } } List rsdnt2 = new List(); for (int i = 0; i < lst.Count; i++) { MassiveDataStatisticsModel m = new MassiveDataStatisticsModel(); if (lst[i].Value >= 90 && lst[i].Value < 180) { m.value = lst[i].Value; rsdnt2.Add(m); } } List rsdnt3 = new List(); for (int i = 0; i < lst.Count; i++) { MassiveDataStatisticsModel m = new MassiveDataStatisticsModel(); if (lst[i].Value > 180) { m.value = lst[i].Value; rsdnt3.Add(m); } } if (rsdnt1.Count > 0) { MassiveDataStatisticsModel t1 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel t2 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel model = new MassiveDataStatisticsModel(); if (rsdnt1.Count % 2 == 0) { int k1 = rsdnt1.Count() / 2; int k2 = k1 + 1; t1 = rsdnt1.SkipWhile((n, index) => index == k1).First(); t2 = rsdnt1.SkipWhile((n, index) => index == k2).First(); int sum = t1.value + t2.value; model.value = sum / 2; } else { int k = (rsdnt1.Count - 1) / 2 + 1; t1 = rsdnt1.SkipWhile((n, index) => index == k).First(); model.value = t1.value; } model.name = "<90分钟"; list.Add(model); } if (rsdnt2.Count > 0) { MassiveDataStatisticsModel t1 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel t2 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel model = new MassiveDataStatisticsModel(); if (rsdnt2.Count % 2 == 0) { int k1 = rsdnt2.Count() / 2; int k2 = k1 + 1; t1 = rsdnt2.SkipWhile((n, index) => index == k1).First(); t2 = rsdnt2.SkipWhile((n, index) => index == k2).First(); int sum = t1.value + t2.value; model.value = sum / 2; } else { int k = (rsdnt2.Count - 1) / 2 + 1; t1 = rsdnt2.SkipWhile((n, index) => index == k).First(); model.value = t1.value; } model.name = "90~180分钟"; list.Add(model); } if (rsdnt3.Count > 0) { MassiveDataStatisticsModel t1 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel t2 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel model = new MassiveDataStatisticsModel(); if (rsdnt3.Count % 2 == 0) { int k1 = rsdnt3.Count() / 2; int k2 = k1 + 1; t1 = rsdnt3.SkipWhile((n, index) => index == k1).First(); t2 = rsdnt3.SkipWhile((n, index) => index == k2).First(); int sum = t1.value + t2.value; model.value = sum / 2; } else { int k = (rsdnt3.Count - 1) / 2 + 1; t1 = rsdnt3.SkipWhile((n, index) => index == k).First(); model.value = t1.value; } model.name = ">180分钟"; list.Add(model); } } return list; } /// /// 病例个数统计--卒中大屏数据 /// /// /// public List GetApoplexyDataStatistics(string hosptialGuid) { List list = new List(); List lst = new List(); lst = db.Queryable().Where(i => i.HospitalGuid == hosptialGuid && i.SystemModuleID == 3 && i.DeleteFlag == 0).ToList(); MassiveDataStatisticsModel m1 = new MassiveDataStatisticsModel(); m1.name = "今日新增"; MassiveDataStatisticsModel m2 = new MassiveDataStatisticsModel(); m2.name = "本周新增"; MassiveDataStatisticsModel m3 = new MassiveDataStatisticsModel(); m3.name = "本月新增"; MassiveDataStatisticsModel m4 = new MassiveDataStatisticsModel(); m4.name = "本季新增"; MassiveDataStatisticsModel m5 = new MassiveDataStatisticsModel(); m5.name = "本年新增"; MassiveDataStatisticsModel m6 = new MassiveDataStatisticsModel(); m6.name = "累计新增"; if (lst.Count > 0) { DateTime dt = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")); m1.value = lst.Where(i => i.CreationDate >= dt && i.CreationDate <= dt.AddDays(1)).Count(); DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d"))); DateTime endWeek = startWeek.AddDays(6); m2.value = lst.Where(i => i.CreationDate >= startWeek && i.CreationDate <= endWeek).Count(); DateTime startMonth = dt.AddDays(1 - dt.Day); DateTime endMonth = startMonth.AddMonths(1).AddDays(-1); m3.value = lst.Where(i => i.CreationDate >= startMonth && i.CreationDate <= endMonth).Count(); DateTime startQuarter = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day); DateTime endQuarter = startQuarter.AddMonths(3).AddDays(-1); m4.value = lst.Where(i => i.CreationDate >= startQuarter && i.CreationDate <= endQuarter).Count(); DateTime startYear = new DateTime(dt.Year, 1, 1); DateTime endYear = new DateTime(dt.Year, 12, 31); m5.value = lst.Where(i => i.CreationDate >= startYear && i.CreationDate <= endYear).Count(); m6.value = lst.Count(); } list.Add(m1); list.Add(m2); list.Add(m3); list.Add(m4); list.Add(m5); list.Add(m6); return list; } /// /// 发病到入院统计--卒中大屏数据 /// /// /// public List GetApoplexySymptomToBalloon(string hosptialGuid) { List list = new List(); MassiveDataStatisticsModel model1 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel model2 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel model3 = new MassiveDataStatisticsModel(); List lst = new List(); //急性脑梗死发病时间: NGSJZFaBingTime // 脑出血患者发病时间:NCXJZFaBingTime lst = db.Queryable((a, b) => a.GUID == b.PatientGuid) .Where((a, b) => a.HospitalGuid == hosptialGuid && a.SystemModuleID == 3 && a.DeleteFlag == 0) .Select((a, b) => new TimeModel() { FaBingTime = b.NGSJZFaBingTime == "" ? b.NCXJZFaBingTime : b.NGSJZFaBingTime, DaoYuanTime = b.NGSJZDaoYuanTime == "" ? b.NCXJZDaoYuanTime : b.NGSJZDaoYuanTime }).ToList(); model1.name = "<4.5小时"; model2.name = "4.5~6小时"; model3.name = ">8小时"; if (lst.Count > 0) { List m1 = new List(); List m2 = new List(); List m3 = new List(); for (int i = 0; i < lst.Count; i++) { if (!string.IsNullOrEmpty(lst[i].FaBingTime) && !string.IsNullOrEmpty(lst[i].DaoYuanTime)) { long minutes = GetHours(lst[i].FaBingTime, lst[i].DaoYuanTime); if (minutes < 4.5) { m1.Add(1); } if (minutes >= 90 && minutes < 180) { m2.Add(2); } if (minutes >= 8) { m3.Add(3); } } } model1.value = m1.Count; model2.value = m2.Count; model3.value = m3.Count; //if (m1.Count > 0) //model1.value = (m1.Count * 100 / lst.Count).ToString("#0.00"); //if (m2.Count > 0) //model2.value = (m2.Count * 100 / lst.Count).ToString("#0.00"); // if (m3.Count > 0) //model3.value = (m3.Count * 100 / lst.Count).ToString("#0.00"); } list.Add(model1); list.Add(model2); list.Add(model3); return list; } /// /// 计算小时差 /// /// /// /// public long GetHours(string date1, string date2) { DateTime d1 = Convert.ToDateTime(date1); DateTime d2 = Convert.ToDateTime(date2); TimeSpan d3 = d2.Subtract(d1); long diff = d3.Milliseconds; long diffHours = diff / (60 * 60 * 1000) % 24; return diffHours; } public class TimeModel { /// /// 发病时间 /// public string FaBingTime { get; set; } public string DaoYuanTime { get; set; } public string Minutes { get; set; } } /// /// 人群分布统计-性别,年龄 /// /// /// public PopulationDistributionModel GetApoplexyPopulationDistribution(string hosptialGuid) { List lst = new List(); lst = db.Queryable().Where(i => i.HospitalGuid == hosptialGuid && i.SystemModuleID == 3 && i.DeleteFlag == 0).ToList(); PopulationDistributionModel population = new PopulationDistributionModel(); if (lst.Count > 0) { int i = lst.Where(x => x.Gender == 1).Count(); int j = lst.Where(x => x.Gender == 2).Count(); if ((i + j) > 0) { double temp1 = i / ((double)i + (double)j); population.manProprtion = temp1.ToString("#0.00"); double temp2 = 1 - temp1; population.womanProprtion = temp2.ToString("#0.00"); } population.data = new List(); MassiveDataStatisticsModel m1 = new MassiveDataStatisticsModel(); m1.name = "50岁以下"; m1.value = lst.Where(x => x.Age < 50 && x.Age >= 0).Count(); population.data.Add(m1); MassiveDataStatisticsModel m2 = new MassiveDataStatisticsModel(); m2.name = "50-60岁"; m2.value = lst.Where(x => x.Age >= 50 && x.Age < 60).Count(); population.data.Add(m2); MassiveDataStatisticsModel m3 = new MassiveDataStatisticsModel(); m3.name = "60-70岁"; m3.value = lst.Where(x => x.Age >= 60 && x.Age < 70).Count(); population.data.Add(m3); MassiveDataStatisticsModel m4 = new MassiveDataStatisticsModel(); m4.name = "70-80岁"; m4.value = lst.Where(x => x.Age >= 70 && x.Age < 80).Count(); population.data.Add(m4); MassiveDataStatisticsModel m5 = new MassiveDataStatisticsModel(); m5.name = "80-90岁"; m5.value = lst.Where(x => x.Age >= 80 && x.Age < 90).Count(); population.data.Add(m5); MassiveDataStatisticsModel m6 = new MassiveDataStatisticsModel(); m6.name = "90岁以上"; m5.value = lst.Where(x => x.Age >= 90).Count(); population.data.Add(m6); } return population; } /// /// TOAST分型统计 /// /// /// public List GetTOASTEvaluationRate(string hosptialGuid) { List list = new List(); List lst = new List(); lst = db.Queryable((a, b) => new JoinQueryInfos(JoinType.Inner, a.GUID == b.PatientGuid)) .Where((a, b) => a.HospitalGuid == hosptialGuid && a.SystemModuleID == 3 && a.DeleteFlag == 0 && !SqlFunc.IsNullOrEmpty(b.TJiZhi)) .Select((a, b) => new MassiveDataStatisticsModel() { name = b.TJiZhi }).ToList(); /// 1.大动脉粥样硬化性卒中(LAA) /// 2.心源性脑栓塞(CE) /// 3.小动脉闭塞性卒中或腔隙性卒中 (SAA) /// 4.其他原因所致的缺血性卒中(SOE) /// 5.不明原因的缺血性卒中(SUE) MassiveDataStatisticsModel p1 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel p2 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel p3 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel p4 = new MassiveDataStatisticsModel(); MassiveDataStatisticsModel p5 = new MassiveDataStatisticsModel(); p1.name = "LAA"; p2.name = "CE"; p3.name = "SAA"; p4.name = "SOE"; p5.name = "SUE"; if (lst.Count > 0) { p1.value = lst.Where(i => i.name == "1").Count(); p2.value = lst.Where(i => i.name == "2").Count(); p3.value = lst.Where(i => i.name == "3").Count(); p4.value = lst.Where(i => i.name == "4").Count(); p5.value = lst.Where(i => i.name == "5").Count(); //if (lst1 > 0) // p1.value = (lst1 * 100 / lst.Count).ToString("#0.00"); //if (lst2 > 0) // p1.value = (lst2 * 100 / lst.Count).ToString("#0.00"); //if (lst3 > 0) // p1.value = (lst3 * 100 / lst.Count).ToString("#0.00"); //if (lst4 > 0) // p1.value = (lst4 * 100 / lst.Count).ToString("#0.00"); //if (lst5 > 0) // p1.value = (lst5 * 100 / lst.Count).ToString("#0.00"); } list.Add(p1); list.Add(p2); list.Add(p3); list.Add(p4); list.Add(p5); return list; } /// /// 入门到到达CT时间统计 /// 所有患者的 入门-开始ct时间差,按月排序,计算平均值 /// /// /// public List GetApoplexyIntroductionToCT(string hosptialGuid) { List list = new List(); List lst = new List(); //近12月个月份集合 DateTime dt1 = DateTime.Now; DateTime dt2 = DateTime.Now.AddMonths(-11); int Month = (dt1.Year - dt2.Year) * 12 + (dt1.Month - dt2.Month); List monthList = new List(); for (int i = 0; i < Month + 1; i++) { string res = dt2.AddMonths(i).Year + "-" + GetMonthZero(dt2.AddMonths(i).Month) + "-01"; DateTime dt = Convert.ToDateTime(res); monthList.Add(dt.AddDays(1 - dt.Day)); } //筛选近12月所有数据 lst = db.Queryable((a, b) => a.GUID == b.PatientGuid) .Where((a, b) => a.HospitalGuid == hosptialGuid && a.SystemModuleID == 3 && a.DeleteFlag == 0 && a.RegisterTime >= monthList[0] && a.RegisterTime <= monthList[11].AddMonths(1)) .Select((a, b) => new DtoCTModel() { RegisterTime = a.RegisterTime, dtct = b.DTCT }).ToList(); MassiveDataStatisticsModel m1 = new MassiveDataStatisticsModel(); m1.name = monthList[0].ToString("yyyy-MM"); MassiveDataStatisticsModel m2 = new MassiveDataStatisticsModel(); m2.name = monthList[1].ToString("yyyy-MM"); MassiveDataStatisticsModel m3 = new MassiveDataStatisticsModel(); m3.name = monthList[2].ToString("yyyy-MM"); MassiveDataStatisticsModel m4 = new MassiveDataStatisticsModel(); m4.name = monthList[3].ToString("yyyy-MM"); MassiveDataStatisticsModel m5 = new MassiveDataStatisticsModel(); m5.name = monthList[4].ToString("yyyy-MM"); MassiveDataStatisticsModel m6 = new MassiveDataStatisticsModel(); m6.name = monthList[5].ToString("yyyy-MM"); MassiveDataStatisticsModel m7 = new MassiveDataStatisticsModel(); m7.name = monthList[6].ToString("yyyy-MM"); MassiveDataStatisticsModel m8 = new MassiveDataStatisticsModel(); m8.name = monthList[7].ToString("yyyy-MM"); MassiveDataStatisticsModel m9 = new MassiveDataStatisticsModel(); m9.name = monthList[8].ToString("yyyy-MM"); MassiveDataStatisticsModel m10 = new MassiveDataStatisticsModel(); m10.name = monthList[9].ToString("yyyy-MM"); MassiveDataStatisticsModel m11 = new MassiveDataStatisticsModel(); m11.name = monthList[10].ToString("yyyy-MM"); MassiveDataStatisticsModel m12 = new MassiveDataStatisticsModel(); m12.name = monthList[11].ToString("yyyy-MM"); if (lst.Count > 0) { int i1 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[0]) && i.RegisterTime < Convert.ToDateTime(monthList[1])).Count(); if (i1 > 0) m1.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[0]) && i.RegisterTime < Convert.ToDateTime(monthList[1])).Sum(i => i.dtct) / i1; int i2 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[1]) && i.RegisterTime < Convert.ToDateTime(monthList[2])).Count(); if (i2 > 0) m2.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[1]) && i.RegisterTime < Convert.ToDateTime(monthList[2])).Sum(i => i.dtct) / i2; int i3 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[2]) && i.RegisterTime < Convert.ToDateTime(monthList[3])).Count(); if (i3 > 0) m3.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[2]) && i.RegisterTime < Convert.ToDateTime(monthList[3])).Sum(i => i.dtct) / i3; int i4 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[3]) && i.RegisterTime < Convert.ToDateTime(monthList[4])).Count(); if (i4 > 0) m4.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[3]) && i.RegisterTime < Convert.ToDateTime(monthList[4])).Sum(i => i.dtct) / i4; int i5 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[4]) && i.RegisterTime < Convert.ToDateTime(monthList[5])).Count(); if (i5 > 0) m5.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[4]) && i.RegisterTime < Convert.ToDateTime(monthList[5])).Sum(i => i.dtct) / i5; int i6 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[5]) && i.RegisterTime < Convert.ToDateTime(monthList[6])).Count(); if (i6 > 0) m6.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[5]) && i.RegisterTime < Convert.ToDateTime(monthList[6])).Sum(i => i.dtct) / i6; int i7 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[6]) && i.RegisterTime < Convert.ToDateTime(monthList[7])).Count(); if (i7 > 0) m7.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[6]) && i.RegisterTime < Convert.ToDateTime(monthList[7])).Sum(i => i.dtct) / i7; int i8 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[7]) && i.RegisterTime < Convert.ToDateTime(monthList[8])).Count(); if (i8 > 0) m8.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[7]) && i.RegisterTime < Convert.ToDateTime(monthList[8])).Sum(i => i.dtct) / i8; int i9 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[8]) && i.RegisterTime < Convert.ToDateTime(monthList[9])).Count(); if (i9 > 0) m9.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[8]) && i.RegisterTime < Convert.ToDateTime(monthList[9])).Sum(i => i.dtct) / i9; int i10 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[9]) && i.RegisterTime < Convert.ToDateTime(monthList[10])).Count(); if (i10 > 0) m10.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[9]) && i.RegisterTime < Convert.ToDateTime(monthList[10])).Sum(i => i.dtct) / i10; int i11 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[10]) && i.RegisterTime < Convert.ToDateTime(monthList[11])).Count(); if (i11 > 0) m11.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[10]) && i.RegisterTime < Convert.ToDateTime(monthList[11])).Sum(i => i.dtct) / i11; int i12 = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[11]) && i.RegisterTime < DateTime.Now.AddMonths(1)).Count(); if (i12 > 0) m12.value = lst.Where(i => i.RegisterTime >= Convert.ToDateTime(monthList[11]) && i.RegisterTime < DateTime.Now.AddMonths(1)).Sum(i => i.dtct) / i12; } list.Add(m1); list.Add(m2); list.Add(m3); list.Add(m4); list.Add(m5); list.Add(m6); list.Add(m7); list.Add(m8); list.Add(m9); list.Add(m10); list.Add(m11); list.Add(m12); return list; } /// /// 计算月份 /// /// /// public string GetMonthZero(int month) { if (month < 10) { return "0" + month; } else { return month.ToString(); } } /// /// 随访统计 /// /// /// public List GetApoplexyFollowUp(string hosptialGuid) { List list = new List(); MassiveDataStatisticsModel m1 = new MassiveDataStatisticsModel(); m1.name = "随访总次数"; m1.value = db.Queryable().Where(i => i.HospitalGuid == hosptialGuid && i.DeleteFlag == 0).Count(); list.Add(m1); MassiveDataStatisticsModel m3 = new MassiveDataStatisticsModel(); m3.name = "已完成随访"; m3.value = db.Queryable((a, b) => a.GUID == b.FGUID).Where((a, b) => a.HospitalGuid == hosptialGuid && !SqlFunc.IsNullOrEmpty(b.Proportion) && a.DeleteFlag == 0).Select((a, b) => b.Proportion).Count(); list.Add(m3); MassiveDataStatisticsModel m2 = new MassiveDataStatisticsModel(); m2.name = "未完成随访"; m2.value = m1.value - m3.value; list.Add(m2); return list; } //随访次数 #endregion } public class DtoCTModel { public DateTime? RegisterTime { get; set; } public int dtct { get; set; } } public class AttackAddressModel { public string Address { get; set; } public DateTime? CreationDate { get; set; } } }