Browse Source

体检报告

master
wxd 4 months ago
parent
commit
00aafda9f5
  1. 29
      src/Shentun.Peis.Application.Contracts/PeisReports/GetPatientRegisterReportWithChargeDto.cs
  2. 4
      src/Shentun.Peis.Application/Asbitems/AsbitemAppService.cs
  3. 358
      src/Shentun.Peis.Application/PeisReports/PeisReportAppService.cs

29
src/Shentun.Peis.Application.Contracts/PeisReports/GetPatientRegisterReportWithChargeDto.cs

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.PeisReports
{
public class GetPatientRegisterReportWithChargeDto: GetPatientRegisterReportDto
{
/// <summary>
/// 标准金额
/// </summary>
public decimal StandardAmount { get; set; }
/// <summary>
/// 应收金额
/// </summary>
public decimal ReceivableAmount { get; set; }
/// <summary>
/// 收费金额
/// </summary>
public decimal ChargeAmount { get; set; }
/// <summary>
/// 收费方式
/// </summary>
public string ChargePayMode { get; set; }
}
}

4
src/Shentun.Peis.Application/Asbitems/AsbitemAppService.cs

@ -150,7 +150,7 @@ namespace Shentun.Peis.Asbitems
FollowUpFunction = s.a.FollowUpFunction,
IsCriticalValueFunction = s.a.IsCriticalValueFunction,
IsFollowUpFunction = s.a.IsFollowUpFunction,
IsPrivacy = s.a.IsPrivacy,
IsPrivacy = s.a.IsPrivacy,
//IsDisablePregnancy = s.a.IsDisablePregnancy,
//IsDisablePreparePregnancy = s.a.IsDisablePreparePregnancy,
CreatorName = s.ab != null ? s.ab.Surname : "",
@ -199,6 +199,8 @@ namespace Shentun.Peis.Asbitems
Price = s.Price,
ShortName = s.ShortName,
SimpleCode = s.SimpleCode,
ForPregnantFlag = s.ForPregnantFlag,
MaritalStatusId = s.MaritalStatusId,
}).OrderBy(o => o.DisplayOrder).ToList();
return entdto;

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

