diff --git a/src/Shentun.Peis.Application.Contracts/DiagnosisFunctions/GetCriticalResultDto.cs b/src/Shentun.Peis.Application.Contracts/DiagnosisFunctions/GetCriticalResultDto.cs index dcb166e..8385245 100644 --- a/src/Shentun.Peis.Application.Contracts/DiagnosisFunctions/GetCriticalResultDto.cs +++ b/src/Shentun.Peis.Application.Contracts/DiagnosisFunctions/GetCriticalResultDto.cs @@ -5,6 +5,12 @@ using System.Text; namespace Shentun.Peis.DiagnosisFunctions { public class GetCriticalResultDto + { + public List AsbitemDetails { get; set; } = new List(); + public List ItemDetails { get; set; } = new List(); + } + + public class GetAsbitemCriticalResultDto { public Guid RegisterCheckId { get; set; } @@ -13,8 +19,6 @@ namespace Shentun.Peis.DiagnosisFunctions public char? IsFollowUp { get; set; } public string CriticalRangeValue { get; set; } - - public List ItemDetails { get; set; } = new List(); } public class GetItemCriticalResultDto diff --git a/src/Shentun.Peis.Application/DiagnosisFunctions/DiagnosisFunctionAppService.cs b/src/Shentun.Peis.Application/DiagnosisFunctions/DiagnosisFunctionAppService.cs index e890a16..067d7b1 100644 --- a/src/Shentun.Peis.Application/DiagnosisFunctions/DiagnosisFunctionAppService.cs +++ b/src/Shentun.Peis.Application/DiagnosisFunctions/DiagnosisFunctionAppService.cs @@ -119,6 +119,7 @@ namespace Shentun.Peis.DiagnosisFunctions [HttpPost("api/app/DiagnosisFunction/GetDoctorCheckDiagnosisResultAsync")] public async Task GetDoctorCheckDiagnosisResultAsync(GetDiagnosisResultRequestDto input) { + #region 小结 var reslist = new List(); var suggestionlist = new List(); @@ -260,13 +261,16 @@ namespace Shentun.Peis.DiagnosisFunctions resultDto.DiagnosisResultDetails.Add(getDiagnosisResult_Detail); } + #endregion #region 处理危急值函数 - List criticalResultDtoList = new List(); - - var isCritical = await GetPatientRegisterIsCriticalAsync(doctorCheckDiagnosisInput, resultDto, criticalResultDtoList); - var isFollowUp = await GetPatientRegisterIsFollowUpAsync(doctorCheckDiagnosisInput, resultDto, criticalResultDtoList); - await HandCriticalResult(criticalResultDtoList, query[0].patientRegister.Id); + GetCriticalResultDto criticalResultDto = new GetCriticalResultDto(); + //组合项目逻辑 + await GetPatientRegisterAsbitemIsCriticalAsync(doctorCheckDiagnosisInput, resultDto, criticalResultDto); + //明细项目逻辑 + await GetPatientRegisterItemIsCriticalAsync(doctorCheckDiagnosisInput, resultDto, criticalResultDto); + //处理数据 + await HandCriticalResult(criticalResultDto, query[0].patientRegister.Id); #endregion @@ -1242,110 +1246,737 @@ namespace Shentun.Peis.DiagnosisFunctions #endregion - #region 危急值函数 - - /// - /// 获取人员是否有危急值项目 - /// 【优先处理组合项目危急值函数 - /// 未触发时执行项目危急值函数 - /// 未触发项目检索危急值关键字 - /// 未触发检索小结是否包含危急值关键字】 - /// - /// - /// - /// - /// - public async Task GetPatientRegisterIsCriticalAsync( - DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, - GetDiagnosisResultDto resultDto, - List criticalResultDtoList) - { - var isCritical = false; - - isCritical = GetAsbitemCriticalFunction(doctorCheckDiagnosisInput, criticalResultDtoList); - - if (isCritical) - { - return isCritical; - } + #region 危急值函数 旧 + + ///// + ///// 获取人员是否有危急值项目 + ///// 【优先处理组合项目危急值函数 + ///// 未触发时执行项目危急值函数 + ///// 未触发项目检索危急值关键字 + ///// 未触发检索小结是否包含危急值关键字】 + ///// + ///// + ///// + ///// + ///// + //public async Task GetPatientRegisterIsCriticalAsync( + // DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, + // GetDiagnosisResultDto resultDto, + // GetCriticalResultDto criticalResultDto) + //{ + // var isCritical = false; + + // isCritical = GetAsbitemCriticalFunction(doctorCheckDiagnosisInput, criticalResultDto); + + + + // var criticalFollowValueList = await _criticalFollowValueRepository.GetListAsync(m => m.CriticalFollowValueFlag == CriticalFollowValueFlag.Critical); + + // //检索项目函数+关键字 + // isCritical = GetItemCriticalFunction(doctorCheckDiagnosisInput, criticalFollowValueList, criticalResultDto); + + // if (isCritical) + // { + // return isCritical; + // } + + // //检索小结 + // foreach (var diagnosisResult in resultDto.DiagnosisResultDetails) + // { + // isCritical = criticalFollowValueList.Count(m => diagnosisResult.DiagnosisResult.Contains(m.DisplayName)) > 0 ? true : false; + // if (isCritical) + // break; + // } + + // return isCritical; + //} + + + ///// + ///// 获取人员是否有需要随访的项目 + ///// 【优先处理组合项目随访函数 + ///// 未触发时执行项目随访函数 + ///// 未触发项目检索随访关键字 + ///// 未触发检索小结是否包含随访关键字】 + ///// + ///// + ///// + ///// + ///// + //public async Task GetPatientRegisterIsFollowUpAsync( + // DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, + // GetDiagnosisResultDto resultDto, + // List criticalResultDtoList) + //{ + // var isCritical = false; + + // isCritical = GetAsbitemFollowUpFunction(doctorCheckDiagnosisInput, criticalResultDtoList); + + // if (isCritical) + // { + // return isCritical; + // } + + // var criticalFollowValueList = await _criticalFollowValueRepository.GetListAsync(m => m.CriticalFollowValueFlag == CriticalFollowValueFlag.FollowUp); + + // //检索项目函数+关键字 + // isCritical = GetItemFollowUpFunction(doctorCheckDiagnosisInput, criticalFollowValueList, criticalResultDtoList); + + // if (isCritical) + // { + // return isCritical; + // } + + // //检索小结 + // foreach (var diagnosisResult in resultDto.DiagnosisResultDetails) + // { + // isCritical = criticalFollowValueList.Count(m => diagnosisResult.DiagnosisResult.Contains(m.DisplayName)) > 0 ? true : false; + // if (isCritical) + // break; + // } + + // return isCritical; + //} + + ///// + ///// 组合项目危急值函数 + ///// + ///// + ///// + ///// + //private bool GetAsbitemCriticalFunction(DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, GetCriticalResultDto criticalResultDto) + //{ + // bool isCritical = false; + // var patientAsbitemDiagnosisInput = new PatientAsbitemDiagnosisInput() + // { + // SexName = doctorCheckDiagnosisInput.SexName, + // Age = doctorCheckDiagnosisInput.Age + // }; + + // foreach (var item in doctorCheckDiagnosisInput.Items) + // { + // var itemResult = new ItemResultInput() + // { + // ItemId = item.ItemId, + // ItemName = item.ItemName, + // Result = item.Result + // }; + // patientAsbitemDiagnosisInput.Items.Add(itemResult); + // } + // var diagnosisBuilder = new DiagnosisBuilder(); + + // foreach (var asbitem in doctorCheckDiagnosisInput.Asbitems) + // { + // if (asbitem.IsCriticalValueFunction == 'Y' && !string.IsNullOrWhiteSpace(asbitem.CriticalValueFunction)) + // { + // isCritical = diagnosisBuilder.GetAsbitemCriticalResult(patientAsbitemDiagnosisInput, asbitem.DiagnosisFunction); + // if (isCritical) + // { + // UpdateRegisterCheckCriticalResult(criticalResultDto, asbitem.RegisterCheckId, 'Y', 'Y', ""); + // //await CreateRegisterCheckCritical(asbitem.RegisterCheckId, 'Y', ""); + // break; + // } + // else + // { + // UpdateRegisterCheckCriticalResult(criticalResultDto, asbitem.RegisterCheckId, 'N', null, ""); + // } + // } + // } + + // return isCritical; + //} + + ///// + ///// 项目危急值函数 + ///// + ///// + ///// + ///// + ///// + //private bool GetItemCriticalFunction( + // DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, + // List criticalFollowValueList, + // List criticalResultDtoList + // ) + //{ + // bool isCritical = false; + // var patientItemDiagnosisInput = new PatientItemDiagnosisInput() + // { + // SexName = doctorCheckDiagnosisInput.SexName, + // Age = doctorCheckDiagnosisInput.Age + // }; + + // var diagnosisBuilder = new DiagnosisBuilder(); + + // foreach (var item in doctorCheckDiagnosisInput.Items) + // { + // if (string.IsNullOrWhiteSpace(item.Result)) + // { + // continue; + // } + + // if (item.IsCriticalValueFunction == 'Y' && !string.IsNullOrWhiteSpace(item.CriticalValueFunction)) + // { + // var itemResult = new ItemResultInput() + // { + // ItemId = item.ItemId, + // ItemName = item.ItemName, + // Result = item.Result + // }; + // patientItemDiagnosisInput.Item = itemResult; + + + // isCritical = diagnosisBuilder.GetItemCriticalResult(patientItemDiagnosisInput, item.CriticalValueFunction); + + // if (isCritical) + // { + + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'Y', 'Y', ""); + // //await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'Y', ""); + // break; + // } + // else + // { + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'N', null, ""); + // } + // } + + + // #region 执行项目参考范围 + // var referenceRange = item.ReferenceRanges.Where(o => o.ForSexId == doctorCheckDiagnosisInput.SexId && doctorCheckDiagnosisInput.Age >= o.AgeLowerLimit && doctorCheckDiagnosisInput.Age <= o.AgeUpperLimit).FirstOrDefault(); + // if (referenceRange == null) + // { + // referenceRange = item.ReferenceRanges.Where(o => o.ForSexId == ForSexFlag.All && doctorCheckDiagnosisInput.Age >= o.AgeLowerLimit && doctorCheckDiagnosisInput.Age <= o.AgeUpperLimit).FirstOrDefault(); + // if (referenceRange != null && !string.IsNullOrWhiteSpace(referenceRange.CriticalRangeValue)) + // { + + // isCritical = _registerCheckItemManager.GetNumberResultIsCritical(item.Result, referenceRange.CriticalRangeValue); + // if (isCritical) + // { + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'Y', 'Y', referenceRange.CriticalRangeValue); + // //await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'Y', ""); + // break; + // } + // else + // { + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'N', null, ""); + // } + // } + // } + // #endregion + + + + + // var isCriticalFollowValue = criticalFollowValueList.FirstOrDefault(m => item.Result.Contains(m.DisplayName)); + + // //关键字检索 + // if (isCriticalFollowValue != null) + // { + // isCritical = true; + // } + + // if (isCritical) + // { + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'Y', 'Y', isCriticalFollowValue.DisplayName); + // //await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'Y', isCriticalFollowValue.DisplayName); + // break; + // } + // else + // { + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'N', null, ""); + // } + + // } + + // return isCritical; + //} + + + ///// + ///// 组合项目随访函数 + ///// + ///// + ///// + ///// + //private bool GetAsbitemFollowUpFunction(DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, List criticalResultDtoList) + //{ + // bool isFollowUp = false; + // var patientAsbitemDiagnosisInput = new PatientAsbitemDiagnosisInput() + // { + // SexName = doctorCheckDiagnosisInput.SexName, + // Age = doctorCheckDiagnosisInput.Age + // }; + + // foreach (var item in doctorCheckDiagnosisInput.Items) + // { + // var itemResult = new ItemResultInput() + // { + // ItemId = item.ItemId, + // ItemName = item.ItemName, + // Result = item.Result + // }; + // patientAsbitemDiagnosisInput.Items.Add(itemResult); + // } + // var diagnosisBuilder = new DiagnosisBuilder(); + + // foreach (var asbitem in doctorCheckDiagnosisInput.Asbitems) + // { + // if (asbitem.IsFollowUpFunction == 'Y' && !string.IsNullOrWhiteSpace(asbitem.FollowUpFunction)) + // { + // isFollowUp = diagnosisBuilder.GetAsbitemFollowUpResult(patientAsbitemDiagnosisInput, asbitem.DiagnosisFunction); + // if (isFollowUp) + // { + // UpdateRegisterCheckCriticalResult(criticalResultDtoList, asbitem.RegisterCheckId, null, 'Y', ""); + // //await CreateRegisterCheckCritical(asbitem.RegisterCheckId, 'Y', ""); + // break; + // } + // else + // { + // UpdateRegisterCheckCriticalResult(criticalResultDtoList, asbitem.RegisterCheckId, null, 'N', ""); + // } + // } + // } + + // return isFollowUp; + //} + ///// + ///// 项目随访函数 + ///// + ///// + ///// + ///// + ///// + //private bool GetItemFollowUpFunction( + // DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, + // List criticalFollowValueList, + // List criticalResultDtoList + // ) + //{ + // bool isFollowUp = false; + // var patientItemDiagnosisInput = new PatientItemDiagnosisInput() + // { + // SexName = doctorCheckDiagnosisInput.SexName, + // Age = doctorCheckDiagnosisInput.Age + // }; + + // var diagnosisBuilder = new DiagnosisBuilder(); + + // foreach (var item in doctorCheckDiagnosisInput.Items) + // { + // if (string.IsNullOrWhiteSpace(item.Result)) + // { + // continue; + // } + + // if (item.IsFollowUpFunction == 'Y' && !string.IsNullOrWhiteSpace(item.FollowUpFunction)) + // { + // var itemResult = new ItemResultInput() + // { + // ItemId = item.ItemId, + // ItemName = item.ItemName, + // Result = item.Result + // }; + // patientItemDiagnosisInput.Item = itemResult; + + + // isFollowUp = diagnosisBuilder.GetItemFollowUpResult(patientItemDiagnosisInput, item.FollowUpFunction); + + // if (isFollowUp) + // { + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'Y', ""); + // // await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'N', ""); + // break; + // } + // else + // { + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'N', ""); + // } + + // } + + + // #region 执行项目参考范围 + // var referenceRange = item.ReferenceRanges.Where(o => o.ForSexId == doctorCheckDiagnosisInput.SexId && doctorCheckDiagnosisInput.Age >= o.AgeLowerLimit && doctorCheckDiagnosisInput.Age <= o.AgeUpperLimit).FirstOrDefault(); + // if (referenceRange == null) + // { + // referenceRange = item.ReferenceRanges.Where(o => o.ForSexId == ForSexFlag.All && doctorCheckDiagnosisInput.Age >= o.AgeLowerLimit && doctorCheckDiagnosisInput.Age <= o.AgeUpperLimit).FirstOrDefault(); + // if (referenceRange != null && !string.IsNullOrWhiteSpace(referenceRange.FollowUpRangeValue)) + // { + + // isFollowUp = _registerCheckItemManager.GetNumberResultIsFollow(item.Result, referenceRange.FollowUpRangeValue); + // if (isFollowUp) + // { + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'Y', referenceRange.FollowUpRangeValue); + // //await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'N', referenceRange.FollowUpRangeValue); + // break; + // } + // else + // { + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'N', ""); + // } + // } + // } + // #endregion + + + // var isCriticalFollowValue = criticalFollowValueList.FirstOrDefault(m => item.Result.Contains(m.DisplayName)); + + // if (isCriticalFollowValue != null) + // { + // isFollowUp = true; + // } + + // if (isFollowUp) + // { + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'Y', isCriticalFollowValue.DisplayName); + // // await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'N', isCriticalFollowValue.DisplayName); + // break; + // } + // else + // { + // UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'N', ""); + // } + + // } + + // return isFollowUp; + //} + + + ///// + ///// 生成危急值标记、随访记录 + ///// + ///// + //private async Task CreateFollowUpAsync(Guid patientRegisterId) + //{ + // var isFollowUp = await _followUpRepository.FirstOrDefaultAsync(f => f.PatientRegisterId == patientRegisterId); + // if (isFollowUp == null) + // { + // var followUpEnt = new FollowUp + // { + // IsPhoneComplete = 'N', + // IsSmsComplete = 'N', + // PatientRegisterId = patientRegisterId + // }; + + // await _followUpRepository.InsertAsync(followUpEnt); + // } + //} + + ///// + ///// 生成明细表危急值相关数据 + ///// + ///// + ///// + ///// + ///// + ///// + ///// + //private async Task CreateRegisterCheckItemCritical(Guid registerCheckId, Guid itemId, char? isCriticalValue, char? isFollowUp, string CriticalRangeValue) + //{ + // var registerCheckItemEnt = await _registerCheckItemRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == registerCheckId + // && m.ItemId == itemId); + // if (registerCheckItemEnt != null) + // { + // registerCheckItemEnt.CriticalRangeValue = CriticalRangeValue; + // registerCheckItemEnt.IsCriticalValue = isCriticalValue; + // if (isCriticalValue == 'Y') + // { + // registerCheckItemEnt.CriticalValueCreatorId = _currentUser.Id; + // registerCheckItemEnt.CriticalValueCreationTime = DateTime.Now; + // } + // if (isFollowUp == 'Y') + // { + // registerCheckItemEnt.FollowUpCreatorId = _currentUser.Id; + // registerCheckItemEnt.FollowUpCreationTime = DateTime.Now; + // } + // //registerCheckItemEnt.IsCriticalValueAudit = 'N'; + // //registerCheckItemEnt.IsReview = 'N'; + // registerCheckItemEnt.IsFollowUp = isFollowUp; + + // await _registerCheckItemRepository.UpdateAsync(registerCheckItemEnt); + // } + + //} + + ///// + ///// 生成registerCheck表危急值相关数据 + ///// + ///// + ///// + ///// + ///// + ///// + //private async Task CreateRegisterCheckCritical(Guid registerCheckId, char? isCriticalValue, char? isFollowUp, string CriticalRangeValue) + //{ + // var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(m => m.Id == registerCheckId); + // if (registerCheckEnt != null) + // { + // registerCheckEnt.CriticalRangeValue = CriticalRangeValue; + + // if (isCriticalValue == 'Y') + // { + // registerCheckEnt.CriticalValueCreatorId = _currentUser.Id; + // registerCheckEnt.CriticalValueCreationTime = DateTime.Now; + // registerCheckEnt.IsCriticalValue = isCriticalValue; + // } + // if (isFollowUp == 'Y') + // { + // registerCheckEnt.FollowUpCreatorId = _currentUser.Id; + // registerCheckEnt.FollowUpCreationTime = DateTime.Now; + // } + // //registerCheckEnt.IsCriticalValueAudit = 'N'; + // //registerCheckEnt.IsReview = 'N'; + // registerCheckEnt.IsFollowUp = isFollowUp; + + // await _registerCheckRepository.UpdateAsync(registerCheckEnt); + // } + //} + + + + ///// + ///// 临时更新危急值状态 registerCheck + ///// + ///// + ///// + ///// + ///// + ///// + //private void UpdateRegisterCheckCriticalResult(GetCriticalResultDto criticalResultDto, Guid registerCheckId, char? isCritical, char? isFollowUp, string criticalRangeValue) + //{ + // if (criticalResultDto.AsbitemDetails.Where(m => m.RegisterCheckId == registerCheckId).Count() == 0) + // { + // criticalResultDtoList.Add(new GetCriticalResultDto + // { + // RegisterCheckId = registerCheckId + // }); + // } + // else + // { + // foreach (var criticalResultDto in criticalResultDtoList) + // { + // if (criticalResultDto.RegisterCheckId == registerCheckId) + // { + // if (isCritical != null && criticalResultDto.IsCritical != 'Y') + // { + // criticalResultDto.IsCritical = isCritical; + // } + // if (isFollowUp != null && criticalResultDto.IsFollowUp != 'Y') + // { + // criticalResultDto.IsFollowUp = isFollowUp; + // } + // if (!string.IsNullOrWhiteSpace(criticalRangeValue)) + // { + // criticalResultDto.CriticalRangeValue = criticalRangeValue; + // } + // } + // } + // } + //} + + ///// + ///// 临时更新危急值状态 registerCheckItem + ///// + ///// + ///// + ///// + ///// + ///// + ///// + //private void UpdateRegisterCheckItemCriticalResult(List criticalResultDtoList, Guid registerCheckId, Guid itemId, char? isCritical, char? isFollowUp, string criticalRangeValue) + //{ + + // //先增加registerCheck + // if (criticalResultDtoList.Where(m => m.RegisterCheckId == registerCheckId).Count() == 0) + // { + // criticalResultDtoList.Add(new GetCriticalResultDto + // { + // RegisterCheckId = registerCheckId + // }); + // } + + // foreach (var criticalResultDto in criticalResultDtoList) + // { + // if (criticalResultDto.RegisterCheckId == registerCheckId) + // { + + // if (criticalResultDto.ItemDetails.Where(m => m.ItemId == itemId).Count() == 0) + // { + // var itemCriticalResultDto = new GetItemCriticalResultDto(); + // itemCriticalResultDto.RegisterCheckId = registerCheckId; + // itemCriticalResultDto.ItemId = itemId; + // if (isFollowUp != null && itemCriticalResultDto.IsFollowUp != 'Y') + // { + // itemCriticalResultDto.IsFollowUp = isFollowUp; + // } + // if (isCritical != null && itemCriticalResultDto.IsCritical != 'Y') + // { + // itemCriticalResultDto.IsCritical = isCritical; + // } + // if (!string.IsNullOrWhiteSpace(criticalRangeValue)) + // { + // itemCriticalResultDto.CriticalRangeValue = criticalRangeValue; + // } + + // criticalResultDto.ItemDetails.Add(itemCriticalResultDto); + // } + // else + // { + // foreach (var itemCriticalResultDto in criticalResultDto.ItemDetails) + // { + // if (itemCriticalResultDto.ItemId == itemId) + // { + // itemCriticalResultDto.RegisterCheckId = registerCheckId; + // itemCriticalResultDto.ItemId = itemId; + // if (isFollowUp != null && itemCriticalResultDto.IsFollowUp != 'Y') + // { + // itemCriticalResultDto.IsFollowUp = isFollowUp; + // } + // if (isCritical != null && itemCriticalResultDto.IsCritical != 'Y') + // { + // itemCriticalResultDto.IsCritical = isCritical; + // } + // if (!string.IsNullOrWhiteSpace(criticalRangeValue)) + // { + // itemCriticalResultDto.CriticalRangeValue = criticalRangeValue; + // } + // } + // } + // } + // } + // } + //} + + + ///// + ///// 处理危急值记录 + ///// + ///// + ///// + ///// + //private async Task HandCriticalResult(List criticalResultDtoList, Guid patientRegisterId) + //{ + // bool isCreateFollowUp = false; + // foreach (var criticalResultDto in criticalResultDtoList) + // { + + // foreach (var itemCriticalResultDto in criticalResultDto.ItemDetails) + // { + // if (itemCriticalResultDto.IsCritical == 'Y' || itemCriticalResultDto.IsFollowUp == 'Y') + // { + // isCreateFollowUp = true; + // if (itemCriticalResultDto.IsCritical == 'Y') + // { + // criticalResultDto.IsCritical = itemCriticalResultDto.IsCritical; + // } + // if (itemCriticalResultDto.IsFollowUp == 'Y') + // { + // criticalResultDto.IsFollowUp = itemCriticalResultDto.IsFollowUp; + // } + + // } + // await CreateRegisterCheckItemCritical(itemCriticalResultDto.RegisterCheckId, itemCriticalResultDto.ItemId, itemCriticalResultDto.IsCritical, itemCriticalResultDto.IsFollowUp, itemCriticalResultDto.CriticalRangeValue); + // } + + // if (criticalResultDto.IsCritical == 'Y' || criticalResultDto.IsFollowUp == 'Y') + // { + // isCreateFollowUp = true; + + // } + // await CreateRegisterCheckCritical(criticalResultDto.RegisterCheckId, criticalResultDto.IsCritical, criticalResultDto.IsFollowUp, criticalResultDto.CriticalRangeValue); + + // } + + // if (isCreateFollowUp) + // { + // //增加随访主表记录 + // await _followUpAppService.CreateAsync(new PatientRegisterIdInputDto + // { + // PatientRegisterId = patientRegisterId + // }); + + // } + // else + // { + + // //删除随访表记录 + // await _followUpAppService.DeleteByPatientRegisterId(new PatientRegisterIdInputDto + // { + // PatientRegisterId = patientRegisterId + // }); + // } + //} - var criticalFollowValueList = await _criticalFollowValueRepository.GetListAsync(m => m.CriticalFollowValueFlag == CriticalFollowValueFlag.Critical); + #endregion - //检索项目函数+关键字 - isCritical = GetItemCriticalFunction(doctorCheckDiagnosisInput, criticalFollowValueList, criticalResultDtoList); + #region 危急值函数相关方法 新 - if (isCritical) - { - return isCritical; - } - - //检索小结 - foreach (var diagnosisResult in resultDto.DiagnosisResultDetails) - { - isCritical = criticalFollowValueList.Count(m => diagnosisResult.DiagnosisResult.Contains(m.DisplayName)) > 0 ? true : false; - if (isCritical) - break; - } - - return isCritical; - } + #region 组合项目 /// - /// 获取人员是否有需要随访的项目 - /// 【优先处理组合项目随访函数 - /// 未触发时执行项目随访函数 - /// 未触发项目检索随访关键字 - /// 未触发检索小结是否包含随访关键字】 + /// 获取人员组合项目是否有危急值、随访项目 + /// 【优先处理组合项目危急值、随访函数 + /// 未触发检索小结是否包含危急值关键字】 /// /// /// - /// + /// /// - public async Task GetPatientRegisterIsFollowUpAsync( + public async Task GetPatientRegisterAsbitemIsCriticalAsync( DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, GetDiagnosisResultDto resultDto, - List criticalResultDtoList) + GetCriticalResultDto criticalResultDto) { var isCritical = false; + var isFollowUp = false; - isCritical = GetAsbitemFollowUpFunction(doctorCheckDiagnosisInput, criticalResultDtoList); - - if (isCritical) - { - return isCritical; - } - - var criticalFollowValueList = await _criticalFollowValueRepository.GetListAsync(m => m.CriticalFollowValueFlag == CriticalFollowValueFlag.FollowUp); + GetAsbitemCriticalFunction(doctorCheckDiagnosisInput, criticalResultDto, isCritical, isFollowUp); - //检索项目函数+关键字 - isCritical = GetItemFollowUpFunction(doctorCheckDiagnosisInput, criticalFollowValueList, criticalResultDtoList); - if (isCritical) - { - return isCritical; - } + var criticalFollowValueList = await _criticalFollowValueRepository.GetListAsync(); //检索小结 foreach (var diagnosisResult in resultDto.DiagnosisResultDetails) { - isCritical = criticalFollowValueList.Count(m => diagnosisResult.DiagnosisResult.Contains(m.DisplayName)) > 0 ? true : false; - if (isCritical) - break; + if (!isCritical) + { + var criticalKeyCount = criticalFollowValueList.Count(m => m.CriticalFollowValueFlag == CriticalFollowValueFlag.Critical + && diagnosisResult.DiagnosisResult.Contains(m.DisplayName)); + if (criticalKeyCount > 0) + { + isCritical = true; + isFollowUp = true; + UpdateRegisterCheckCriticalResult(criticalResultDto, doctorCheckDiagnosisInput.Asbitems.FirstOrDefault().RegisterCheckId, 'Y', 'Y', diagnosisResult.DiagnosisResult); + } + } + if (!isFollowUp) + { + var followUpKeyCount = criticalFollowValueList.Count(m => m.CriticalFollowValueFlag == CriticalFollowValueFlag.FollowUp + && diagnosisResult.DiagnosisResult.Contains(m.DisplayName)); + if (followUpKeyCount > 0) + { + isFollowUp = true; + UpdateRegisterCheckCriticalResult(criticalResultDto, doctorCheckDiagnosisInput.Asbitems.FirstOrDefault().RegisterCheckId, null, 'Y', diagnosisResult.DiagnosisResult); + } + } } - return isCritical; } + /// - /// 组合项目危急值函数 + /// 组合项目危急值、随访函数 /// /// - /// + /// + /// + /// /// - private bool GetAsbitemCriticalFunction(DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, List criticalResultDtoList) + private void GetAsbitemCriticalFunction(DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, GetCriticalResultDto criticalResultDto, bool isCritical, bool isFollowUp) { - bool isCritical = false; var patientAsbitemDiagnosisInput = new PatientAsbitemDiagnosisInput() { SexName = doctorCheckDiagnosisInput.SexName, @@ -1368,37 +1999,72 @@ namespace Shentun.Peis.DiagnosisFunctions { if (asbitem.IsCriticalValueFunction == 'Y' && !string.IsNullOrWhiteSpace(asbitem.CriticalValueFunction)) { - isCritical = diagnosisBuilder.GetAsbitemCriticalResult(patientAsbitemDiagnosisInput, asbitem.DiagnosisFunction); - if (isCritical) + var isCriticalTemp = diagnosisBuilder.GetAsbitemCriticalResult(patientAsbitemDiagnosisInput, asbitem.CriticalValueFunction); + if (isCriticalTemp) { - UpdateRegisterCheckCriticalResult(criticalResultDtoList, asbitem.RegisterCheckId, 'Y', 'Y', ""); - //await CreateRegisterCheckCritical(asbitem.RegisterCheckId, 'Y', ""); + isCritical = true; + isFollowUp = true; + UpdateRegisterCheckCriticalResult(criticalResultDto, asbitem.RegisterCheckId, 'Y', 'Y', ""); break; } - else + } + + if (asbitem.IsFollowUpFunction == 'Y' && !string.IsNullOrWhiteSpace(asbitem.FollowUpFunction)) + { + var isFollowUpTemp = diagnosisBuilder.GetAsbitemFollowUpResult(patientAsbitemDiagnosisInput, asbitem.FollowUpFunction); + if (isFollowUpTemp) { - UpdateRegisterCheckCriticalResult(criticalResultDtoList, asbitem.RegisterCheckId, 'N', null, ""); + isFollowUp = true; + UpdateRegisterCheckCriticalResult(criticalResultDto, asbitem.RegisterCheckId, null, 'Y', ""); } } } + } + + + #endregion + + + #region 明细项目 - return isCritical; + /// + /// 获取人员项目是否有危急值、随访项目 + /// 【优先处理项目危急值、随访函数 + /// 未触发时执行项目参考范围 + /// 未触发项目检索危急值、随访关键字】 + /// + /// + /// + /// + /// + public async Task GetPatientRegisterItemIsCriticalAsync( + DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, + GetDiagnosisResultDto resultDto, + GetCriticalResultDto criticalResultDto) + { + var isCritical = false; + var isFollowUp = false; + + await GetItemCriticalFunction(doctorCheckDiagnosisInput, criticalResultDto, isCritical, isFollowUp); } + /// - /// 项目危急值函数 + /// 项目危急值、随访函数 /// /// - /// - /// + /// + /// + /// /// - private bool GetItemCriticalFunction( + private async Task GetItemCriticalFunction( DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, - List criticalFollowValueList, - List criticalResultDtoList + GetCriticalResultDto criticalResultDto, + bool isCritical, + bool isFollowUp ) { - bool isCritical = false; + var patientItemDiagnosisInput = new PatientItemDiagnosisInput() { SexName = doctorCheckDiagnosisInput.SexName, @@ -1407,6 +2073,8 @@ namespace Shentun.Peis.DiagnosisFunctions var diagnosisBuilder = new DiagnosisBuilder(); + var criticalFollowValueList = await _criticalFollowValueRepository.GetListAsync(); + foreach (var item in doctorCheckDiagnosisInput.Items) { if (string.IsNullOrWhiteSpace(item.Result)) @@ -1414,32 +2082,40 @@ namespace Shentun.Peis.DiagnosisFunctions continue; } - if (item.IsCriticalValueFunction == 'Y' && !string.IsNullOrWhiteSpace(item.CriticalValueFunction)) + var itemResult = new ItemResultInput() { - var itemResult = new ItemResultInput() - { - ItemId = item.ItemId, - ItemName = item.ItemName, - Result = item.Result - }; - patientItemDiagnosisInput.Item = itemResult; - + ItemId = item.ItemId, + ItemName = item.ItemName, + Result = item.Result + }; + patientItemDiagnosisInput.Item = itemResult; - isCritical = diagnosisBuilder.GetItemCriticalResult(patientItemDiagnosisInput, item.CriticalValueFunction); + #region 危急值函数 + if (item.IsCriticalValueFunction == 'Y' && !string.IsNullOrWhiteSpace(item.CriticalValueFunction)) + { + var isCriticalTemp = diagnosisBuilder.GetItemCriticalResult(patientItemDiagnosisInput, item.CriticalValueFunction); - if (isCritical) + if (isCriticalTemp) { - - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'Y', 'Y', ""); - //await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'Y', ""); - break; + isCritical = true; + isFollowUp = true; + UpdateRegisterCheckItemCriticalResult(criticalResultDto, item.RegisterCheckId, item.ItemId, 'Y', 'Y', ""); + continue; } - else + } + #endregion + #region 随访函数 + if (item.IsFollowUpFunction == 'Y' && !string.IsNullOrWhiteSpace(item.FollowUpFunction)) + { + var isFollowUpTemp = diagnosisBuilder.GetItemCriticalResult(patientItemDiagnosisInput, item.FollowUpFunction); + + if (isFollowUpTemp) { - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'N', null, ""); + isFollowUp = true; + UpdateRegisterCheckItemCriticalResult(criticalResultDto, item.RegisterCheckId, item.ItemId, null, 'Y', ""); } } - + #endregion #region 执行项目参考范围 var referenceRange = item.ReferenceRanges.Where(o => o.ForSexId == doctorCheckDiagnosisInput.SexId && doctorCheckDiagnosisInput.Age >= o.AgeLowerLimit && doctorCheckDiagnosisInput.Age <= o.AgeUpperLimit).FirstOrDefault(); @@ -1449,254 +2125,187 @@ namespace Shentun.Peis.DiagnosisFunctions if (referenceRange != null && !string.IsNullOrWhiteSpace(referenceRange.CriticalRangeValue)) { - isCritical = _registerCheckItemManager.GetNumberResultIsCritical(item.Result, referenceRange.CriticalRangeValue); - if (isCritical) + var isCriticalTemp = _registerCheckItemManager.GetNumberResultIsCritical(item.Result, referenceRange.CriticalRangeValue); + if (isCriticalTemp) { - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'Y', 'Y', referenceRange.CriticalRangeValue); - //await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'Y', ""); - break; + isCritical = true; + isFollowUp = true; + UpdateRegisterCheckItemCriticalResult(criticalResultDto, item.RegisterCheckId, item.ItemId, 'Y', 'Y', referenceRange.CriticalRangeValue); + continue; } - else + } + if (referenceRange != null && !string.IsNullOrWhiteSpace(referenceRange.FollowUpRangeValue) && !isFollowUp) + { + + var isFollowUpTemp = _registerCheckItemManager.GetNumberResultIsCritical(item.Result, referenceRange.FollowUpRangeValue); + if (isFollowUpTemp) { - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'N', null, ""); + isFollowUp = true; + UpdateRegisterCheckItemCriticalResult(criticalResultDto, item.RegisterCheckId, item.ItemId, null, 'Y', referenceRange.FollowUpRangeValue); } } } #endregion + #region 关键字 - - - var isCriticalFollowValue = criticalFollowValueList.FirstOrDefault(m => item.Result.Contains(m.DisplayName)); - - //关键字检索 - if (isCriticalFollowValue != null) + if (!isCritical) { - isCritical = true; - } - - if (isCritical) - { - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'Y', 'Y', isCriticalFollowValue.DisplayName); - //await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'Y', isCriticalFollowValue.DisplayName); - break; + var criticalKeyCount = criticalFollowValueList.Count(m => m.CriticalFollowValueFlag == CriticalFollowValueFlag.Critical + && item.Result.Contains(m.DisplayName)); + if (criticalKeyCount > 0) + { + isCritical = true; + isFollowUp = true; + UpdateRegisterCheckItemCriticalResult(criticalResultDto, item.RegisterCheckId, item.ItemId, 'Y', 'Y', item.Result); + } } - else + if (!isFollowUp) { - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, 'N', null, ""); + var followUpKeyCount = criticalFollowValueList.Count(m => m.CriticalFollowValueFlag == CriticalFollowValueFlag.FollowUp + && item.Result.Contains(m.DisplayName)); + if (followUpKeyCount > 0) + { + isFollowUp = true; + UpdateRegisterCheckItemCriticalResult(criticalResultDto, item.RegisterCheckId, item.ItemId, null, 'Y', item.Result); + } } + #endregion } - - return isCritical; } + #endregion + + + + #region 处理危急值记录临时数据 /// - /// 组合项目随访函数 + /// 临时更新危急值状态 registerCheck /// - /// - /// - /// - private bool GetAsbitemFollowUpFunction(DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, List criticalResultDtoList) + /// + /// + /// + /// + /// + private void UpdateRegisterCheckCriticalResult(GetCriticalResultDto criticalResultDto, Guid registerCheckId, char? isCritical, char? isFollowUp, string criticalRangeValue) { - bool isFollowUp = false; - var patientAsbitemDiagnosisInput = new PatientAsbitemDiagnosisInput() + if (criticalResultDto.AsbitemDetails.Where(m => m.RegisterCheckId == registerCheckId).Count() == 0) { - SexName = doctorCheckDiagnosisInput.SexName, - Age = doctorCheckDiagnosisInput.Age - }; - - foreach (var item in doctorCheckDiagnosisInput.Items) - { - var itemResult = new ItemResultInput() + criticalResultDto.AsbitemDetails.Add(new GetAsbitemCriticalResultDto { - ItemId = item.ItemId, - ItemName = item.ItemName, - Result = item.Result - }; - patientAsbitemDiagnosisInput.Items.Add(itemResult); + RegisterCheckId = registerCheckId + }); } - var diagnosisBuilder = new DiagnosisBuilder(); - - foreach (var asbitem in doctorCheckDiagnosisInput.Asbitems) + else { - if (asbitem.IsFollowUpFunction == 'Y' && !string.IsNullOrWhiteSpace(asbitem.FollowUpFunction)) + foreach (var asbitemDetail in criticalResultDto.AsbitemDetails) { - isFollowUp = diagnosisBuilder.GetAsbitemFollowUpResult(patientAsbitemDiagnosisInput, asbitem.DiagnosisFunction); - if (isFollowUp) + if (asbitemDetail.RegisterCheckId == registerCheckId) { - UpdateRegisterCheckCriticalResult(criticalResultDtoList, asbitem.RegisterCheckId, null, 'Y', ""); - //await CreateRegisterCheckCritical(asbitem.RegisterCheckId, 'Y', ""); - break; - } - else - { - UpdateRegisterCheckCriticalResult(criticalResultDtoList, asbitem.RegisterCheckId, null, 'N', ""); + if (isCritical != null) + { + asbitemDetail.IsCritical = isCritical; + } + if (isFollowUp != null) + { + asbitemDetail.IsFollowUp = isFollowUp; + } + if (!string.IsNullOrWhiteSpace(criticalRangeValue) && string.IsNullOrWhiteSpace(asbitemDetail.CriticalRangeValue)) + { + asbitemDetail.CriticalRangeValue = criticalRangeValue; + } } } } - - return isFollowUp; } + /// - /// 项目随访函数 + /// 临时更新危急值状态 registerCheckItem /// - /// - /// - /// - /// - private bool GetItemFollowUpFunction( - DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, - List criticalFollowValueList, - List criticalResultDtoList - ) + /// + /// + /// + /// + /// + /// + private void UpdateRegisterCheckItemCriticalResult(GetCriticalResultDto criticalResultDto, Guid registerCheckId, Guid itemId, char? isCritical, char? isFollowUp, string criticalRangeValue) { - bool isFollowUp = false; - var patientItemDiagnosisInput = new PatientItemDiagnosisInput() - { - SexName = doctorCheckDiagnosisInput.SexName, - Age = doctorCheckDiagnosisInput.Age - }; - - var diagnosisBuilder = new DiagnosisBuilder(); - foreach (var item in doctorCheckDiagnosisInput.Items) + //先增加registerCheck + if (criticalResultDto.ItemDetails.Where(m => m.RegisterCheckId == registerCheckId && m.ItemId == itemId).Count() == 0) { - if (string.IsNullOrWhiteSpace(item.Result)) + criticalResultDto.ItemDetails.Add(new GetItemCriticalResultDto { - continue; - } - - if (item.IsFollowUpFunction == 'Y' && !string.IsNullOrWhiteSpace(item.FollowUpFunction)) - { - var itemResult = new ItemResultInput() - { - ItemId = item.ItemId, - ItemName = item.ItemName, - Result = item.Result - }; - patientItemDiagnosisInput.Item = itemResult; + RegisterCheckId = registerCheckId, + ItemId = itemId + }); + } + foreach (var itemDetail in criticalResultDto.ItemDetails) + { - isFollowUp = diagnosisBuilder.GetItemFollowUpResult(patientItemDiagnosisInput, item.FollowUpFunction); + if (itemDetail.RegisterCheckId == registerCheckId && itemDetail.ItemId == itemId) + { - if (isFollowUp) + if (isCritical != null) { - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'Y', ""); - // await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'N', ""); - break; + itemDetail.IsCritical = isCritical; } - else + if (isFollowUp != null) { - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'N', ""); + itemDetail.IsFollowUp = isFollowUp; } - - } - - - #region 执行项目参考范围 - var referenceRange = item.ReferenceRanges.Where(o => o.ForSexId == doctorCheckDiagnosisInput.SexId && doctorCheckDiagnosisInput.Age >= o.AgeLowerLimit && doctorCheckDiagnosisInput.Age <= o.AgeUpperLimit).FirstOrDefault(); - if (referenceRange == null) - { - referenceRange = item.ReferenceRanges.Where(o => o.ForSexId == ForSexFlag.All && doctorCheckDiagnosisInput.Age >= o.AgeLowerLimit && doctorCheckDiagnosisInput.Age <= o.AgeUpperLimit).FirstOrDefault(); - if (referenceRange != null && !string.IsNullOrWhiteSpace(referenceRange.FollowUpRangeValue)) + if (!string.IsNullOrWhiteSpace(criticalRangeValue) && string.IsNullOrWhiteSpace(itemDetail.CriticalRangeValue)) { - - isFollowUp = _registerCheckItemManager.GetNumberResultIsFollow(item.Result, referenceRange.FollowUpRangeValue); - if (isFollowUp) - { - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'Y', referenceRange.FollowUpRangeValue); - //await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'N', referenceRange.FollowUpRangeValue); - break; - } - else - { - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'N', ""); - } + itemDetail.CriticalRangeValue = criticalRangeValue; } } - #endregion - - - var isCriticalFollowValue = criticalFollowValueList.FirstOrDefault(m => item.Result.Contains(m.DisplayName)); - - if (isCriticalFollowValue != null) - { - isFollowUp = true; - } - - if (isFollowUp) - { - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'Y', isCriticalFollowValue.DisplayName); - // await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'N', isCriticalFollowValue.DisplayName); - break; - } - else - { - UpdateRegisterCheckItemCriticalResult(criticalResultDtoList, item.RegisterCheckId, item.ItemId, null, 'N', ""); - } } - - return isFollowUp; } + #endregion + + #region 修改危急值数据 /// - /// 生成危急值标记、随访记录 + /// 处理危急值记录 /// + /// /// - private async Task CreateFollowUpAsync(Guid patientRegisterId) + /// + private async Task HandCriticalResult(GetCriticalResultDto criticalResultDto, Guid patientRegisterId) { - var isFollowUp = await _followUpRepository.FirstOrDefaultAsync(f => f.PatientRegisterId == patientRegisterId); - if (isFollowUp == null) + foreach (var asbitemDetail in criticalResultDto.AsbitemDetails) { - var followUpEnt = new FollowUp - { - IsPhoneComplete = 'N', - IsSmsComplete = 'N', - PatientRegisterId = patientRegisterId - }; + await CreateRegisterCheckCritical(asbitemDetail.RegisterCheckId, asbitemDetail.IsCritical, asbitemDetail.IsFollowUp, asbitemDetail.CriticalRangeValue); + } - await _followUpRepository.InsertAsync(followUpEnt); + foreach (var itemDetails in criticalResultDto.ItemDetails) + { + await CreateRegisterCheckItemCritical(itemDetails.RegisterCheckId, itemDetails.ItemId, itemDetails.IsCritical, itemDetails.IsFollowUp, itemDetails.CriticalRangeValue); } - } - /// - /// 生成明细表危急值相关数据 - /// - /// - /// - /// - /// - /// - /// - private async Task CreateRegisterCheckItemCritical(Guid registerCheckId, Guid itemId, char? isCriticalValue, char? isFollowUp, string CriticalRangeValue) - { - var registerCheckItemEnt = await _registerCheckItemRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == registerCheckId - && m.ItemId == itemId); - if (registerCheckItemEnt != null) + if (criticalResultDto.AsbitemDetails.Count > 0 || criticalResultDto.ItemDetails.Count > 0) { - registerCheckItemEnt.CriticalRangeValue = CriticalRangeValue; - registerCheckItemEnt.IsCriticalValue = isCriticalValue; - if (isCriticalValue == 'Y') - { - registerCheckItemEnt.CriticalValueCreatorId = _currentUser.Id; - registerCheckItemEnt.CriticalValueCreationTime = DateTime.Now; - } - if (isFollowUp == 'Y') + //增加随访主表记录 + await _followUpAppService.CreateAsync(new PatientRegisterIdInputDto { - registerCheckItemEnt.FollowUpCreatorId = _currentUser.Id; - registerCheckItemEnt.FollowUpCreationTime = DateTime.Now; - } - //registerCheckItemEnt.IsCriticalValueAudit = 'N'; - //registerCheckItemEnt.IsReview = 'N'; - registerCheckItemEnt.IsFollowUp = isFollowUp; + PatientRegisterId = patientRegisterId + }); - await _registerCheckItemRepository.UpdateAsync(registerCheckItemEnt); } + //else + //{ + // //删除随访表记录 + // await _followUpAppService.DeleteByPatientRegisterId(new PatientRegisterIdInputDto + // { + // PatientRegisterId = patientRegisterId + // }); + //} } /// @@ -1712,8 +2321,10 @@ namespace Shentun.Peis.DiagnosisFunctions var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(m => m.Id == registerCheckId); if (registerCheckEnt != null) { - registerCheckEnt.CriticalRangeValue = CriticalRangeValue; - + if (!string.IsNullOrWhiteSpace(CriticalRangeValue)) + { + registerCheckEnt.CriticalRangeValue = CriticalRangeValue; + } if (isCriticalValue == 'Y') { registerCheckEnt.CriticalValueCreatorId = _currentUser.Id; @@ -1724,192 +2335,54 @@ namespace Shentun.Peis.DiagnosisFunctions { registerCheckEnt.FollowUpCreatorId = _currentUser.Id; registerCheckEnt.FollowUpCreationTime = DateTime.Now; + registerCheckEnt.IsFollowUp = isFollowUp; } - //registerCheckEnt.IsCriticalValueAudit = 'N'; - //registerCheckEnt.IsReview = 'N'; - registerCheckEnt.IsFollowUp = isFollowUp; await _registerCheckRepository.UpdateAsync(registerCheckEnt); } } - /// - /// 临时更新危急值状态 registerCheck - /// - /// - /// - /// - /// - /// - private void UpdateRegisterCheckCriticalResult(List criticalResultDtoList, Guid registerCheckId, char? isCritical, char? isFollowUp, string criticalRangeValue) - { - if (criticalResultDtoList.Where(m => m.RegisterCheckId == registerCheckId).Count() == 0) - { - criticalResultDtoList.Add(new GetCriticalResultDto - { - RegisterCheckId = registerCheckId - }); - } - else - { - foreach (var criticalResultDto in criticalResultDtoList) - { - if (criticalResultDto.RegisterCheckId == registerCheckId) - { - if (isCritical != null && criticalResultDto.IsCritical != 'Y') - { - criticalResultDto.IsCritical = isCritical; - } - if (isFollowUp != null && criticalResultDto.IsFollowUp != 'Y') - { - criticalResultDto.IsFollowUp = isFollowUp; - } - if (!string.IsNullOrWhiteSpace(criticalRangeValue)) - { - criticalResultDto.CriticalRangeValue = criticalRangeValue; - } - } - } - } - } - - /// - /// 临时更新危急值状态 registerCheckItem + /// 生成明细表危急值相关数据 /// - /// /// /// - /// + /// /// - /// - private void UpdateRegisterCheckItemCriticalResult(List criticalResultDtoList, Guid registerCheckId, Guid itemId, char? isCritical, char? isFollowUp, string criticalRangeValue) - { - - //先增加registerCheck - if (criticalResultDtoList.Where(m => m.RegisterCheckId == registerCheckId).Count() == 0) - { - criticalResultDtoList.Add(new GetCriticalResultDto - { - RegisterCheckId = registerCheckId - }); - } - - foreach (var criticalResultDto in criticalResultDtoList) - { - if (criticalResultDto.RegisterCheckId == registerCheckId) - { - - if (criticalResultDto.ItemDetails.Where(m => m.ItemId == itemId).Count() == 0) - { - var itemCriticalResultDto = new GetItemCriticalResultDto(); - itemCriticalResultDto.RegisterCheckId = registerCheckId; - itemCriticalResultDto.ItemId = itemId; - if (isFollowUp != null && itemCriticalResultDto.IsFollowUp != 'Y') - { - itemCriticalResultDto.IsFollowUp = isFollowUp; - } - if (isCritical != null && itemCriticalResultDto.IsCritical != 'Y') - { - itemCriticalResultDto.IsCritical = isCritical; - } - if (!string.IsNullOrWhiteSpace(criticalRangeValue)) - { - itemCriticalResultDto.CriticalRangeValue = criticalRangeValue; - } - - criticalResultDto.ItemDetails.Add(itemCriticalResultDto); - } - else - { - foreach (var itemCriticalResultDto in criticalResultDto.ItemDetails) - { - if (itemCriticalResultDto.ItemId == itemId) - { - itemCriticalResultDto.RegisterCheckId = registerCheckId; - itemCriticalResultDto.ItemId = itemId; - if (isFollowUp != null && itemCriticalResultDto.IsFollowUp != 'Y') - { - itemCriticalResultDto.IsFollowUp = isFollowUp; - } - if (isCritical != null && itemCriticalResultDto.IsCritical != 'Y') - { - itemCriticalResultDto.IsCritical = isCritical; - } - if (!string.IsNullOrWhiteSpace(criticalRangeValue)) - { - itemCriticalResultDto.CriticalRangeValue = criticalRangeValue; - } - } - } - } - } - } - } - - - /// - /// 处理危急值记录 - /// - /// - /// + /// /// - private async Task HandCriticalResult(List criticalResultDtoList, Guid patientRegisterId) + private async Task CreateRegisterCheckItemCritical(Guid registerCheckId, Guid itemId, char? isCriticalValue, char? isFollowUp, string CriticalRangeValue) { - bool isCreateFollowUp = false; - foreach (var criticalResultDto in criticalResultDtoList) + var registerCheckItemEnt = await _registerCheckItemRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == registerCheckId + && m.ItemId == itemId); + if (registerCheckItemEnt != null) { - - foreach (var itemCriticalResultDto in criticalResultDto.ItemDetails) + if (!string.IsNullOrWhiteSpace(CriticalRangeValue)) { - if (itemCriticalResultDto.IsCritical == 'Y' || itemCriticalResultDto.IsFollowUp == 'Y') - { - isCreateFollowUp = true; - if (itemCriticalResultDto.IsCritical == 'Y') - { - criticalResultDto.IsCritical = itemCriticalResultDto.IsCritical; - } - if (itemCriticalResultDto.IsFollowUp == 'Y') - { - criticalResultDto.IsFollowUp = itemCriticalResultDto.IsFollowUp; - } - - } - await CreateRegisterCheckItemCritical(itemCriticalResultDto.RegisterCheckId, itemCriticalResultDto.ItemId, itemCriticalResultDto.IsCritical, itemCriticalResultDto.IsFollowUp, itemCriticalResultDto.CriticalRangeValue); + registerCheckItemEnt.CriticalRangeValue = CriticalRangeValue; } - if (criticalResultDto.IsCritical == 'Y' || criticalResultDto.IsFollowUp == 'Y') + if (isCriticalValue == 'Y') { - isCreateFollowUp = true; - + registerCheckItemEnt.CriticalValueCreatorId = _currentUser.Id; + registerCheckItemEnt.CriticalValueCreationTime = DateTime.Now; + registerCheckItemEnt.IsCriticalValue = isCriticalValue; } - await CreateRegisterCheckCritical(criticalResultDto.RegisterCheckId, criticalResultDto.IsCritical, criticalResultDto.IsFollowUp, criticalResultDto.CriticalRangeValue); - - } - - if (isCreateFollowUp) - { - //增加随访主表记录 - await _followUpAppService.CreateAsync(new PatientRegisterIdInputDto + if (isFollowUp == 'Y') { - PatientRegisterId = patientRegisterId - }); + registerCheckItemEnt.FollowUpCreatorId = _currentUser.Id; + registerCheckItemEnt.FollowUpCreationTime = DateTime.Now; + registerCheckItemEnt.IsFollowUp = isFollowUp; + } + await _registerCheckItemRepository.UpdateAsync(registerCheckItemEnt); } - else - { - - //删除随访表记录 - await _followUpAppService.DeleteByPatientRegisterId(new PatientRegisterIdInputDto - { - PatientRegisterId = patientRegisterId - }); - } - } + } #endregion + #endregion } } \ No newline at end of file diff --git a/src/Shentun.Peis.Application/OccupationalDiseaseReports/OccupationalDiseaseReportAppService.cs b/src/Shentun.Peis.Application/OccupationalDiseaseReports/OccupationalDiseaseReportAppService.cs index 48ad691..2a9028c 100644 --- a/src/Shentun.Peis.Application/OccupationalDiseaseReports/OccupationalDiseaseReportAppService.cs +++ b/src/Shentun.Peis.Application/OccupationalDiseaseReports/OccupationalDiseaseReportAppService.cs @@ -444,7 +444,7 @@ namespace Shentun.Peis.OccupationalDiseaseReports #endregion #region 体检结果一览表 - var medicalResultDetails = patientRegisterList.GroupBy(g => g.patientOccupationalDisease).OrderBy(o=>o.Key.OccupationalAbnormal) + var medicalResultDetails = patientRegisterList.GroupBy(g => g.patientOccupationalDisease).OrderBy(o => o.Key.OccupationalAbnormal) .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportMedicalResultDetailDto { //AnomalyIndex = !string.IsNullOrWhiteSpace(s.Key.OccupationalAbnormal) @@ -476,10 +476,11 @@ namespace Shentun.Peis.OccupationalDiseaseReports 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 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 where patientRegister.CustomerOrgRegisterId == customerOrgPara.CustomerOrgRegisterId - && !registerCheckSummary.Summary.Contains("未见异常") + && !registerCheckSummaryEmpty.Summary.Contains("未见异常") && patientRegister.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration select new { @@ -534,7 +535,7 @@ namespace Shentun.Peis.OccupationalDiseaseReports msg.MedicalResultAbnormalRateDetails = medicalResultAbnormalRateDetails; #endregion - #region 职业健康检查缺项情况表明细 + #region 职业健康检查缺项情况表明细 <已经开始检查了,但是未检查完的> var listOfMissingItemsDetails = asbitemAbnormalList.Where(m => m.registerCheckCompleteFlag == RegisterCheckCompleteFlag.UnChecked) .GroupBy(g => g.patientRegister) .Select((s, index) => new GetCompanyOccupationalDiseaseDetailReportListOfMissingItemsDetailDto @@ -548,6 +549,10 @@ namespace Shentun.Peis.OccupationalDiseaseReports msg.ListOfMissingItemsDetails = listOfMissingItemsDetails; #endregion + #region 职业病未检人员一览表 <还没开始检查的> + + #endregion + #region 职业病专科复查人员一览表明细 //复查结论ID