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
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();
|
|
}
|
|
|
|
|
|
}
|
|
}
|