3 changed files with 195 additions and 0 deletions
-
41src/Shentun.WebPeis.Application.Contracts/AppointReports/CustomerOrgInputDto.cs
-
34src/Shentun.WebPeis.Application.Contracts/AppointReports/GetAppointStatisticsReportDto.cs
-
120src/Shentun.WebPeis.Application/AppointReports/AppointReportAppService.cs
@ -0,0 +1,41 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.AppointReports |
||||
|
{ |
||||
|
public class CustomerOrgInputDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 单位ID 需要包含查出子级ID
|
||||
|
/// </summary>
|
||||
|
public Guid CustomerOrgId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 单位体检次数ID
|
||||
|
/// </summary>
|
||||
|
public Guid CustomerOrgRegisterId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
///
|
||||
|
/// </summary>
|
||||
|
public List<Guid> CustomerOrgGroupId { get; set; } = new List<Guid>(); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 日期类型(1、登记日期 2、体检日期 3、总检日期)
|
||||
|
/// </summary>
|
||||
|
public char DateType { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 开始日期
|
||||
|
/// </summary>
|
||||
|
public string StartDate { get; set; } |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 结束日期
|
||||
|
/// </summary>
|
||||
|
public string EndDate { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,34 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace Shentun.WebPeis.AppointReports |
||||
|
{ |
||||
|
public class GetAppointStatisticsReportDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 单位名称
|
||||
|
/// </summary>
|
||||
|
public string CustomerOrgName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 登记人数 备单人数
|
||||
|
/// </summary>
|
||||
|
public int RegisterCount { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 预约人数
|
||||
|
/// </summary>
|
||||
|
public int AppointCount { get; set;} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 未预约人数
|
||||
|
/// </summary>
|
||||
|
public int UnAppointCount { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 已开始检查人数
|
||||
|
/// </summary>
|
||||
|
public int CheckCount { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,120 @@ |
|||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Shentun.WebPeis.Models; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
|
||||
|
namespace Shentun.WebPeis.AppointReports |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 统计
|
||||
|
/// </summary>
|
||||
|
[ApiExplorerSettings(GroupName = "Work")] |
||||
|
//[Authorize]
|
||||
|
public class AppointReportAppService : ApplicationService |
||||
|
{ |
||||
|
private readonly IRepository<AppointPatientRegister> _appointPatientRegisterRepository; |
||||
|
private readonly IRepository<PatientRegister> _patientRegisterRepository; |
||||
|
private readonly IRepository<CustomerOrg> _customerOrgRepository; |
||||
|
private readonly IRepository<CustomerOrgRegister> _customerOrgRegisterRepository; |
||||
|
|
||||
|
public AppointReportAppService( |
||||
|
IRepository<AppointPatientRegister> appointPatientRegisterRepository, |
||||
|
IRepository<PatientRegister> patientRegisterRepository, |
||||
|
IRepository<CustomerOrg> customerOrgRepository, |
||||
|
IRepository<CustomerOrgRegister> customerOrgRegisterRepository) |
||||
|
{ |
||||
|
_appointPatientRegisterRepository = appointPatientRegisterRepository; |
||||
|
_patientRegisterRepository = patientRegisterRepository; |
||||
|
_customerOrgRepository = customerOrgRepository; |
||||
|
_customerOrgRegisterRepository = customerOrgRegisterRepository; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取预约统计报表
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost("api/app/AppointReport/GetAppointStatisticsReport")] |
||||
|
public async Task<List<GetAppointStatisticsReportDto>> GetAppointStatisticsReportAsync(List<CustomerOrgInputDto> input) |
||||
|
{ |
||||
|
List<GetAppointStatisticsReportDto> result = new List<GetAppointStatisticsReportDto>(); |
||||
|
|
||||
|
if (!input.Any()) |
||||
|
throw new UserFriendlyException("请选择单位"); |
||||
|
|
||||
|
foreach (var item in input) |
||||
|
{ |
||||
|
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync() |
||||
|
join appointPatientRegister in await _appointPatientRegisterRepository.GetQueryableAsync() |
||||
|
on patientRegister.PatientRegisterId equals appointPatientRegister.PatientRegisterId into appointPatientRegisterTemp |
||||
|
from appointPatientRegisterEmpty in appointPatientRegisterTemp.DefaultIfEmpty() |
||||
|
join customerOrgRegister in await _customerOrgRegisterRepository.GetQueryableAsync() |
||||
|
on patientRegister.CustomerOrgRegisterId equals customerOrgRegister.CustomerOrgRegisterId |
||||
|
join customerOrg in await _customerOrgRepository.GetQueryableAsync() |
||||
|
on customerOrgRegister.CustomerOrgId equals customerOrg.CustomerOrgId |
||||
|
select new |
||||
|
{ |
||||
|
patientRegister, |
||||
|
appointPatientRegisterEmpty, |
||||
|
customerOrg |
||||
|
}; |
||||
|
|
||||
|
if (item.CustomerOrgId == Guid.Empty) |
||||
|
throw new UserFriendlyException("单位不能为空"); |
||||
|
|
||||
|
if (item.CustomerOrgRegisterId == Guid.Empty) |
||||
|
throw new UserFriendlyException("单位体检次数不能为空"); |
||||
|
|
||||
|
|
||||
|
query = query.Where(m => m.patientRegister.CustomerOrgRegisterId == item.CustomerOrgRegisterId); |
||||
|
|
||||
|
if (item.CustomerOrgGroupId.Any()) |
||||
|
query = query.Where(m => m.patientRegister.CustomerOrgGroupId != null |
||||
|
&& item.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value)); |
||||
|
|
||||
|
|
||||
|
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate)) |
||||
|
{ |
||||
|
if (item.DateType == '1') |
||||
|
{ |
||||
|
query = query.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(item.StartDate) && |
||||
|
m.patientRegister.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1)); |
||||
|
} |
||||
|
else if (item.DateType == '2') |
||||
|
{ |
||||
|
query = query.Where(m => m.patientRegister.MedicalStartDate >= Convert.ToDateTime(item.StartDate) && |
||||
|
m.patientRegister.MedicalStartDate < Convert.ToDateTime(item.EndDate).AddDays(1)); |
||||
|
} |
||||
|
else if (item.DateType == '3') |
||||
|
{ |
||||
|
query = query.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate >= Convert.ToDateTime(item.StartDate) && |
||||
|
m.patientRegister.SummaryDate < Convert.ToDateTime(item.EndDate).AddDays(1)); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
var customerOrgGroup = query.ToList().GroupBy(g => g.customerOrg); |
||||
|
|
||||
|
var appointStatisticsReports = customerOrgGroup.Select(s => new GetAppointStatisticsReportDto |
||||
|
{ |
||||
|
CustomerOrgName = s.Key.CustomerOrgName, |
||||
|
AppointCount = s.Where(m => m.appointPatientRegisterEmpty != null).Count(), |
||||
|
CheckCount = s.Where(m => m.patientRegister.IsMedicalStart == 'Y').Count(), |
||||
|
RegisterCount = s.Count(), |
||||
|
UnAppointCount = s.Count() - s.Where(m => m.appointPatientRegisterEmpty != null).Count() |
||||
|
}).ToList(); |
||||
|
|
||||
|
result.AddRange(appointStatisticsReports); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue