|
|
|
@ -52,6 +52,8 @@ namespace Shentun.Peis.ImportLisResults |
|
|
|
private readonly RegisterCheckAppService _registerCheckAppService; |
|
|
|
private List<Unit> _units; |
|
|
|
private List<ReferenceRange> _referenceRanges; |
|
|
|
private static bool _isRunning = false; |
|
|
|
private static readonly object lockObject = new object(); |
|
|
|
public ImportLisResultAppService(IRepository<RegisterCheck, Guid> registerCheckRepository, |
|
|
|
IRepository<RegisterCheckItem> registerCheckItemRepository, |
|
|
|
IRepository<PatientRegister, Guid> patientRegisterRepository, |
|
|
|
@ -109,140 +111,143 @@ namespace Shentun.Peis.ImportLisResults |
|
|
|
public async Task ImportResultAsync(List<CreateImportLisResultDto> 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<RegisterCheck>(); |
|
|
|
_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); |
|
|
|
|
|
|
|
//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 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(); |
|
|
|
|
|
|
|
|
|
|
|
//更新参考范围和单位
|
|
|
|
foreach (var registerCheck in registerChecks) |
|
|
|
{ |
|
|
|
var lisRequestItems = list.Where(o => o.registerCheck.Id == registerCheck.Id).ToList(); |
|
|
|
foreach (var lisRequestItem in lisRequestItems) |
|
|
|
var lisRequestNos = input.Select(o => o.LisRequestNo).Distinct().ToList(); |
|
|
|
var registerChecks = new List<RegisterCheck>(); |
|
|
|
_referenceRanges = _referenceRangeRepository.GetListAsync().Result; |
|
|
|
foreach (var inputItem in input) |
|
|
|
{ |
|
|
|
var referenceRange = _referenceRangeManager.GetReferenceRangeBySexAgeTemp(_referenceRanges, |
|
|
|
lisRequestItem.item, lisRequestItem.patientRegister.SexId, lisRequestItem.patientRegister.Age); |
|
|
|
if (referenceRange != null) |
|
|
|
var lisRequestItem = list.Where(o => o.lisRequest.LisRequestNo == inputItem.LisRequestNo |
|
|
|
&& o.registerCheckItem.ItemId == inputItem.ItemId).FirstOrDefault(); |
|
|
|
if (lisRequestItem == null) |
|
|
|
{ |
|
|
|
lisRequestItem.registerCheckItem.ReferenceRangeValue = referenceRange.ReferenceRangeValue; |
|
|
|
lisRequestItem.registerCheckItem.CriticalRangeValue = referenceRange.CriticalRangeValue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
lisRequestItem.registerCheckItem.ReferenceRangeValue = ""; |
|
|
|
lisRequestItem.registerCheckItem.CriticalRangeValue = ""; |
|
|
|
} |
|
|
|
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) |
|
|
|
|