From 00aafda9f510db4210f9e3c99fd92a72cedc7c3e Mon Sep 17 00:00:00 2001
From: wxd <123@qq.com>
Date: Mon, 22 Dec 2025 19:16:46 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BD=93=E6=A3=80=E6=8A=A5=E5=91=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../GetPatientRegisterReportWithChargeDto.cs | 29 ++
.../Asbitems/AsbitemAppService.cs | 4 +-
.../PeisReports/PeisReportAppService.cs | 358 +++++++++++++++++-
3 files changed, 389 insertions(+), 2 deletions(-)
create mode 100644 src/Shentun.Peis.Application.Contracts/PeisReports/GetPatientRegisterReportWithChargeDto.cs
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表状态
///