StableVersion4.3/HL_FristAidPlatform_DataBase/Service/T_Service_Apoplexy_PerCapit...

128 lines
4.9 KiB
C#

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
{
/// <summary>
/// 人均费用
/// </summary>
public class T_Service_Apoplexy_PerCapitaCostDB : BaseDB, IT_Service_Apoplexy_PerCapitaCost
{
public SqlSugarClient db = GetClient();
/// <summary>
/// 统计人均费用
/// </summary>
/// <param name="hospitalGuid"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public List<AverageResultModel> StatisticalPerCapitaExpenses(string hospitalGuid, string startTime, string endTime,int type)
{
List<AverageResultModel> list = new List<AverageResultModel>();
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<T_Service_Patient, T_Service_Apoplexy_PatientOutcome>((a, b) => a.GUID == b.PatientGuid)
.Where((a, b) => a.HospitalGuid == hospitalGuid && a.DeleteFlag == 0&& !SqlFunc.IsNullOrEmpty(b.CYTime)&& SqlFunc.ToDate(b.CYTime) >= dt1 && SqlFunc.ToDate(b.CYTime) <= dt2.AddDays(1))
.Select((a, b) => new StatisticalPerCapitaExpensesModel
{
PatientGuid = b.PatientGuid,
CYTime = b.CYTime,
AllInCost = b.AllInCost,
}).ToList();
//月份集合
List<DateTime> monthList = new List<DateTime>();
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)
{
AverageResultModel 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 AverageResultModel();
model.Key = timeDate;
//住院费用(月)
float Costsum = (float)oneClass.Where(j => SqlFunc.ToDate(j.CYTime) >= start && SqlFunc.ToDate(j.CYTime) <= end.AddDays(1)&&!string.IsNullOrEmpty(j.AllInCost)).Sum(i => Convert.ToDouble(i.AllInCost));
//每月药物费用(单位:元(人民币))
//每月总人数
int Count = oneClass.Where(j => SqlFunc.ToDate(j.CYTime) >= start && SqlFunc.ToDate(j.CYTime) <= end.AddDays(1)).Count();
if(Count == 0)
model.Value = "0.00";
if (Count > 0)
//住院平均费用(月)
model.Value = ((double)Costsum / Count).ToString("#0.00");
if (Count == 0)
model.Value = ((double)Count).ToString("#0.00");
list.Add(model);
}
}
}
else
{
AverageResultModel model = null;
for (int i = 0; i < monthList.Count; i++)
{
string timeDate = monthList[i].ToString("yyyy-MM");
model = new AverageResultModel();
model.Key = timeDate;
list.Add(model);
}
}
return list;
}
public string GetDateZero(int date)
{
if (date < 10)
{
return "0" + date;
}
else
{
return date.ToString();
}
}
}
}