Browse Source

健康数据统计

master
wxd 1 year ago
parent
commit
5e5f9dc81f
  1. 36
      src/Shentun.Peis.Application.Contracts/PeisReports/HealthStatisticsDto.cs
  2. 41
      src/Shentun.Peis.Application.Contracts/PeisReports/HealthStatisticsInputDto.cs
  3. 99
      src/Shentun.Peis.Application/PeisReports/PeisReportAppService.cs

36
src/Shentun.Peis.Application.Contracts/PeisReports/HealthStatisticsDto.cs

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.PeisReports
{
public class HealthStatisticsDto
{
/// <summary>
/// 男性人数
/// </summary>
public int MaleCount { get; set; }
/// <summary>
/// 女性人数
/// </summary>
public int FemaleCount { get; set; }
/// <summary>
/// 合计人数 包含了未知
/// </summary>
public int SumCount { get; set; }
/// <summary>
/// 标准金额
/// </summary>
public decimal StandardMoney { get; set; }
/// <summary>
/// 实收金额
/// </summary>
public decimal ChargeMoney { get; set; }
}
}

41
src/Shentun.Peis.Application.Contracts/PeisReports/HealthStatisticsInputDto.cs

@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Shentun.Peis.PeisReports
{
public class HealthStatisticsInputDto
{
/// <summary>
/// 体检类别ID集合
/// </summary>
public List<Guid?> MedicalTypeIds { get; set; }
/// <summary>
/// 是否查询未填写体检类别 Y=查询未填写体检类别的数据 N=不查询
/// </summary>
public char IsMedicalTypeId { get; set; }= 'Y';
/// <summary>
/// 单位ID 集合
/// </summary>
public List<Guid> CustomerOrgIds { get; set; } = new List<Guid>();
/// <summary>
/// 日期类型(1、登记日期 2、体检日期 3、总检日期)
/// </summary>
public char DateType { get; set; } = '1';
/// <summary>
/// 开始日期
/// </summary>
public string StartDate { get; set; }
/// <summary>
/// 结束日期
/// </summary>
public string EndDate { get; set; }
}
}

