diff --git a/src/Shentun.Peis.Application.Contracts/CustomerReports/GetSummaryOfUnitCostsReportDto.cs b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetSummaryOfUnitCostsReportDto.cs new file mode 100644 index 0000000..d3098b1 --- /dev/null +++ b/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 + { + /// + /// 单位名称 + /// + public string CustomerOrgName { get; set; } + + /// + /// 体检开始日期 + /// + public string MedicalStartDate { get; set; } + + /// + /// 登记人数 + /// + public int RegisterCount { get; set; } + + /// + /// 实检人数 有一项检查就算 + /// + public int CheckCount { get; set;} + + /// + /// 登记总金额 标准价 + /// + public decimal RegisterStandardAmount { get; set; } + + /// + /// 登记折后总金额 实收价 + /// + public decimal RegisterChargeAmount { get; set; } + + /// + /// 实检总金额 有一项检查就算 标准价 + /// + public decimal CheckStandardAmount { get; set; } + + + /// + /// 实检折后总金额 实收价 + /// + public decimal CheckChargeAmount { get; set; } + + + /// + /// 实检项目金额 标准价 + /// + public decimal CheckItemStandardAmount { get; set; } + + /// + /// 实检项目折后总金额 实收价 + /// + public decimal CheckItemChargeAmount { get; set; } + } +} diff --git a/src/Shentun.Peis.Application.Contracts/CustomerReports/GetSummaryOfUnitCostsReportInputDto.cs b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetSummaryOfUnitCostsReportInputDto.cs new file mode 100644 index 0000000..30b73b2 --- /dev/null +++ b/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 + { + /// + /// 开始日期 + /// + public string StartDate { get; set; } + + /// + /// 结束日期 + /// + public string EndDate { get; set; } + + /// + /// 单位ID集合 + /// + public List CustomerOrgIds { get; set; } = new List(); + } +} diff --git a/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs b/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs index 1e1d516..b38bd2e 100644 --- a/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs +++ b/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 patientRepository, IRepository patientRegisterRepository, @@ -2401,6 +2403,131 @@ namespace Shentun.Peis.CustomerReports } + /// + /// 获取单位费用汇总报表 + /// + /// + /// + [HttpPost("api/app/CustomerReport/GetSummaryOfUnitCostsReport")] + public async Task> 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 customerOrgIds = new List(); + + 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 entListDto = new List(); + + 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; + + } } diff --git a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs index f781ab7..869e514 100644 --- a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs +++ b/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 {