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.

1382 lines
90 KiB

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using NPOI.SS.Formula.Functions;
using NPOI.Util;
using Shentun.Peis.CustomerOrgs;
using Shentun.Peis.Enums;
using Shentun.Peis.Models;
using Shentun.Peis.SysParmValues;
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;
using Volo.Abp.Identity;
namespace Shentun.Peis.OccupationalDiseaseReports
{
[ApiExplorerSettings(GroupName = "Work")]
//[Authorize]
public class OccupationalDiseaseReportAppService : ApplicationService
{
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
private readonly IRepository<Patient, Guid> _patientRepository;
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
private readonly IRepository<PatientOccupationalDisease, Guid> _patientOccupationalDiseaseRepository;
private readonly SysParmValueManager _sysParmValueManager;
private readonly CacheService _cacheService;
private readonly IRepository<OrganizationUnit, Guid> _organizationUnitRepository;
private readonly IRepository<OcCheckType, Guid> _ocCheckTypeRepository;
private readonly IRepository<PatientPoison> _patientPoisonRepository;
private readonly IRepository<OccupationalAbnormal, Guid> _occupationalAbnormalRepository;
private readonly IRepository<Poison, Guid> _poisonRepository;
private readonly IRepository<RegisterCheckSummary, Guid> _registerCheckSummaryRepository;
private readonly IRepository<SumSummaryHeader, Guid> _sumSummaryHeaderRepository;
private readonly IRepository<SumSummaryContent, Guid> _sumSummaryContentRepository;
private readonly CustomerOrgManager _customerOrgManager;
public OccupationalDiseaseReportAppService(
IRepository<PatientRegister, Guid> patientRegisterRepository,
IRepository<RegisterCheck, Guid> registerCheckRepository,
IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
IRepository<Asbitem, Guid> asbitemRepository,
IRepository<PatientOccupationalDisease, Guid> patientOccupationalDiseaseRepository,
SysParmValueManager sysParmValueManager,
CacheService cacheService,
IRepository<OrganizationUnit, Guid> organizationUnitRepository,
IRepository<OcCheckType, Guid> ocCheckTypeRepository,
IRepository<PatientPoison> patientPoisonRepository,
IRepository<OccupationalAbnormal, Guid> occupationalAbnormalRepository,
IRepository<Poison, Guid> poisonRepository,
IRepository<RegisterCheckSummary, Guid> registerCheckSummaryRepository,
IRepository<Patient, Guid> patientRepository,
IRepository<SumSummaryHeader, Guid> sumSummaryHeaderRepository,
IRepository<SumSummaryContent, Guid> sumSummaryContentRepository,
CustomerOrgManager customerOrgManager)
{
_patientRegisterRepository = patientRegisterRepository;
_registerCheckRepository = registerCheckRepository;
_registerCheckAsbitemRepository = registerCheckAsbitemRepository;
_asbitemRepository = asbitemRepository;
_patientOccupationalDiseaseRepository = patientOccupationalDiseaseRepository;
_sysParmValueManager = sysParmValueManager;
_cacheService = cacheService;
_organizationUnitRepository = organizationUnitRepository;
_ocCheckTypeRepository = ocCheckTypeRepository;
_patientPoisonRepository = patientPoisonRepository;
_occupationalAbnormalRepository = occupationalAbnormalRepository;
_poisonRepository = poisonRepository;
_registerCheckSummaryRepository = registerCheckSummaryRepository;
_patientRepository = patientRepository;
_sumSummaryHeaderRepository = sumSummaryHeaderRepository;
_sumSummaryContentRepository = sumSummaryContentRepository;
_customerOrgManager = customerOrgManager;
}
/// <summary>
/// 获取单位职业病总结报告
/// </summary>
/// <returns></returns>
[HttpPost("api/app/OccupationalDiseaseReport/GetCompanyOccupationalDiseaseSummaryReport")]
public async Task<GetCompanyOccupationalDiseaseSummaryReportDto> GetCompanyOccupationalDiseaseSummaryReportAsync(GetCompanyOccupationalDiseaseSummaryReportInputDto input)
{
if (!input.CustomerOrgs.Any())
throw new UserFriendlyException("单位信息不能为空");
var customerOrgPara = input.CustomerOrgs.First();
if (customerOrgPara.CustomerOrgId == null || customerOrgPara.CustomerOrgId == Guid.Empty)
throw new UserFriendlyException("单位不能为空");
if (customerOrgPara.CustomerOrgRegisterId == null || customerOrgPara.CustomerOrgRegisterId == Guid.Empty)
throw new UserFriendlyException("单位体检次数不能为空");
#region 人员信息
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId
join patientPoison in await _patientPoisonRepository.GetQueryableAsync() on patientRegister.Id equals patientPoison.PatientRegisterId into patientPoisonTemp
from patientPoisonHaveEmpty in patientPoisonTemp.DefaultIfEmpty()
join poison in await _poisonRepository.GetQueryableAsync() on patientPoisonHaveEmpty.PoisonId equals poison.Id into poisonTemp
from posionHaveEmpty in poisonTemp.DefaultIfEmpty()
join occupationalAbnormal in await _occupationalAbnormalRepository.GetQueryableAsync() on patientPoisonHaveEmpty.OccupationalAbnormalId equals occupationalAbnormal.Id into occupationalAbnormalTemp
from occupationalAbnormalHaveEmpty in occupationalAbnormalTemp.DefaultIfEmpty()
where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId
&& patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck
select new
{
patientRegister,
patientOccupationalDisease,
posionHaveEmpty,
patientPoisonHaveEmpty,
occupationalAbnormalHaveEmpty
};
if (!string.IsNullOrEmpty(customerOrgPara.StartDate) && !string.IsNullOrEmpty(customerOrgPara.EndDate))
{
if (customerOrgPara.DateType == '1')
{
query = query.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
else if (customerOrgPara.DateType == '2')
{
query = query.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
else if (customerOrgPara.DateType == '3')
{
query = query.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
}
List<Guid?> customerOrgIds = new List<Guid?>();
if (customerOrgPara.CustomerOrgId != null)
{
customerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(customerOrgPara.CustomerOrgId.Value);
}
if (customerOrgIds.Any())
{
query = query.Where(m => customerOrgIds.Contains(m.patientRegister.CustomerOrgId));
}
if (customerOrgPara.CustomerOrgGroupId.Any())
{
query = query.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
}
#endregion
var patientRegisterList = query.ToList();
var msg = new GetCompanyOccupationalDiseaseSummaryReportDto
{
AsbitemAbnormals = new List<GetCompanyOccupationalDiseaseSummaryReportAsbitemAbnormalDto>(),
ConclusionDetails = new List<GetCompanyOccupationalDiseaseSummaryReportConclusionDetailDto>(),
};
if (patientRegisterList.Any())
{
//人员id
var patientRegisters = query.Select(m => m.patientRegister).Distinct().ToList();
var patientRegisterfisrt = query.First();
//在岗ID
Guid onDutyId = (await _ocCheckTypeRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("在岗"))).Id;
//离岗时ID
Guid whenLeavingWorkId = (await _ocCheckTypeRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("离岗时"))).Id;
//未见异常ID
Guid noAbnormalId = (await _occupationalAbnormalRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("未见异常"))).Id;
msg.CertificateNo = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "medical_center_qualification_certificate_number");
msg.MedicalTypeName = await _cacheService.GetMedicalTypeNameAsync(patientRegisterfisrt.patientRegister.MedicalTypeId);
msg.CustomerOrgName = await _cacheService.GetTopCustomerOrgNameAsync(patientRegisterfisrt.patientRegister.CustomerOrgId);
msg.MedicalCenterAddress = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "medical_center_address");
msg.MedicalCenterName = (await _organizationUnitRepository.GetAsync(patientRegisterfisrt.patientRegister.MedicalCenterId)).DisplayName;
msg.MedicalStartDate = Convert.ToDateTime(customerOrgPara.StartDate).ToString("yyyy年MM月dd日");
msg.MedicalSumCount = patientRegisters.Count;
msg.RecordNumber = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "medical_center_record_number");
msg.ReportDate = DateTime.Now.ToString("yyyy年MM月dd日");
msg.OnDutyCount = patientRegisterList.Where(m => m.patientOccupationalDisease.OcCheckTypeId == onDutyId).GroupBy(g => g.patientRegister).Count();
msg.WhenLeavingWorkCount = patientRegisterList.Where(m => m.patientOccupationalDisease.OcCheckTypeId == whenLeavingWorkId).Count();
msg.PoisonNames = string.Join('、', patientRegisterList.Where(m => m.patientOccupationalDisease.OcCheckTypeId == onDutyId
|| m.patientOccupationalDisease.OcCheckTypeId == whenLeavingWorkId).Select(s => s.posionHaveEmpty.DisplayName).Distinct());
//有结论的数据
var conclusionList = patientRegisterList.Where(m => (m.patientOccupationalDisease.OcCheckTypeId == onDutyId
|| m.patientOccupationalDisease.OcCheckTypeId == whenLeavingWorkId)
&& m.patientPoisonHaveEmpty.OccupationalAbnormalId != null && m.patientPoisonHaveEmpty.OccupationalAbnormalId != noAbnormalId);
msg.Conclusions = string.Join('、', conclusionList.Select(s => s.occupationalAbnormalHaveEmpty.DisplayName).Distinct());
msg.JobTypes = string.Join('、', conclusionList.Select(s => s.patientOccupationalDisease.JobType).Distinct());
#region 检查结果
//目标疾病检出情况
List<GetCompanyOccupationalDiseaseSummaryReportConclusionDetailDto> conclusionDetails = new List<GetCompanyOccupationalDiseaseSummaryReportConclusionDetailDto>();
var occupationalAbnormalList = (await _occupationalAbnormalRepository.GetListAsync()).OrderBy(o => o.DisplayOrder);
foreach (var item in occupationalAbnormalList)
{
var conclusionCount = patientRegisterList.Where(m => m.patientPoisonHaveEmpty.OccupationalAbnormalId == item.Id).Select(s => s.patientRegister.Id).Distinct().Count();
var conclusionRatio = Decimal.Round(Convert.ToDecimal(conclusionCount * 100) / patientRegisters.Count, 2);
var conclusionDetail = new GetCompanyOccupationalDiseaseSummaryReportConclusionDetailDto
{
ConclusionName = item.DisplayName,
DisplayOrder = item.DisplayOrder,
ConclusionCount = conclusionCount,
ConclusionRatio = conclusionRatio
};
conclusionDetails.Add(conclusionDetail);
}
msg.ConclusionDetails = conclusionDetails;
//相关检查情况
var asbitemAbnormalQuery = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
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 asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id into asbitemTemp
from asbitemHaveEmpty in asbitemTemp.DefaultIfEmpty()
join registerCheckSummary in await _registerCheckSummaryRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckSummary.RegisterCheckId
join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId
where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId
&& !registerCheckSummary.Summary.Contains("未见异常")
&& patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck
select new
{
patientRegister,
asbitemName = asbitemHaveEmpty.DisplayName
});
if (!string.IsNullOrEmpty(customerOrgPara.StartDate) && !string.IsNullOrEmpty(customerOrgPara.EndDate))
{
if (customerOrgPara.DateType == '1')
{
asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
else if (customerOrgPara.DateType == '2')
{
asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
else if (customerOrgPara.DateType == '3')
{
asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
}
if (customerOrgPara.CustomerOrgGroupId.Any())
{
asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
}
var asbitemAbnormalList = asbitemAbnormalQuery.ToList();
//异常总人数
var abnormalSumCount = asbitemAbnormalList.Select(s => s.patientRegister.Id).Distinct().Count();
var asbitemAbnormals = asbitemAbnormalList.GroupBy(g => g.asbitemName).Select((s, index) => new GetCompanyOccupationalDiseaseSummaryReportAsbitemAbnormalDto
{
AbnormalAsbitemName = s.Key,
AbnormalCount = s.Select(ss => ss.patientRegister.Id).Distinct().Count(),
AbnormalRatio = Decimal.Round(Convert.ToDecimal(s.Select(ss => ss.patientRegister.Id).Distinct().Count() * 100) / abnormalSumCount, 2),
DisplayOrder = index + 1
}).ToList();
msg.AsbitemAbnormals = asbitemAbnormals;
#endregion
}
return msg;
}
/// <summary>
/// 获取单位职业病明细报告
/// </summary>
/// <returns></returns>
[HttpPost("api/app/OccupationalDiseaseReport/GetCompanyOccupationalDiseaseDetailReport")]
public async Task<GetCompanyOccupationalDiseaseDetailReportDto> GetCompanyOccupationalDiseaseDetailReportAsync(GetCompanyOccupationalDiseaseDetailReportInputDto input)
{
if (!input.CustomerOrgs.Any())
throw new UserFriendlyException("单位信息不能为空");
var customerOrgPara = input.CustomerOrgs.First();
if (customerOrgPara.CustomerOrgId == null || customerOrgPara.CustomerOrgId == Guid.Empty)
throw new UserFriendlyException("单位不能为空");
if (customerOrgPara.CustomerOrgRegisterId == null || customerOrgPara.CustomerOrgRegisterId == Guid.Empty)
throw new UserFriendlyException("单位体检次数不能为空");
#region 人员信息
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId
join patientPoison in await _patientPoisonRepository.GetQueryableAsync() on patientRegister.Id equals patientPoison.PatientRegisterId into patientPoisonTemp
from patientPoisonHaveEmpty in patientPoisonTemp.DefaultIfEmpty()
join poison in await _poisonRepository.GetQueryableAsync() on patientPoisonHaveEmpty.PoisonId equals poison.Id into poisonTemp
from posionHaveEmpty in poisonTemp.DefaultIfEmpty()
join ocCheckType in await _ocCheckTypeRepository.GetQueryableAsync() on patientOccupationalDisease.OcCheckTypeId equals ocCheckType.Id into ocCheckTypeTemp
from ocCheckTypeHaveEmpty in ocCheckTypeTemp.DefaultIfEmpty()
where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId
select new
{
patientRegister,
patient,
patientOccupationalDisease,
posionHaveEmpty,
patientPoisonHaveEmpty,
ocCheckTypeHaveEmpty
};
if (!string.IsNullOrEmpty(customerOrgPara.StartDate) && !string.IsNullOrEmpty(customerOrgPara.EndDate))
{
if (customerOrgPara.DateType == '1')
{
query = query.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
else if (customerOrgPara.DateType == '2')
{
query = query.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
else if (customerOrgPara.DateType == '3')
{
query = query.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
}
List<Guid?> customerOrgIds = new List<Guid?>();
if (customerOrgPara.CustomerOrgId != null)
{
customerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(customerOrgPara.CustomerOrgId.Value);
}
if (customerOrgIds.Any())
{
query = query.Where(m => customerOrgIds.Contains(m.patientRegister.CustomerOrgId));
}
if (customerOrgPara.CustomerOrgGroupId.Any())
{
query = query.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
}
#endregion
//var ddd = query.ToQueryString();
//var noCheckPatientRegisterList = query.ToList();
//var sumCount = noCheckPatientRegisterList.GroupBy(g => g.patientRegister).Count(); //总人数
//query = query.Where(m => m.patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck);
var patientRegisterList = query.ToList();
var sumCount = patientRegisterList.GroupBy(g => g.patientRegister).Count(); //总人数
var msg = new GetCompanyOccupationalDiseaseDetailReportDto();
if (patientRegisterList.Any())
{
//人员
//var patientRegisters = patientRegisterList.Select(m => m.patientRegister).Distinct().ToList();
var patientRegisterfisrt = patientRegisterList.First();
msg.CertificateNo = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "medical_center_qualification_certificate_number");
msg.CustomerOrgName = await _cacheService.GetTopCustomerOrgNameAsync(patientRegisterfisrt.patientRegister.CustomerOrgId);
msg.MedicalCenterName = (await _organizationUnitRepository.GetAsync(patientRegisterfisrt.patientRegister.MedicalCenterId)).DisplayName;
msg.MedicalStartDate = Convert.ToDateTime(customerOrgPara.StartDate).ToString("yyyy年MM月dd日");
msg.RecordNumber = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "medical_center_record_number");
msg.ReportDate = DateTime.Now.ToString("yyyy年MM月dd日");
msg.OcCheckTypeNames = (await _ocCheckTypeRepository.GetListAsync()).Select(s => new GetCompanyOccupationalDiseaseDetailReportOcCheckTypeDetailDto
{
OcCheckTypeName = s.DisplayName,
IsSelected = false
}).ToList();
#region 检查情况报告列表
var ocCheckTypeDetails = patientRegisterList.GroupBy(g => new { g.patientRegister, g.patientOccupationalDisease.OcCheckTypeId })
.Select(s => new
{
posionNames = string.Join("、", s.Where(m => m.posionHaveEmpty != null)
.OrderBy(o => o.posionHaveEmpty.DisplayOrder).Select(ss => ss.posionHaveEmpty.DisplayName).Distinct()),
ocCheckTypeName = s.FirstOrDefault().ocCheckTypeHaveEmpty != null ? s.FirstOrDefault().ocCheckTypeHaveEmpty.DisplayName : "",
}).ToList()
.GroupBy(g => new { g.ocCheckTypeName, g.posionNames })
.Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportOcCheckTypeSummaryDto
{
DisplayOrder = index + 1,
OcCheckTypeName = s.Key.ocCheckTypeName,
CheckCount = s.Count(),
PoisonNames = s.Key.posionNames
}).ToList();
msg.OcCheckTypeDetails = ocCheckTypeDetails;
#endregion
#region 选中检查类别
foreach (var item in msg.OcCheckTypeNames)
{
var isSelected = ocCheckTypeDetails.Count(f => f.OcCheckTypeName == item.OcCheckTypeName) > 0 ? true : false;
item.IsSelected = isSelected;
}
#endregion
#region 未见异常人员一览表
var noAbnormalConditionsDetails = patientRegisterList.Where(m => !string.IsNullOrWhiteSpace(m.patientOccupationalDisease.OccupationalAbnormal)
&& m.patientOccupationalDisease.OccupationalAbnormal.Contains("未见异常"))
.GroupBy(g => g.patientOccupationalDisease).OrderBy(o => o.Key.OccupationalAbnormal)
.Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportMedicalResultDetailDto
{
DisplayOrder = index + 1,
HandlingSuggestions = s.Key.OccupationalAbSuggestion,
JobType = s.Key.JobType,
PatientName = s.FirstOrDefault().patientRegister.PatientName,
PatientRegisterNo = s.FirstOrDefault().patientRegister.PatientRegisterNo,
PoisonNames = string.Join(",", s.Select(ss => ss.posionHaveEmpty.DisplayName).Distinct()),
PoisonWorkTime = s.Key.PoisonWorkTime,
MedicalConclusion = s.Key.OccupationalAbnormal,
OcCheckTypeName = s.FirstOrDefault().ocCheckTypeHaveEmpty.DisplayName,
Age = s.FirstOrDefault().patientRegister.Age == null ? "" : s.FirstOrDefault().patientRegister.Age.ToString(),
IdNo = s.FirstOrDefault().patient.IdNo,
SexName = _cacheService.GetSexNameAsync(s.FirstOrDefault().patientRegister.SexId).GetAwaiter().GetResult(),
MedicalStartDate = DataHelper.ConversionDateShortToString(s.FirstOrDefault().patientRegister.MedicalStartDate),
SummaryDoctorName = _cacheService.GetSurnameAsync(s.FirstOrDefault().patientRegister.AuditDoctorId).GetAwaiter().GetResult()
}).ToList();
msg.NoAbnormalConditionsDetails = noAbnormalConditionsDetails;
#endregion
#region 其他疾病或异常人员一览表
var otherDiseasesOrAbnormalIndividualsDetails = patientRegisterList.Where(m => !string.IsNullOrWhiteSpace(m.patientOccupationalDisease.OccupationalAbnormal)
&& m.patientOccupationalDisease.OccupationalAbnormal.Contains("其他疾病或异常"))
.GroupBy(g => g.patientOccupationalDisease).OrderBy(o => o.Key.OccupationalAbnormal)
.Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportMedicalResultDetailDto
{
DisplayOrder = index + 1,
HandlingSuggestions = s.Key.OccupationalAbSuggestion,
JobType = s.Key.JobType,
PatientName = s.FirstOrDefault().patientRegister.PatientName,
PatientRegisterNo = s.FirstOrDefault().patientRegister.PatientRegisterNo,
PoisonNames = string.Join(",", s.Select(ss => ss.posionHaveEmpty.DisplayName).Distinct()),
PoisonWorkTime = s.Key.PoisonWorkTime,
MedicalConclusion = s.Key.OccupationalAbnormal,
OcCheckTypeName = s.FirstOrDefault().ocCheckTypeHaveEmpty.DisplayName,
Age = s.FirstOrDefault().patientRegister.Age == null ? "" : s.FirstOrDefault().patientRegister.Age.ToString(),
IdNo = s.FirstOrDefault().patient.IdNo,
SexName = _cacheService.GetSexNameAsync(s.FirstOrDefault().patientRegister.SexId).GetAwaiter().GetResult(),
MedicalStartDate = DataHelper.ConversionDateShortToString(s.FirstOrDefault().patientRegister.MedicalStartDate),
SummaryDoctorName = _cacheService.GetSurnameAsync(s.FirstOrDefault().patientRegister.AuditDoctorId).GetAwaiter().GetResult()
}).ToList();
msg.OtherDiseasesOrAbnormalIndividualsDetails = otherDiseasesOrAbnormalIndividualsDetails;
#endregion
#region 复查人员一览表
var reviewPersonnelDetails = patientRegisterList.Where(m => !string.IsNullOrWhiteSpace(m.patientOccupationalDisease.OccupationalAbnormal)
&& m.patientOccupationalDisease.OccupationalAbnormal.Contains("复查"))
.GroupBy(g => g.patientOccupationalDisease).OrderBy(o => o.Key.OccupationalAbnormal)
.Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportMedicalResultDetailDto
{
DisplayOrder = index + 1,
HandlingSuggestions = s.Key.OccupationalAbSuggestion,
JobType = s.Key.JobType,
PatientName = s.FirstOrDefault().patientRegister.PatientName,
PatientRegisterNo = s.FirstOrDefault().patientRegister.PatientRegisterNo,
PoisonNames = string.Join(",", s.Select(ss => ss.posionHaveEmpty.DisplayName).Distinct()),
PoisonWorkTime = s.Key.PoisonWorkTime,
MedicalConclusion = s.Key.OccupationalAbnormal,
OcCheckTypeName = s.FirstOrDefault().ocCheckTypeHaveEmpty.DisplayName,
Age = s.FirstOrDefault().patientRegister.Age == null ? "" : s.FirstOrDefault().patientRegister.Age.ToString(),
IdNo = s.FirstOrDefault().patient.IdNo,
SexName = _cacheService.GetSexNameAsync(s.FirstOrDefault().patientRegister.SexId).GetAwaiter().GetResult(),
MedicalStartDate = DataHelper.ConversionDateShortToString(s.FirstOrDefault().patientRegister.MedicalStartDate),
SummaryDoctorName = _cacheService.GetSurnameAsync(s.FirstOrDefault().patientRegister.AuditDoctorId).GetAwaiter().GetResult()
}).ToList();
msg.ReviewPersonnelDetails = reviewPersonnelDetails;
#endregion
#region 职业禁忌证人员一览表
var occupationalContraindicationDetails = patientRegisterList.Where(m => !string.IsNullOrWhiteSpace(m.patientOccupationalDisease.OccupationalAbnormal)
&& m.patientOccupationalDisease.OccupationalAbnormal.Contains("职业禁忌证"))
.GroupBy(g => g.patientOccupationalDisease).OrderBy(o => o.Key.OccupationalAbnormal)
.Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportMedicalResultDetailDto
{
DisplayOrder = index + 1,
HandlingSuggestions = s.Key.OccupationalAbSuggestion,
JobType = s.Key.JobType,
PatientName = s.FirstOrDefault().patientRegister.PatientName,
PatientRegisterNo = s.FirstOrDefault().patientRegister.PatientRegisterNo,
PoisonNames = string.Join(",", s.Select(ss => ss.posionHaveEmpty.DisplayName).Distinct()),
PoisonWorkTime = s.Key.PoisonWorkTime,
MedicalConclusion = s.Key.OccupationalAbnormal,
OcCheckTypeName = s.FirstOrDefault().ocCheckTypeHaveEmpty.DisplayName,
Age = s.FirstOrDefault().patientRegister.Age == null ? "" : s.FirstOrDefault().patientRegister.Age.ToString(),
IdNo = s.FirstOrDefault().patient.IdNo,
SexName = _cacheService.GetSexNameAsync(s.FirstOrDefault().patientRegister.SexId).GetAwaiter().GetResult(),
MedicalStartDate = DataHelper.ConversionDateShortToString(s.FirstOrDefault().patientRegister.MedicalStartDate),
SummaryDoctorName = _cacheService.GetSurnameAsync(s.FirstOrDefault().patientRegister.AuditDoctorId).GetAwaiter().GetResult()
}).ToList();
msg.OccupationalContraindicationDetails = occupationalContraindicationDetails;
#endregion
#region 疑似职业病人员一览表
var suspectedOccupationalDiseaseDetails = patientRegisterList.Where(m => !string.IsNullOrWhiteSpace(m.patientOccupationalDisease.OccupationalAbnormal)
&& m.patientOccupationalDisease.OccupationalAbnormal.Contains("疑似职业病"))
.GroupBy(g => g.patientOccupationalDisease).OrderBy(o => o.Key.OccupationalAbnormal)
.Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportMedicalResultDetailDto
{
DisplayOrder = index + 1,
HandlingSuggestions = s.Key.OccupationalAbSuggestion,
JobType = s.Key.JobType,
PatientName = s.FirstOrDefault().patientRegister.PatientName,
PatientRegisterNo = s.FirstOrDefault().patientRegister.PatientRegisterNo,
PoisonNames = string.Join(",", s.Select(ss => ss.posionHaveEmpty.DisplayName).Distinct()),
PoisonWorkTime = s.Key.PoisonWorkTime,
MedicalConclusion = s.Key.OccupationalAbnormal,
OcCheckTypeName = s.FirstOrDefault().ocCheckTypeHaveEmpty.DisplayName,
Age = s.FirstOrDefault().patientRegister.Age == null ? "" : s.FirstOrDefault().patientRegister.Age.ToString(),
IdNo = s.FirstOrDefault().patient.IdNo,
SexName = _cacheService.GetSexNameAsync(s.FirstOrDefault().patientRegister.SexId).GetAwaiter().GetResult(),
MedicalStartDate = DataHelper.ConversionDateShortToString(s.FirstOrDefault().patientRegister.MedicalStartDate),
SummaryDoctorName = _cacheService.GetSurnameAsync(s.FirstOrDefault().patientRegister.AuditDoctorId).GetAwaiter().GetResult()
}).ToList();
msg.SuspectedOccupationalDiseaseDetails = suspectedOccupationalDiseaseDetails;
#endregion
#region 体检结果异常率明细
var asbitemAbnormalQuery = (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 _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id into asbitemTemp
from asbitemHaveEmpty in asbitemTemp.DefaultIfEmpty()
join registerCheckSummary in await _registerCheckSummaryRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckSummary.RegisterCheckId into registerCheckSummaryTemp
from registerCheckSummaryEmpty in registerCheckSummaryTemp.DefaultIfEmpty()
join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId
join ocCheckType in await _ocCheckTypeRepository.GetQueryableAsync() on patientOccupationalDisease.OcCheckTypeId equals ocCheckType.Id into ocCheckTypeTemp
from ocCheckTypeHaveEmpty in ocCheckTypeTemp.DefaultIfEmpty()
join patientPoison in await _patientPoisonRepository.GetQueryableAsync() on patientRegister.Id equals patientPoison.PatientRegisterId into patientPoisonTemp
from patientPoisonHaveEmpty in patientPoisonTemp.DefaultIfEmpty()
join poison in await _poisonRepository.GetQueryableAsync() on patientPoisonHaveEmpty.PoisonId equals poison.Id into poisonTemp
from posionHaveEmpty in poisonTemp.DefaultIfEmpty()
where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId
// && !registerCheckSummaryEmpty.Summary.Contains("未见异常")
// && patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration
&& asbitemHaveEmpty.IsCheck == 'Y'
select new
{
patientRegister,
asbitemName = asbitemHaveEmpty.DisplayName,
registerCheckCompleteFlag = registerCheck.CompleteFlag,
idNo = patient.IdNo,
summary = registerCheckSummaryEmpty != null ? registerCheckSummaryEmpty.Summary : "",
ocCheckTypeName = ocCheckTypeHaveEmpty != null ? ocCheckTypeHaveEmpty.DisplayName : "",
posionName = posionHaveEmpty != null ? posionHaveEmpty.DisplayName : "",
jobType = patientOccupationalDisease.JobType,
poisonWorkTime = patientOccupationalDisease.PoisonWorkTime,
occupationalAbnormal = patientOccupationalDisease.OccupationalAbnormal
});
if (!string.IsNullOrEmpty(customerOrgPara.StartDate) && !string.IsNullOrEmpty(customerOrgPara.EndDate))
{
if (customerOrgPara.DateType == '1')
{
asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
else if (customerOrgPara.DateType == '2')
{
asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
else if (customerOrgPara.DateType == '3')
{
asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
}
if (customerOrgIds.Any())
{
asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => customerOrgIds.Contains(m.patientRegister.CustomerOrgId));
}
if (customerOrgPara.CustomerOrgGroupId.Any())
{
asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
}
var asbitemAbnormalList = asbitemAbnormalQuery.ToList();
var asbitemAbnormalCount = asbitemAbnormalList.Where(m => !m.summary.Contains("未见异常")).Select(s => s.asbitemName).Distinct().Count();
var medicalResultAbnormalRateDetails = asbitemAbnormalList.Where(m => !m.summary.Contains("未见异常")).GroupBy(g => g.asbitemName)
.Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportMedicalResultAbnormalRateDetailDto
{
AbnormalPatientNames = string.Join("、", s.Select(ss => ss.patientRegister.PatientName).Distinct()),
AsbitemName = s.Key,
DisplayOrder = index + 1,
AbnormalRate = Decimal.Round(Convert.ToDecimal(s.Count() * 100) / asbitemAbnormalCount, 2)
}).ToList();
msg.MedicalResultAbnormalRateDetails = medicalResultAbnormalRateDetails;
#endregion
#region 缺项人员一览表 <已经开始检查了,但是未检查完的>
var listOfMissingItemsDetails = asbitemAbnormalList.Where(m => m.patientRegister.IsMedicalStart == 'Y' && m.registerCheckCompleteFlag == RegisterCheckCompleteFlag.UnChecked)
.GroupBy(g => g.patientRegister).OrderBy(o => o.FirstOrDefault().occupationalAbnormal)
.Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportListOfMissingItemsDetailDto
{
DisplayOrder = index + 1,
IdNo = s.FirstOrDefault().idNo,
PatientName = s.Key.PatientName,
PatientRegisterNo = s.Key.PatientRegisterNo,
UnCheckAsbitemName = string.Join("、", s.Select(ss => ss.asbitemName).Distinct()),
Age = s.Key.Age == null ? "" : s.Key.Age.ToString(),
JobType = s.FirstOrDefault().jobType,
MedicalStartDate = DataHelper.ConversionDateShortToString(s.Key.MedicalStartDate),
OcCheckTypeName = s.FirstOrDefault().ocCheckTypeName,
PoisonNames = string.Join(",", s.Where(m => !string.IsNullOrWhiteSpace(m.posionName)).Select(ss => ss.posionName).Distinct()),
PoisonWorkTime = s.FirstOrDefault().poisonWorkTime,
SexName = _cacheService.GetSexNameAsync(s.Key.SexId).GetAwaiter().GetResult(),
SummaryDoctorName = _cacheService.GetSurnameAsync(s.Key.AuditDoctorId).GetAwaiter().GetResult()
}).ToList();
msg.ListOfMissingItemsDetails = listOfMissingItemsDetails;
#endregion
#region 未检人员一览表 <还没开始检查的>
//
var uninspectedPersonnelDetails = asbitemAbnormalList.Where(m => m.patientRegister.IsMedicalStart == 'N' && m.registerCheckCompleteFlag == RegisterCheckCompleteFlag.UnChecked)
.GroupBy(g => g.patientRegister).OrderBy(o => o.FirstOrDefault().occupationalAbnormal)
.Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportUninspectedPersonnelDetailDto
{
DisplayOrder = index + 1,
IdNo = s.FirstOrDefault().idNo,
PatientName = s.Key.PatientName,
PatientRegisterNo = s.Key.PatientRegisterNo,
UnCheckAsbitemName = string.Join("、", s.Select(ss => ss.asbitemName).Distinct()),
Age = s.Key.Age == null ? "" : s.Key.Age.ToString(),
JobType = s.FirstOrDefault().jobType,
MedicalStartDate = DataHelper.ConversionDateShortToString(s.Key.MedicalStartDate),
OcCheckTypeName = s.FirstOrDefault().ocCheckTypeName,
PoisonNames = string.Join(",", s.Where(m => !string.IsNullOrWhiteSpace(m.posionName)).Select(ss => ss.posionName).Distinct()),
PoisonWorkTime = s.FirstOrDefault().poisonWorkTime,
SexName = _cacheService.GetSexNameAsync(s.Key.SexId).GetAwaiter().GetResult(),
SummaryDoctorName = _cacheService.GetSurnameAsync(s.Key.AuditDoctorId).GetAwaiter().GetResult()
}).ToList();
msg.UninspectedPersonnelDetails = uninspectedPersonnelDetails;
#endregion
#region 体检结果总结
msg.MedicalResultDesc = $"{Convert.ToDateTime(customerOrgPara.StartDate).ToString("yyyy-MM-dd")},{msg.CustomerOrgName}组织{sumCount}名接触" +
$"特种作业工人进行职业健康检查。";
var occupationalAbnormalDetails = new List<GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto>();
occupationalAbnormalDetails.Add(new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
DisplayOrder = 1,
OccupationalAbnormalName = "未见异常",
OccupationalAbnormalCount = noAbnormalConditionsDetails.Count,
OccupationalAbnormalRatio = Decimal.Round(Convert.ToDecimal(noAbnormalConditionsDetails.Count * 100) / sumCount, 2),
});
occupationalAbnormalDetails.Add(new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
DisplayOrder = 2,
OccupationalAbnormalName = "其他疾病或异常",
OccupationalAbnormalCount = otherDiseasesOrAbnormalIndividualsDetails.Count,
OccupationalAbnormalRatio = Decimal.Round(Convert.ToDecimal(otherDiseasesOrAbnormalIndividualsDetails.Count * 100) / sumCount, 2),
});
occupationalAbnormalDetails.Add(new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
DisplayOrder = 3,
OccupationalAbnormalName = "复查",
OccupationalAbnormalCount = reviewPersonnelDetails.Count,
OccupationalAbnormalRatio = Decimal.Round(Convert.ToDecimal(reviewPersonnelDetails.Count * 100) / sumCount, 2),
});
occupationalAbnormalDetails.Add(new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
DisplayOrder = 4,
OccupationalAbnormalName = "职业禁忌症",
OccupationalAbnormalCount = occupationalContraindicationDetails.Count,
OccupationalAbnormalRatio = Decimal.Round(Convert.ToDecimal(occupationalContraindicationDetails.Count * 100) / sumCount, 2),
});
occupationalAbnormalDetails.Add(new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
DisplayOrder = 5,
OccupationalAbnormalName = "疑似职业病",
OccupationalAbnormalCount = suspectedOccupationalDiseaseDetails.Count,
OccupationalAbnormalRatio = Decimal.Round(Convert.ToDecimal(suspectedOccupationalDiseaseDetails.Count * 100) / sumCount, 2),
});
occupationalAbnormalDetails.Add(new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
DisplayOrder = 6,
OccupationalAbnormalName = "缺项",
OccupationalAbnormalCount = listOfMissingItemsDetails.Count,
OccupationalAbnormalRatio = Decimal.Round(Convert.ToDecimal(listOfMissingItemsDetails.Count * 100) / sumCount, 2),
});
occupationalAbnormalDetails.Add(new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
DisplayOrder = 7,
OccupationalAbnormalName = "未检",
OccupationalAbnormalCount = uninspectedPersonnelDetails.Count,
OccupationalAbnormalRatio = Decimal.Round(Convert.ToDecimal(uninspectedPersonnelDetails.Count * 100) / sumCount, 2),
});
msg.OccupationalAbnormalDetails = occupationalAbnormalDetails;
#endregion
}
return msg;
}
///// <summary>
///// 获取单位职业病明细报告
///// </summary>
///// <returns></returns>
//[HttpPost("api/app/OccupationalDiseaseReport/GetCompanyOccupationalDiseaseDetailReport")]
//public async Task<GetCompanyOccupationalDiseaseDetailReportDto> GetCompanyOccupationalDiseaseDetailReportAsync(GetCompanyOccupationalDiseaseDetailReportInputDto input)
//{
// if (!input.CustomerOrgs.Any())
// throw new UserFriendlyException("单位信息不能为空");
// var customerOrgPara = input.CustomerOrgs.First();
// if (customerOrgPara.CustomerOrgId == null || customerOrgPara.CustomerOrgId == Guid.Empty)
// throw new UserFriendlyException("单位不能为空");
// if (customerOrgPara.CustomerOrgRegisterId == null || customerOrgPara.CustomerOrgRegisterId == Guid.Empty)
// throw new UserFriendlyException("单位体检次数不能为空");
// #region 人员信息
// var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
// join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
// join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId
// join patientPoison in await _patientPoisonRepository.GetQueryableAsync() on patientRegister.Id equals patientPoison.PatientRegisterId into patientPoisonTemp
// from patientPoisonHaveEmpty in patientPoisonTemp.DefaultIfEmpty()
// join poison in await _poisonRepository.GetQueryableAsync() on patientPoisonHaveEmpty.PoisonId equals poison.Id into poisonTemp
// from posionHaveEmpty in poisonTemp.DefaultIfEmpty()
// join occupationalAbnormal in await _occupationalAbnormalRepository.GetQueryableAsync() on patientPoisonHaveEmpty.OccupationalAbnormalId equals occupationalAbnormal.Id into occupationalAbnormalTemp
// from occupationalAbnormalHaveEmpty in occupationalAbnormalTemp.DefaultIfEmpty()
// join ocCheckType in await _ocCheckTypeRepository.GetQueryableAsync() on patientOccupationalDisease.OcCheckTypeId equals ocCheckType.Id into ocCheckTypeTemp
// from ocCheckTypeHaveEmpty in ocCheckTypeTemp.DefaultIfEmpty()
// join sumSummaryHeader in (await _sumSummaryHeaderRepository.GetQueryableAsync()).Include(x => x.SumSummaryContents) on patientRegister.Id equals sumSummaryHeader.PatientRegisterId into sumSummaryHeaderTemp
// from sumSummaryHeaderHaveEmpty in sumSummaryHeaderTemp.DefaultIfEmpty()
// where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId
// && patientRegister.CompleteFlag != PatientRegisterCompleteFlag.SumCheck
// select new
// {
// patientRegister,
// patient,
// patientOccupationalDisease,
// posionHaveEmpty,
// patientPoisonHaveEmpty,
// occupationalAbnormalHaveEmpty,
// ocCheckTypeHaveEmpty,
// sumSummaryHeaderHaveEmpty
// };
// if (!string.IsNullOrEmpty(customerOrgPara.StartDate) && !string.IsNullOrEmpty(customerOrgPara.EndDate))
// {
// if (customerOrgPara.DateType == '1')
// {
// query = query.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(customerOrgPara.StartDate) &&
// m.patientRegister.CreationTime < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
// }
// else if (customerOrgPara.DateType == '2')
// {
// query = query.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
// m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
// }
// else if (customerOrgPara.DateType == '3')
// {
// query = query.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
// m.patientRegister.SummaryDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
// }
// }
// if (customerOrgPara.CustomerOrgGroupId.Any())
// {
// query = query.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
// }
// #endregion
// var patientRegisterList = query.ToList();
// var msg = new GetCompanyOccupationalDiseaseDetailReportDto
// {
// DiagnosisAndTreatmentDetails = new List<GetCompanyOccupationalDiseaseDetailReportDiagnosisAndTreatmentDetailDto>(),
// ListOfMissingItemsDetails = new List<GetCompanyOccupationalDiseaseDetailReportListOfMissingItemsDetailDto>(),
// MedicalResultAbnormalRateDetails = new List<GetCompanyOccupationalDiseaseDetailReportMedicalResultAbnormalRateDetailDto>(),
// OccupationalContraindicationDetails = new List<GetCompanyOccupationalDiseaseDetailReportOccupationalContraindicationDetailDto>(),
// ReviewPersonnelDetails = new List<GetCompanyOccupationalDiseaseDetailReportReviewPersonnelDetailDto>(),
// SuspectedOccupationalDiseaseDetails = new List<GetCompanyOccupationalDiseaseDetailReportSuspectedOccupationalDiseaseDetailDto>()
// };
// if (patientRegisterList.Any())
// {
// //人员
// var patientRegisters = patientRegisterList.Select(m => m.patientRegister).Distinct().ToList();
// var patientRegisterfisrt = patientRegisterList.First();
// msg.CertificateNo = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "medical_center_qualification_certificate_number");
// msg.CustomerOrgName = await _cacheService.GetTopCustomerOrgNameAsync(patientRegisterfisrt.patientRegister.CustomerOrgId);
// msg.MedicalCenterName = (await _organizationUnitRepository.GetAsync(patientRegisterfisrt.patientRegister.MedicalCenterId)).DisplayName;
// msg.MedicalStartDate = Convert.ToDateTime(customerOrgPara.StartDate).ToString("yyyy年MM月dd日");
// msg.RecordNumber = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "medical_center_record_number");
// msg.ReportDate = DateTime.Now.ToString("yyyy年MM月dd日");
// msg.OcCheckTypeNames = (await _ocCheckTypeRepository.GetListAsync()).Select(s => s.DisplayName).ToList();
// #region 检查情况报告列表
// var ocCheckTypeDetails = patientRegisterList.GroupBy(g => new { g.patientRegister, g.patientOccupationalDisease.OcCheckTypeId })
// .Select(s => new
// {
// posionNames = string.Join("、", s.Where(m => m.posionHaveEmpty != null)
// .OrderBy(o => o.posionHaveEmpty.DisplayOrder).Select(ss => ss.posionHaveEmpty.DisplayName).Distinct()),
// ocCheckTypeName = s.FirstOrDefault().ocCheckTypeHaveEmpty != null ? s.FirstOrDefault().ocCheckTypeHaveEmpty.DisplayName : "",
// }).ToList()
// .GroupBy(g => new { g.ocCheckTypeName, g.posionNames })
// .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportOcCheckTypeSummaryDto
// {
// DisplayOrder = index + 1,
// OcCheckTypeName = s.Key.ocCheckTypeName,
// CheckCount = s.Count(),
// PoisonNames = s.Key.posionNames
// }).ToList();
// msg.OcCheckTypeDetails = ocCheckTypeDetails;
// #endregion
// #region 体检结果总结
// var occupationalAbnormalDetails = patientRegisterList.Where(m => m.occupationalAbnormalHaveEmpty != null).ToList()
// .GroupBy(g => new { g.patientRegister, g.occupationalAbnormalHaveEmpty })
// .Select(s => new { occupationalAbnormalName = s.Key.occupationalAbnormalHaveEmpty.DisplayName }).ToList()
// .GroupBy(g => g.occupationalAbnormalName)
// .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
// {
// DisplayOrder = index + 1,
// OccupationalAbnormalCount = s.Count(),
// OccupationalAbnormalName = s.Key,
// OccupationalAbnormalRatio = Decimal.Round(Convert.ToDecimal(s.Count() * 100) / patientRegisters.Count, 2)
// }).ToList();
// string occupationalAbnormalDesc = "";
// foreach (var item in occupationalAbnormalDetails)
// {
// if (occupationalAbnormalDetails.IndexOf(item) == occupationalAbnormalDetails.Count - 1)
// occupationalAbnormalDesc += $"{item.OccupationalAbnormalName}{item.OccupationalAbnormalCount}人。";
// else
// occupationalAbnormalDesc += $"{item.OccupationalAbnormalName}{item.OccupationalAbnormalCount}人,";
// }
// msg.MedicalResultDesc = $"{Convert.ToDateTime(customerOrgPara.StartDate).ToString("yyyy-MM-dd")},{msg.CustomerOrgName}组织{patientRegisters.Count}名接触" +
// $"{1}作业工人进行职业健康检查,结果:{occupationalAbnormalDesc}";
// msg.OccupationalAbnormalDetails = occupationalAbnormalDetails;
// #endregion
// #region 体检结果一览表
// var medicalResultDetails = patientRegisterList.GroupBy(g => g.patientOccupationalDisease).OrderBy(o => o.Key.OccupationalAbnormal)
// .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportMedicalResultDetailDto
// {
// //AnomalyIndex = !string.IsNullOrWhiteSpace(s.Key.OccupationalAbnormal)
// //? $"{SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList())}\n结论:{s.Key.OccupationalAbnormal}"
// //: $"{SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList())}",
// AnomalyIndex = $"{SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList())}",
// DisplayOrder = index + 1,
// HandlingSuggestions = s.Key.OccupationalAbSuggestion,
// JobType = s.Key.JobType,
// PatientName = s.FirstOrDefault().patientRegister.PatientName,
// PatientRegisterNo = s.FirstOrDefault().patientRegister.PatientRegisterNo,
// PoisonNames = string.Join(",", s.Select(ss => ss.posionHaveEmpty.DisplayName).Distinct()),
// PoisonWorkTime = s.Key.PoisonWorkTime,
// MedicalConclusion = s.Key.OccupationalAbnormal,
// OcCheckTypeName = s.FirstOrDefault().ocCheckTypeHaveEmpty.DisplayName,
// Age = s.FirstOrDefault().patientRegister.Age == null ? "" : s.FirstOrDefault().patientRegister.Age.ToString(),
// IdNo = s.FirstOrDefault().patient.IdNo,
// SexName = _cacheService.GetSexNameAsync(s.FirstOrDefault().patientRegister.SexId).GetAwaiter().GetResult(),
// MedicalStartDate = DataHelper.ConversionDateShortToString(s.FirstOrDefault().patientRegister.MedicalStartDate),
// SummaryDoctorName = _cacheService.GetSurnameAsync(s.FirstOrDefault().patientRegister.AuditDoctorId).GetAwaiter().GetResult()
// }).ToList();
// msg.MedicalResultDetails = medicalResultDetails;
// #endregion
// #region 体检结果异常率明细
// var asbitemAbnormalQuery = (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 _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
// join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id into asbitemTemp
// from asbitemHaveEmpty in asbitemTemp.DefaultIfEmpty()
// join registerCheckSummary in await _registerCheckSummaryRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckSummary.RegisterCheckId into registerCheckSummaryTemp
// from registerCheckSummaryEmpty in registerCheckSummaryTemp.DefaultIfEmpty()
// join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId
// join ocCheckType in await _ocCheckTypeRepository.GetQueryableAsync() on patientOccupationalDisease.OcCheckTypeId equals ocCheckType.Id into ocCheckTypeTemp
// from ocCheckTypeHaveEmpty in ocCheckTypeTemp.DefaultIfEmpty()
// join patientPoison in await _patientPoisonRepository.GetQueryableAsync() on patientRegister.Id equals patientPoison.PatientRegisterId into patientPoisonTemp
// from patientPoisonHaveEmpty in patientPoisonTemp.DefaultIfEmpty()
// join poison in await _poisonRepository.GetQueryableAsync() on patientPoisonHaveEmpty.PoisonId equals poison.Id into poisonTemp
// from posionHaveEmpty in poisonTemp.DefaultIfEmpty()
// where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId
// // && !registerCheckSummaryEmpty.Summary.Contains("未见异常")
// && patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration
// && asbitemHaveEmpty.IsCheck == 'Y'
// select new
// {
// patientRegister,
// asbitemName = asbitemHaveEmpty.DisplayName,
// registerCheckCompleteFlag = registerCheck.CompleteFlag,
// idNo = patient.IdNo,
// summary = registerCheckSummaryEmpty != null ? registerCheckSummaryEmpty.Summary : "",
// ocCheckTypeName = ocCheckTypeHaveEmpty != null ? ocCheckTypeHaveEmpty.DisplayName : "",
// posionName = posionHaveEmpty != null ? posionHaveEmpty.DisplayName : "",
// jobType = patientOccupationalDisease.JobType,
// poisonWorkTime = patientOccupationalDisease.PoisonWorkTime,
// occupationalAbnormal = patientOccupationalDisease.OccupationalAbnormal
// });
// if (!string.IsNullOrEmpty(customerOrgPara.StartDate) && !string.IsNullOrEmpty(customerOrgPara.EndDate))
// {
// if (customerOrgPara.DateType == '1')
// {
// asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(customerOrgPara.StartDate) &&
// m.patientRegister.CreationTime < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
// }
// else if (customerOrgPara.DateType == '2')
// {
// asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
// m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
// }
// else if (customerOrgPara.DateType == '3')
// {
// asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
// m.patientRegister.SummaryDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
// }
// }
// if (customerOrgPara.CustomerOrgGroupId.Any())
// {
// asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
// }
// var asbitemAbnormalList = asbitemAbnormalQuery.ToList();
// var asbitemAbnormalCount = asbitemAbnormalList.Where(m => !m.summary.Contains("未见异常")).Select(s => s.asbitemName).Distinct().Count();
// var medicalResultAbnormalRateDetails = asbitemAbnormalList.Where(m => !m.summary.Contains("未见异常")).GroupBy(g => g.asbitemName)
// .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportMedicalResultAbnormalRateDetailDto
// {
// AbnormalPatientNames = string.Join("、", s.Select(ss => ss.patientRegister.PatientName).Distinct()),
// AsbitemName = s.Key,
// DisplayOrder = index + 1,
// AbnormalRate = Decimal.Round(Convert.ToDecimal(s.Count() * 100) / asbitemAbnormalCount, 2)
// }).ToList();
// msg.MedicalResultAbnormalRateDetails = medicalResultAbnormalRateDetails;
// #endregion
// #region 职业健康检查缺项情况表明细 <已经开始检查了,但是未检查完的>
// var listOfMissingItemsDetails = asbitemAbnormalList.Where(m => m.patientRegister.IsMedicalStart == 'Y' && m.registerCheckCompleteFlag == RegisterCheckCompleteFlag.UnChecked)
// .GroupBy(g => g.patientRegister).OrderBy(o => o.FirstOrDefault().occupationalAbnormal)
// .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportListOfMissingItemsDetailDto
// {
// DisplayOrder = index + 1,
// IdNo = s.FirstOrDefault().idNo,
// PatientName = s.Key.PatientName,
// PatientRegisterNo = s.Key.PatientRegisterNo,
// UnCheckAsbitemName = string.Join("、", s.Select(ss => ss.asbitemName)),
// Age = s.Key.Age == null ? "" : s.Key.Age.ToString(),
// JobType = s.FirstOrDefault().jobType,
// MedicalStartDate = DataHelper.ConversionDateShortToString(s.Key.MedicalStartDate),
// OcCheckTypeName = s.FirstOrDefault().ocCheckTypeName,
// PoisonNames = string.Join(",", s.Where(m => !string.IsNullOrWhiteSpace(m.posionName)).Select(ss => ss.posionName).Distinct()),
// PoisonWorkTime = s.FirstOrDefault().poisonWorkTime,
// SexName = _cacheService.GetSexNameAsync(s.Key.SexId).GetAwaiter().GetResult(),
// SummaryDoctorName = _cacheService.GetSurnameAsync(s.Key.AuditDoctorId).GetAwaiter().GetResult()
// }).ToList();
// msg.ListOfMissingItemsDetails = listOfMissingItemsDetails;
// #endregion
// #region 职业病未检人员一览表 <还没开始检查的>
// //
// var uninspectedPersonnelDetails = asbitemAbnormalList.Where(m => m.patientRegister.IsMedicalStart == 'N' && m.registerCheckCompleteFlag == RegisterCheckCompleteFlag.UnChecked)
// .GroupBy(g => g.patientRegister).OrderBy(o => o.FirstOrDefault().occupationalAbnormal)
// .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportUninspectedPersonnelDetailDto
// {
// DisplayOrder = index + 1,
// IdNo = s.FirstOrDefault().idNo,
// PatientName = s.Key.PatientName,
// PatientRegisterNo = s.Key.PatientRegisterNo,
// UnCheckAsbitemName = string.Join("、", s.Select(ss => ss.asbitemName)),
// Age = s.Key.Age == null ? "" : s.Key.Age.ToString(),
// JobType = s.FirstOrDefault().jobType,
// MedicalStartDate = DataHelper.ConversionDateShortToString(s.Key.MedicalStartDate),
// OcCheckTypeName = s.FirstOrDefault().ocCheckTypeName,
// PoisonNames = string.Join(",", s.Where(m => !string.IsNullOrWhiteSpace(m.posionName)).Select(ss => ss.posionName).Distinct()),
// PoisonWorkTime = s.FirstOrDefault().poisonWorkTime,
// SexName = _cacheService.GetSexNameAsync(s.Key.SexId).GetAwaiter().GetResult(),
// SummaryDoctorName = _cacheService.GetSurnameAsync(s.Key.AuditDoctorId).GetAwaiter().GetResult()
// }).ToList();
// msg.UninspectedPersonnelDetails = uninspectedPersonnelDetails;
// #endregion
// #region 职业病专科复查人员一览表明细
// //复查结论ID
// Guid reviewId = (await _occupationalAbnormalRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("复查"))).Id;
// var patientRegisterAbnormalQuery = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
// join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
// join sumSummaryHeader in (await _sumSummaryHeaderRepository.GetQueryableAsync()).Include(x => x.SumSummaryContents) on patientRegister.Id equals sumSummaryHeader.PatientRegisterId into sumSummaryHeaderTemp
// from sumSummaryHeaderHaveEmpty in sumSummaryHeaderTemp.DefaultIfEmpty()
// //join sumSummaryContent in await _sumSummaryContentRepository.GetQueryableAsync() on sumSummaryHeaderHaveEmpty.Id equals sumSummaryContent.SumSummaryHeaderId into sumSummaryContentTemp
// //from sumSummaryContentHaveEmpty in sumSummaryContentTemp.DefaultIfEmpty()
// join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId
// join patientPoison in await _patientPoisonRepository.GetQueryableAsync() on patientRegister.Id equals patientPoison.PatientRegisterId into patientPoisonTemp
// from patientPoisonHaveEmpty in patientPoisonTemp.DefaultIfEmpty()
// join poison in await _poisonRepository.GetQueryableAsync() on patientPoisonHaveEmpty.PoisonId equals poison.Id into poisonTemp
// from poisonHaveEmpty in poisonTemp.DefaultIfEmpty()
// where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId
// && patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration
// select new
// {
// patientRegister,
// poisonName = poisonHaveEmpty.DisplayName,
// occupationalAbnormalId = patientPoisonHaveEmpty.OccupationalAbnormalId,
// patientOccupationalDisease,
// sumSummaryHeaderHaveEmpty,
// //sumSummaryContentHaveEmpty,
// idNo = patient.IdNo
// });
// if (!string.IsNullOrEmpty(customerOrgPara.StartDate) && !string.IsNullOrEmpty(customerOrgPara.EndDate))
// {
// if (customerOrgPara.DateType == '1')
// {
// patientRegisterAbnormalQuery = patientRegisterAbnormalQuery.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(customerOrgPara.StartDate) &&
// m.patientRegister.CreationTime < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
// }
// else if (customerOrgPara.DateType == '2')
// {
// patientRegisterAbnormalQuery = patientRegisterAbnormalQuery.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
// m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
// }
// else if (customerOrgPara.DateType == '3')
// {
// patientRegisterAbnormalQuery = patientRegisterAbnormalQuery.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
// m.patientRegister.SummaryDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
// }
// }
// if (customerOrgPara.CustomerOrgGroupId.Any())
// {
// patientRegisterAbnormalQuery = patientRegisterAbnormalQuery.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
// }
// var patientRegisterAbnormalList = patientRegisterAbnormalQuery.ToList();
// var reviewPersonnelDetails = patientRegisterAbnormalList.Where(m => m.occupationalAbnormalId == reviewId).GroupBy(g => g.patientRegister)
// .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportReviewPersonnelDetailDto
// {
// IdNo = s.FirstOrDefault().idNo,
// DisplayOrder = index + 1,
// PatientName = s.Key.PatientName,
// PatientRegisterNo = s.Key.PatientRegisterNo,
// PoisonName = string.Join(",", s.Select(ss => ss.poisonName).Distinct()),
// CheckResult = SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList()),
// HandlingSuggestions = $"{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbnormal}\n{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbSuggestion}"
// }).ToList();
// msg.ReviewPersonnelDetails = reviewPersonnelDetails;
// #endregion
// #region 职业禁忌证人员一览表
// //职业禁忌证结论ID
// Guid contraindicationId = (await _occupationalAbnormalRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("禁忌"))).Id;
// var occupationalContraindicationDetails = patientRegisterAbnormalList.Where(m => m.occupationalAbnormalId == contraindicationId).GroupBy(g => g.patientRegister)
// .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportOccupationalContraindicationDetailDto
// {
// IdNo = s.FirstOrDefault().idNo,
// DisplayOrder = index + 1,
// PatientName = s.Key.PatientName,
// PatientRegisterNo = s.Key.PatientRegisterNo,
// PoisonName = string.Join(",", s.Select(ss => ss.poisonName).Distinct()),
// CheckResult = SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList()),
// HandlingSuggestions = $"{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbnormal}\n{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbSuggestion}"
// }).ToList();
// msg.OccupationalContraindicationDetails = occupationalContraindicationDetails;
// #endregion
// #region 疑似职业病人员一览表
// //疑似职业病结论ID
// Guid suspectedOccupationalDiseaseId = (await _occupationalAbnormalRepository.FirstOrDefaultAsync(f => f.DisplayName.Contains("疑似"))).Id;
// var suspectedOccupationalDiseaseDetails = patientRegisterAbnormalList.Where(m => m.occupationalAbnormalId == suspectedOccupationalDiseaseId).GroupBy(g => g.patientRegister)
// .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportSuspectedOccupationalDiseaseDetailDto
// {
// IdNo = s.FirstOrDefault().idNo,
// DisplayOrder = index + 1,
// PatientName = s.Key.PatientName,
// PatientRegisterNo = s.Key.PatientRegisterNo,
// PoisonName = string.Join(",", s.Select(ss => ss.poisonName).Distinct()),
// CheckResult = SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList()),
// HandlingSuggestions = $"{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbnormal}\n{s.FirstOrDefault().patientOccupationalDisease.OccupationalAbSuggestion}"
// }).ToList();
// msg.SuspectedOccupationalDiseaseDetails = suspectedOccupationalDiseaseDetails;
// #endregion
// }
// return msg;
//}
/// <summary>
/// 获取单位职业病结果Excel数据
/// </summary>
/// <returns></returns>
[HttpPost("api/app/OccupationalDiseaseReport/GetCompanyOccupationalDiseaseDataExcel")]
public async Task<List<GetCompanyOccupationalDiseaseDataExcelDto>> GetCompanyOccupationalDiseaseDataExcelAsync(GetCompanyOccupationalDiseaseDetailReportInputDto input)
{
if (!input.CustomerOrgs.Any())
throw new UserFriendlyException("单位信息不能为空");
var customerOrgPara = input.CustomerOrgs.First();
if (customerOrgPara.CustomerOrgId == null || customerOrgPara.CustomerOrgId == Guid.Empty)
throw new UserFriendlyException("单位不能为空");
if (customerOrgPara.CustomerOrgRegisterId == null || customerOrgPara.CustomerOrgRegisterId == Guid.Empty)
throw new UserFriendlyException("单位体检次数不能为空");
#region 人员信息
var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId
join patientPoison in await _patientPoisonRepository.GetQueryableAsync() on patientRegister.Id equals patientPoison.PatientRegisterId into patientPoisonTemp
from patientPoisonHaveEmpty in patientPoisonTemp.DefaultIfEmpty()
join poison in await _poisonRepository.GetQueryableAsync() on patientPoisonHaveEmpty.PoisonId equals poison.Id into poisonTemp
from posionHaveEmpty in poisonTemp.DefaultIfEmpty()
join occupationalAbnormal in await _occupationalAbnormalRepository.GetQueryableAsync() on patientPoisonHaveEmpty.OccupationalAbnormalId equals occupationalAbnormal.Id into occupationalAbnormalTemp
from occupationalAbnormalHaveEmpty in occupationalAbnormalTemp.DefaultIfEmpty()
join ocCheckType in await _ocCheckTypeRepository.GetQueryableAsync() on patientOccupationalDisease.OcCheckTypeId equals ocCheckType.Id into ocCheckTypeTemp
from ocCheckTypeHaveEmpty in ocCheckTypeTemp.DefaultIfEmpty()
join sumSummaryHeader in (await _sumSummaryHeaderRepository.GetQueryableAsync()).Include(x => x.SumSummaryContents) on patientRegister.Id equals sumSummaryHeader.PatientRegisterId into sumSummaryHeaderTemp
from sumSummaryHeaderHaveEmpty in sumSummaryHeaderTemp.DefaultIfEmpty()
where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId
&& patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration
select new
{
patientRegister,
patientOccupationalDisease,
posionHaveEmpty,
patientPoisonHaveEmpty,
occupationalAbnormalHaveEmpty,
ocCheckTypeHaveEmpty,
sumSummaryHeaderHaveEmpty
};
if (!string.IsNullOrEmpty(customerOrgPara.StartDate) && !string.IsNullOrEmpty(customerOrgPara.EndDate))
{
if (customerOrgPara.DateType == '1')
{
query = query.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.CreationTime < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
else if (customerOrgPara.DateType == '2')
{
query = query.Where(m => m.patientRegister.MedicalStartDate != null && m.patientRegister.MedicalStartDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.MedicalStartDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
else if (customerOrgPara.DateType == '3')
{
query = query.Where(m => m.patientRegister.SummaryDate != null && m.patientRegister.SummaryDate.Value >= Convert.ToDateTime(customerOrgPara.StartDate) &&
m.patientRegister.SummaryDate.Value < Convert.ToDateTime(customerOrgPara.EndDate).AddDays(1));
}
}
List<Guid?> customerOrgIds = new List<Guid?>();
if (customerOrgPara.CustomerOrgId != null)
{
customerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(customerOrgPara.CustomerOrgId.Value);
}
if (customerOrgIds.Any())
{
query = query.Where(m => customerOrgIds.Contains(m.patientRegister.CustomerOrgId));
}
if (customerOrgPara.CustomerOrgGroupId.Any())
{
query = query.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
}
#endregion
var patientRegisterList = query.ToList();
var msg = new List<GetCompanyOccupationalDiseaseDataExcelDto>();
if (patientRegisterList.Any())
{
////人员
//var patientRegisters = patientRegisterList.Select(m => m.patientRegister).Distinct().ToList();
//var patientRegisterfisrt = patientRegisterList.First();
#region 体检结果一览表
var medicalResultDetails = patientRegisterList.GroupBy(g => g.patientOccupationalDisease)
.Select((s, index) => new GetCompanyOccupationalDiseaseDataExcelDto
{
AnomalyIndex = $"{SetSumSummarys(s.Select(ss => ss.sumSummaryHeaderHaveEmpty).Distinct().ToList())}",
MedicalConclusion = s.Key.OccupationalAbnormal,
OcCheckTypeName = s.FirstOrDefault().ocCheckTypeHaveEmpty != null ? s.FirstOrDefault().ocCheckTypeHaveEmpty.DisplayName : "",
HandlingSuggestions = s.Key.OccupationalAbSuggestion,
JobType = s.Key.JobType,
PatientName = s.FirstOrDefault().patientRegister.PatientName,
PatientRegisterNo = s.FirstOrDefault().patientRegister.PatientRegisterNo,
PoisonNames = string.Join(",", s.Select(ss => ss.posionHaveEmpty.DisplayName).Distinct()),
PoisonWorkTime = s.Key.PoisonWorkTime,
MedicalStartDate = DataHelper.ConversionDateShortToString(s.FirstOrDefault().patientRegister.MedicalStartDate),
SummaryDoctorName = _cacheService.GetSurnameAsync(s.FirstOrDefault().patientRegister.AuditDoctorId).GetAwaiter().GetResult()
}).OrderBy(o => o.MedicalConclusion).ToList();
msg = medicalResultDetails;
#endregion
}
return msg;
}
/// <summary>
/// 生成历次综述医生小结
/// </summary>
/// <param name="SumSummaryHeaders"></param>
/// <returns></returns>
private string SetSumSummarys(List<SumSummaryHeader> SumSummaryHeaders)
{
StringBuilder msg = new StringBuilder();
if (SumSummaryHeaders.Count > 0)
{
foreach (var item in SumSummaryHeaders)
{
if (item != null)
{
msg.Append($"【{item.SummaryTitle}】\n");
if (item.SumSummaryContents.Count > 0)
{
var SumSummaryContents = item.SumSummaryContents.ToList();
foreach (var item2 in SumSummaryContents)
{
msg.Append($"{item2.SummaryContent}\n");
}
}
}
}
}
return msg.ToString();
}
}
}