using HL_FristAidPlatform_Help; using HL_FristAidPlatform_IDataBase; using HL_FristAidPlatform_Models; using Newtonsoft.Json; using SqlSugar; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HL_FristAidPlatform_DataBase { public class T_Service_EmergencyStatisticsDB : BaseDB, IT_Service_EmergencyStatistics { public SqlSugarClient db = GetClient(); /// /// 分诊统计 /// /// /// /// /// 1.分诊人数统计 2 三无人员统计 3 死亡人数统计 /// public List GetTriageStatistics(string hospitalGuid, string starTime, string endTime, int type) { List list = new List(); if (!string.IsNullOrEmpty(starTime)) starTime = starTime + "-01"; if (!string.IsNullOrEmpty(endTime)) endTime = endTime + "-01"; var oneClass = db.Queryable ((a, b, c) => new JoinQueryInfos(JoinType.Inner, a.GUID == b.PatientGUID, JoinType.Left, a.GUID == c.PatientGUID)) .Where((a, b) => a.HospitalGuid == hospitalGuid && a.DeleteFlag == 0) .WhereIF(!SqlFunc.IsNullOrEmpty(starTime), (a, b) => a.CreationDate >= Convert.ToDateTime(starTime)) .WhereIF(!SqlFunc.IsNullOrEmpty(endTime), (a, b) => a.CreationDate <= Convert.ToDateTime(endTime).AddMonths(1)) .WhereIF(type == 1, (a, b) => !SqlFunc.IsNullOrEmpty(b.TriageDepartment)) .WhereIF(type == 2, (a, b) => a.Category == 1) .WhereIF(type == 3, (a, b, c) => !SqlFunc.IsNullOrEmpty(c.DeathTime)) .Select((a, b, c) => new { b.PatientGUID, a.RegisterTime, c.DeathTime }).ToList(); DateTime dt1; DateTime dt2; if (string.IsNullOrEmpty(starTime)) { dt2 = Convert.ToDateTime(oneClass.Max(t => t.RegisterTime)); } else { dt2 = Convert.ToDateTime(starTime); } if (string.IsNullOrEmpty(endTime)) { dt1 = Convert.ToDateTime(oneClass.Min(t => t.RegisterTime)); } else { dt1 = Convert.ToDateTime(endTime); } List monthList = new List(); int Month = (dt1.Year - dt2.Year) * 12 + (dt1.Month - dt2.Month); for (int i = 0; i < Month + 1; i++) { string res = dt2.AddMonths(i).Year + "-" + GetDateZero(dt2.AddMonths(i).Month) + "-01"; DateTime dt = Convert.ToDateTime(res); monthList.Add(dt.AddDays(1 - dt.Day)); } if (oneClass != null && oneClass.Count > 0) { if (monthList.Count > 0) { DataSetModel dataSet = null; for (int i = 0; i < monthList.Count; i++) { dataSet = new DataSetModel(); dataSet.TimeDate = monthList[i].ToString("yyyy年MM月"); if (type == 3) { dataSet.Number = oneClass.Where(j => j.DeathTime >= SqlFunc.ToDate(monthList[i]) && j.DeathTime <= SqlFunc.ToDate(monthList[i].AddMonths(1))).Count(); } else { dataSet.Number = oneClass.Where(j => j.RegisterTime >= SqlFunc.ToDate(monthList[i]) && j.RegisterTime <= SqlFunc.ToDate(monthList[i].AddMonths(1))).Count(); } list.Add(dataSet); } } } else { if (monthList.Count > 0) { DataSetModel dataSet = null; for (int i = 0; i < monthList.Count; i++) { dataSet = new DataSetModel(); dataSet.TimeDate = monthList[i].ToString("yyyy年MM月"); list.Add(dataSet); } } } return list; } /// /// 分诊人数总数统计 /// /// /// /// /// public List GetQuantityModel(string hospitalGuid, string starTime, string endTime) { if (!string.IsNullOrEmpty(starTime)) starTime = starTime + "-01"; if (!string.IsNullOrEmpty(endTime)) endTime = endTime + "-01"; var oneClass = db.Queryable ((a, b, c) => new JoinQueryInfos(JoinType.Inner, a.GUID == b.PatientGUID, JoinType.Left, a.GUID == c.PatientGUID)) .Where((a, b) => a.HospitalGuid == hospitalGuid && a.DeleteFlag == 0) .WhereIF(!SqlFunc.IsNullOrEmpty(starTime), (a, b) => a.CreationDate >= Convert.ToDateTime(starTime)) .WhereIF(!SqlFunc.IsNullOrEmpty(endTime), (a, b) => a.CreationDate <= Convert.ToDateTime(endTime).AddMonths(1)) .Select((a, b, c) => new { b.TriageDepartment, c.DeathTime, a.Category }).ToList(); List list = new List(); QuantityModel quantity1 = new QuantityModel(); quantity1.Name = "分诊总人数"; quantity1.Quantity = oneClass.Where(i => !SqlFunc.IsNullOrEmpty(i.TriageDepartment)).Count(); list.Add(quantity1); QuantityModel quantity2 = new QuantityModel(); quantity2.Name = "三无总人数"; quantity2.Quantity = oneClass.Where(i => i.Category == 1).Count(); list.Add(quantity2); QuantityModel quantity3 = new QuantityModel(); quantity3.Name = "死亡总人数"; quantity3.Quantity = oneClass.Where(i => !SqlFunc.IsNullOrEmpty(i.DeathTime)).Count(); list.Add(quantity3); return list; } /// /// 计算月份 /// /// /// public string GetDateZero(int date) { if (date < 10) { return "0" + date; } else { return date.ToString(); } } /// /// 急诊分诊统计 三无人员占比统计 病情等级统计 死亡人数统计 /// /// /// /// public DataSet GetTriageProportion(string starTime, string endTime) { DataSet dataSet = new DataSet(); DataTable dtCopy = new DataTable(); if (!string.IsNullOrEmpty(starTime) && !string.IsNullOrEmpty(endTime)) { DateTime dateTime = Convert.ToDateTime(starTime); DateTime dateTime1 = Convert.ToDateTime(endTime); string sql = @"select CONVERT(varchar(100), a.RegisterTime, 23) as 日期, count(a.GUID) as 人数 from T_Service_Patient a join T_Service_FirstAid_PatientInfo b on a.GUID=b.PatientGUID where a.DeleteFlag=0 and b.DeleteFlag=0 and a.RegisterTime Between '{0}' and '{1}' group by CONVERT(varchar(100), a.RegisterTime, 23)"; sql = string.Format(sql, dateTime, dateTime1); DataTable dt = db.Ado.GetDataTable(sql); dtCopy = dt.Copy(); dtCopy.TableName = "table1"; } //string items = ""; string sql1 = @"select *, t.人数*100/t.急诊分诊总人数 as 占比 from(select LEFT (CONVERT(varchar,a.RegisterTime,112),6) as 日期, count(a.GUID) as 人数,(select count(a.GUID) as 人数 from T_Service_Patient a join T_Service_FirstAid_PatientInfo b on a.GUID=b.PatientGUID where a.DeleteFlag=0 and b.DeleteFlag=0) as 急诊分诊总人数 from T_Service_Patient a join T_Service_FirstAid_PatientInfo b on a.GUID=b.PatientGUID where a.Category=1 and a.DeleteFlag=0 and b.DeleteFlag=0 group by LEFT (CONVERT(varchar,a.RegisterTime,112),6),a.Category) as t"; DataTable dt1Copy = new DataTable(); DataTable dt1 = db.Ado.GetDataTable(sql1); dt1Copy = dt1.Copy(); dt1Copy.TableName = "table2"; string sql2 = @"select b.Killip,count(a.GUID) as 人数 from T_Service_Patient a join T_Service_FirstAid_PatientInfo b on a.GUID=b.PatientGUID where b.Killip is not null and a.DeleteFlag=0 and b.DeleteFlag=0 group by b.Killip"; DataTable dt2Copy = new DataTable(); DataTable dt2 = db.Ado.GetDataTable(sql2); dt2Copy = dt2.Copy(); dt2Copy.TableName = "table3"; string sql3 = @"select LEFT (CONVERT(varchar,a.RegisterTime,112),6) as 日期, count(a.GUID) as 人数 from T_Service_Patient a join T_Service_FirstAid_PatientInfo b on a.GUID=b.PatientGUID where b.DeleteFlag=0 and a.DeleteFlag=0 and b.DeathTime is not null group by LEFT (CONVERT(varchar,a.RegisterTime,112),6)"; DataTable dt3Copy = new DataTable(); DataTable dt3 = db.Ado.GetDataTable(sql3); dt3Copy = dt3.Copy(); dt3Copy.TableName = "table4"; //if (dt1.Rows.Count > 0) //{ // foreach (DataRow item in dt1.Rows) // { // string row = ""; // for (int i = 0; i < dt1.Columns.Count; i++) // { // row += JsonConvert.SerializeObject(dt1.Columns[i].ColumnName) + ":"; // row += JsonConvert.SerializeObject(item[i]) + ","; // } // row = row.Remove(row.Length - 1); // items += "{" + row + "}" + ","; // } // items = items.Remove(items.Length - 1); //} //items = "[" + items + "]"; if (dtCopy != null && dtCopy.Rows.Count != 0) { dataSet.Tables.Add(dtCopy); } if (dt1Copy != null && dt1Copy.Rows.Count != 0) { dataSet.Tables.Add(dt1Copy); } if (dt2Copy != null && dt2Copy.Rows.Count != 0) { dataSet.Tables.Add(dt2Copy); } if (dt3Copy != null && dt3Copy.Rows.Count != 0) { dataSet.Tables.Add(dt3Copy); } return dataSet; } /// /// 病因例数统计 /// /// /// /// /// public List GetEtiologicalStatistics(string hospitalGuid, string starTime, string endTime) { if (!string.IsNullOrEmpty(starTime)) starTime = starTime + "-01"; if (!string.IsNullOrEmpty(endTime)) endTime = endTime + "-01"; var oneClass = db.Queryable ((a, b) => new JoinQueryInfos(JoinType.Inner, a.GUID == b.PatientGUID)) .Where((a, b) => a.HospitalGuid == hospitalGuid && a.DeleteFlag == 0) .WhereIF(!SqlFunc.IsNullOrEmpty(starTime), (a, b) => a.CreationDate >= Convert.ToDateTime(starTime)) .WhereIF(!SqlFunc.IsNullOrEmpty(endTime), (a, b) => a.CreationDate <= Convert.ToDateTime(endTime).AddMonths(1)) .Select((a, b) => new { a.RegisterTime, b.PathogenyGUID }).ToList(); List list = new List(); var pathogenyList = db.Queryable().ToList(); if (pathogenyList != null && pathogenyList.Count > 0) { for (int i = 0; i < pathogenyList.Count; i++) { EtiologicalModel quantity = new EtiologicalModel(); quantity.Name = pathogenyList[i].Name; quantity.PathogenyID = pathogenyList[i].ID; quantity.Quantity = oneClass.Where(j => j.PathogenyGUID == pathogenyList[i].GUID).Count(); list.Add(quantity); } } return list; } public List GetPathogenyStatistics(string hospitalGuid,int pathogenyID, string startTime,string endTime) { List list = new List(); startTime = startTime + "-01"; endTime = endTime + "-01"; int Month = (Convert.ToDateTime(endTime).Year - Convert.ToDateTime(startTime).Year) * 12 + (Convert.ToDateTime(endTime).Month - Convert.ToDateTime(startTime).Month); List monthList = new List(); for (int i = 0; i < Month + 1; i++) { string res = Convert.ToDateTime(startTime).AddMonths(i).Year + "-" + GetMonthZero(Convert.ToDateTime(startTime).AddMonths(i).Month) + "-01"; DateTime dt = Convert.ToDateTime(res); monthList.Add(dt.AddDays(1 - dt.Day)); } var oneClass = db.Queryable((a, b, c) => new JoinQueryInfos( JoinType.Inner, a.GUID == b.PatientGUID, JoinType.Inner, b.PathogenyGUID == c.GUID)) .Where((a, b, c) => a.HospitalGuid == hospitalGuid && a.DeleteFlag == 0) //.Where((a, b, c) => a.CreationDate >= SqlFunc.ToDate(startTime) && a.CreationDate <= SqlFunc.ToDate(endTime)) .WhereIF(!SqlFunc.IsNullOrEmpty(startTime), (a, b, c) => a.CreationDate >= Convert.ToDateTime(startTime)) .WhereIF(!SqlFunc.IsNullOrEmpty(endTime), (a, b, c) => a.CreationDate <= Convert.ToDateTime(endTime).AddMonths(1)) .Select((a,b,c)=>new { CreationDate=a.CreationDate, PathogenyGUID =b.PathogenyGUID, PathogenyID =c.ID }) .ToList(); if (oneClass != null) { for (int i = 0; i < monthList.Count; i++) { PathogenyModel model = new PathogenyModel(); model.Month = monthList[i].ToString("yyyy-MM"); int count = 0; count = oneClass.Where(j => j.CreationDate >= SqlFunc.ToDate(monthList[i].ToString()) && j.CreationDate <= Convert.ToDateTime(SqlFunc.ToDate(monthList[i].ToString()).AddMonths(1).ToString("yyyy-MM-01"))) .Where((j) => j.PathogenyID == pathogenyID).Count(); model.Count = count + ""; list.Add(model); } } return list; } /// /// 计算月份 /// /// /// private string GetMonthZero(int month) { if (month < 10) { return "0" + month; } else { return month.ToString(); } } } }