diff --git a/src/Shentun.ColumnReferencePlugIns/ChargeRequestForPlugIns.cs b/src/Shentun.ColumnReferencePlugIns/ChargeRequestForPlugIns.cs index d136dd0..e6a18dc 100644 --- a/src/Shentun.ColumnReferencePlugIns/ChargeRequestForPlugIns.cs +++ b/src/Shentun.ColumnReferencePlugIns/ChargeRequestForPlugIns.cs @@ -27,6 +27,8 @@ namespace Shentun.Peis.PlugIns /// public char ChargeRequestFlag { get; set; } + public string ConcurrencyStamp { get; set; } + public List Asbitems = new List (); } } diff --git a/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs index 8976aae..3339064 100644 --- a/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs @@ -75,7 +75,8 @@ where patient.id = patient_register.patient_id and sql = @"SELECT id as charge_request_id, charge_request_no, his_charge_no, - charge_request_flag + charge_request_flag, + concurrency_stamp FROM charge_request WHERE id =@ChargeRequestId "; @@ -113,7 +114,8 @@ where patient.id = patient_register.patient_id and sql = @"SELECT id as charge_request_id, charge_request_no, his_charge_no, - charge_request_flag + charge_request_flag, + concurrency_stamp FROM charge_request WHERE (charge_request_flag = '0' or charge_request_flag = '2' or @@ -153,16 +155,18 @@ where patient.id = patient_register.patient_id and // } //} - public async Task SetAppChargeRequestFlagAsync(Guid chargeRequestId, char chargeRequestFlag) + public async Task SetAppChargeRequestFlagAsync(Guid chargeRequestId, string concurrencyStamp, char chargeRequestFlag) { using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) { string sql; sql = @" update charge_request set charge_request_flag =" + chargeRequestFlag + - @" where id = @ChargeRequestId + @" where id = @ChargeRequestId and concurrency_stamp = @ConcurrencyStamp "; conn.Execute(sql, - new { ChargeRequestId = chargeRequestId }); + new { ChargeRequestId = chargeRequestId, + ConcurrencyStamp = concurrencyStamp + }); if (chargeRequestFlag == ChargeRequestFlag.AlreadyCharge) { sql = @" update register_check_asbitem set is_charge = 'Y' where charge_request_id = @ChargeRequestId diff --git a/src/Shentun.Peis.Application.Contracts/RegisterChecks/RegisterCheckWithAsbitemsDto.cs b/src/Shentun.Peis.Application.Contracts/RegisterChecks/RegisterCheckWithAsbitemsDto.cs index 17404db..1bc6bd2 100644 --- a/src/Shentun.Peis.Application.Contracts/RegisterChecks/RegisterCheckWithAsbitemsDto.cs +++ b/src/Shentun.Peis.Application.Contracts/RegisterChecks/RegisterCheckWithAsbitemsDto.cs @@ -53,5 +53,17 @@ namespace Shentun.Peis.RegisterChecks /// 审核时间 /// public DateTime? AuditTime { get; set; } + /// + /// 检查类别 + /// + public char CheckTypeFlag { get; set; } + /// + /// 项目类别显示顺序 + /// + public int ItemTypeDisplayOrder { get; set; } + /// + /// 组合项目顺序 + /// + public int AsbitemDisplayOrder { get; set; } } } diff --git a/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs b/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs index 85bc9ef..bf8e527 100644 --- a/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs +++ b/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs @@ -52,6 +52,8 @@ namespace Shentun.Peis.ImportLisResults private readonly RegisterCheckAppService _registerCheckAppService; private List _units; private List _referenceRanges; + private static bool _isRunning = false; + private static readonly object lockObject = new object(); public ImportLisResultAppService(IRepository registerCheckRepository, IRepository registerCheckItemRepository, IRepository patientRegisterRepository, @@ -109,140 +111,143 @@ namespace Shentun.Peis.ImportLisResults public async Task ImportResultAsync(List input) { //设置结果 - - var list = (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 registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync() - on registerCheck.Id equals registerCheckItem.RegisterCheckId - join item in await _itemRepository.GetQueryableAsync() - on registerCheckItem.ItemId equals item.Id - join lisRequest in await _lisRequestRepository.GetQueryableAsync() - on registerCheckAsbitem.LisRequestId equals lisRequest.Id - where input.Select(o => o.LisRequestNo).ToList().Contains(lisRequest.LisRequestNo) - select new - { - patientRegister, - registerCheck, - registerCheckAsbitem, - registerCheckItem, - item, - lisRequest, - }).ToList(); - - var lisRequestNos = input.Select(o => o.LisRequestNo).Distinct().ToList(); - var registerChecks = new List(); - _referenceRanges = _referenceRangeRepository.GetListAsync().Result; - foreach (var inputItem in input) + lock (lockObject) { - var lisRequestItem = list.Where(o => o.lisRequest.LisRequestNo == inputItem.LisRequestNo - && o.registerCheckItem.ItemId == inputItem.ItemId).FirstOrDefault(); - if (lisRequestItem == null) - { - continue; - } - lisRequestItem.registerCheckItem.Result = inputItem.Result; - //var itemSource = new RegisterCheckItem() - //{ - // Result = inputItem.Result, - // ReferenceRangeValue = inputItem.ReferenceRangeValue, - // Unit = inputItem.Unit, - // CriticalRangeValue = inputItem.CriticalRangeValue - //}; - //修改参考范围 - await UpdateItemReferenceRangeValueAsync(inputItem.ItemId, lisRequestItem.patientRegister.SexId, - lisRequestItem.patientRegister.Age, inputItem.ReferenceRangeValue); - //修改单位 - await UpdateItemUnitAsync(inputItem.ItemId, inputItem.Unit); + var list = (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 registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync() + on registerCheck.Id equals registerCheckItem.RegisterCheckId + join item in await _itemRepository.GetQueryableAsync() + on registerCheckItem.ItemId equals item.Id + join lisRequest in await _lisRequestRepository.GetQueryableAsync() + on registerCheckAsbitem.LisRequestId equals lisRequest.Id + where input.Select(o => o.LisRequestNo).ToList().Contains(lisRequest.LisRequestNo) + select new + { + patientRegister, + registerCheck, + registerCheckAsbitem, + registerCheckItem, + item, + lisRequest, + }).ToList(); - //await _registerCheckItemManager.UpdateRegisterCheckItemAsync(itemSource, lisRequestItem.registerCheckItem); - //await _registerCheckItemRepository.UpdateAsync(lisRequestItem.registerCheckItem,true); - if (!registerChecks.Where(o => o.Id == lisRequestItem.registerCheck.Id).ToList().Any()) + var lisRequestNos = input.Select(o => o.LisRequestNo).Distinct().ToList(); + var registerChecks = new List(); + _referenceRanges = _referenceRangeRepository.GetListAsync().Result; + foreach (var inputItem in input) { - lisRequestItem.registerCheck.CheckDoctorId = inputItem.CheckDoctorName; - lisRequestItem.registerCheck.CheckDate = inputItem.CheckDate; - registerChecks.Add(lisRequestItem.registerCheck); - } - - } - - - //更新参考范围和单位 - foreach (var registerCheck in registerChecks) - { - var lisRequestItems = list.Where(o => o.registerCheck.Id == registerCheck.Id).ToList(); - foreach (var lisRequestItem in lisRequestItems) - { - var referenceRange = _referenceRangeManager.GetReferenceRangeBySexAgeTemp(_referenceRanges, - lisRequestItem.item, lisRequestItem.patientRegister.SexId, lisRequestItem.patientRegister.Age); - if (referenceRange != null) - { - lisRequestItem.registerCheckItem.ReferenceRangeValue = referenceRange.ReferenceRangeValue; - lisRequestItem.registerCheckItem.CriticalRangeValue = referenceRange.CriticalRangeValue; - } - else + var lisRequestItem = list.Where(o => o.lisRequest.LisRequestNo == inputItem.LisRequestNo + && o.registerCheckItem.ItemId == inputItem.ItemId).FirstOrDefault(); + if (lisRequestItem == null) { - lisRequestItem.registerCheckItem.ReferenceRangeValue = ""; - lisRequestItem.registerCheckItem.CriticalRangeValue = ""; + continue; } - var unit = _units.Where(o => o.Id == lisRequestItem.item.UnitId).FirstOrDefault(); - if (unit != null) + lisRequestItem.registerCheckItem.Result = inputItem.Result; + //var itemSource = new RegisterCheckItem() + //{ + // Result = inputItem.Result, + // ReferenceRangeValue = inputItem.ReferenceRangeValue, + // Unit = inputItem.Unit, + // CriticalRangeValue = inputItem.CriticalRangeValue + //}; + //修改参考范围 + await UpdateItemReferenceRangeValueAsync(inputItem.ItemId, lisRequestItem.patientRegister.SexId, + lisRequestItem.patientRegister.Age, inputItem.ReferenceRangeValue); + //修改单位 + await UpdateItemUnitAsync(inputItem.ItemId, inputItem.Unit); + + //await _registerCheckItemManager.UpdateRegisterCheckItemAsync(itemSource, lisRequestItem.registerCheckItem); + //await _registerCheckItemRepository.UpdateAsync(lisRequestItem.registerCheckItem,true); + if (!registerChecks.Where(o => o.Id == lisRequestItem.registerCheck.Id).ToList().Any()) { - lisRequestItem.registerCheckItem.Unit = unit.DisplayName; + lisRequestItem.registerCheck.CheckDoctorId = inputItem.CheckDoctorName; + lisRequestItem.registerCheck.CheckDate = inputItem.CheckDate; + registerChecks.Add(lisRequestItem.registerCheck); } - else + + } + + + //更新参考范围和单位 + foreach (var registerCheck in registerChecks) + { + var lisRequestItems = list.Where(o => o.registerCheck.Id == registerCheck.Id).ToList(); + foreach (var lisRequestItem in lisRequestItems) { - lisRequestItem.registerCheckItem.Unit = ""; + var referenceRange = _referenceRangeManager.GetReferenceRangeBySexAgeTemp(_referenceRanges, + lisRequestItem.item, lisRequestItem.patientRegister.SexId, lisRequestItem.patientRegister.Age); + if (referenceRange != null) + { + lisRequestItem.registerCheckItem.ReferenceRangeValue = referenceRange.ReferenceRangeValue; + lisRequestItem.registerCheckItem.CriticalRangeValue = referenceRange.CriticalRangeValue; + } + else + { + lisRequestItem.registerCheckItem.ReferenceRangeValue = ""; + lisRequestItem.registerCheckItem.CriticalRangeValue = ""; + } + var unit = _units.Where(o => o.Id == lisRequestItem.item.UnitId).FirstOrDefault(); + if (unit != null) + { + lisRequestItem.registerCheckItem.Unit = unit.DisplayName; + } + else + { + lisRequestItem.registerCheckItem.Unit = ""; + } + await _registerCheckItemRepository.UpdateAsync(lisRequestItem.registerCheckItem, true); } - await _registerCheckItemRepository.UpdateAsync(lisRequestItem.registerCheckItem, true); - } - } - //保存结果 + } + //保存结果 - foreach (var registerCheck in registerChecks) - { - var updateCheckResultDto = new UpdateCheckResultDto() + foreach (var registerCheck in registerChecks) { - RegisterCheckId = registerCheck.Id, - CheckDoctorId = registerCheck.CheckDoctorId, - CheckDate = registerCheck.CheckDate, - RegisterCheckItems = list.Where(o => o.registerCheck.Id == registerCheck.Id) - .Select(o => new UpdateRegisterCheckItemDetail() + var updateCheckResultDto = new UpdateCheckResultDto() { - ItemId = o.registerCheckItem.ItemId, - Result = o.registerCheckItem.Result, + RegisterCheckId = registerCheck.Id, + CheckDoctorId = registerCheck.CheckDoctorId, + CheckDate = registerCheck.CheckDate, + RegisterCheckItems = list.Where(o => o.registerCheck.Id == registerCheck.Id) + .Select(o => new UpdateRegisterCheckItemDetail() + { + ItemId = o.registerCheckItem.ItemId, + Result = o.registerCheckItem.Result, - }).ToList() + }).ToList() - }; + }; - var getDiagnosisResultRequestDto = new GetDiagnosisResultRequestDto() - { - RegisterCheckId = registerCheck.Id, - Items = list.Where(o => o.registerCheck.Id == registerCheck.Id) - .Select(o => new GetDiagnosisResultRequest_Item() + var getDiagnosisResultRequestDto = new GetDiagnosisResultRequestDto() { - ItemId = o.registerCheckItem.ItemId, - Result = o.registerCheckItem.Result, - }).ToList() - }; - //生成小结 - var summarry = await _diagnosisFunctionAppService.GetDoctorCheckDiagnosisResultAsync(getDiagnosisResultRequestDto); + RegisterCheckId = registerCheck.Id, + Items = list.Where(o => o.registerCheck.Id == registerCheck.Id) + .Select(o => new GetDiagnosisResultRequest_Item() + { + ItemId = o.registerCheckItem.ItemId, + Result = o.registerCheckItem.Result, + }).ToList() + }; + //生成小结 + var summarry = await _diagnosisFunctionAppService.GetDoctorCheckDiagnosisResultAsync(getDiagnosisResultRequestDto); - for (var i = 0; i < summarry.DiagnosisResultDetails.Count; i++) - { - updateCheckResultDto.Summarys.Add(new UpdateRegisterCheckSummaryDetail() + for (var i = 0; i < summarry.DiagnosisResultDetails.Count; i++) { - Summary = summarry.DiagnosisResultDetails[i].DiagnosisResult, - SummaryFlag = '0' - }); - } + updateCheckResultDto.Summarys.Add(new UpdateRegisterCheckSummaryDetail() + { + Summary = summarry.DiagnosisResultDetails[i].DiagnosisResult, + SummaryFlag = '0' + }); + } - await _registerCheckAppService.UpdateCheckResult(updateCheckResultDto); + await _registerCheckAppService.UpdateCheckResult(updateCheckResultDto); + } } + } private async Task UpdateItemReferenceRangeValueAsync(Guid itemId, char sexId, int? age, string referenceRangeValue) diff --git a/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs b/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs index 4731eb6..3fd48af 100644 --- a/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs +++ b/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs @@ -261,6 +261,9 @@ namespace Shentun.Peis.RegisterChecks IsAudit = s.IsAudit, IsCharge = s.RegisterCheckAsbitems.Where(m => m.IsCharge == 'Y').Count() > 0 ? 'Y' : 'N', IsLock = s.IsLock, + CheckTypeFlag = s.RegisterCheckAsbitems.First().Asbitem.ItemType.CheckTypeFlag, + ItemTypeDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.ItemType.DisplayOrder, + AsbitemDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.DisplayOrder, }).ToList(); return entdto;