Browse Source

职业病报告

master
wxd 1 year ago
parent
commit
903e9b9e78
  1. 2
      src/Shentun.Peis.Application.Contracts/OccupationalDiseaseReports/GetCompanyOccupationalDiseaseDetailReportDto.cs
  2. 330
      src/Shentun.Peis.Application/OccupationalDiseaseReports/OccupationalDiseaseReportAppService.cs
  3. 23
      src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs

2
src/Shentun.Peis.Application.Contracts/OccupationalDiseaseReports/GetCompanyOccupationalDiseaseDetailReportDto.cs

@ -83,7 +83,7 @@ namespace Shentun.Peis.OccupationalDiseaseReports
public List<GetCompanyOccupationalDiseaseDetailReportReviewPersonnelDetailDto> ReviewPersonnelDetails { get; set; } = new List<GetCompanyOccupationalDiseaseDetailReportReviewPersonnelDetailDto>();
/// <summary>
/// 尽快诊疗一览表
/// 尽快诊疗一览表 暂时 无
/// </summary>
public List<GetCompanyOccupationalDiseaseDetailReportDiagnosisAndTreatmentDetailDto> DiagnosisAndTreatmentDetails { get; set; } = new List<GetCompanyOccupationalDiseaseDetailReportDiagnosisAndTreatmentDetailDto>();

330
src/Shentun.Peis.Application/OccupationalDiseaseReports/OccupationalDiseaseReportAppService.cs

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using NPOI.SS.Formula.Functions;
using Shentun.Peis.Enums;
using Shentun.Peis.Models;
using Shentun.Peis.SysParmValues;
@ -22,6 +23,7 @@ namespace Shentun.Peis.OccupationalDiseaseReports
{
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;
@ -34,7 +36,8 @@ namespace Shentun.Peis.OccupationalDiseaseReports
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;
public OccupationalDiseaseReportAppService(
IRepository<PatientRegister, Guid> patientRegisterRepository,
IRepository<RegisterCheck, Guid> registerCheckRepository,
@ -48,7 +51,10 @@ namespace Shentun.Peis.OccupationalDiseaseReports
IRepository<PatientPoison> patientPoisonRepository,
IRepository<OccupationalAbnormal, Guid> occupationalAbnormalRepository,
IRepository<Poison, Guid> poisonRepository,
IRepository<RegisterCheckSummary, Guid> registerCheckSummaryRepository)
IRepository<RegisterCheckSummary, Guid> registerCheckSummaryRepository,
IRepository<Patient, Guid> patientRepository,
IRepository<SumSummaryHeader, Guid> sumSummaryHeaderRepository,
IRepository<SumSummaryContent, Guid> sumSummaryContentRepository)
{
_patientRegisterRepository = patientRegisterRepository;
_registerCheckRepository = registerCheckRepository;
@ -63,6 +69,9 @@ namespace Shentun.Peis.OccupationalDiseaseReports
_occupationalAbnormalRepository = occupationalAbnormalRepository;
_poisonRepository = poisonRepository;
_registerCheckSummaryRepository = registerCheckSummaryRepository;
_patientRepository = patientRepository;
_sumSummaryHeaderRepository = sumSummaryHeaderRepository;
_sumSummaryContentRepository = sumSummaryContentRepository;
}
@ -215,7 +224,7 @@ namespace Shentun.Peis.OccupationalDiseaseReports
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("未见异常")
&& !registerCheckSummary.Summary.Contains("未见异常")
&& patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck
select new
{
@ -251,10 +260,6 @@ namespace Shentun.Peis.OccupationalDiseaseReports
asbitemAbnormalQuery = asbitemAbnormalQuery.Where(m => m.patientRegister.CustomerOrgGroupId != null && customerOrgPara.CustomerOrgGroupId.Contains(m.patientRegister.CustomerOrgGroupId.Value));
}
var ggggg = asbitemAbnormalQuery.ToQueryString();
var asbitemAbnormalList = asbitemAbnormalQuery.ToList();
//异常总人数
@ -307,15 +312,21 @@ namespace Shentun.Peis.OccupationalDiseaseReports
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
&& patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration
select new
{
patientRegister,
patientOccupationalDisease,
posionHaveEmpty,
patientPoisonHaveEmpty,
occupationalAbnormalHaveEmpty
occupationalAbnormalHaveEmpty,
ocCheckTypeHaveEmpty,
sumSummaryHeaderHaveEmpty
};
@ -352,14 +363,9 @@ namespace Shentun.Peis.OccupationalDiseaseReports
var msg = new GetCompanyOccupationalDiseaseDetailReportDto
{
MedicalResultDesc = "",
DiagnosisAndTreatmentDetails = new List<GetCompanyOccupationalDiseaseDetailReportDiagnosisAndTreatmentDetailDto>(),
ListOfMissingItemsDetails = new List<GetCompanyOccupationalDiseaseDetailReportListOfMissingItemsDetailDto>(),
MedicalResultAbnormalRateDetails = new List<GetCompanyOccupationalDiseaseDetailReportMedicalResultAbnormalRateDetailDto>(),
MedicalResultDetails = new List<GetCompanyOccupationalDiseaseDetailReportMedicalResultDetailDto>(),
OcCheckTypeDetails = new List<GetCompanyOccupationalDiseaseDetailReportOcCheckTypeSummaryDto>(),
OcCheckTypeNames = new List<string>(),
OccupationalAbnormalDetails = new List<GetCompanyOccupationalDiseaseDetailReportOccupationalAbnormalDetailDto>(),
OccupationalContraindicationDetails = new List<GetCompanyOccupationalDiseaseDetailReportOccupationalContraindicationDetailDto>(),
ReviewPersonnelDetails = new List<GetCompanyOccupationalDiseaseDetailReportReviewPersonnelDetailDto>(),
SuspectedOccupationalDiseaseDetails = new List<GetCompanyOccupationalDiseaseDetailReportSuspectedOccupationalDiseaseDetailDto>()
@ -369,10 +375,10 @@ namespace Shentun.Peis.OccupationalDiseaseReports
if (patientRegisterList.Any())
{
//人员id
var patientRegisters = query.Select(m => m.patientRegister).Distinct().ToList();
//人员
var patientRegisters = patientRegisterList.Select(m => m.patientRegister).Distinct().ToList();
var patientRegisterfisrt = query.First();
var patientRegisterfisrt = patientRegisterList.First();
msg.CertificateNo = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "medical_center_qualification_certificate_number");
msg.CustomerOrgName = await _cacheService.GetTopCustomerOrgNameAsync(patientRegisterfisrt.patientRegister.CustomerOrgId);
@ -381,12 +387,270 @@ namespace Shentun.Peis.OccupationalDiseaseReports
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)
.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())}",
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
}).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
join patientOccupationalDisease in await _patientOccupationalDiseaseRepository.GetQueryableAsync() on patientRegister.Id equals patientOccupationalDisease.PatientRegisterId
where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId
&& !registerCheckSummary.Summary.Contains("未见异常")
&& patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration
select new
{
patientRegister,
asbitemName = asbitemHaveEmpty.DisplayName,
registerCheckCompleteFlag = registerCheck.CompleteFlag,
idNo = patient.IdNo
});
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.Select(s => s.asbitemName).Distinct().Count();
var medicalResultAbnormalRateDetails = asbitemAbnormalList.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.registerCheckCompleteFlag == RegisterCheckCompleteFlag.UnChecked)
.GroupBy(g => g.patientRegister)
.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))
}).ToList();
msg.ListOfMissingItemsDetails = listOfMissingItemsDetails;
#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
}
@ -398,5 +662,37 @@ namespace Shentun.Peis.OccupationalDiseaseReports
}
/// <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();
}
}
}

