Browse Source

获取单位费用汇总报表

master
wxd 1 year ago
parent
commit
80ef1048f3
  1. 61
      src/Shentun.Peis.Application.Contracts/CustomerReports/GetSummaryOfUnitCostsReportDto.cs
  2. 24
      src/Shentun.Peis.Application.Contracts/CustomerReports/GetSummaryOfUnitCostsReportInputDto.cs
  3. 127
      src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs
  4. 4
      src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs

61
src/Shentun.Peis.Application.Contracts/CustomerReports/GetSummaryOfUnitCostsReportDto.cs

@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.CustomerReports
{
public class GetSummaryOfUnitCostsReportDto
{
/// <summary>
/// 单位名称
/// </summary>
public string CustomerOrgName { get; set; }
/// <summary>
/// 体检开始日期
/// </summary>
public string MedicalStartDate { get; set; }
/// <summary>
/// 登记人数
/// </summary>
public int RegisterCount { get; set; }
/// <summary>
/// 实检人数 有一项检查就算
/// </summary>
public int CheckCount { get; set;}
/// <summary>
/// 登记总金额 标准价
/// </summary>
public decimal RegisterStandardAmount { get; set; }
/// <summary>
/// 登记折后总金额 实收价
/// </summary>
public decimal RegisterChargeAmount { get; set; }
/// <summary>
/// 实检总金额 有一项检查就算 标准价
/// </summary>
public decimal CheckStandardAmount { get; set; }
/// <summary>
/// 实检折后总金额 实收价
/// </summary>
public decimal CheckChargeAmount { get; set; }
/// <summary>
/// 实检项目金额 标准价
/// </summary>
public decimal CheckItemStandardAmount { get; set; }
/// <summary>
/// 实检项目折后总金额 实收价
/// </summary>
public decimal CheckItemChargeAmount { get; set; }
}
}

24
src/Shentun.Peis.Application.Contracts/CustomerReports/GetSummaryOfUnitCostsReportInputDto.cs

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.CustomerReports
{
public class GetSummaryOfUnitCostsReportInputDto
{
/// <summary>
/// 开始日期
/// </summary>
public string StartDate { get; set; }
/// <summary>
/// 结束日期
/// </summary>
public string EndDate { get; set; }
/// <summary>
/// 单位ID集合
/// </summary>
public List<Guid> CustomerOrgIds { get; set; } = new List<Guid>();
}
}

127
src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs

