diff --git a/src/Shentun.Peis.Application.Contracts/DiagnosisFunctions/GetCriticalResultDto.cs b/src/Shentun.Peis.Application.Contracts/DiagnosisFunctions/GetCriticalResultDto.cs new file mode 100644 index 0000000..dcb166e --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/DiagnosisFunctions/GetCriticalResultDto.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.DiagnosisFunctions +{ + public class GetCriticalResultDto + { + public Guid RegisterCheckId { get; set; } + + public char? IsCritical { get; set; } + + public char? IsFollowUp { get; set; } + + public string CriticalRangeValue { get; set; } + + public List ItemDetails { get; set; } = new List(); + } + + public class GetItemCriticalResultDto + { + public Guid RegisterCheckId { get; set; } + + public Guid ItemId { get; set; } + + public char? IsCritical { get; set; } + + public char? IsFollowUp { get; set; } + + public string CriticalRangeValue { get; set; } + } +} diff --git a/src/Shentun.Peis.Application/DiagnosisFunctions/DiagnosisFunctionAppService.cs b/src/Shentun.Peis.Application/DiagnosisFunctions/DiagnosisFunctionAppService.cs index 1d3d3e5..e890a16 100644 --- a/src/Shentun.Peis.Application/DiagnosisFunctions/DiagnosisFunctionAppService.cs +++ b/src/Shentun.Peis.Application/DiagnosisFunctions/DiagnosisFunctionAppService.cs @@ -111,283 +111,6 @@ namespace Shentun.Peis.DiagnosisFunctions } - #region hide - ///// - ///// 医生诊台生成小结 - ///// - ///// - ///// - //[HttpPost("api/app/diagnosisfunction/getdiagnosisresult")] - //public async Task> GetDiagnosisResultAsync(GetDiagnosisResultRequestDto input) - //{ - - // var reslist = new List(); - - - // var registerAsbitems = from a in await _registerAsbitemRepository.GetListAsync() - // join b in await _asbitemRepository.GetListAsync() on a.AsbitemId equals b.Id into bb - // from ab in bb.DefaultIfEmpty() - // where a.PatientRegisterId == input.PatientRegisterId - // select ab; - - // foreach (var item in registerAsbitems) - // { - // if (item.IsDiagnosisFunction == 'Y' && !string.IsNullOrEmpty(item.DiagnosisFunction)) - // { - // if (item.DisplayName == "身高体重") - // { - // var res = await GetDiagnosisResultInAsbitemHeightAsync(input, item.DiagnosisFunction, item.IsContinueProcess); - // if (res.Count > 0) - // { - // reslist.AddRange(res); - // } - // } - // } - // } - - // return reslist; - //} - - - - ///// - ///// 组合函数 身高体重 生成 - ///// - ///// - ///// 诊断函数 - ///// 处理完是否继续执行项目的诊断函数 - ///// - //private async Task> GetDiagnosisResultInAsbitemHeightAsync(GetDiagnosisResultRequestDto input, string DiagnosisFunction, char IsContinueProcess) - //{ - // var reslist = new List(); - - - // if (input.Items.Count > 0) - // { - // var itemList = await _itemRepository.GetListAsync(); - - // string DiagnosisFunctionCode = DiagnosisFunction; - - - // foreach (var item in input.Items) - // { - // if (item.ItemId != null) - // { - // var itement = itemList.Where(m => m.Id == item.ItemId).FirstOrDefault(); - // if (itement != null) - // { - // DiagnosisFunctionCode = DiagnosisFunctionCode.Replace($"[{itement.DisplayName}]", item.Result); - // } - - // } - // } - - // ////拼接动态代码 - // //string code = @" - // // using System; - - // // namespace Shentun.Peis - // // { - // // public class DiagnosisResultInAsbitemHeight - // // { - // // public string AutoDiagnosisResultInAsbitemHeight() - // // { - // // var msg="""";" - // // + DiagnosisFunctionCode + @" - // // return msg; - // // } - // // } - // // }"; - - - // //拼接动态代码 - // string code = @" - - // public class DiagnosisResultInAsbitemHeight - // { - // public string AutoDiagnosisResultInAsbitemHeight() - // { - // var msg="""";" - // + DiagnosisFunctionCode + @" - // return msg; - // } - // }"; - - // CompileHelper compileHelper = new CompileHelper(); - - // var assembly = compileHelper.GenerateAssemblyFromCode(code, Assembly.Load(new AssemblyName("System.Runtime")), typeof(object).Assembly); - - // if (assembly != null) - // { - - // // 反射获取程序集中 的类 - // Type type = assembly.GetType("DiagnosisResultInAsbitemHeight"); - - // // 创建该类的实例 - // object obj = Activator.CreateInstance(type); - - // var msg = type.InvokeMember("AutoDiagnosisResultInAsbitemHeight", - // BindingFlags.Default | BindingFlags.InvokeMethod, - // null, - // obj, - // null); - - // if (!string.IsNullOrEmpty(msg.ToString())) - // { - // reslist.Add(new GetDiagnosisResultDto { DiagnosisResult = msg.ToString() }); - // } - // } - // } - - - - - // return reslist; - //} - - #endregion - - /// - /// 医生诊台生成小结 - /// - /// - /// - [HttpPost("api/app/diagnosisfunction/getdiagnosisresult")] - [RemoteService(false)] - public async Task GetDiagnosisResultAsync(GetDiagnosisResultRequestDto input) - { - throw new Exception("禁止使用"); - var reslist = new List(); - var suggestionlist = new List(); - - // await GetCalculationFunctionAsync(input); //取消计算函数计算 - - //根据检查单ID查询 - var query = (from a in await _registerCheckRepository.GetQueryableAsync() - join b in await _registerAsbitemRepository.GetQueryableAsync() on a.Id equals b.RegisterCheckId - join c in await _registerCheckItemRepository.GetQueryableAsync() on a.Id equals c.RegisterCheckId - join d in await _asbitemRepository.GetQueryableAsync() on b.AsbitemId equals d.Id - join e in (await _itemRepository.GetQueryableAsync()).Include(x => x.ReferenceRanges) on c.ItemId equals e.Id - join f in await _patientRegisterRepository.GetQueryableAsync() on b.PatientRegisterId equals f.Id - where a.Id == input.RegisterCheckId - select new { a, b, c, d, e, f }).ToList(); - - - List diagnosisTrips = new List(); //异常提示 - - if (query.Count() > 0) - { - - - //组合项目数据 - // var asbitem_Data = query.GroupBy(g => g.b.Id).Select(s=>new ) - - var asbitem_Group = query.GroupBy(g => g.b.Id); - - - - //正常是一个,合并过项目可能存在多个 - foreach (var item in asbitem_Group) - { - var asbitem_data = item.Select(s => s.d).FirstOrDefault(); //组合项目信息 - var item_datas = item.Select(s => s.e).ToList(); //项目信息 - var patientRegister_data = item.Select(s => s.f).FirstOrDefault(); - - //是否开启组合项目诊断函数 - if (asbitem_data.IsDiagnosisFunction == 'Y' && !string.IsNullOrEmpty(asbitem_data.DiagnosisFunction)) - { - var res = await GetDiagnosisResultInAsbitemAsync(input, asbitem_data, item_datas, patientRegister_data, diagnosisTrips); - if (res.Count > 0) - { - reslist.AddRange(res); - } - } - else - { - //查找项目诊断函数 - var itemResult = await GetDiagnosisResultInItemAsync(input, item_datas, patientRegister_data, diagnosisTrips); //执行项目诊断函数 - if (itemResult.Any()) - { - reslist.AddRange(itemResult); - } - } - - - if (!reslist.Any()) - { - //未生成小结,继续根据参考范围生成 - foreach (var item_data in item_datas) - { - if (item_data.IsProduceSummary == 'Y') - { - string itemResult_Request = input.Items.Where(m => m.ItemId == item_data.Id).FirstOrDefault()?.Result; //项目结果 - - string referenceRangesResult = await GetDiagnosisResultInReferenceRangesAsync(item_data, itemResult_Request, patientRegister_data, diagnosisTrips); - if (!string.IsNullOrEmpty(referenceRangesResult)) - { - if (item_data.IsNameIntoSummary == 'Y') - referenceRangesResult = item_data.DisplayName + referenceRangesResult; - reslist.Add(new GetDiagnosisResult_Detail { DiagnosisResult = referenceRangesResult }); - } - } - } - } - } - - - - - } - - - - - //无结果 加未见异常 - if (!reslist.Any()) - reslist.Add(new GetDiagnosisResult_Detail { DiagnosisResult = "未见异常" }); - else - { - //小结内容去重 - reslist = reslist.Where((x, i) => reslist.FindIndex(z => z.DiagnosisResult == x.DiagnosisResult) == i).ToList(); - - //生成建议 - var suggestion_query = from a in await _suggestionRepository.GetQueryableAsync() - join b in await _diagnosisRepository.GetQueryableAsync() on a.DiagnosisId equals b.Id - where reslist.Select(s => s.DiagnosisResult).Contains(b.DisplayName) - select a; - if (suggestion_query.Count() > 0) - { - suggestionlist = suggestion_query.Select(s => new GetDiagnosisSuggestion_Detail - { - DiagnosisSuggestion = s.SuggestionContent - }).ToList(); - } - } - - string diagnosisTrip = ""; - if (diagnosisTrips.Any()) - { - diagnosisTrip = string.Join(",", diagnosisTrips.Distinct().ToList()); - } - - var resdto = new GetDiagnosisResultDto - { - DiagnosisResultDetails = reslist, - DiagnosisSuggestionDetails = suggestionlist, - }; - - - if (!string.IsNullOrEmpty(diagnosisTrip)) - { - return new OkObjectResult(CustomerReturnValue.CreateInstance(0, diagnosisTrip, resdto)); - } - else - { - return new OkObjectResult(CustomerReturnValue.CreateInstance(1, "Success", resdto)); - } - } - - /// /// 生成小结 /// @@ -539,26 +262,12 @@ namespace Shentun.Peis.DiagnosisFunctions #region 处理危急值函数 - var isCritical = await GetPatientRegisterIsCriticalAsync(doctorCheckDiagnosisInput, resultDto); - var isFollowUp = false; - if (!isCritical) - { - //随访 - isFollowUp = await GetPatientRegisterIsFollowUpAsync(doctorCheckDiagnosisInput, resultDto); - } - else - { - isFollowUp = true; - } + 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); - if (isCritical || isFollowUp) - { - //await CreateFollowUpAsync(query.First().patientRegister.Id); //标记危急值 生成随访记录 - await _followUpAppService.CreateAsync(new PatientRegisterIdInputDto - { - PatientRegisterId = query.First().patientRegister.Id - }); - } #endregion return resultDto; @@ -1095,44 +804,6 @@ namespace Shentun.Peis.DiagnosisFunctions #endregion - /// - /// 执行组合项目 诊断函数 - /// - /// - /// - /// - /// - /// - /// - private async Task> GetDiagnosisResultInAsbitemAsync(GetDiagnosisResultRequestDto input, Asbitem asbitem_data, List item_datas, PatientRegister patientRegister_data, List diagnosisTrips) - { - var reslist = new List(); - - if (input.Items.Count > 0) - { - //执行函数 返回结果 - string DiagnosisFunctionResult_Asbitem = GetCodeResult(input, asbitem_data.DiagnosisFunction, item_datas); - - if (!string.IsNullOrEmpty(DiagnosisFunctionResult_Asbitem)) - { - reslist.Add(new GetDiagnosisResult_Detail - { - DiagnosisResult = DiagnosisFunctionResult_Asbitem - }); - } - //是否继续执行项目诊断函数 - if (asbitem_data.IsContinueProcess == 'Y') - { - var itemResult = await GetDiagnosisResultInItemAsync(input, item_datas, patientRegister_data, diagnosisTrips); //执行项目诊断函数 - if (itemResult.Any()) - { - reslist.AddRange(itemResult); - } - } - } - - return reslist; - } @@ -1582,14 +1253,16 @@ namespace Shentun.Peis.DiagnosisFunctions /// /// /// + /// /// public async Task GetPatientRegisterIsCriticalAsync( DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, - GetDiagnosisResultDto resultDto) + GetDiagnosisResultDto resultDto, + List criticalResultDtoList) { var isCritical = false; - isCritical = await GetAsbitemCriticalFunction(doctorCheckDiagnosisInput); + isCritical = GetAsbitemCriticalFunction(doctorCheckDiagnosisInput, criticalResultDtoList); if (isCritical) { @@ -1599,7 +1272,7 @@ namespace Shentun.Peis.DiagnosisFunctions var criticalFollowValueList = await _criticalFollowValueRepository.GetListAsync(m => m.CriticalFollowValueFlag == CriticalFollowValueFlag.Critical); //检索项目函数+关键字 - isCritical = await GetItemCriticalFunction(doctorCheckDiagnosisInput, criticalFollowValueList); + isCritical = GetItemCriticalFunction(doctorCheckDiagnosisInput, criticalFollowValueList, criticalResultDtoList); if (isCritical) { @@ -1627,14 +1300,16 @@ namespace Shentun.Peis.DiagnosisFunctions /// /// /// + /// /// public async Task GetPatientRegisterIsFollowUpAsync( DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, - GetDiagnosisResultDto resultDto) + GetDiagnosisResultDto resultDto, + List criticalResultDtoList) { var isCritical = false; - isCritical = await GetAsbitemFollowUpFunction(doctorCheckDiagnosisInput); + isCritical = GetAsbitemFollowUpFunction(doctorCheckDiagnosisInput, criticalResultDtoList); if (isCritical) { @@ -1644,7 +1319,7 @@ namespace Shentun.Peis.DiagnosisFunctions var criticalFollowValueList = await _criticalFollowValueRepository.GetListAsync(m => m.CriticalFollowValueFlag == CriticalFollowValueFlag.FollowUp); //检索项目函数+关键字 - isCritical = await GetItemFollowUpFunction(doctorCheckDiagnosisInput, criticalFollowValueList); + isCritical = GetItemFollowUpFunction(doctorCheckDiagnosisInput, criticalFollowValueList, criticalResultDtoList); if (isCritical) { @@ -1666,8 +1341,9 @@ namespace Shentun.Peis.DiagnosisFunctions /// 组合项目危急值函数 /// /// + /// /// - private async Task GetAsbitemCriticalFunction(DoctorCheckDiagnosisInput doctorCheckDiagnosisInput) + private bool GetAsbitemCriticalFunction(DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, List criticalResultDtoList) { bool isCritical = false; var patientAsbitemDiagnosisInput = new PatientAsbitemDiagnosisInput() @@ -1695,9 +1371,14 @@ namespace Shentun.Peis.DiagnosisFunctions isCritical = diagnosisBuilder.GetAsbitemCriticalResult(patientAsbitemDiagnosisInput, asbitem.DiagnosisFunction); if (isCritical) { - await CreateRegisterCheckCritical(asbitem.RegisterCheckId, 'Y', ""); + UpdateRegisterCheckCriticalResult(criticalResultDtoList, asbitem.RegisterCheckId, 'Y', 'Y', ""); + //await CreateRegisterCheckCritical(asbitem.RegisterCheckId, 'Y', ""); break; } + else + { + UpdateRegisterCheckCriticalResult(criticalResultDtoList, asbitem.RegisterCheckId, 'N', null, ""); + } } } @@ -1709,10 +1390,12 @@ namespace Shentun.Peis.DiagnosisFunctions /// /// /// + /// /// - private async Task GetItemCriticalFunction( + private bool GetItemCriticalFunction( DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, - List criticalFollowValueList + List criticalFollowValueList, + List criticalResultDtoList ) { bool isCritical = false; @@ -1746,9 +1429,15 @@ namespace Shentun.Peis.DiagnosisFunctions if (isCritical) { - await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'Y', ""); + + 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, ""); + } } @@ -1763,9 +1452,14 @@ namespace Shentun.Peis.DiagnosisFunctions isCritical = _registerCheckItemManager.GetNumberResultIsCritical(item.Result, referenceRange.CriticalRangeValue); if (isCritical) { - await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'Y', ""); + 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 @@ -1783,9 +1477,14 @@ namespace Shentun.Peis.DiagnosisFunctions if (isCritical) { - await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'Y', isCriticalFollowValue.DisplayName); + 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, ""); + } } @@ -1797,8 +1496,9 @@ namespace Shentun.Peis.DiagnosisFunctions /// 组合项目随访函数 /// /// + /// /// - private async Task GetAsbitemFollowUpFunction(DoctorCheckDiagnosisInput doctorCheckDiagnosisInput) + private bool GetAsbitemFollowUpFunction(DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, List criticalResultDtoList) { bool isFollowUp = false; var patientAsbitemDiagnosisInput = new PatientAsbitemDiagnosisInput() @@ -1826,24 +1526,30 @@ namespace Shentun.Peis.DiagnosisFunctions isFollowUp = diagnosisBuilder.GetAsbitemFollowUpResult(patientAsbitemDiagnosisInput, asbitem.DiagnosisFunction); if (isFollowUp) { - await CreateRegisterCheckCritical(asbitem.RegisterCheckId, 'Y', ""); + UpdateRegisterCheckCriticalResult(criticalResultDtoList, asbitem.RegisterCheckId, null, 'Y', ""); + //await CreateRegisterCheckCritical(asbitem.RegisterCheckId, 'Y', ""); break; } + else + { + UpdateRegisterCheckCriticalResult(criticalResultDtoList, asbitem.RegisterCheckId, null, 'N', ""); + } } } return isFollowUp; } - /// /// 项目随访函数 /// /// /// + /// /// - private async Task GetItemFollowUpFunction( + private bool GetItemFollowUpFunction( DoctorCheckDiagnosisInput doctorCheckDiagnosisInput, - List criticalFollowValueList + List criticalFollowValueList, + List criticalResultDtoList ) { bool isFollowUp = false; @@ -1877,9 +1583,14 @@ namespace Shentun.Peis.DiagnosisFunctions if (isFollowUp) { - await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'N', ""); + 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', ""); + } } @@ -1895,9 +1606,14 @@ namespace Shentun.Peis.DiagnosisFunctions isFollowUp = _registerCheckItemManager.GetNumberResultIsFollow(item.Result, referenceRange.FollowUpRangeValue); if (isFollowUp) { - await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'N', referenceRange.FollowUpRangeValue); + 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 @@ -1912,9 +1628,14 @@ namespace Shentun.Peis.DiagnosisFunctions if (isFollowUp) { - await CreateRegisterCheckItemCritical(item.RegisterCheckId, item.ItemId, 'N', isCriticalFollowValue.DisplayName); + 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', ""); + } } @@ -1948,9 +1669,10 @@ namespace Shentun.Peis.DiagnosisFunctions /// /// /// + /// /// /// - private async Task CreateRegisterCheckItemCritical(Guid registerCheckId, Guid itemId, char isCriticalValue, string 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); @@ -1963,16 +1685,18 @@ namespace Shentun.Peis.DiagnosisFunctions registerCheckItemEnt.CriticalValueCreatorId = _currentUser.Id; registerCheckItemEnt.CriticalValueCreationTime = DateTime.Now; } - registerCheckItemEnt.FollowUpCreatorId = _currentUser.Id; - registerCheckItemEnt.FollowUpCreationTime = DateTime.Now; - registerCheckItemEnt.IsCriticalValueAudit = 'N'; - registerCheckItemEnt.IsReview = 'N'; - registerCheckItemEnt.IsFollowUp = 'Y'; + if (isFollowUp == 'Y') + { + registerCheckItemEnt.FollowUpCreatorId = _currentUser.Id; + registerCheckItemEnt.FollowUpCreationTime = DateTime.Now; + } + //registerCheckItemEnt.IsCriticalValueAudit = 'N'; + //registerCheckItemEnt.IsReview = 'N'; + registerCheckItemEnt.IsFollowUp = isFollowUp; await _registerCheckItemRepository.UpdateAsync(registerCheckItemEnt); } - await CreateRegisterCheckCritical(registerCheckId, isCriticalValue, CriticalRangeValue); } /// @@ -1980,30 +1704,210 @@ namespace Shentun.Peis.DiagnosisFunctions /// /// /// + /// /// /// - private async Task CreateRegisterCheckCritical(Guid registerCheckId, char isCriticalValue, string CriticalRangeValue) + 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; } - registerCheckEnt.FollowUpCreatorId = _currentUser.Id; - registerCheckEnt.FollowUpCreationTime = DateTime.Now; - registerCheckEnt.IsCriticalValueAudit = 'N'; - registerCheckEnt.IsReview = 'N'; - registerCheckEnt.IsFollowUp = 'Y'; + 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(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) + { + 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 + }); + } + } + #endregion