23
src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs

@ -128,6 +128,8 @@ namespace Shentun.Peis.PatientRegisters
private readonly IRepository<PatientOccupationalDisease, Guid> _patientOccupationalDiseaseRepository;
private readonly IRepository<PatientPoison> _patientPoisonRepository;
private readonly PatientPoisonManager _patientPoisonManager;
private readonly IRepository<Diagnosis> _diagnosisRepository;
public PatientRegisterAppService(
IRepository<PatientRegister, Guid> repository,
IRepository<Patient, Guid> patientRepository,
@ -186,7 +188,8 @@ namespace Shentun.Peis.PatientRegisters
IRepository<OcCheckTypeDetail> ocCheckTypeDetailRepository,
IRepository<PatientOccupationalDisease, Guid> patientOccupationalDiseaseRepository,
IRepository<PatientPoison> patientPoisonRepository,
PatientPoisonManager patientPoisonManager)
PatientPoisonManager patientPoisonManager,
IRepository<Diagnosis> diagnosisRepository)
: base(repository)
{
this._repository = repository;
@ -247,6 +250,7 @@ namespace Shentun.Peis.PatientRegisters
_patientOccupationalDiseaseRepository = patientOccupationalDiseaseRepository;
_patientPoisonRepository = patientPoisonRepository;
_patientPoisonManager = patientPoisonManager;
_diagnosisRepository = diagnosisRepository;
}
/// <summary>
/// 获取通过主键
@ -457,7 +461,7 @@ namespace Shentun.Peis.PatientRegisters
var customerOrgList = await _customerOrgRepository.GetListAsync();
Stopwatch stopwatch = Stopwatch.StartNew();
#region MyRegion
var entlist = from patientRegister in (await _repository.GetQueryableAsync()).Include(x => x.Patient).AsQueryable()
join patientRegisterExter in await _patientRegisterExterRepository.GetQueryableAsync()
@ -2330,9 +2334,24 @@ namespace Shentun.Peis.PatientRegisters
#region 插入SumDiagnosis
if (item.DiagnosisIds != null && item.DiagnosisIds.Any())
{
foreach (var diagnosisId in item.DiagnosisIds)
{
#region 校验诊断性别
var diagnosisEnt = await _diagnosisRepository.FirstOrDefaultAsync(f => f.Id == diagnosisId);
if (diagnosisEnt == null)
throw new UserFriendlyException("诊断不存在");
if (diagnosisEnt.ForSexId != ForSexFlag.All
&& entity.SexId != SexFlag.UnKnown
&& diagnosisEnt.ForSexId != entity.SexId)
{
throw new UserFriendlyException($"诊断:{diagnosisEnt.DisplayName}与性别不符");
}
#endregion
SumDiagnosis sumDiagnosis = new SumDiagnosis
{
DiagnosisId = diagnosisId,

Loading…
Cancel
Save