Browse Source

报告,审核

master
wxd 4 months ago
parent
commit
92e0fcae11
  1. 4
      src/Shentun.ColumnReferencePlugIns/WebAppoints/WebAppointWebPeisPlugIns.cs
  2. 81
      src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrPersonCheckedStatisticsDto.cs
  3. 25
      src/Shentun.Peis.Application.Contracts/CustomerReports/GetCustomerOrPersonCheckedStatisticsInputDto.cs
  4. 8
      src/Shentun.Peis.Application.Contracts/RegisterChecks/UpdateAuditorDoctorDto.cs
  5. 2
      src/Shentun.Peis.Application.Contracts/TransToWebPeiss/SyncPatientRegisterReportInputDto.cs
  6. 671
      src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs
  7. 45
      src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs
  8. 7
      src/Shentun.Peis.Domain/RegisterChecks/RegisterCheckManager.cs
  9. 8
      src/Shentun.Peis.HttpApi.Host/Schedulers/SyncPatientRegisterReportInterfaceWorker.cs

4
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<SyncPatientRegisterIdsDto>(sql,
new { HandDate = DateTime.Now.Date.AddDays(-input.QueryDays), CompleteFlag = PatientRegisterCompleteFlag.SumCheck })).ToList();
return patientRegisterIds;

81
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
{
/// <summary>
/// 单位名称
/// </summary>
public string CustomerOrgName { get; set; }
/// <summary>
/// 部门名称
/// </summary>
public string DepartmentName { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PatientName { get; set; }
/// <summary>
/// 性别
/// </summary>
public string SexName { get; set; }
/// <summary>
/// 年龄
/// </summary>
public short? Age { get; set; }
/// <summary>
/// 条码号
/// </summary>
public string PatientRegisterNo { get; set; }
/// <summary>
/// 档案号
/// </summary>
public string PatientNo { get; set; }
/// <summary>
/// 体检次数
/// </summary>
public short MedicalTimes { get; set; }
/// <summary>
/// 身份证
/// </summary>
public string IdNo { get; set; }
/// <summary>
/// 已检项目
/// </summary>
public string CheckedAsbitem { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal AsbitemPrice { get; set; }
/// <summary>
/// 分组套餐名称
/// </summary>
public string GroupPackageName { get; set; }
}
public class GetCustomerOrPersonCheckedStatisticsDetailDto
{
public string AsbitemName { get; set; }
public decimal AsbitemPrice { get; set; }
public int AsbitemDisplayOrder { get; set; }
}
}

25
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
{
/// <summary>
/// 单位相关
/// </summary>
public List<GetPeisReportDetailRequest_CustomerOrg> CustomerOrgs { get; set; } = new List<GetPeisReportDetailRequest_CustomerOrg>();
/// <summary>
/// 统计类型
/// 1-按实检组合项目
/// 2-按实检人员(只检一项则全部算已检)
/// 3-按实检人员(只检一项则全部算已检且仅单位支付)
/// 4-按实检人员(只检一项则全部算已检且仅个人支付)
/// 5-按收费组合项目
/// </summary>
public char StatisticsType { get; set; } = '1';
}
}

8
src/Shentun.Peis.Application.Contracts/RegisterChecks/UpdateAuditorDoctorDto.cs

@ -11,10 +11,10 @@ namespace Shentun.Peis.RegisterChecks
/// </summary>
public Guid RegisterCheckId { get; set; }
///// <summary>
///// 审核医生(内部传ID,外部医生存名字)
///// </summary>
//public Guid? AuditorUserId { get; set; }
/// <summary>
/// 审核医生 传了用传过来的id 没传用登录账号的id
/// </summary>
public Guid? AuditorUserId { get; set; }
/// <summary>
/// 审核时间(格式:2023-07-18 14:48:00) 空值跟null取当前时间
/// </summary>

2
src/Shentun.Peis.Application.Contracts/TransToWebPeiss/SyncPatientRegisterReportInputDto.cs

@ -23,5 +23,7 @@ namespace Shentun.Peis.TransToWebPeiss
/// 筛选的日期类型 0-最后修改时间 1-总检时间 2-审核时间
/// </summary>
public char UploadDateType { get; set; }
public int UploadCountLimit { get; set; } = 100;
}
}

671
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 单位个人已检统计
/// <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
}

45
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);
}

7
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

8
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,
};

Loading…
Cancel
Save