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 T_Service_Apoplexy_BloodCollectionToResultAVETimeDB : BaseDB, IT_Service_Apoplexy_BloodCollectionToResultAVETime
{
public SqlSugarClient db = GetClient();
public List GetBloodCollectionToResultAVETime(string hospitalGuid, string startTime, string endTime,int type)
{
List list = new List();
DateTime dt1 = DateTime.Now;
DateTime dt2 = DateTime.Now;
if (type == 2)
{
int year = int.Parse(startTime);
dt1 = new DateTime(year, 1, 1);
dt2 = new DateTime(year, 12, 31);
}
if (type == 1)
{
DateTime startdt = Convert.ToDateTime(startTime);
dt1 = startdt.AddDays(1 - startdt.Day);
DateTime enddt = Convert.ToDateTime(endTime);
dt2 = enddt.AddDays(1 - enddt.Day).AddMonths(1).AddDays(-1);
}
//数据结果集
var oneClass = db.Queryable((a, b) => a.GUID == b.PatientGuid)
.Where((a, b) => a.HospitalGuid == hospitalGuid && a.DeleteFlag == 0 && a.SystemModuleID == 3)
.Where((a, b) => SqlFunc.Between(Convert.ToDateTime(a.CreationDate),dt1,dt2.AddDays(1)))
.Select((a, b) => new QueryBloodCollectionToResultAVETimeModel
{
PatientGuid = b.PatientGuid,
CreationDate = a.CreationDate,
BloodCollectionTime = b.BloodCollectionTime,
BloodRoutineReportTime = b.BloodRoutineReportTime,
BloodCollectionToReportTime = b.BloodCollectionToReportTime
}).ToList();
//月份集合
List monthList = new List();
int Month = (dt2.Year - dt1.Year) * 12 + (dt2.Month - dt1.Month);
for (int i = 0; i < Month + 1; i++)
{
string res = dt1.AddMonths(i).Year + "-" + GetDateZero(dt1.AddMonths(i).Month) + "-01";
DateTime dt = Convert.ToDateTime(res);
monthList.Add(dt.AddDays(1 - dt.Day));
}
if (oneClass != null)
{
if (monthList.Count > 0)
{
BloodCollectionToResultAVETimeModel model = null;
for (int i = 0; i < monthList.Count; i++)
{
DateTime start = Convert.ToDateTime(monthList[i]);
DateTime end = Convert.ToDateTime(monthList[i]).AddMonths(1).AddDays(-1);
string timeDate = monthList[i].ToString("yyyy-MM");
model = new BloodCollectionToResultAVETimeModel();
model.Key = timeDate;
int Count = oneClass.Where(j => SqlFunc.ToDate(j.CreationDate) >= start && SqlFunc.ToDate(j.CreationDate) <= end.AddDays(1)).Count();
int TimeSum = oneClass.Where(j => SqlFunc.ToDate(j.CreationDate) >= start && SqlFunc.ToDate(j.CreationDate) <= end.AddDays(1) && !SqlFunc.IsNullOrEmpty(j.BloodCollectionToReportTime)).Sum(i => int.Parse(i.BloodCollectionToReportTime));
if(Count == 0)
model.Value = ((double)Count).ToString("#0.00");
if (Count > 0)
model.Value = ((double)TimeSum / Count).ToString("#0.00");
list.Add(model);
}
}
}
else
{
BloodCollectionToResultAVETimeModel model = null;
for (int i = 0; i < monthList.Count; i++)
{
string timeDate = monthList[i].ToString("yyyy-MM");
model = new BloodCollectionToResultAVETimeModel();
model.Key = timeDate;
list.Add(model);
}
}
return list;
}
public string GetDateZero(int date)
{
if (date < 10)
{
return "0" + date;
}
else
{
return date.ToString();
}
}
}
}