You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

857 lines
44 KiB

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Shentun.Peis.CustomerOrgs;
using Shentun.Peis.Enums;
using Shentun.Peis.Models;
using Shentun.Peis.PatientRegisters;
using Shentun.Peis.SampleTypes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
namespace Shentun.Peis.PeisReports
{
/// <summary>
/// 体检查询
/// </summary>
[ApiExplorerSettings(GroupName = "Work")]
[Authorize]
public class PeisReportAppService : ApplicationService
{
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
private readonly IRepository<Patient, Guid> _patientRepository;
private readonly IRepository<MedicalType, Guid> _medicalTypeRepository;
private readonly IRepository<PersonnelType, Guid> _personnelTypeRepository;
private readonly IRepository<CustomerOrgGroup, Guid> _customerOrgGroupRepository;
private readonly IRepository<MedicalPackage, Guid> _medicalPackageRepository;
private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
private readonly IRepository<Sex> _sexRepository;
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerAsbitemRepository;
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
private readonly CustomerOrgManager _customerOrgManager;
private readonly CacheService _cacheService;
public PeisReportAppService(
IRepository<PatientRegister, Guid> patientRegisterRepository,
IRepository<Patient, Guid> patientRepository,
IRepository<MedicalType, Guid> medicalTypeRepository,
IRepository<PersonnelType, Guid> personnelTypeRepository,
IRepository<CustomerOrgGroup, Guid> customerOrgGroupRepository,
IRepository<MedicalPackage, Guid> medicalPackageRepository,
IRepository<CustomerOrg, Guid> customerOrgRepository,
IRepository<Sex> sexRepository,
IRepository<RegisterCheckAsbitem, Guid> registerAsbitemRepository,
IRepository<RegisterCheck, Guid> registerCheckRepository,
IRepository<Asbitem, Guid> asbitemRepository,
CustomerOrgManager customerOrgManager,
CacheService cacheService)
{
this._patientRegisterRepository = patientRegisterRepository;
this._patientRepository = patientRepository;
this._medicalTypeRepository = medicalTypeRepository;
this._personnelTypeRepository = personnelTypeRepository;
this._customerOrgGroupRepository = customerOrgGroupRepository;
this._medicalPackageRepository = medicalPackageRepository;
this._customerOrgRepository = customerOrgRepository;
this._sexRepository = sexRepository;
this._registerAsbitemRepository = registerAsbitemRepository;
this._registerCheckRepository = registerCheckRepository;
this._asbitemRepository = asbitemRepository;
this._customerOrgManager = customerOrgManager;
this._cacheService = cacheService;
}
/// <summary>
/// 体检报告查询接口
/// </summary>
/// <returns></returns>
[HttpPost("api/app/peisreport/getpatientregisterreport")]
public async Task<PagedResultDto<GetPatientRegisterReportDto>> GetPatientRegisterReportAsync(GetPatientRegisterReportRequestDto input)
{
var query = from a in await _patientRegisterRepository.GetQueryableAsync()
join b in await _patientRepository.GetQueryableAsync() on a.PatientId equals b.Id into bb
from ab in bb.DefaultIfEmpty()
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on a.Id equals registerCheck.PatientRegisterId
join registerAsbitem in await _registerAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerAsbitem.RegisterCheckId
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerAsbitem.AsbitemId equals asbitem.Id
join c in await _customerOrgGroupRepository.GetQueryableAsync() on a.CustomerOrgGroupId equals c.Id into cc
from ac in cc.DefaultIfEmpty()
join d in await _medicalPackageRepository.GetQueryableAsync() on a.MedicalPackageId equals d.Id into dd
from ad in dd.DefaultIfEmpty()
join e in await _medicalTypeRepository.GetQueryableAsync() on a.MedicalTypeId equals e.Id into ee
from ae in ee.DefaultIfEmpty()
join f in await _personnelTypeRepository.GetQueryableAsync() on a.PersonnelTypeId equals f.Id into ff
from af in ff.DefaultIfEmpty()
join g in await _sexRepository.GetQueryableAsync() on a.SexId equals g.Id into gg
from ag in gg.DefaultIfEmpty()
orderby a.Id ascending
select new
{
a = new
{
a.Id,
a.CustomerOrgGroupId,
a.CustomerOrgRegisterId,
a.CustomerOrgId,
a.CreationTime,
a.MedicalStartDate,
a.SummaryDate,
a.PatientName,
a.PatientRegisterNo,
a.Age,
a.BirthDate,
a.CompleteFlag,
a.IsAudit,
a.ReportPrintTimes,
a.MedicalTypeId,
a.PersonnelTypeId,
a.IsUpload
},
RegisterCheckCompleteFlag = registerCheck.CompleteFlag,
IsCheck = asbitem.IsCheck,
ab = new { ab.IdNo, ab.Address, ab.PatientNo, ab.MobileTelephone, ab.Telephone, ab.Email, ab.DisplayName },
ac = new { ac.DisplayName },
ad = new { ad.DisplayName },
ae = new { ae.DisplayName },
af = new { af.DisplayName },
ag = new { ag.DisplayName },
};
var sumquery = query;
if (input.CustomerOrgs.Any())
{
var item = input.CustomerOrgs[0];
if (item.CustomerOrgGroupId.Any())
{
sumquery = sumquery.Where(m => m.a.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
}
if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty)
{
sumquery = sumquery.Where(m => m.a.CustomerOrgRegisterId == item.CustomerOrgRegisterId);
}
if (item.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value);
sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate))
{
if (item.DateType == '1')
{
sumquery = sumquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item.StartDate) &&
m.a.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '2')
{
sumquery = sumquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.a.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '3')
{
sumquery = sumquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.a.SummaryDate.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.a.CustomerOrgGroupId != null && item2.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
}
if (item2.CustomerOrgRegisterId != null && item2.CustomerOrgRegisterId != Guid.Empty)
{
newquery = newquery.Where(m => m.a.CustomerOrgRegisterId == item2.CustomerOrgRegisterId);
}
if (item2.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item2.CustomerOrgId.Value);
newquery = newquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item2.StartDate) && !string.IsNullOrEmpty(item2.EndDate))
{
if (item2.DateType == '1')
{
newquery = newquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item2.StartDate) &&
m.a.CreationTime < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '2')
{
newquery = newquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.a.MedicalStartDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '3')
{
newquery = newquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.a.SummaryDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
}
sumquery = sumquery.Union(newquery);
}
}
}
}
if (!string.IsNullOrEmpty(input.PatientName))
{
sumquery = sumquery.Where(m => m.a.PatientName != null && m.a.PatientName.Contains(input.PatientName));
}
if (!string.IsNullOrEmpty(input.PatientRegisterNo))
{
sumquery = sumquery.Where(m => m.a.PatientRegisterNo == input.PatientRegisterNo);
}
if (!string.IsNullOrEmpty(input.PatientNo))
{
sumquery = sumquery.Where(m => m.ab.PatientNo == input.PatientNo);
}
if (!string.IsNullOrEmpty(input.phone))
{
sumquery = sumquery.Where(m => m.ab.MobileTelephone == input.phone || m.ab.Telephone == input.phone);
}
if (input.CompleteFlag != null && input.CompleteFlag != PatientRegisterCompleteFlag.ItemCheckUnSumCheck)
{
sumquery = sumquery.Where(m => m.a.CompleteFlag == input.CompleteFlag);
}
else
{
sumquery = sumquery.Where(m => m.a.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration);
}
if (input.IsAudit != null)
{
sumquery = sumquery.Where(m => m.a.IsAudit == input.IsAudit);
}
if (input.IsReportPrint != null)
{
if (input.IsReportPrint == 'Y')
{
sumquery = sumquery.Where(m => m.a.ReportPrintTimes > 0);
}
else
{
sumquery = sumquery.Where(m => m.a.ReportPrintTimes == 0);
}
}
if (input.MedicalTypeId != null)
{
sumquery = sumquery.Where(m => m.a.MedicalTypeId == input.MedicalTypeId);
}
if (input.PersonnelTypeId != null)
{
sumquery = sumquery.Where(m => m.a.PersonnelTypeId == input.PersonnelTypeId);
}
if (input.IsUpload != null)
{
sumquery = sumquery.Where(m => m.a.IsUpload == input.IsUpload);
}
if (!string.IsNullOrEmpty(input.IdNo))
{
sumquery = sumquery.Where(m => m.ab.IdNo == input.IdNo);
}
var sumqueryGroup = sumquery.ToList().GroupBy(g => g.a.Id);
List<GetPatientRegisterReportDto> entlist = new List<GetPatientRegisterReportDto>();
foreach (var s in sumqueryGroup.OrderBy(o => o.Key))
{
bool IsDisplay = false;
if (input.CompleteFlag == PatientRegisterCompleteFlag.ItemCheckUnSumCheck)
{
if (s.Where(m => m.RegisterCheckCompleteFlag != RegisterCheckCompleteFlag.Checked && m.IsCheck == 'Y').Count() == 0
&& s.FirstOrDefault().a.CompleteFlag != PatientRegisterCompleteFlag.SumCheck)
{
IsDisplay = true;
}
else
{
IsDisplay = false;
}
}
else
{
IsDisplay = true;
}
if (IsDisplay)
{
entlist.Add(new GetPatientRegisterReportDto
{
Address = s.FirstOrDefault().ab.Address,
PatientName = s.FirstOrDefault().a.PatientName,
Age = s.FirstOrDefault().a.Age,
BirthDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.BirthDate),
CompleteFlag = s.FirstOrDefault().a.CompleteFlag,
CustomerOrgGroupName = s.FirstOrDefault().ac.DisplayName,
//CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(s.a.CustomerOrgId).Result.DisplayName,
CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(s.FirstOrDefault().a.CustomerOrgId).Result,
DepartmentName = _cacheService.GetCustomerOrgNameAsync(s.FirstOrDefault().a.CustomerOrgId).Result,
Email = s.FirstOrDefault().ab.Email,
IdNo = s.FirstOrDefault().ab.IdNo,
IsAudit = s.FirstOrDefault().a.IsAudit,
IsReportPrint = s.FirstOrDefault().a.ReportPrintTimes > 0 ? 'Y' : 'N',
MedicalPackageName = s.FirstOrDefault().ad.DisplayName,
MedicalTypeName = s.FirstOrDefault().ae.DisplayName,
MobileTelephone = s.FirstOrDefault().ab.MobileTelephone,
PatientNo = s.FirstOrDefault().ab.PatientNo,
PatientRegisterNo = s.FirstOrDefault().a.PatientRegisterNo,
PersonnelTypeName = s.FirstOrDefault().af.DisplayName,
SexName = s.FirstOrDefault().ag.DisplayName,
Telephone = s.FirstOrDefault().ab.Telephone,
PatientRegisterId = s.FirstOrDefault().a.Id
});
}
}
int totalCount = entlist.Count;
entlist = entlist.Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount).ToList();
return new PagedResultDto<GetPatientRegisterReportDto>(totalCount, entlist);
}
/// <summary>
/// 查询 检查项目状态 RegisterAsbitem为主表 筛选registercheck表状态
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/peisreport/getregisterasbitemregistercheckstatus")]
public async Task<List<GetRegisterAsbitemRegisterCheckStatusDto>> GetRegisterAsbitemRegisterCheckStatusAsync(GetRegisterAsbitemRegisterCheckStatusRequestDto input)
{
var query = from j in await _registerAsbitemRepository.GetQueryableAsync()
join k in await _registerCheckRepository.GetQueryableAsync() on j.RegisterCheckId equals k.Id into kk
from jk in kk.DefaultIfEmpty()
join l in await _patientRegisterRepository.GetQueryableAsync() on j.PatientRegisterId equals l.Id into ll
from a in ll.DefaultIfEmpty()
join b in await _patientRepository.GetQueryableAsync() on a.PatientId equals b.Id into bb
from ab in bb.DefaultIfEmpty()
join c in await _customerOrgGroupRepository.GetQueryableAsync() on a.CustomerOrgGroupId equals c.Id into cc
from ac in cc.DefaultIfEmpty()
join d in await _medicalPackageRepository.GetQueryableAsync() on a.MedicalPackageId equals d.Id into dd
from ad in dd.DefaultIfEmpty()
join e in await _medicalTypeRepository.GetQueryableAsync() on a.MedicalTypeId equals e.Id into ee
from ae in ee.DefaultIfEmpty()
join f in await _personnelTypeRepository.GetQueryableAsync() on a.PersonnelTypeId equals f.Id into ff
from af in ff.DefaultIfEmpty()
join g in await _sexRepository.GetQueryableAsync() on a.SexId equals g.Id into gg
from ag in gg.DefaultIfEmpty()
join p in await _asbitemRepository.GetQueryableAsync() on j.AsbitemId equals p.Id into pp
from jp in pp.DefaultIfEmpty()
select new
{
j,
jk,
a,
ab,
ac,
ad,
ae,
af,
ag,
jp
};
var sumquery = query;
if (input.CustomerOrgs.Any())
{
var item = input.CustomerOrgs[0];
if (item.CustomerOrgGroupId.Any())
{
sumquery = sumquery.Where(m => m.a.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
}
if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty)
{
sumquery = sumquery.Where(m => m.a.CustomerOrgRegisterId == item.CustomerOrgRegisterId);
}
if (item.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value);
sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate))
{
if (item.DateType == '1')
{
sumquery = sumquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item.StartDate) &&
m.a.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '2')
{
sumquery = sumquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.a.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '3')
{
sumquery = sumquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.a.SummaryDate.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.a.CustomerOrgGroupId != null && item2.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
}
if (item2.CustomerOrgRegisterId != null && item2.CustomerOrgRegisterId != Guid.Empty)
{
newquery = newquery.Where(m => m.a.CustomerOrgRegisterId == item2.CustomerOrgRegisterId);
}
if (item2.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item2.CustomerOrgId.Value);
newquery = newquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item2.StartDate) && !string.IsNullOrEmpty(item2.EndDate))
{
if (item2.DateType == '1')
{
newquery = newquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item2.StartDate) &&
m.a.CreationTime < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '2')
{
newquery = newquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.a.MedicalStartDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '3')
{
newquery = newquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.a.SummaryDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
}
sumquery = sumquery.Union(newquery);
}
}
}
}
if (input.AsbitemIds.Any())
{
sumquery = sumquery.Where(m => input.AsbitemIds.Contains(m.j.AsbitemId));
}
if (input.CompleteFlag != null)
{
sumquery = sumquery.Where(m => m.jk.CompleteFlag == input.CompleteFlag);
}
var entlist = sumquery.Select(s => new GetRegisterAsbitemRegisterCheckStatusDto
{
PatientName = s.a.PatientName,
Age = s.a.Age,
CompleteFlag = s.jk.CompleteFlag,
CustomerOrgGroupName = s.ac.DisplayName,
CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(s.a.CustomerOrgId).Result.DisplayName,
DepartmentName = _cacheService.GetCustomerOrgNameAsync(s.a.CustomerOrgId).Result,
MedicalPackageName = s.ad.DisplayName,
MobileTelephone = s.ab.MobileTelephone,
PatientNo = s.ab.PatientNo,
PatientRegisterNo = s.a.PatientRegisterNo,
SexName = s.ag.DisplayName,
Telephone = s.ab.Telephone,
AsbitemName = s.jp.DisplayName,
ChargePrice = s.j.ChargePrice,
IsCharge = s.j.IsCharge,
MedicalTimes = s.a.MedicalTimes,
StandardPrice = s.j.StandardPrice
}).ToList();
return entlist;
}
/// <summary>
/// 查询 检查项目收费状态 RegisterAsbitem为主表 筛选RegisterAsbitem表收费状态
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/peisreport/getregisterasbitemchargestatus")]
public async Task<List<GetRegisterAsbitemChargeStatusDto>> GetRegisterAsbitemChargeStatusAsync(GetRegisterAsbitemChargeStatusRequestDto input)
{
var query = from j in await _registerAsbitemRepository.GetQueryableAsync()
join k in await _registerCheckRepository.GetQueryableAsync() on j.RegisterCheckId equals k.Id into kk
from jk in kk.DefaultIfEmpty()
join l in await _patientRegisterRepository.GetQueryableAsync() on j.PatientRegisterId equals l.Id into ll
from a in ll.DefaultIfEmpty()
join b in await _patientRepository.GetQueryableAsync() on a.PatientId equals b.Id into bb
from ab in bb.DefaultIfEmpty()
join c in await _customerOrgGroupRepository.GetQueryableAsync() on a.CustomerOrgGroupId equals c.Id into cc
from ac in cc.DefaultIfEmpty()
join d in await _medicalPackageRepository.GetQueryableAsync() on a.MedicalPackageId equals d.Id into dd
from ad in dd.DefaultIfEmpty()
join e in await _medicalTypeRepository.GetQueryableAsync() on a.MedicalTypeId equals e.Id into ee
from ae in ee.DefaultIfEmpty()
join f in await _personnelTypeRepository.GetQueryableAsync() on a.PersonnelTypeId equals f.Id into ff
from af in ff.DefaultIfEmpty()
join g in await _sexRepository.GetQueryableAsync() on a.SexId equals g.Id into gg
from ag in gg.DefaultIfEmpty()
join p in await _asbitemRepository.GetQueryableAsync() on j.AsbitemId equals p.Id into pp
from jp in pp.DefaultIfEmpty()
select new
{
j,
jk,
a,
ab,
ac,
ad,
ae,
af,
ag,
jp
};
var sumquery = query;
if (input.CustomerOrgs.Any())
{
var item = input.CustomerOrgs[0];
if (item.CustomerOrgGroupId.Any())
{
sumquery = sumquery.Where(m => m.a.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
}
if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty)
{
sumquery = sumquery.Where(m => m.a.CustomerOrgRegisterId == item.CustomerOrgRegisterId);
}
if (item.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value);
sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate))
{
if (item.DateType == '1')
{
sumquery = sumquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item.StartDate) &&
m.a.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '2')
{
sumquery = sumquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.a.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '3')
{
sumquery = sumquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.a.SummaryDate.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.a.CustomerOrgGroupId != null && item2.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
}
if (item2.CustomerOrgRegisterId != null && item2.CustomerOrgRegisterId != Guid.Empty)
{
newquery = newquery.Where(m => m.a.CustomerOrgRegisterId == item2.CustomerOrgRegisterId);
}
if (item2.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item2.CustomerOrgId.Value);
newquery = newquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item2.StartDate) && !string.IsNullOrEmpty(item2.EndDate))
{
if (item2.DateType == '1')
{
newquery = newquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item2.StartDate) &&
m.a.CreationTime < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '2')
{
newquery = newquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.a.MedicalStartDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '3')
{
newquery = newquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.a.SummaryDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
}
sumquery = sumquery.Union(newquery);
}
}
}
}
if (input.AsbitemIds.Any())
{
sumquery = sumquery.Where(m => input.AsbitemIds.Contains(m.j.AsbitemId));
}
if (input.IsCharge != null)
{
sumquery = sumquery.Where(m => m.j.IsCharge == input.IsCharge);
}
var entlist = sumquery.Select(s => new GetRegisterAsbitemChargeStatusDto
{
PatientName = s.a.PatientName,
Age = s.a.Age,
CompleteFlag = s.jk.CompleteFlag,
CustomerOrgGroupName = s.ac.DisplayName,
CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(s.a.CustomerOrgId).Result.DisplayName,
DepartmentName = _cacheService.GetCustomerOrgNameAsync(s.a.CustomerOrgId).Result,
MedicalPackageName = s.ad.DisplayName,
MobileTelephone = s.ab.MobileTelephone,
PatientNo = s.ab.PatientNo,
PatientRegisterNo = s.a.PatientRegisterNo,
SexName = s.ag.DisplayName,
Telephone = s.ab.Telephone,
AsbitemName = s.jp.DisplayName,
ChargePrice = s.j.ChargePrice,
IsCharge = s.j.IsCharge,
MedicalTimes = s.a.MedicalTimes,
StandardPrice = s.j.StandardPrice
}).ToList();
return entlist;
}
/// <summary>
/// 查询 人员未检组合项目清单 勾选包含弃检时需要检索弃检项目
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/peisreport/getpatientregisteruncheckedreport")]
public async Task<List<GetPatientRegisterUnCheckedReportDto>> GetPatientRegisterUnCheckedReportAsync(GetPatientRegisterUnCheckedReportRequestDto input)
{
var query = from a in await _patientRegisterRepository.GetQueryableAsync()
join b in await _patientRepository.GetQueryableAsync() on a.PatientId equals b.Id into bb
from ab in bb.DefaultIfEmpty()
join c in await _customerOrgGroupRepository.GetQueryableAsync() on a.CustomerOrgGroupId equals c.Id into cc
from ac in cc.DefaultIfEmpty()
join d in await _medicalPackageRepository.GetQueryableAsync() on a.MedicalPackageId equals d.Id into dd
from ad in dd.DefaultIfEmpty()
join e in await _medicalTypeRepository.GetQueryableAsync() on a.MedicalTypeId equals e.Id into ee
from ae in ee.DefaultIfEmpty()
join f in await _personnelTypeRepository.GetQueryableAsync() on a.PersonnelTypeId equals f.Id into ff
from af in ff.DefaultIfEmpty()
join g in await _sexRepository.GetQueryableAsync() on a.SexId equals g.Id into gg
from ag in gg.DefaultIfEmpty()
join aj in await _registerAsbitemRepository.GetQueryableAsync() on a.Id equals aj.PatientRegisterId
join ak in await _registerCheckRepository.GetQueryableAsync() on aj.RegisterCheckId equals ak.Id
join al in await _asbitemRepository.GetQueryableAsync() on aj.AsbitemId equals al.Id
//join j in await _registerAsbitemRepository.GetQueryableAsync() on a.Id equals j.PatientRegisterId into jj
//from aj in jj.DefaultIfEmpty()
//join k in await _registerCheckRepository.GetQueryableAsync() on aj.RegisterCheckId equals k.Id into kk
//from ak in kk.DefaultIfEmpty()
//join l in await _asbitemRepository.GetQueryableAsync() on aj.AsbitemId equals l.Id into ll
//from al in ll.DefaultIfEmpty()
select new
{
a,
ab,
ac,
ad,
ae,
af,
ag,
aj,
ak,
al
};
var sumquery = query;
if (input.CustomerOrgs.Any())
{
var item = input.CustomerOrgs[0];
if (item.CustomerOrgGroupId.Any())
{
sumquery = sumquery.Where(m => m.a.CustomerOrgGroupId != null && item.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
}
if (item.CustomerOrgRegisterId != null && item.CustomerOrgRegisterId != Guid.Empty)
{
sumquery = sumquery.Where(m => m.a.CustomerOrgRegisterId == item.CustomerOrgRegisterId);
}
if (item.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item.CustomerOrgId.Value);
sumquery = sumquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item.StartDate) && !string.IsNullOrEmpty(item.EndDate))
{
if (item.DateType == '1')
{
sumquery = sumquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item.StartDate) &&
m.a.CreationTime < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '2')
{
sumquery = sumquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.a.MedicalStartDate.Value < Convert.ToDateTime(item.EndDate).AddDays(1));
}
else if (item.DateType == '3')
{
sumquery = sumquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item.StartDate) &&
m.a.SummaryDate.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.a.CustomerOrgGroupId != null && item2.CustomerOrgGroupId.Contains(m.a.CustomerOrgGroupId.Value));
}
if (item2.CustomerOrgRegisterId != null && item2.CustomerOrgRegisterId != Guid.Empty)
{
newquery = newquery.Where(m => m.a.CustomerOrgRegisterId == item2.CustomerOrgRegisterId);
}
if (item2.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(item2.CustomerOrgId.Value);
newquery = newquery.Where(m => CustomerOrgIds.Contains(m.a.CustomerOrgId));
}
if (!string.IsNullOrEmpty(item2.StartDate) && !string.IsNullOrEmpty(item2.EndDate))
{
if (item2.DateType == '1')
{
newquery = newquery.Where(m => m.a.CreationTime >= Convert.ToDateTime(item2.StartDate) &&
m.a.CreationTime < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '2')
{
newquery = newquery.Where(m => m.a.MedicalStartDate != null && m.a.MedicalStartDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.a.MedicalStartDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
else if (item2.DateType == '3')
{
newquery = newquery.Where(m => m.a.SummaryDate != null && m.a.SummaryDate.Value >= Convert.ToDateTime(item2.StartDate) &&
m.a.SummaryDate.Value < Convert.ToDateTime(item2.EndDate).AddDays(1));
}
}
sumquery = sumquery.Union(newquery);
}
}
}
}
if (input.IsGiveUpCheck != null && input.IsGiveUpCheck == 'Y')
{
sumquery = sumquery.Where(m => m.ak.CompleteFlag == RegisterCheckCompleteFlag.UnChecked || m.ak.CompleteFlag == RegisterCheckCompleteFlag.GiveUpChecked);
}
else
{
sumquery = sumquery.Where(m => m.ak.CompleteFlag == RegisterCheckCompleteFlag.UnChecked);
}
if (input.CompleteFlag != null)
{
sumquery = sumquery.Where(m => m.a.CompleteFlag == input.CompleteFlag);
}
var entlist = sumquery.GroupBy(g => g.a.Id).Select(s => new GetPatientRegisterUnCheckedReportDto
{
Age = s.FirstOrDefault().a.Age,
CustomerOrgGroupName = s.FirstOrDefault().ac.DisplayName,
CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(s.FirstOrDefault().a.CustomerOrgId).Result.DisplayName,
DepartmentName = _cacheService.GetCustomerOrgNameAsync(s.FirstOrDefault().a.CustomerOrgId).Result,
//GiveUpAsbitems = s.Where(m => m.ak.CompleteFlag == '2').Select(gs => new GetPatientRegisterUnCheckedReport_GiveUpAsbitem
//{
// AsbitemName = gs.al.DisplayName
//}).ToList(),
GiveUpAsbitems = s.Where(m => m.ak.CompleteFlag == RegisterCheckCompleteFlag.GiveUpChecked).Select(gs => gs.al.DisplayName).ToList(),
MedicalPackageName = s.FirstOrDefault().ad.DisplayName,
MedicalTimes = s.FirstOrDefault().a.MedicalTimes,
MobileTelephone = s.FirstOrDefault().ab.MobileTelephone,
PatientName = s.FirstOrDefault().a.PatientName,
PatientNo = s.FirstOrDefault().ab.PatientNo,
PatientRegisterNo = s.FirstOrDefault().a.PatientRegisterNo,
SexName = s.FirstOrDefault().ag.DisplayName,
Telephone = s.FirstOrDefault().ab.Telephone,
UnCheckAsbitems = s.Where(m => m.ak.CompleteFlag == RegisterCheckCompleteFlag.UnChecked).Select(gs => gs.al.DisplayName).ToList(),
//UnCheckAsbitems = s.Where(m => m.ak.CompleteFlag == '0').Select(gs => new GetPatientRegisterUnCheckedReport_UnCheckAsbitem
//{
// AsbitemName = gs.al.DisplayName
//}).ToList()
}).ToList();
return entlist;
}
}
}