diff --git a/src/Shentun.Peis.Application.Contracts/PeisReports/GetPatientRegisterReportWithChargeDto.cs b/src/Shentun.Peis.Application.Contracts/PeisReports/GetPatientRegisterReportWithChargeDto.cs new file mode 100644 index 00000000..b3e463b0 --- /dev/null +++ b/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 + { + + /// + /// 标准金额 + /// + public decimal StandardAmount { get; set; } + /// + /// 应收金额 + /// + public decimal ReceivableAmount { get; set; } + + /// + /// 收费金额 + /// + public decimal ChargeAmount { get; set; } + + /// + /// 收费方式 + /// + public string ChargePayMode { get; set; } + } +} diff --git a/src/Shentun.Peis.Application/Asbitems/AsbitemAppService.cs b/src/Shentun.Peis.Application/Asbitems/AsbitemAppService.cs index 3d1c49ba..027e68ac 100644 --- a/src/Shentun.Peis.Application/Asbitems/AsbitemAppService.cs +++ b/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; diff --git a/src/Shentun.Peis.Application/PeisReports/PeisReportAppService.cs b/src/Shentun.Peis.Application/PeisReports/PeisReportAppService.cs index f5d7074a..48f58206 100644 --- a/src/Shentun.Peis.Application/PeisReports/PeisReportAppService.cs +++ b/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 _itemTypeRepository; private readonly ItemTypeManager _itemTypeManager; + private readonly IRepository _chargeRepository; + private readonly IRepository _chargePayRepository; + private readonly IRepository _payModeRepository; + public PeisReportAppService( IRepository patientRegisterRepository, IRepository patientRepository, @@ -60,7 +65,10 @@ namespace Shentun.Peis.PeisReports CacheService cacheService, PatientOccupationalDiseaseManager patientOccupationalDiseaseManager, IRepository itemTypeRepository, - ItemTypeManager itemTypeManager) + ItemTypeManager itemTypeManager, + IRepository chargeRepository, + IRepository chargePayRepository, + IRepository 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 } + /// + /// 体检报告查询接口 带收费 + /// + /// + [HttpPost("api/app/PeisReport/GetPatientRegisterReportWithCharge")] + public async Task> 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 entListDto = new List(); + + + 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(totalCount, entListDto); + } + + /// /// 查询 检查项目状态 RegisterAsbitem为主表 筛选registercheck表状态 ///