diff --git a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs index 55eb6ea..238eb86 100644 --- a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs +++ b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/ChargeRequestPlugInsGem.cs @@ -180,7 +180,7 @@ namespace Shentun.Peis.PlugIns.Gem } } - await SetAppChargeRequestFlagAsync(input.ChargeRequestId, chargeRequestForPlugIns.ConcurrencyStamp,ChargeRequestFlag.AlreadyCancelCharge); + await SetAppChargeRequestFlagAsync(chargeRequestForPlugIns, ChargeRequestFlag.AlreadyCancelCharge); return new ChargeRequestPlugInsOut(); } @@ -225,7 +225,7 @@ namespace Shentun.Peis.PlugIns.Gem } } - await SetAppChargeRequestFlagAsync(input.ChargeRequestId, chargeRequestForPlugIns.ConcurrencyStamp,ChargeRequestFlag.RefundRequest); + await SetAppChargeRequestFlagAsync(chargeRequestForPlugIns, ChargeRequestFlag.RefundRequest); return new ChargeRequestPlugInsOut(); } public override Task DoWork() @@ -267,18 +267,18 @@ namespace Shentun.Peis.PlugIns.Gem if (payStatus == "1" && chargeRequest.ChargeRequestFlag != ChargeRequestFlag.RefundRequest) { charRequstFlag = ChargeRequestFlag.AlreadyCharge; - SetAppChargeRequestFlagAsync(chargeRequest.ChargeRequestId, chargeRequest.ConcurrencyStamp, charRequstFlag); + SetAppChargeRequestFlagAsync(chargeRequest, charRequstFlag); } else if (payStatus == "2") { charRequstFlag = ChargeRequestFlag.AlreadyCancelCharge; - SetAppChargeRequestFlagAsync(chargeRequest.ChargeRequestId, chargeRequest.ConcurrencyStamp,charRequstFlag); + SetAppChargeRequestFlagAsync(chargeRequest, charRequstFlag); } else if (payStatus == "3") { charRequstFlag = ChargeRequestFlag.AlreadyRefund; - SetAppChargeRequestFlagAsync(chargeRequest.ChargeRequestId, chargeRequest.ConcurrencyStamp,charRequstFlag); + SetAppChargeRequestFlagAsync(chargeRequest, charRequstFlag); } else { diff --git a/src/Shentun.ColumnReferencePlugIns/ChargeRequestAsbitemForPlugIns.cs b/src/Shentun.ColumnReferencePlugIns/ChargeRequestAsbitemForPlugIns.cs index 8b7d312..f3f2e8c 100644 --- a/src/Shentun.ColumnReferencePlugIns/ChargeRequestAsbitemForPlugIns.cs +++ b/src/Shentun.ColumnReferencePlugIns/ChargeRequestAsbitemForPlugIns.cs @@ -12,5 +12,7 @@ namespace Shentun.Peis.PlugIns public string AsbitemName { get; set; } = string.Empty; public string ThirdAsbitemCode { get; set; } = string.Empty; public decimal Charges { get; set; } + + public string ConcurrencyStamp { get; set; } } } diff --git a/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs index 3339064..dcf38e6 100644 --- a/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/ChargeRequestPlugInsBase.cs @@ -89,7 +89,8 @@ where patient.id = patient_register.patient_id and sql = @" SELECT register_check_asbitem.asbitem_id, asbitem.display_name as asbitem_name, - register_check_asbitem.amount * register_check_asbitem.charge_price as charges + register_check_asbitem.amount * register_check_asbitem.charge_price as charges, + register_check_asbitem.concurrency_stamp from register_check JOIN register_check_asbitem on register_check.id = register_check_asbitem.register_check_id JOIN charge_request on register_check_asbitem.charge_request_id = charge_request.id @@ -155,32 +156,47 @@ where patient.id = patient_register.patient_id and // } //} - public async Task SetAppChargeRequestFlagAsync(Guid chargeRequestId, string concurrencyStamp, char chargeRequestFlag) + public async Task SetAppChargeRequestFlagAsync(ChargeRequestForPlugIns chargeRequestForPlugIns, + char chargeRequestFlag) { using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) { + //加ConcurrencyStamp,以防止并发 string sql; sql = @" update charge_request set charge_request_flag =" + chargeRequestFlag + @" where id = @ChargeRequestId and concurrency_stamp = @ConcurrencyStamp "; conn.Execute(sql, - new { ChargeRequestId = chargeRequestId, - ConcurrencyStamp = concurrencyStamp + new { ChargeRequestId = chargeRequestForPlugIns.ChargeRequestId, + ConcurrencyStamp = chargeRequestForPlugIns.ConcurrencyStamp }); - if (chargeRequestFlag == ChargeRequestFlag.AlreadyCharge) + + foreach(var chargeRequestAsbitem in chargeRequestForPlugIns.Asbitems) { - sql = @" update register_check_asbitem set is_charge = 'Y' where charge_request_id = @ChargeRequestId + if (chargeRequestFlag == ChargeRequestFlag.AlreadyCharge) + { + sql = @" update register_check_asbitem set is_charge = 'Y' + where charge_request_id = @ChargeRequestId and concurrency_stamp = @ConcurrencyStamp "; - conn.Execute(sql, - new { ChargeRequestId = chargeRequestId }); - } - else if (chargeRequestFlag == ChargeRequestFlag.AlreadyRefund) - { - sql = @" update register_check_asbitem set is_charge = 'N' where charge_request_id = @ChargeRequestId + conn.Execute(sql, + new { ChargeRequestId = chargeRequestForPlugIns.ChargeRequestId, + ConcurrencyStamp = chargeRequestAsbitem.ConcurrencyStamp + }); + } + else if (chargeRequestFlag == ChargeRequestFlag.AlreadyRefund) + { + sql = @" update register_check_asbitem set is_charge = 'N' + where charge_request_id = @ChargeRequestId and concurrency_stamp = @ConcurrencyStamp "; - conn.Execute(sql, - new { ChargeRequestId = chargeRequestId }); + conn.Execute(sql, + new + { + ChargeRequestId = chargeRequestForPlugIns.ChargeRequestId, + ConcurrencyStamp = chargeRequestAsbitem.ConcurrencyStamp + }); + } } + diff --git a/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs b/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs index fbfc4e7..0eca664 100644 --- a/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs +++ b/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs @@ -111,147 +111,147 @@ 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) - { - 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()) - { - lisRequestItem.registerCheck.CheckDoctorId = inputItem.CheckDoctorName; - lisRequestItem.registerCheck.CheckDate = inputItem.CheckDate; - registerChecks.Add(lisRequestItem.registerCheck); - } + var lisRequestNos = input.Select(o => o.LisRequestNo).Distinct().ToList(); + var registerChecks = new List(); + _referenceRanges = _referenceRangeRepository.GetListAsync().Result; + foreach (var inputItem in input) + { + 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); + //await _registerCheckItemManager.UpdateRegisterCheckItemAsync(itemSource, lisRequestItem.registerCheckItem); + //await _registerCheckItemRepository.UpdateAsync(lisRequestItem.registerCheckItem,true); + if (!registerChecks.Where(o => o.Id == lisRequestItem.registerCheck.Id).ToList().Any()) + { + lisRequestItem.registerCheck.CheckDoctorId = inputItem.CheckDoctorName; + lisRequestItem.registerCheck.CheckDate = inputItem.CheckDate; + registerChecks.Add(lisRequestItem.registerCheck); } + } - //更新参考范围和单位 - foreach (var registerCheck in registerChecks) + + //更新参考范围和单位 + foreach (var registerCheck in registerChecks) + { + var lisRequestItems = list.Where(o => o.registerCheck.Id == registerCheck.Id).ToList(); + foreach (var lisRequestItem in lisRequestItems) { - 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) { - 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); + 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); } - //保存结果 - foreach (var registerCheck in registerChecks) + } + //保存结果 + + foreach (var registerCheck in registerChecks) + { + var updateCheckResultDto = new UpdateCheckResultDto() { - var updateCheckResultDto = new UpdateCheckResultDto() + RegisterCheckId = registerCheck.Id, + CheckDoctorId = registerCheck.CheckDoctorId, + CheckDate = registerCheck.CheckDate, + RegisterCheckItems = list.Where(o => o.registerCheck.Id == registerCheck.Id) + .Select(o => new UpdateRegisterCheckItemDetail() { - 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, + ItemId = o.registerCheckItem.ItemId, + Result = o.registerCheckItem.Result, - }).ToList() + }).ToList() - }; + }; - var getDiagnosisResultRequestDto = new GetDiagnosisResultRequestDto() + var getDiagnosisResultRequestDto = new GetDiagnosisResultRequestDto() + { + RegisterCheckId = registerCheck.Id, + Items = list.Where(o => o.registerCheck.Id == registerCheck.Id) + .Select(o => new GetDiagnosisResultRequest_Item() { - 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); + ItemId = o.registerCheckItem.ItemId, + Result = o.registerCheckItem.Result, + }).ToList() + }; + //生成小结 + var summarry = await _diagnosisFunctionAppService.GetDoctorCheckDiagnosisResultAsync(getDiagnosisResultRequestDto); - for (var i = 0; i < summarry.DiagnosisResultDetails.Count; i++) + for (var i = 0; i < summarry.DiagnosisResultDetails.Count; i++) + { + updateCheckResultDto.Summarys.Add(new UpdateRegisterCheckSummaryDetail() { - updateCheckResultDto.Summarys.Add(new UpdateRegisterCheckSummaryDetail() - { - Summary = summarry.DiagnosisResultDetails[i].DiagnosisResult, - SummaryFlag = '0' - }); - } - - await _registerCheckAppService.UpdateCheckResult(updateCheckResultDto); + Summary = summarry.DiagnosisResultDetails[i].DiagnosisResult, + SummaryFlag = '0' + }); } - - + + await _registerCheckAppService.UpdateCheckResult(updateCheckResultDto); + } + + } private async Task UpdateItemReferenceRangeValueAsync(Guid itemId, char sexId, int? age, string referenceRangeValue) { - var referenceRanges = _referenceRanges.Where(o=>o.ItemId == itemId).ToList(); + var referenceRanges = _referenceRanges.Where(o => o.ItemId == itemId).ToList(); if (age == null) age = 30; if (string.IsNullOrWhiteSpace(referenceRangeValue)) { @@ -262,7 +262,7 @@ namespace Shentun.Peis.ImportLisResults if (_referenceRangeManager.IsNumberReferenceRange(referenceRangeValue)) { item.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number; - await _itemRepository.UpdateAsync(item, true); + await _itemRepository.UpdateAsync(item); referenceRange = referenceRanges.Where(o => o.ForSexId == sexId && age >= o.AgeLowerLimit && age <= o.AgeUpperLimit @@ -271,7 +271,7 @@ namespace Shentun.Peis.ImportLisResults { referenceRange.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number; referenceRange.ReferenceRangeValue = referenceRangeValue; - await _referenceRangeRepository.UpdateAsync(referenceRange, true); + await _referenceRangeRepository.UpdateAsync(referenceRange); return; } @@ -282,7 +282,7 @@ namespace Shentun.Peis.ImportLisResults { referenceRange.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number; referenceRange.ReferenceRangeValue = referenceRangeValue; - await _referenceRangeRepository.UpdateAsync(referenceRange, true); + await _referenceRangeRepository.UpdateAsync(referenceRange); return; } referenceRange = new ReferenceRange() @@ -295,18 +295,19 @@ namespace Shentun.Peis.ImportLisResults ForSexId = ForSexFlag.All }; referenceRange = _referenceRangeManager.Create(referenceRange); - await _referenceRangeRepository.InsertAsync(referenceRange, true); + await _referenceRangeRepository.InsertAsync(referenceRange); + referenceRanges.Add(referenceRange); return; } item.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Character; - await _itemRepository.UpdateAsync(item, true); + await _itemRepository.UpdateAsync(item); referenceRange = referenceRanges.Where(o => o.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Character).FirstOrDefault(); if (referenceRange != null) { referenceRange.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Character; referenceRange.ReferenceRangeValue = referenceRangeValue; - await _referenceRangeRepository.UpdateAsync(referenceRange, true); + await _referenceRangeRepository.UpdateAsync(referenceRange); return; } @@ -320,7 +321,8 @@ namespace Shentun.Peis.ImportLisResults ForSexId = ForSexFlag.All }; referenceRange = _referenceRangeManager.Create(referenceRange); - await _referenceRangeRepository.InsertAsync(referenceRange, true); + await _referenceRangeRepository.InsertAsync(referenceRange); + referenceRanges.Add(referenceRange); return; } @@ -340,7 +342,7 @@ namespace Shentun.Peis.ImportLisResults return; } item.UnitId = unit.Id; - await _itemRepository.UpdateAsync(item, true); + await _itemRepository.UpdateAsync(item); return; } unit = new Unit() @@ -349,7 +351,7 @@ namespace Shentun.Peis.ImportLisResults }; unit = await _unitManager.CreateAsync(unit); - await _unitRepository.InsertAsync(unit, true); + await _unitRepository.InsertAsync(unit); _units.Add(unit); } }