@ -27,6 +27,7 @@ using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Validation;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace Shentun.Peis.CustomerReports
{
@ -58,6 +59,7 @@ namespace Shentun.Peis.CustomerReports
private readonly CustomerOrgManager _customerOrgManager;
private readonly CustomerOrgReportManager _customerOrgReportManager;
public CustomerReportAppService(
IRepository<Patient, Guid> patientRepository,
IRepository<PatientRegister, Guid> patientRegisterRepository,
@ -2401,6 +2403,131 @@ namespace Shentun.Peis.CustomerReports
}
/// <summary>
/// 获取单位费用汇总报表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/CustomerReport/GetSummaryOfUnitCostsReport")]
public async Task<List<GetSummaryOfUnitCostsReportDto>> GetSummaryOfUnitCostsReportAsync(GetSummaryOfUnitCostsReportInputDto input)
{
if (string.IsNullOrWhiteSpace(input.StartDate) || string.IsNullOrWhiteSpace(input.EndDate))
{
throw new UserFriendlyException("日期不能为空");
}
//根据日期查询单位登记人员
//找出对应的单位次数
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
join customerOrgRegister in await _customerOrgRegisterRepository.GetQueryableAsync() on patientRegister.CustomerOrgRegisterId equals customerOrgRegister.Id
join customerOrg in await _customerOrgRepository.GetQueryableAsync() on customerOrgRegister.CustomerOrgId equals customerOrg.Id
where patientRegister.CustomerOrgRegisterId != GuidFlag.PersonCustomerOrgRegisterId
select new
{
patientRegister,
customerOrgRegister,
customerOrgName = customerOrg.DisplayName
};
query = query.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1));
if (input.CustomerOrgIds.Any())
{
#region 找出子级单位
List<Guid?> customerOrgIds = new List<Guid?>();
foreach (var item in input.CustomerOrgIds)
{
var customerOrgIdsTemp = await _customerOrgManager.GetCustomerOrgChildrenId(item);
if (customerOrgIdsTemp.Any())
{
customerOrgIds.AddRange(customerOrgIdsTemp);
}
}
#endregion
query = query.Where(m => customerOrgIds.Contains(m.patientRegister.CustomerOrgId));
}
var queryList = query.ToList();
List<GetSummaryOfUnitCostsReportDto> entListDto = new List<GetSummaryOfUnitCostsReportDto>();
if (queryList.Count > 0)
{
var customerOrgRegisterList = queryList.GroupBy(g => g.customerOrgRegister).Select(s => new
{
customerOrgRegisterId = s.Key.Id,
customerOrgName = s.FirstOrDefault().customerOrgName,
beginTime = s.Key.BeginTime
}).ToList();
var queryAsbitemList = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
join registerCheckAsbitem in await _registerAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
where customerOrgRegisterList.Select(s => s.customerOrgRegisterId).Contains(patientRegister.CustomerOrgRegisterId)
select new
{
patientRegister,
completeFlag = registerCheck.CompleteFlag,
standardPrice = registerCheckAsbitem.StandardPrice,
chargePrice = registerCheckAsbitem.ChargePrice,
amount = registerCheckAsbitem.Amount
}).ToList();
var customerOrgRegisterGroup = queryAsbitemList.GroupBy(g => g.patientRegister.CustomerOrgRegisterId);
foreach (var item in customerOrgRegisterGroup)
{
//根据体检次数去查人统计
var entDto = new GetSummaryOfUnitCostsReportDto();
entDto.CustomerOrgName = customerOrgRegisterList.FirstOrDefault(f => f.customerOrgRegisterId == item.Key).customerOrgName;
entDto.MedicalStartDate = DataHelper.ConversionDateToString(customerOrgRegisterList.FirstOrDefault(f => f.customerOrgRegisterId == item.Key).beginTime);
//登记分组
var registerGroup = item.Where(m => m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration
|| m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.Registration).GroupBy(g => g.patientRegister);
//实检分组
var checkGroup = item.Where(m => m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PartCheck
|| m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck).GroupBy(g => g.patientRegister);
entDto.RegisterCount = registerGroup.Count();
entDto.CheckCount = checkGroup.Count();
entDto.RegisterStandardAmount = item.Where(m => m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration
|| m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.Registration).Sum(s => s.standardPrice * s.amount);
entDto.RegisterChargeAmount = item.Where(m => m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration
|| m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.Registration).Sum(s => s.chargePrice * s.amount);
entDto.CheckStandardAmount = item.Where(m => m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PartCheck
|| m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck).Sum(s => s.standardPrice * s.amount);
entDto.CheckChargeAmount = item.Where(m => m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PartCheck
|| m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck).Sum(s => s.chargePrice * s.amount);
entDto.CheckItemStandardAmount = item.Where(m => m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PartCheck
|| m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck
&& m.completeFlag != RegisterCheckCompleteFlag.UnChecked).Sum(s => s.standardPrice * s.amount);
entDto.CheckItemChargeAmount = item.Where(m => m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PartCheck
|| m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck
&& m.completeFlag != RegisterCheckCompleteFlag.UnChecked).Sum(s => s.chargePrice * s.amount);
}
}
return entListDto;
}
}

4
src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs

@ -942,7 +942,7 @@ namespace Shentun.Peis.PatientRegisters
{
entity = await _manager.CreateAsync(createPatientRegisterArg);
createRegisterCheckAsbitemEntity = await _registerAsbitemManager.UpdateManyAsync(entity, registerAsbitems);
entity = await _repository.InsertAsync(entity);
entity = await _repository.InsertAsync(entity, true);
createPatientRegisterExterArg.PatientRegisterId = entity.Id;
@ -989,7 +989,7 @@ namespace Shentun.Peis.PatientRegisters
#region 推送人寿状态
if (!string.IsNullOrWhiteSpace(input.ThirdBookingId))
if (!string.IsNullOrWhiteSpace(entity.ThirdBookingId))
{
try
{

Loading…
Cancel
Save