diff --git a/src/Shentun.ColumnReferencePlugIns/WebAppoints/WebAppointWebPeisPlugIns.cs b/src/Shentun.ColumnReferencePlugIns/WebAppoints/WebAppointWebPeisPlugIns.cs index b4e07660..e231882a 100644 --- a/src/Shentun.ColumnReferencePlugIns/WebAppoints/WebAppointWebPeisPlugIns.cs +++ b/src/Shentun.ColumnReferencePlugIns/WebAppoints/WebAppointWebPeisPlugIns.cs @@ -149,7 +149,9 @@ namespace Shentun.Peis.PlugIns.WebAppoints //不要重复上传,筛选是否上传状态 sql += " and is_upload='N' "; } - + + sql += $" limit {input.UploadCountLimit} "; + var patientRegisterIds = (await conn.QueryAsync(sql, new { HandDate = DateTime.Now.Date.AddDays(-input.QueryDays), CompleteFlag = PatientRegisterCompleteFlag.SumCheck })).ToList(); return patientRegisterIds; diff --git a/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrPersonCheckedStatisticsDto.cs b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrPersonCheckedStatisticsDto.cs new file mode 100644 index 00000000..5c971cf0 --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrPersonCheckedStatisticsDto.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.CustomerReports +{ + public class GetCustomerOrPersonCheckedStatisticsDto + { + /// + /// 单位名称 + /// + public string CustomerOrgName { get; set; } + + /// + /// 部门名称 + /// + public string DepartmentName { get; set; } + + /// + /// 姓名 + /// + public string PatientName { get; set; } + + /// + /// 性别 + /// + public string SexName { get; set; } + + /// + /// 年龄 + /// + public short? Age { get; set; } + + /// + /// 条码号 + /// + public string PatientRegisterNo { get; set; } + + + /// + /// 档案号 + /// + public string PatientNo { get; set; } + + /// + /// 体检次数 + /// + public short MedicalTimes { get; set; } + + /// + /// 身份证 + /// + public string IdNo { get; set; } + + /// + /// 已检项目 + /// + public string CheckedAsbitem { get; set; } + + /// + /// 金额 + /// + public decimal AsbitemPrice { get; set; } + + /// + /// 分组套餐名称 + /// + public string GroupPackageName { get; set; } + + + } + + public class GetCustomerOrPersonCheckedStatisticsDetailDto + { + public string AsbitemName { get; set; } + + public decimal AsbitemPrice { get; set; } + + public int AsbitemDisplayOrder { get; set; } + } +} diff --git a/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrPersonCheckedStatisticsInputDto.cs b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrPersonCheckedStatisticsInputDto.cs new file mode 100644 index 00000000..beb78b8d --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrPersonCheckedStatisticsInputDto.cs @@ -0,0 +1,25 @@ +using Shentun.Peis.PeisReports; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.CustomerReports +{ + public class GetCustomerOrPersonCheckedStatisticsInputDto + { + /// + /// 单位相关 + /// + public List CustomerOrgs { get; set; } = new List(); + + /// + /// 统计类型 + /// 1-按实检组合项目 + /// 2-按实检人员(只检一项则全部算已检) + /// 3-按实检人员(只检一项则全部算已检且仅单位支付) + /// 4-按实检人员(只检一项则全部算已检且仅个人支付) + /// 5-按收费组合项目 + /// + public char StatisticsType { get; set; } = '1'; + } +} diff --git a/src/Shentun.Peis.Application.Contracts/RegisterChecks/UpdateAuditorDoctorDto.cs b/src/Shentun.Peis.Application.Contracts/RegisterChecks/UpdateAuditorDoctorDto.cs index 19b5c9ff..a349a2ef 100644 --- a/src/Shentun.Peis.Application.Contracts/RegisterChecks/UpdateAuditorDoctorDto.cs +++ b/src/Shentun.Peis.Application.Contracts/RegisterChecks/UpdateAuditorDoctorDto.cs @@ -11,10 +11,10 @@ namespace Shentun.Peis.RegisterChecks /// public Guid RegisterCheckId { get; set; } - ///// - ///// 审核医生(内部传ID,外部医生存名字) - ///// - //public Guid? AuditorUserId { get; set; } + /// + /// 审核医生 传了用传过来的id 没传用登录账号的id + /// + public Guid? AuditorUserId { get; set; } /// /// 审核时间(格式:2023-07-18 14:48:00) 空值跟null取当前时间 /// diff --git a/src/Shentun.Peis.Application.Contracts/TransToWebPeiss/SyncPatientRegisterReportInputDto.cs b/src/Shentun.Peis.Application.Contracts/TransToWebPeiss/SyncPatientRegisterReportInputDto.cs index 45ab986a..6cc914a1 100644 --- a/src/Shentun.Peis.Application.Contracts/TransToWebPeiss/SyncPatientRegisterReportInputDto.cs +++ b/src/Shentun.Peis.Application.Contracts/TransToWebPeiss/SyncPatientRegisterReportInputDto.cs @@ -23,5 +23,7 @@ namespace Shentun.Peis.TransToWebPeiss /// 筛选的日期类型 0-最后修改时间 1-总检时间 2-审核时间 /// public char UploadDateType { get; set; } + + public int UploadCountLimit { get; set; } = 100; } } diff --git a/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs b/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs index 5e7ce401..9e5b0532 100644 --- a/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs +++ b/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs @@ -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 单位个人已检统计 + + + /// + /// 单位个人已检统计 + /// + /// + [HttpPost("api/app/CustomerReport/GetCustomerOrPersonCheckedStatistics")] + public async Task> 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); + } + + } + + /// + /// 1-按实检组合项目 + /// + /// + /// + private async Task> 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 entListDto = new List(); + + 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 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; + + } + + /// + /// 2-按实检人员(只检一项则全部算已检) + /// + /// + /// + private async Task> 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 entListDto = new List(); + + 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 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; + } + + /// + /// 3-按实检人员(只检一项则全部算已检且仅单位支付) + /// + /// + /// + private async Task> 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 entListDto = new List(); + + 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 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; + } + + /// + /// 4-按实检人员(只检一项则全部算已检且仅个人支付) + /// + /// + /// + private async Task> 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 entListDto = new List(); + + 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 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; + } + + /// + /// 5-按收费组合项目 + /// + /// + /// + private async Task> 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 entListDto = new List(); + + 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 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 } diff --git a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs index d1d3fbb4..1bf9b457 100644 --- a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs +++ b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs @@ -55,6 +55,7 @@ using Volo.Abp.Domain.Repositories; using Volo.Abp.Guids; using Volo.Abp.Identity; using Volo.Abp.ObjectMapping; +using Volo.Abp.Uow; using Volo.Abp.Users; namespace Shentun.Peis.PatientRegisters @@ -870,8 +871,10 @@ namespace Shentun.Peis.PatientRegisters join patientRegisterExter in await _patientRegisterExterRepository.GetQueryableAsync() on patientRegister.Id equals patientRegisterExter.PatientRegisterId into patientRegisterExterTemp from patientRegisterExterHaveEmpty in patientRegisterExterTemp.DefaultIfEmpty() - join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId - join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId + 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 @@ -883,17 +886,17 @@ namespace Shentun.Peis.PatientRegisters patientRegister, patient, patientRegisterExterHaveEmpty, - registerCheckAsbitem = new + registerCheckAsbitemHaveEmpty = registerCheckAsbitemHaveEmpty != null ? new { - registerCheckAsbitem.StandardPrice, - registerCheckAsbitem.Amount, - registerCheckAsbitem.ChargePrice, - registerCheckAsbitem.IsCharge, - }, - payModePayHaveEmpty = new + registerCheckAsbitemHaveEmpty.StandardPrice, + registerCheckAsbitemHaveEmpty.Amount, + registerCheckAsbitemHaveEmpty.ChargePrice, + registerCheckAsbitemHaveEmpty.IsCharge, + } : null, + payModePayHaveEmpty = payModePayHaveEmpty != null ? new { payModePayHaveEmpty.DisplayName - } + }:null }; @@ -1081,19 +1084,25 @@ namespace Shentun.Peis.PatientRegisters PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(group.Key.PersonnelTypeId).GetAwaiter().GetResult(), MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(group.Key.MaritalStatusId).GetAwaiter().GetResult() }; - entDto.StandardAmount = group.GroupBy(g => g.registerCheckAsbitem).Sum(s => s.Key.StandardPrice * s.Key.Amount); - entDto.ReceivableAmount = group.GroupBy(g => g.registerCheckAsbitem).Sum(s => s.Key.ChargePrice * s.Key.Amount); - entDto.ChargeAmount = group.Where(m => m.registerCheckAsbitem.IsCharge == 'Y').GroupBy(g => g.registerCheckAsbitem).Sum(s => s.Key.ChargePrice * s.Key.Amount); + + 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)); } - else - { - entDto.ChargeAmount = 0; - entDto.ChargePayMode = ""; - } + entListDto.Add(entDto); } diff --git a/src/Shentun.Peis.Domain/RegisterChecks/RegisterCheckManager.cs b/src/Shentun.Peis.Domain/RegisterChecks/RegisterCheckManager.cs index 569f2926..1435f30f 100644 --- a/src/Shentun.Peis.Domain/RegisterChecks/RegisterCheckManager.cs +++ b/src/Shentun.Peis.Domain/RegisterChecks/RegisterCheckManager.cs @@ -274,8 +274,13 @@ namespace Shentun.Peis.RegisterChecks throw new UserFriendlyException("请求参数有误"); } + if (entitydto.AuditorUserId == null) + entity.AuditorUserId = _currentUser.Id; + else + entity.AuditorUserId = entitydto.AuditorUserId; + //取当前登录用户ID - entity.AuditorUserId = _currentUser.Id; + // entity.AuditorUserId = _currentUser.Id; if (entitydto.AuditTime == null) entity.AuditTime = DateTime.Now; else diff --git a/src/Shentun.Peis.HttpApi.Host/Schedulers/SyncPatientRegisterReportInterfaceWorker.cs b/src/Shentun.Peis.HttpApi.Host/Schedulers/SyncPatientRegisterReportInterfaceWorker.cs index dc897a84..7ebd9e15 100644 --- a/src/Shentun.Peis.HttpApi.Host/Schedulers/SyncPatientRegisterReportInterfaceWorker.cs +++ b/src/Shentun.Peis.HttpApi.Host/Schedulers/SyncPatientRegisterReportInterfaceWorker.cs @@ -139,14 +139,18 @@ namespace Shentun.Peis.Schedulers var isRepeatUpload = interfaceConfig.GetValue("Interface:Scheduler:IsRepeatUpload", "Y"); //筛选的日期类型 0-最后修改时间 1-总检时间 2-审核时间 - var UploadDateType = interfaceConfig.GetValue("Interface:Scheduler:UploadDateType", "0"); + var uploadDateType = interfaceConfig.GetValue("Interface:Scheduler:UploadDateType", "0"); + + //单次最大的上传数量 + var uploadCountLimit = Convert.ToInt32(interfaceConfig.GetValue("Interface:Scheduler:UploadCountLimit", "100")); SyncPatientRegisterReportInputDto input = new SyncPatientRegisterReportInputDto { QueryDays = QueryDays, IsAuditWhere = Convert.ToChar(isAuditWhere), IsRepeatUpload = Convert.ToChar(isRepeatUpload), - UploadDateType = Convert.ToChar(UploadDateType) + UploadDateType = Convert.ToChar(uploadDateType), + UploadCountLimit = uploadCountLimit, };