@ -2,6 +2,7 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Shentun.Peis.CustomerOrgGroups;
using Shentun.Peis.CustomerOrgs;
using Shentun.Peis.Enums;
using Shentun.Peis.ItemTypes;
@ -44,6 +45,10 @@ namespace Shentun.Peis.PeisReports
private readonly PatientOccupationalDiseaseManager _patientOccupationalDiseaseManager;
private readonly IRepository<ItemType, Guid> _itemTypeRepository;
private readonly ItemTypeManager _itemTypeManager;
private readonly IRepository<Charge, Guid> _chargeRepository;
private readonly IRepository<ChargePay, Guid> _chargePayRepository;
private readonly IRepository<PayMode> _payModeRepository;
public PeisReportAppService(
IRepository<PatientRegister, Guid> patientRegisterRepository,
IRepository<Patient, Guid> patientRepository,
@ -60,7 +65,10 @@ namespace Shentun.Peis.PeisReports
CacheService cacheService,
PatientOccupationalDiseaseManager patientOccupationalDiseaseManager,
IRepository<ItemType, Guid> itemTypeRepository,
ItemTypeManager itemTypeManager)
ItemTypeManager itemTypeManager,
IRepository<Charge, Guid> chargeRepository,
IRepository<ChargePay, Guid> chargePayRepository,
IRepository<PayMode> payModeRepository)
{
this._patientRegisterRepository = patientRegisterRepository;
this._patientRepository = patientRepository;
@ -78,6 +86,9 @@ namespace Shentun.Peis.PeisReports
_patientOccupationalDiseaseManager = patientOccupationalDiseaseManager;
_itemTypeRepository = itemTypeRepository;
_itemTypeManager = itemTypeManager;
_chargeRepository = chargeRepository;
_chargePayRepository = chargePayRepository;
_payModeRepository = payModeRepository;
}
@ -409,6 +420,351 @@ namespace Shentun.Peis.PeisReports
}
/// <summary>
/// 体检报告查询接口 带收费
/// </summary>
/// <returns></returns>
[HttpPost("api/app/PeisReport/GetPatientRegisterReportWithCharge")]
public async Task<PagedResultDto<GetPatientRegisterReportWithChargeDto>> GetPatientRegisterReportWithChargeAsync(GetPatientRegisterReportRequestDto 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 into registerCheckTemp
from registerCheckHaveEmpty in registerCheckTemp.DefaultIfEmpty()
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheckHaveEmpty.Id equals registerCheckAsbitem.RegisterCheckId into registerCheckAsbitemTemp
from registerCheckAsbitemHaveEmpty in registerCheckAsbitemTemp.DefaultIfEmpty()
join charge in await _chargeRepository.GetQueryableAsync() on patientRegister.Id equals charge.PatientRegisterId into chargeTemp
from chargeHaveEmpty in chargeTemp.DefaultIfEmpty()
join chargePay in await _chargePayRepository.GetQueryableAsync() on chargeHaveEmpty.Id equals chargePay.ChargeId into chargePayTemp
from chargePayHaveEmpty in chargePayTemp.DefaultIfEmpty()
join payMode in await _payModeRepository.GetQueryableAsync() on chargePayHaveEmpty.PayModeId equals payMode.Id into payModeTemp
from payModePayHaveEmpty in payModeTemp.DefaultIfEmpty()
// orderby patientRegister.Id ascending
select new
{
patientRegister = new
{
patientRegister.Id,
patientRegister.CustomerOrgGroupId,
patientRegister.CustomerOrgRegisterId,
patientRegister.CustomerOrgId,
patientRegister.CreationTime,
patientRegister.MedicalStartDate,
patientRegister.SummaryDate,
patientRegister.PatientName,
patientRegister.PatientRegisterNo,
patientRegister.Age,
patientRegister.BirthDate,
patientRegister.CompleteFlag,
patientRegister.IsAudit,
patientRegister.ReportPrintTimes,
patientRegister.MedicalTypeId,
patientRegister.PersonnelTypeId,
patientRegister.IsUpload,
patientRegister.SexId,
patientRegister.CreatorId,
patientRegister.MaritalStatusId,
patientRegister.IsUploadAppoint,
patientRegister.SummaryDoctorId,
patientRegister.MedicalConclusionId,
patientRegister.AuditDate,
patientRegister.AuditDoctorId,
patientRegister.ReportPrintOperating,
patientRegister.IsReceiveReport,
patientRegister.ReportReceiveDate,
patientRegister.ReportReceiveName,
patientRegister.Remark,
patientRegister.MedicalPackageId
},
patient = new { patient.IdNo, patient.Address, patient.PatientNo, patient.MobileTelephone, patient.Telephone, patient.Email, patient.DisplayName },
registerCheckAsbitemHaveEmpty = registerCheckAsbitemHaveEmpty != null ? new
{
registerCheckAsbitemHaveEmpty.StandardPrice,
registerCheckAsbitemHaveEmpty.Amount,
registerCheckAsbitemHaveEmpty.ChargePrice,
registerCheckAsbitemHaveEmpty.IsCharge,
} : null,
payModePayHaveEmpty = payModePayHaveEmpty != null ? new
{
payModePayHaveEmpty.DisplayName
} : null
};
var sumquery = query;
var isIgnoreOtherConditions = false;
if (!string.IsNullOrEmpty(input.PatientRegisterNo))
{
sumquery = sumquery.Where(m => m.patientRegister.PatientRegisterNo == input.PatientRegisterNo);
isIgnoreOtherConditions = true;
}
if (!string.IsNullOrEmpty(input.PatientNo))
{
sumquery = sumquery.Where(m => m.patient.PatientNo == input.PatientNo);
isIgnoreOtherConditions = true;
}
if (isIgnoreOtherConditions)
{
sumquery = sumquery.Where(m => m.patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration);
}
else
{
if (input.CustomerOrgs.Any())
{
var item = input.CustomerOrgs[0];
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));
}
else if (item.DateType == '5')
{
sumquery = sumquery.Where(m => m.patientRegister.AuditDate != null && m.patientRegister.AuditDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.patientRegister.AuditDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
}
}
if (input.CustomerOrgs.Count > 1)
{
foreach (var item2 in input.CustomerOrgs)
{
if (input.CustomerOrgs.IndexOf(item2) > 0)
{
var newquery = query;
if (item2.CustomerOrgGroupId.Any())
{
newquery = newquery.Where(m => m.patientRegister.CustomerOrgGroupId != null && item2.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
}
if (item2.CustomerOrgRegisterId != null && item2.CustomerOrgRegisterId != Guid.Empty)
{
newquery = newquery.Where(m => m.patientRegister.CustomerOrgRegisterId == item2.CustomerOrgRegisterId);
}
if (item2.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item2.CustomerOrgId.Value);
newquery = newquery.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item2.StartDate) && !string.IsNullOrEmpty(item2.EndDate))
{
if (item2.DateType == '1')
{
newquery = newquery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(item2.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '2')
{
newquery = newquery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '3')
{
newquery = newquery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '5')
{
sumquery = sumquery.Where(m => m.patientRegister.AuditDate != null && m.patientRegister.AuditDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.patientRegister.AuditDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
}
sumquery = sumquery.Union(newquery);
}
}
}
}
if (!string.IsNullOrEmpty(input.PatientName))
{
sumquery = sumquery.Where(m => m.patientRegister.PatientName != null && m.patientRegister.PatientName.Contains(input.PatientName));
}
if (!string.IsNullOrEmpty(input.phone))
{
sumquery = sumquery.Where(m => m.patient.MobileTelephone == input.phone || m.patient.Telephone == input.phone);
}
if (input.CompleteFlag != null && input.CompleteFlag != PatientRegisterCompleteFlag.ItemCheckUnSumCheck)
{
sumquery = sumquery.Where(m => m.patientRegister.CompleteFlag == input.CompleteFlag);
}
//else
//{
// sumquery = sumquery.Where(m => m.patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration);
//}
if (input.IsAudit != null)
{
sumquery = sumquery.Where(m => m.patientRegister.IsAudit == input.IsAudit);
}
if (input.IsReportPrint != null)
{
if (input.IsReportPrint == 'Y')
{
sumquery = sumquery.Where(m => m.patientRegister.ReportPrintTimes > 0);
}
else
{
sumquery = sumquery.Where(m => m.patientRegister.ReportPrintTimes == 0);
}
}
if (input.MedicalTypeIds.Any())
{
sumquery = sumquery.Where(m => m.patientRegister.MedicalTypeId != null && input.MedicalTypeIds.Contains(m.patientRegister.MedicalTypeId.Value));
}
if (input.PersonnelTypeId != null)
{
sumquery = sumquery.Where(m => m.patientRegister.PersonnelTypeId == input.PersonnelTypeId);
}
if (input.IsUpload != null)
{
sumquery = sumquery.Where(m => m.patientRegister.IsUpload == input.IsUpload);
}
if (!string.IsNullOrEmpty(input.IdNo))
{
sumquery = sumquery.Where(m => m.patient.IdNo == input.IdNo);
}
}
if (input.MedicalConclusionIds.Any())
{
sumquery = sumquery.Where(m => m.patientRegister.MedicalConclusionId != null && input.MedicalConclusionIds.Contains(m.patientRegister.MedicalConclusionId.Value));
}
var queryGroup = sumquery.ToList().GroupBy(g => g.patientRegister);
int totalCount = queryGroup.Count();
var pagedGroups = queryGroup
.OrderByDescending(g => g.Key.CompleteFlag)
.ThenBy(g => g.Key.Id)
.Skip(input.SkipCount * input.MaxResultCount)
.Take(input.MaxResultCount)
.ToList();
// var sumqueryGroup = sumquery.Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount).ToList();
List<GetPatientRegisterReportWithChargeDto> entListDto = new List<GetPatientRegisterReportWithChargeDto>();
foreach (var group in pagedGroups)
{
var groupFirst = group.FirstOrDefault();
var entDto = new GetPatientRegisterReportWithChargeDto
{
Address = groupFirst.patient.Address,
PatientName = group.Key.PatientName,
Age = group.Key.Age,
BirthDate = DataHelper.ConversionDateToString(group.Key.BirthDate),
CompleteFlag = group.Key.CompleteFlag,
CustomerOrgGroupName = group.Key.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(group.Key.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName,
CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(group.Key.CustomerOrgId).GetAwaiter().GetResult(),
DepartmentName = _cacheService.GetCustomerOrgNameAsync(group.Key.CustomerOrgId).GetAwaiter().GetResult(),
Email = groupFirst.patient.Email,
IdNo = groupFirst.patient.IdNo,
IsAudit = group.Key.IsAudit,
IsReportPrint = group.Key.ReportPrintTimes > 0 ? 'Y' : 'N',
MedicalPackageName = group.Key.MedicalPackageId == null ? "" : _cacheService.GetMedicalPackageAsync(group.Key.MedicalPackageId.Value).GetAwaiter().GetResult().DisplayName,
MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(group.Key.MedicalTypeId).GetAwaiter().GetResult(),
MobileTelephone = groupFirst.patient.MobileTelephone,
PatientNo = groupFirst.patient.PatientNo,
PatientRegisterNo = group.Key.PatientRegisterNo,
PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(group.Key.PersonnelTypeId).GetAwaiter().GetResult(),
SexName = _cacheService.GetSexNameAsync(group.Key.SexId).GetAwaiter().GetResult(),
Telephone = groupFirst.patient.Telephone,
PatientRegisterId = group.Key.Id,
MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(group.Key.MaritalStatusId).GetAwaiter().GetResult(),
RegisterName = _cacheService.GetSurnameAsync(group.Key.CreatorId).GetAwaiter().GetResult(),
RegisterDate = DataHelper.ConversionDateToString(group.Key.CreationTime),
IsUpload = group.Key.IsUpload,
IsUploadAppoint = group.Key.IsUploadAppoint,
IsPatientOccupationalDisease = _patientOccupationalDiseaseManager.GetPatientRegisterIsOccupationalDisease(group.Key.Id).GetAwaiter().GetResult(),
MedicalStartDate = DataHelper.ConversionDateShortToString(group.Key.MedicalStartDate),
SummaryDate = DataHelper.ConversionDateShortToString(group.Key.SummaryDate),
SummaryDoctorName = _cacheService.GetSurnameAsync(group.Key.SummaryDoctorId).GetAwaiter().GetResult(),
AuditDate = DataHelper.ConversionDateShortToString(group.Key.AuditDate),
AuditDoctorName = _cacheService.GetSurnameAsync(group.Key.AuditDoctorId).GetAwaiter().GetResult(),
ReportPrintName = _cacheService.GetSurnameAsync(group.Key.ReportPrintOperating).GetAwaiter().GetResult(),
IsReceiveReport = group.Key.IsReceiveReport,
ReportReceiveDate = DataHelper.ConversionDateShortToString(group.Key.ReportReceiveDate),
ReportReceiveName = group.Key.ReportReceiveName,
Remark = group.Key.Remark
};
entDto.StandardAmount = 0;
entDto.ReceivableAmount = 0;
entDto.ChargeAmount = 0;
entDto.ChargePayMode = "";
if (group.Count(m => m.registerCheckAsbitemHaveEmpty != null) > 0)
{
entDto.StandardAmount = group.GroupBy(g => g.registerCheckAsbitemHaveEmpty).Sum(s => s.Key.StandardPrice * s.Key.Amount);
entDto.ReceivableAmount = group.GroupBy(g => g.registerCheckAsbitemHaveEmpty).Sum(s => s.Key.ChargePrice * s.Key.Amount);
entDto.ChargeAmount = group.Where(m => m.registerCheckAsbitemHaveEmpty.IsCharge == 'Y').GroupBy(g => g.registerCheckAsbitemHaveEmpty).Sum(s => s.Key.ChargePrice * s.Key.Amount);
}
if (group.Count(m => m.payModePayHaveEmpty != null) > 0)
{
entDto.ChargePayMode = string.Join(",", group.Where(m => m.payModePayHaveEmpty != null).GroupBy(g => g.payModePayHaveEmpty).Select(s => s.Key.DisplayName));
}
entListDto.Add(entDto);
}
return new PagedResultDto<GetPatientRegisterReportWithChargeDto>(totalCount, entListDto);
}
/// <summary>
/// 查询 检查项目状态 RegisterAsbitem为主表 筛选registercheck表状态
/// </summary>

Loading…
Cancel
Save