99
src/Shentun.Peis.Application/PeisReports/PeisReportAppService.cs

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Shentun.Peis.CustomerOrgs;
using Shentun.Peis.Enums;
using Shentun.Peis.Models;
@ -33,7 +34,7 @@ namespace Shentun.Peis.PeisReports
private readonly IRepository<MedicalPackage, Guid> _medicalPackageRepository;
private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
private readonly IRepository<Sex> _sexRepository;
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerAsbitemRepository;
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
private readonly CustomerOrgManager _customerOrgManager;
@ -48,7 +49,7 @@ namespace Shentun.Peis.PeisReports
IRepository<MedicalPackage, Guid> medicalPackageRepository,
IRepository<CustomerOrg, Guid> customerOrgRepository,
IRepository<Sex> sexRepository,
IRepository<RegisterCheckAsbitem, Guid> registerAsbitemRepository,
IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
IRepository<RegisterCheck, Guid> registerCheckRepository,
IRepository<Asbitem, Guid> asbitemRepository,
CustomerOrgManager customerOrgManager,
@ -63,7 +64,7 @@ namespace Shentun.Peis.PeisReports
this._medicalPackageRepository = medicalPackageRepository;
this._customerOrgRepository = customerOrgRepository;
this._sexRepository = sexRepository;
this._registerAsbitemRepository = registerAsbitemRepository;
this._registerCheckAsbitemRepository = registerCheckAsbitemRepository;
this._registerCheckRepository = registerCheckRepository;
this._asbitemRepository = asbitemRepository;
this._customerOrgManager = customerOrgManager;
@ -83,7 +84,7 @@ namespace Shentun.Peis.PeisReports
join b in await _patientRepository.GetQueryableAsync() on a.PatientId equals b.Id into bb
from ab in bb.DefaultIfEmpty()
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on a.Id equals registerCheck.PatientRegisterId
join registerAsbitem in await _registerAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerAsbitem.RegisterCheckId
join registerAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerAsbitem.RegisterCheckId
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerAsbitem.AsbitemId equals asbitem.Id
join c in await _customerOrgGroupRepository.GetQueryableAsync() on a.CustomerOrgGroupId equals c.Id into cc
from ac in cc.DefaultIfEmpty()
@ -366,7 +367,7 @@ namespace Shentun.Peis.PeisReports
[HttpPost("api/app/peisreport/getregisterasbitemregistercheckstatus")]
public async Task<List<GetRegisterAsbitemRegisterCheckStatusDto>> GetRegisterAsbitemRegisterCheckStatusAsync(GetRegisterAsbitemRegisterCheckStatusRequestDto input)
{
var query = from j in await _registerAsbitemRepository.GetQueryableAsync()
var query = from j in await _registerCheckAsbitemRepository.GetQueryableAsync()
join k in await _registerCheckRepository.GetQueryableAsync() on j.RegisterCheckId equals k.Id into kk
from jk in kk.DefaultIfEmpty()
join l in await _patientRegisterRepository.GetQueryableAsync() on j.PatientRegisterId equals l.Id into ll
@ -534,7 +535,7 @@ namespace Shentun.Peis.PeisReports
public async Task<List<GetRegisterAsbitemChargeStatusDto>> GetRegisterAsbitemChargeStatusAsync(GetRegisterAsbitemChargeStatusRequestDto input)
{
var query = from j in await _registerAsbitemRepository.GetQueryableAsync()
var query = from j in await _registerCheckAsbitemRepository.GetQueryableAsync()
join k in await _registerCheckRepository.GetQueryableAsync() on j.RegisterCheckId equals k.Id into kk
from jk in kk.DefaultIfEmpty()
join l in await _patientRegisterRepository.GetQueryableAsync() on j.PatientRegisterId equals l.Id into ll
@ -712,7 +713,7 @@ namespace Shentun.Peis.PeisReports
from af in ff.DefaultIfEmpty()
join g in await _sexRepository.GetQueryableAsync() on a.SexId equals g.Id into gg
from ag in gg.DefaultIfEmpty()
join aj in await _registerAsbitemRepository.GetQueryableAsync() on a.Id equals aj.PatientRegisterId
join aj in await _registerCheckAsbitemRepository.GetQueryableAsync() on a.Id equals aj.PatientRegisterId
join ak in await _registerCheckRepository.GetQueryableAsync() on aj.RegisterCheckId equals ak.Id
join al in await _asbitemRepository.GetQueryableAsync() on aj.AsbitemId equals al.Id
//join j in await _registerAsbitemRepository.GetQueryableAsync() on a.Id equals j.PatientRegisterId into jj
@ -866,5 +867,89 @@ namespace Shentun.Peis.PeisReports
return entlist;
}
/// <summary>
/// 健康统计数据
/// </summary>
/// <returns></returns>
[HttpPost("api/app/PeisReport/GetHealthStatistics")]
public async Task<HealthStatisticsDto> GetHealthStatisticsAsync(HealthStatisticsInputDto input)
{
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
select new
{
patientRegister,
registerCheck,
registerCheckAsbitem
};
if (input.MedicalTypeIds.Any())
{
if (input.IsMedicalTypeId == 'Y')
{
query = query.Where(m => input.MedicalTypeIds.Contains(m.patientRegister.MedicalTypeId) || m.patientRegister.MedicalTypeId == null);
}
else
{
query = query.Where(m => input.MedicalTypeIds.Contains(m.patientRegister.MedicalTypeId));
}
}
if (input.CustomerOrgIds.Any())
{
List<Guid?> ids = new List<Guid?>();
foreach (var item in input.CustomerOrgIds)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item);
ids.AddRange(CustomerOrgIds);
}
query = query.Where(m => ids.Contains(m.patientRegister.CustomerOrgId));
}
if (!string.IsNullOrEmpty(input.StartDate) && !string.IsNullOrEmpty(input.EndDate))
{
if (input.DateType == '1')
{
query = query.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1));
}
else if (input.DateType == '2')
{
query = query.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(input.EndDate).AddDays(1));
}
else if (input.DateType == '3')
{
query = query.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(input.EndDate).AddDays(1));
}
}
var dataList = query.ToList();
var patientRegisterGroup = dataList.GroupBy(g => g.patientRegister);
var maleCount = patientRegisterGroup.Where(m => m.Key.SexId == SexFlag.Male).Count();
var femaleCount = patientRegisterGroup.Where(m => m.Key.SexId == SexFlag.Female).Count();
var sumCount = patientRegisterGroup.Count();
var standardPrice = dataList.Sum(s => s.registerCheckAsbitem.StandardPrice * s.registerCheckAsbitem.Amount);
var chargePrice = dataList.Sum(s => s.registerCheckAsbitem.ChargePrice * s.registerCheckAsbitem.Amount);
var resultDto = new HealthStatisticsDto
{
ChargeMoney = chargePrice,
FemaleCount = femaleCount,
MaleCount = maleCount,
SumCount = sumCount,
StandardMoney = standardPrice
};
return resultDto;
}
}
}
Loading…
Cancel
Save