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
{