@ -2,6 +2,8 @@
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 ;
@ -38,6 +40,7 @@ namespace Shentun.Peis.OccupationalDiseaseReports
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 ,
@ -54,7 +57,8 @@ namespace Shentun.Peis.OccupationalDiseaseReports
IRepository < RegisterCheckSummary , Guid > registerCheckSummaryRepository ,
IRepository < Patient , Guid > patientRepository ,
IRepository < SumSummaryHeader , Guid > sumSummaryHeaderRepository ,
IRepository < SumSummaryContent , Guid > sumSummaryContentRepository )
IRepository < SumSummaryContent , Guid > sumSummaryContentRepository ,
CustomerOrgManager customerOrgManager )
{
_patientRegisterRepository = patientRegisterRepository ;
_registerCheckRepository = registerCheckRepository ;
@ -72,6 +76,7 @@ namespace Shentun.Peis.OccupationalDiseaseReports
_patientRepository = patientRepository ;
_sumSummaryHeaderRepository = sumSummaryHeaderRepository ;
_sumSummaryContentRepository = sumSummaryContentRepository ;
_customerOrgManager = customerOrgManager ;
}
@ -285,7 +290,6 @@ namespace Shentun.Peis.OccupationalDiseaseReports
/// <summary>
/// 获取单位职业病明细报告
/// </summary>
@ -311,14 +315,9 @@ namespace Shentun.Peis.OccupationalDiseaseReports
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 ,
@ -326,9 +325,7 @@ namespace Shentun.Peis.OccupationalDiseaseReports
patientOccupationalDisease ,
posionHaveEmpty ,
patientPoisonHaveEmpty ,
occupationalAbnormalHaveEmpty ,
ocCheckTypeHaveEmpty ,
sumSummaryHeaderHaveEmpty
ocCheckTypeHaveEmpty
} ;
@ -351,6 +348,12 @@ namespace Shentun.Peis.OccupationalDiseaseReports
}
}
if ( customerOrgPara . CustomerOrgId ! = null )
{
var CustomerOrgIds = await _customerOrgManager . GetCustomerOrgChildrenId ( customerOrgPara . CustomerOrgId . Value ) ;
query = query . Where ( m = > CustomerOrgIds . Contains ( m . patientRegister . CustomerOrgId ) ) ;
}
if ( customerOrgPara . CustomerOrgGroupId . Any ( ) )
{
@ -359,26 +362,27 @@ namespace Shentun.Peis.OccupationalDiseaseReports
#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 ( ) ;
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 patientRegisters = patientRegisterList.Select(m => m.patientRegister).Distinct().ToList();
var patientRegisterfisrt = patientRegisterList . First ( ) ;
@ -413,44 +417,118 @@ namespace Shentun.Peis.OccupationalDiseaseReports
#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
msg . SelectedOcCheckTypeNames = ocCheckTypeDetails . Select ( s = > s . OcCheckTypeName ) . Distinct ( ) . ToList ( ) ;
#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 ,
OccupationalAbnormalCount = s . Count ( ) ,
OccupationalAbnormalName = s . Key ,
OccupationalAbnormalRatio = Decimal . Round ( Convert . ToDecimal ( s . Count ( ) * 1 0 0 ) / patientRegisters . Count , 2 )
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 其他疾病或异常人员一览表
string occupationalAbnormalDesc = "" ;
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 复查人员一览表
foreach ( var item in occupationalAbnormalDetails )
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
{
if ( occupationalAbnormalDetails . IndexOf ( item ) = = occupationalAbnormalDetails . Count - 1 )
occupationalAbnormalDesc + = $"{item.OccupationalAbnormalName}{item.OccupationalAbnormalCount}人。" ;
else
occupationalAbnormalDesc + = $"{item.OccupationalAbnormalName}{item.OccupationalAbnormalCount}人," ;
}
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 ;
msg . MedicalResultDesc = $"{Convert.ToDateTime(customerOrgPara.StartDate).ToString(" yyyy - MM - dd ")},{msg.CustomerOrgName}组织{patientRegisters.Count}名接触" +
$"{1}作业工人进行职业健康检查,结果:{occupationalAbnormalDesc}" ;
msg . OccupationalAbnormalDetails = occupationalAbnormalDetails ;
#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 medicalResultDetails = patientRegisterList . GroupBy ( g = > g . patientOccupationalDisease ) . OrderBy ( o = > o . Key . OccupationalAbnormal )
#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
{
//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 ,
@ -466,9 +544,11 @@ namespace Shentun.Peis.OccupationalDiseaseReports
MedicalStartDate = DataHelper . ConversionDateShortToString ( s . FirstOrDefault ( ) . patientRegister . MedicalStartDate ) ,
SummaryDoctorName = _cacheService . GetSurnameAsync ( s . FirstOrDefault ( ) . patientRegister . AuditDoctorId ) . GetAwaiter ( ) . GetResult ( )
} ) . ToList ( ) ;
msg . MedicalResultDetails = medicalResultDetails ;
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
@ -479,15 +559,28 @@ namespace Shentun.Peis.OccupationalDiseaseReports
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 ( "未见异常" )
// && !registerCheckSummaryEmpty.Summary.Contains("未见异常")
& & patientRegister . CompleteFlag ! = PatientRegisterCompleteFlag . PreRegistration
& & asbitemHaveEmpty . IsCheck = = 'Y'
select new
{
patientRegister ,
asbitemName = asbitemHaveEmpty . DisplayName ,
registerCheckCompleteFlag = registerCheck . CompleteFlag ,
idNo = patient . IdNo
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
} ) ;
@ -519,11 +612,12 @@ namespace Shentun.Peis.OccupationalDiseaseReports
}
var asbitemAbnormalList = asbitemAbnormalQuery . ToList ( ) ;
var asbitemAbnormalCount = asbitemAbnormalList . Select ( s = > s . asbitemName ) . Distinct ( ) . Count ( ) ;
var asbitemAbnormalCount = asbitemAbnormalList . Where ( m = > ! m . summary . Contains ( "未见异常" ) ) . Select ( s = > s . asbitemName ) . Distinct ( ) . Count ( ) ;
var medicalResultAbnormalRateDetails = asbitemAbnormalList . GroupBy ( g = > g . asbitemName )
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 ( ) ) ,
@ -535,146 +629,555 @@ namespace Shentun.Peis.OccupationalDiseaseReports
msg . MedicalResultAbnormalRateDetails = medicalResultAbnormalRateDetails ;
#endregion
#region 职业健康检查缺项情况表明细 <已经开始检查了,但是未检查完的>
var listOfMissingItemsDetails = asbitemAbnormalList . Where ( m = > m . registerCheckCompleteFlag = = RegisterCheckCompleteFlag . UnChecked )
. GroupBy ( g = > g . patientRegister )
#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 ) )
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 职业病未检人员一览表 <还没开始检查的>
#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 ;
#region 体检结果总结
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
msg . MedicalResultDesc = $"{Convert.ToDateTime(customerOrgPara.StartDate).ToString(" yyyy - MM - dd ")},{msg.CustomerOrgName}组织{sumCount}名接触" +
$"{1}作业工人进行职业健康检查。" ;
var occupationalAbnormalDetails = new List < GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto > ( ) ;
occupationalAbnormalDetails . Add ( new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
patientRegister ,
poisonName = poisonHaveEmpty . DisplayName ,
occupationalAbnormalId = patientPoisonHaveEmpty . OccupationalAbnormalId ,
patientOccupationalDisease ,
sumSummaryHeaderHaveEmpty ,
//sumSummaryContentHaveEmpty,
idNo = patient . IdNo
DisplayOrder = 1 ,
OccupationalAbnormalName = "未见异常" ,
OccupationalAbnormalCount = noAbnormalConditionsDetails . Count ,
OccupationalAbnormalRatio = Decimal . Round ( Convert . ToDecimal ( noAbnormalConditionsDetails . Count * 1 0 0 ) / sumCount , 2 ) ,
} ) ;
if ( ! string . IsNullOrEmpty ( customerOrgPara . StartDate ) & & ! string . IsNullOrEmpty ( customerOrgPara . EndDate ) )
occupationalAbnormalDetails . Add ( new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
if ( customerOrgPara . DateType = = '1' )
DisplayOrder = 2 ,
OccupationalAbnormalName = "其他疾病或异常" ,
OccupationalAbnormalCount = otherDiseasesOrAbnormalIndividualsDetails . Count ,
OccupationalAbnormalRatio = Decimal . Round ( Convert . ToDecimal ( otherDiseasesOrAbnormalIndividualsDetails . Count * 1 0 0 ) / sumCount , 2 ) ,
} ) ;
occupationalAbnormalDetails . Add ( new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
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' )
DisplayOrder = 3 ,
OccupationalAbnormalName = "复查" ,
OccupationalAbnormalCount = reviewPersonnelDetails . Count ,
OccupationalAbnormalRatio = Decimal . Round ( Convert . ToDecimal ( reviewPersonnelDetails . Count * 1 0 0 ) / sumCount , 2 ) ,
} ) ;
occupationalAbnormalDetails . Add ( new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
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' )
DisplayOrder = 4 ,
OccupationalAbnormalName = "职业禁忌症" ,
OccupationalAbnormalCount = occupationalContraindicationDetails . Count ,
OccupationalAbnormalRatio = Decimal . Round ( Convert . ToDecimal ( occupationalContraindicationDetails . Count * 1 0 0 ) / sumCount , 2 ) ,
} ) ;
occupationalAbnormalDetails . Add ( new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
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 ( ) )
DisplayOrder = 5 ,
OccupationalAbnormalName = "疑似职业病" ,
OccupationalAbnormalCount = suspectedOccupationalDiseaseDetails . Count ,
OccupationalAbnormalRatio = Decimal . Round ( Convert . ToDecimal ( suspectedOccupationalDiseaseDetails . Count * 1 0 0 ) / sumCount , 2 ) ,
} ) ;
occupationalAbnormalDetails . Add ( new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
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
DisplayOrder = 6 ,
OccupationalAbnormalName = "缺项" ,
OccupationalAbnormalCount = listOfMissingItemsDetails . Count ,
OccupationalAbnormalRatio = Decimal . Round ( Convert . ToDecimal ( listOfMissingItemsDetails . Count * 1 0 0 ) / sumCount , 2 ) ,
} ) ;
occupationalAbnormalDetails . Add ( new GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto
{
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 ( ) ;
DisplayOrder = 7 ,
OccupationalAbnormalName = "未检" ,
OccupationalAbnormalCount = uninspectedPersonnelDetails . Count ,
OccupationalAbnormalRatio = Decimal . Round ( Convert . ToDecimal ( uninspectedPersonnelDetails . Count * 1 0 0 ) / sumCount , 2 ) ,
} ) ;
msg . ReviewPersonnelDetails = reviewPersonne lDetails;
msg . OccupationalAbnormalDetails = occupationalAbnormalDetails ;
#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>
///// 获取单位职业病明细报告
///// </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();
return msg ;
}
// 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;
//}