|
|
|
@ -1,6 +1,8 @@ |
|
|
|
using Microsoft.AspNetCore.Authorization; |
|
|
|
using Azure; |
|
|
|
using Microsoft.AspNetCore.Authorization; |
|
|
|
using Microsoft.AspNetCore.Mvc; |
|
|
|
using Microsoft.AspNetCore.Mvc.Routing; |
|
|
|
using Microsoft.CodeAnalysis.CSharp.Syntax; |
|
|
|
using Microsoft.EntityFrameworkCore; |
|
|
|
using Microsoft.EntityFrameworkCore.Metadata.Internal; |
|
|
|
using NPOI.HPSF; |
|
|
|
@ -2646,6 +2648,673 @@ namespace Shentun.Peis.CustomerReports |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#region 单位个人已检统计
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 单位个人已检统计
|
|
|
|
/// </summary>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpPost("api/app/CustomerReport/GetCustomerOrPersonCheckedStatistics")] |
|
|
|
public async Task<List<GetCustomerOrPersonCheckedStatisticsDto>> GetCustomerOrPersonCheckedStatisticsAsync(GetCustomerOrPersonCheckedStatisticsInputDto input) |
|
|
|
{ |
|
|
|
if (input.StatisticsType == '1') |
|
|
|
{ |
|
|
|
return await GetCustomerOrPersonCheckedStatistics01Async(input); |
|
|
|
} |
|
|
|
else if (input.StatisticsType == '2') |
|
|
|
{ |
|
|
|
return await GetCustomerOrPersonCheckedStatistics02Async(input); |
|
|
|
} |
|
|
|
else if (input.StatisticsType == '3') |
|
|
|
{ |
|
|
|
return await GetCustomerOrPersonCheckedStatistics03Async(input); |
|
|
|
} |
|
|
|
else if (input.StatisticsType == '4') |
|
|
|
{ |
|
|
|
return await GetCustomerOrPersonCheckedStatistics04Async(input); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
return await GetCustomerOrPersonCheckedStatistics05Async(input); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 1-按实检组合项目
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private async Task<List<GetCustomerOrPersonCheckedStatisticsDto>> GetCustomerOrPersonCheckedStatistics01Async(GetCustomerOrPersonCheckedStatisticsInputDto input) |
|
|
|
{ |
|
|
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync() |
|
|
|
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id |
|
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId |
|
|
|
join registerCheckAsbitem in await _registerAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId |
|
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id |
|
|
|
join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id |
|
|
|
where registerCheck.CompleteFlag == RegisterCheckCompleteFlag.Checked |
|
|
|
select new |
|
|
|
{ |
|
|
|
patientRegister, |
|
|
|
patient, |
|
|
|
registerCheckAsbitem, |
|
|
|
asbitem = new |
|
|
|
{ |
|
|
|
asbitem.DisplayName, |
|
|
|
asbitem.DisplayOrder |
|
|
|
}, |
|
|
|
itemTypeDisplayOrder = itemType.DisplayOrder |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
if (!input.CustomerOrgs.Any()) |
|
|
|
{ |
|
|
|
throw new UserFriendlyException("请选择条件"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var queryNull = query.Where(x => false); |
|
|
|
|
|
|
|
foreach (var item in input.CustomerOrgs) |
|
|
|
{ |
|
|
|
var sumquery = query; |
|
|
|
|
|
|
|
if (item.CustomerOrgGroupId.Any()) |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value)); |
|
|
|
} |
|
|
|
if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty) |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgRegisterId == item.CustomerOrgRegisterId); |
|
|
|
} |
|
|
|
if (item.CustomerOrgId != null) |
|
|
|
{ |
|
|
|
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value); |
|
|
|
sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId)); |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate)) |
|
|
|
{ |
|
|
|
if (item.DateType == '1') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
else if (item.DateType == '2') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
else if (item.DateType == '3') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
queryNull = queryNull.Union(sumquery); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var queryGroup = queryNull.ToList().GroupBy(g => g.patientRegister); |
|
|
|
|
|
|
|
List<GetCustomerOrPersonCheckedStatisticsDto> entListDto = new List<GetCustomerOrPersonCheckedStatisticsDto>(); |
|
|
|
|
|
|
|
foreach (var item in queryGroup) |
|
|
|
{ |
|
|
|
var itemFirst = item.FirstOrDefault(); |
|
|
|
|
|
|
|
var entDto = new GetCustomerOrPersonCheckedStatisticsDto |
|
|
|
{ |
|
|
|
Age = item.Key.Age, |
|
|
|
IdNo = itemFirst.patient.IdNo, |
|
|
|
MedicalTimes = item.Key.MedicalTimes, |
|
|
|
SexName = _cacheService.GetSexNameAsync(item.Key.SexId).GetAwaiter().GetResult(), |
|
|
|
PatientNo = itemFirst.patient.PatientNo, |
|
|
|
PatientName = item.Key.PatientName, |
|
|
|
PatientRegisterNo = item.Key.PatientRegisterNo, |
|
|
|
CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(item.Key.CustomerOrgId).GetAwaiter().GetResult(), |
|
|
|
DepartmentName = _cacheService.GetCustomerOrgNameAsync(item.Key.CustomerOrgId).GetAwaiter().GetResult() |
|
|
|
}; |
|
|
|
|
|
|
|
if (item.Key.CustomerOrgGroupId != null && item.Key.CustomerOrgGroupId != Guid.Empty) |
|
|
|
{ |
|
|
|
entDto.GroupPackageName = _cacheService.GetCustomerOrgGroupAsync(item.Key.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName; |
|
|
|
} |
|
|
|
else if (item.Key.MedicalPackageId != null && item.Key.MedicalPackageId != Guid.Empty) |
|
|
|
{ |
|
|
|
entDto.GroupPackageName = _cacheService.GetMedicalPackageAsync(item.Key.MedicalPackageId.Value).GetAwaiter().GetResult().DisplayName; |
|
|
|
} |
|
|
|
|
|
|
|
List<GetCustomerOrPersonCheckedStatisticsDetailDto> asbitemDetail = item.GroupBy(g => g.registerCheckAsbitem).Select(s => new GetCustomerOrPersonCheckedStatisticsDetailDto |
|
|
|
{ |
|
|
|
AsbitemName = s.FirstOrDefault().asbitem.DisplayName + $"({Math.Round(s.Key.ChargePrice * s.Key.Amount, 2)})", |
|
|
|
AsbitemDisplayOrder = s.FirstOrDefault().itemTypeDisplayOrder * 3000 + s.FirstOrDefault().asbitem.DisplayOrder, |
|
|
|
AsbitemPrice = Math.Round(s.Key.ChargePrice * s.Key.Amount, 2) |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
entDto.CheckedAsbitem = string.Join(",", asbitemDetail.Select(s => s.AsbitemName)); |
|
|
|
entDto.AsbitemPrice = Math.Round(asbitemDetail.Sum(s => s.AsbitemPrice)); |
|
|
|
|
|
|
|
entListDto.Add(entDto); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return entListDto; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 2-按实检人员(只检一项则全部算已检)
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private async Task<List<GetCustomerOrPersonCheckedStatisticsDto>> GetCustomerOrPersonCheckedStatistics02Async(GetCustomerOrPersonCheckedStatisticsInputDto input) |
|
|
|
{ |
|
|
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync() |
|
|
|
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id |
|
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId |
|
|
|
join registerCheckAsbitem in await _registerAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId |
|
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id |
|
|
|
join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id |
|
|
|
where patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PartCheck |
|
|
|
select new |
|
|
|
{ |
|
|
|
patientRegister, |
|
|
|
patient, |
|
|
|
registerCheckAsbitem, |
|
|
|
asbitem = new |
|
|
|
{ |
|
|
|
asbitem.DisplayName, |
|
|
|
asbitem.DisplayOrder |
|
|
|
}, |
|
|
|
itemTypeDisplayOrder = itemType.DisplayOrder |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
if (!input.CustomerOrgs.Any()) |
|
|
|
{ |
|
|
|
throw new UserFriendlyException("请选择条件"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var queryNull = query.Where(x => false); |
|
|
|
|
|
|
|
foreach (var item in input.CustomerOrgs) |
|
|
|
{ |
|
|
|
var sumquery = query; |
|
|
|
|
|
|
|
if (item.CustomerOrgGroupId.Any()) |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value)); |
|
|
|
} |
|
|
|
if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty) |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgRegisterId == item.CustomerOrgRegisterId); |
|
|
|
} |
|
|
|
if (item.CustomerOrgId != null) |
|
|
|
{ |
|
|
|
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value); |
|
|
|
sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId)); |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate)) |
|
|
|
{ |
|
|
|
if (item.DateType == '1') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
else if (item.DateType == '2') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
else if (item.DateType == '3') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
queryNull = queryNull.Union(sumquery); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var queryGroup = queryNull.ToList().GroupBy(g => g.patientRegister); |
|
|
|
|
|
|
|
List<GetCustomerOrPersonCheckedStatisticsDto> entListDto = new List<GetCustomerOrPersonCheckedStatisticsDto>(); |
|
|
|
|
|
|
|
foreach (var item in queryGroup) |
|
|
|
{ |
|
|
|
var itemFirst = item.FirstOrDefault(); |
|
|
|
|
|
|
|
var entDto = new GetCustomerOrPersonCheckedStatisticsDto |
|
|
|
{ |
|
|
|
Age = item.Key.Age, |
|
|
|
IdNo = itemFirst.patient.IdNo, |
|
|
|
MedicalTimes = item.Key.MedicalTimes, |
|
|
|
SexName = _cacheService.GetSexNameAsync(item.Key.SexId).GetAwaiter().GetResult(), |
|
|
|
PatientNo = itemFirst.patient.PatientNo, |
|
|
|
PatientName = item.Key.PatientName, |
|
|
|
PatientRegisterNo = item.Key.PatientRegisterNo, |
|
|
|
CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(item.Key.CustomerOrgId).GetAwaiter().GetResult(), |
|
|
|
DepartmentName = _cacheService.GetCustomerOrgNameAsync(item.Key.CustomerOrgId).GetAwaiter().GetResult() |
|
|
|
}; |
|
|
|
|
|
|
|
if (item.Key.CustomerOrgGroupId != null && item.Key.CustomerOrgGroupId != Guid.Empty) |
|
|
|
{ |
|
|
|
entDto.GroupPackageName = _cacheService.GetCustomerOrgGroupAsync(item.Key.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName; |
|
|
|
} |
|
|
|
else if (item.Key.MedicalPackageId != null && item.Key.MedicalPackageId != Guid.Empty) |
|
|
|
{ |
|
|
|
entDto.GroupPackageName = _cacheService.GetMedicalPackageAsync(item.Key.MedicalPackageId.Value).GetAwaiter().GetResult().DisplayName; |
|
|
|
} |
|
|
|
|
|
|
|
List<GetCustomerOrPersonCheckedStatisticsDetailDto> asbitemDetail = item.GroupBy(g => g.registerCheckAsbitem).Select(s => new GetCustomerOrPersonCheckedStatisticsDetailDto |
|
|
|
{ |
|
|
|
AsbitemName = s.FirstOrDefault().asbitem.DisplayName + $"({Math.Round(s.Key.ChargePrice * s.Key.Amount, 2)})", |
|
|
|
AsbitemDisplayOrder = s.FirstOrDefault().itemTypeDisplayOrder * 3000 + s.FirstOrDefault().asbitem.DisplayOrder, |
|
|
|
AsbitemPrice = Math.Round(s.Key.ChargePrice * s.Key.Amount, 2) |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
entDto.CheckedAsbitem = string.Join(",", asbitemDetail.Select(s => s.AsbitemName)); |
|
|
|
entDto.AsbitemPrice = Math.Round(asbitemDetail.Sum(s => s.AsbitemPrice)); |
|
|
|
|
|
|
|
entListDto.Add(entDto); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return entListDto; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 3-按实检人员(只检一项则全部算已检且仅单位支付)
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private async Task<List<GetCustomerOrPersonCheckedStatisticsDto>> GetCustomerOrPersonCheckedStatistics03Async(GetCustomerOrPersonCheckedStatisticsInputDto input) |
|
|
|
{ |
|
|
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync() |
|
|
|
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id |
|
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId |
|
|
|
join registerCheckAsbitem in await _registerAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId |
|
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id |
|
|
|
join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id |
|
|
|
where patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PartCheck && registerCheckAsbitem.PayTypeFlag == PayTypeFlag.OrgPay |
|
|
|
select new |
|
|
|
{ |
|
|
|
patientRegister, |
|
|
|
patient, |
|
|
|
registerCheckAsbitem, |
|
|
|
asbitem = new |
|
|
|
{ |
|
|
|
asbitem.DisplayName, |
|
|
|
asbitem.DisplayOrder |
|
|
|
}, |
|
|
|
itemTypeDisplayOrder = itemType.DisplayOrder |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
if (!input.CustomerOrgs.Any()) |
|
|
|
{ |
|
|
|
throw new UserFriendlyException("请选择条件"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var queryNull = query.Where(x => false); |
|
|
|
|
|
|
|
foreach (var item in input.CustomerOrgs) |
|
|
|
{ |
|
|
|
var sumquery = query; |
|
|
|
|
|
|
|
if (item.CustomerOrgGroupId.Any()) |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value)); |
|
|
|
} |
|
|
|
if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty) |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgRegisterId == item.CustomerOrgRegisterId); |
|
|
|
} |
|
|
|
if (item.CustomerOrgId != null) |
|
|
|
{ |
|
|
|
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value); |
|
|
|
sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId)); |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate)) |
|
|
|
{ |
|
|
|
if (item.DateType == '1') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
else if (item.DateType == '2') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
else if (item.DateType == '3') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
queryNull = queryNull.Union(sumquery); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var queryGroup = queryNull.ToList().GroupBy(g => g.patientRegister); |
|
|
|
|
|
|
|
List<GetCustomerOrPersonCheckedStatisticsDto> entListDto = new List<GetCustomerOrPersonCheckedStatisticsDto>(); |
|
|
|
|
|
|
|
foreach (var item in queryGroup) |
|
|
|
{ |
|
|
|
var itemFirst = item.FirstOrDefault(); |
|
|
|
|
|
|
|
var entDto = new GetCustomerOrPersonCheckedStatisticsDto |
|
|
|
{ |
|
|
|
Age = item.Key.Age, |
|
|
|
IdNo = itemFirst.patient.IdNo, |
|
|
|
MedicalTimes = item.Key.MedicalTimes, |
|
|
|
SexName = _cacheService.GetSexNameAsync(item.Key.SexId).GetAwaiter().GetResult(), |
|
|
|
PatientNo = itemFirst.patient.PatientNo, |
|
|
|
PatientName = item.Key.PatientName, |
|
|
|
PatientRegisterNo = item.Key.PatientRegisterNo, |
|
|
|
CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(item.Key.CustomerOrgId).GetAwaiter().GetResult(), |
|
|
|
DepartmentName = _cacheService.GetCustomerOrgNameAsync(item.Key.CustomerOrgId).GetAwaiter().GetResult() |
|
|
|
}; |
|
|
|
|
|
|
|
if (item.Key.CustomerOrgGroupId != null && item.Key.CustomerOrgGroupId != Guid.Empty) |
|
|
|
{ |
|
|
|
entDto.GroupPackageName = _cacheService.GetCustomerOrgGroupAsync(item.Key.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName; |
|
|
|
} |
|
|
|
else if (item.Key.MedicalPackageId != null && item.Key.MedicalPackageId != Guid.Empty) |
|
|
|
{ |
|
|
|
entDto.GroupPackageName = _cacheService.GetMedicalPackageAsync(item.Key.MedicalPackageId.Value).GetAwaiter().GetResult().DisplayName; |
|
|
|
} |
|
|
|
|
|
|
|
List<GetCustomerOrPersonCheckedStatisticsDetailDto> asbitemDetail = item.GroupBy(g => g.registerCheckAsbitem).Select(s => new GetCustomerOrPersonCheckedStatisticsDetailDto |
|
|
|
{ |
|
|
|
AsbitemName = s.FirstOrDefault().asbitem.DisplayName + $"({Math.Round(s.Key.ChargePrice * s.Key.Amount, 2)})", |
|
|
|
AsbitemDisplayOrder = s.FirstOrDefault().itemTypeDisplayOrder * 3000 + s.FirstOrDefault().asbitem.DisplayOrder, |
|
|
|
AsbitemPrice = Math.Round(s.Key.ChargePrice * s.Key.Amount, 2) |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
entDto.CheckedAsbitem = string.Join(",", asbitemDetail.Select(s => s.AsbitemName)); |
|
|
|
entDto.AsbitemPrice = Math.Round(asbitemDetail.Sum(s => s.AsbitemPrice)); |
|
|
|
|
|
|
|
entListDto.Add(entDto); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return entListDto; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 4-按实检人员(只检一项则全部算已检且仅个人支付)
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private async Task<List<GetCustomerOrPersonCheckedStatisticsDto>> GetCustomerOrPersonCheckedStatistics04Async(GetCustomerOrPersonCheckedStatisticsInputDto input) |
|
|
|
{ |
|
|
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync() |
|
|
|
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id |
|
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId |
|
|
|
join registerCheckAsbitem in await _registerAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId |
|
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id |
|
|
|
join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id |
|
|
|
where patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PartCheck && registerCheckAsbitem.PayTypeFlag == PayTypeFlag.PersonPay |
|
|
|
select new |
|
|
|
{ |
|
|
|
patientRegister, |
|
|
|
patient, |
|
|
|
registerCheckAsbitem, |
|
|
|
asbitem = new |
|
|
|
{ |
|
|
|
asbitem.DisplayName, |
|
|
|
asbitem.DisplayOrder |
|
|
|
}, |
|
|
|
itemTypeDisplayOrder = itemType.DisplayOrder |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
if (!input.CustomerOrgs.Any()) |
|
|
|
{ |
|
|
|
throw new UserFriendlyException("请选择条件"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var queryNull = query.Where(x => false); |
|
|
|
|
|
|
|
foreach (var item in input.CustomerOrgs) |
|
|
|
{ |
|
|
|
var sumquery = query; |
|
|
|
|
|
|
|
if (item.CustomerOrgGroupId.Any()) |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value)); |
|
|
|
} |
|
|
|
if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty) |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgRegisterId == item.CustomerOrgRegisterId); |
|
|
|
} |
|
|
|
if (item.CustomerOrgId != null) |
|
|
|
{ |
|
|
|
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value); |
|
|
|
sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId)); |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate)) |
|
|
|
{ |
|
|
|
if (item.DateType == '1') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
else if (item.DateType == '2') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
else if (item.DateType == '3') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
queryNull = queryNull.Union(sumquery); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var queryGroup = queryNull.ToList().GroupBy(g => g.patientRegister); |
|
|
|
|
|
|
|
List<GetCustomerOrPersonCheckedStatisticsDto> entListDto = new List<GetCustomerOrPersonCheckedStatisticsDto>(); |
|
|
|
|
|
|
|
foreach (var item in queryGroup) |
|
|
|
{ |
|
|
|
var itemFirst = item.FirstOrDefault(); |
|
|
|
|
|
|
|
var entDto = new GetCustomerOrPersonCheckedStatisticsDto |
|
|
|
{ |
|
|
|
Age = item.Key.Age, |
|
|
|
IdNo = itemFirst.patient.IdNo, |
|
|
|
MedicalTimes = item.Key.MedicalTimes, |
|
|
|
SexName = _cacheService.GetSexNameAsync(item.Key.SexId).GetAwaiter().GetResult(), |
|
|
|
PatientNo = itemFirst.patient.PatientNo, |
|
|
|
PatientName = item.Key.PatientName, |
|
|
|
PatientRegisterNo = item.Key.PatientRegisterNo, |
|
|
|
CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(item.Key.CustomerOrgId).GetAwaiter().GetResult(), |
|
|
|
DepartmentName = _cacheService.GetCustomerOrgNameAsync(item.Key.CustomerOrgId).GetAwaiter().GetResult() |
|
|
|
}; |
|
|
|
|
|
|
|
if (item.Key.CustomerOrgGroupId != null && item.Key.CustomerOrgGroupId != Guid.Empty) |
|
|
|
{ |
|
|
|
entDto.GroupPackageName = _cacheService.GetCustomerOrgGroupAsync(item.Key.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName; |
|
|
|
} |
|
|
|
else if (item.Key.MedicalPackageId != null && item.Key.MedicalPackageId != Guid.Empty) |
|
|
|
{ |
|
|
|
entDto.GroupPackageName = _cacheService.GetMedicalPackageAsync(item.Key.MedicalPackageId.Value).GetAwaiter().GetResult().DisplayName; |
|
|
|
} |
|
|
|
|
|
|
|
List<GetCustomerOrPersonCheckedStatisticsDetailDto> asbitemDetail = item.GroupBy(g => g.registerCheckAsbitem).Select(s => new GetCustomerOrPersonCheckedStatisticsDetailDto |
|
|
|
{ |
|
|
|
AsbitemName = s.FirstOrDefault().asbitem.DisplayName + $"({Math.Round(s.Key.ChargePrice * s.Key.Amount, 2)})", |
|
|
|
AsbitemDisplayOrder = s.FirstOrDefault().itemTypeDisplayOrder * 3000 + s.FirstOrDefault().asbitem.DisplayOrder, |
|
|
|
AsbitemPrice = Math.Round(s.Key.ChargePrice * s.Key.Amount, 2) |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
entDto.CheckedAsbitem = string.Join(",", asbitemDetail.Select(s => s.AsbitemName)); |
|
|
|
entDto.AsbitemPrice = Math.Round(asbitemDetail.Sum(s => s.AsbitemPrice)); |
|
|
|
|
|
|
|
entListDto.Add(entDto); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return entListDto; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 5-按收费组合项目
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private async Task<List<GetCustomerOrPersonCheckedStatisticsDto>> GetCustomerOrPersonCheckedStatistics05Async(GetCustomerOrPersonCheckedStatisticsInputDto input) |
|
|
|
{ |
|
|
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync() |
|
|
|
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id |
|
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId |
|
|
|
join registerCheckAsbitem in await _registerAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId |
|
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id |
|
|
|
join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id |
|
|
|
where registerCheckAsbitem.IsCharge == 'Y' |
|
|
|
select new |
|
|
|
{ |
|
|
|
patientRegister, |
|
|
|
patient, |
|
|
|
registerCheckAsbitem, |
|
|
|
asbitem = new |
|
|
|
{ |
|
|
|
asbitem.DisplayName, |
|
|
|
asbitem.DisplayOrder |
|
|
|
}, |
|
|
|
itemTypeDisplayOrder = itemType.DisplayOrder |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
if (!input.CustomerOrgs.Any()) |
|
|
|
{ |
|
|
|
throw new UserFriendlyException("请选择条件"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var queryNull = query.Where(x => false); |
|
|
|
|
|
|
|
foreach (var item in input.CustomerOrgs) |
|
|
|
{ |
|
|
|
var sumquery = query; |
|
|
|
|
|
|
|
if (item.CustomerOrgGroupId.Any()) |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value)); |
|
|
|
} |
|
|
|
if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty) |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CustomerOrgRegisterId == item.CustomerOrgRegisterId); |
|
|
|
} |
|
|
|
if (item.CustomerOrgId != null) |
|
|
|
{ |
|
|
|
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value); |
|
|
|
sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId)); |
|
|
|
} |
|
|
|
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate)) |
|
|
|
{ |
|
|
|
if (item.DateType == '1') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
else if (item.DateType == '2') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
else if (item.DateType == '3') |
|
|
|
{ |
|
|
|
sumquery = sumquery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) && |
|
|
|
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
queryNull = queryNull.Union(sumquery); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var queryGroup = queryNull.ToList().GroupBy(g => g.patientRegister); |
|
|
|
|
|
|
|
List<GetCustomerOrPersonCheckedStatisticsDto> entListDto = new List<GetCustomerOrPersonCheckedStatisticsDto>(); |
|
|
|
|
|
|
|
foreach (var item in queryGroup) |
|
|
|
{ |
|
|
|
var itemFirst = item.FirstOrDefault(); |
|
|
|
|
|
|
|
var entDto = new GetCustomerOrPersonCheckedStatisticsDto |
|
|
|
{ |
|
|
|
Age = item.Key.Age, |
|
|
|
IdNo = itemFirst.patient.IdNo, |
|
|
|
MedicalTimes = item.Key.MedicalTimes, |
|
|
|
SexName = _cacheService.GetSexNameAsync(item.Key.SexId).GetAwaiter().GetResult(), |
|
|
|
PatientNo = itemFirst.patient.PatientNo, |
|
|
|
PatientName = item.Key.PatientName, |
|
|
|
PatientRegisterNo = item.Key.PatientRegisterNo, |
|
|
|
CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(item.Key.CustomerOrgId).GetAwaiter().GetResult(), |
|
|
|
DepartmentName = _cacheService.GetCustomerOrgNameAsync(item.Key.CustomerOrgId).GetAwaiter().GetResult() |
|
|
|
}; |
|
|
|
|
|
|
|
if (item.Key.CustomerOrgGroupId != null && item.Key.CustomerOrgGroupId != Guid.Empty) |
|
|
|
{ |
|
|
|
entDto.GroupPackageName = _cacheService.GetCustomerOrgGroupAsync(item.Key.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName; |
|
|
|
} |
|
|
|
else if (item.Key.MedicalPackageId != null && item.Key.MedicalPackageId != Guid.Empty) |
|
|
|
{ |
|
|
|
entDto.GroupPackageName = _cacheService.GetMedicalPackageAsync(item.Key.MedicalPackageId.Value).GetAwaiter().GetResult().DisplayName; |
|
|
|
} |
|
|
|
|
|
|
|
List<GetCustomerOrPersonCheckedStatisticsDetailDto> asbitemDetail = item.GroupBy(g => g.registerCheckAsbitem).Select(s => new GetCustomerOrPersonCheckedStatisticsDetailDto |
|
|
|
{ |
|
|
|
AsbitemName = s.FirstOrDefault().asbitem.DisplayName + $"({Math.Round(s.Key.ChargePrice * s.Key.Amount, 2)})", |
|
|
|
AsbitemDisplayOrder = s.FirstOrDefault().itemTypeDisplayOrder * 3000 + s.FirstOrDefault().asbitem.DisplayOrder, |
|
|
|
AsbitemPrice = Math.Round(s.Key.ChargePrice * s.Key.Amount, 2) |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
entDto.CheckedAsbitem = string.Join(",", asbitemDetail.Select(s => s.AsbitemName)); |
|
|
|
entDto.AsbitemPrice = Math.Round(asbitemDetail.Sum(s => s.AsbitemPrice)); |
|
|
|
|
|
|
|
entListDto.Add(entDto); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return entListDto; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|