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; }
}
}