|
|
|
@ -14,6 +14,7 @@ using Shentun.Peis.PlugIns.ImportLisResults; |
|
|
|
using Shentun.Peis.ReferenceRanges; |
|
|
|
using Shentun.Peis.RegisterCheckItems; |
|
|
|
using Shentun.Peis.RegisterChecks; |
|
|
|
using Shentun.Peis.SysParmValues; |
|
|
|
using Shentun.Peis.Units; |
|
|
|
using SqlSugar; |
|
|
|
using System; |
|
|
|
@ -29,6 +30,7 @@ using Volo.Abp.Domain.Repositories; |
|
|
|
using Volo.Abp.Guids; |
|
|
|
using Volo.Abp.Identity; |
|
|
|
using Volo.Abp.Users; |
|
|
|
using static Microsoft.EntityFrameworkCore.DbLoggerCategory; |
|
|
|
|
|
|
|
namespace Shentun.Peis.ImportLisResults |
|
|
|
{ |
|
|
|
@ -66,6 +68,7 @@ namespace Shentun.Peis.ImportLisResults |
|
|
|
private static bool _isRunning = false; |
|
|
|
private static readonly object lockObject = new object(); |
|
|
|
private readonly ColumnReferenceCodeManager _columnReferenceCodeManager; |
|
|
|
private readonly SysParmValueManager _sysParmValueManager; |
|
|
|
public ImportLisResultAppService(IRepository<RegisterCheck, Guid> registerCheckRepository, |
|
|
|
IRepository<RegisterCheckItem> registerCheckItemRepository, |
|
|
|
IRepository<PatientRegister, Guid> patientRegisterRepository, |
|
|
|
@ -91,7 +94,8 @@ namespace Shentun.Peis.ImportLisResults |
|
|
|
UnitManager unitManager, |
|
|
|
RegisterCheckAppService registerCheckAppService, |
|
|
|
IRepository<ThirdInterface> thirdInterfaceRepository, |
|
|
|
ColumnReferenceCodeManager columnReferenceCodeManager) |
|
|
|
ColumnReferenceCodeManager columnReferenceCodeManager, |
|
|
|
SysParmValueManager sysParmValueManager) |
|
|
|
{ |
|
|
|
_registerCheckRepository = registerCheckRepository; |
|
|
|
_userRepository = userRepository; |
|
|
|
@ -120,6 +124,7 @@ namespace Shentun.Peis.ImportLisResults |
|
|
|
_registerCheckAppService = registerCheckAppService; |
|
|
|
_thirdInterfaceRepository = thirdInterfaceRepository; |
|
|
|
_columnReferenceCodeManager = columnReferenceCodeManager; |
|
|
|
_sysParmValueManager = sysParmValueManager; |
|
|
|
} |
|
|
|
/// <summary>
|
|
|
|
/// 从第三方接口导入结果
|
|
|
|
@ -485,13 +490,184 @@ namespace Shentun.Peis.ImportLisResults |
|
|
|
LisAuditorDoctorName = item.LisAuditorDoctorName, |
|
|
|
LisSampleNo = item.LisSampleNo |
|
|
|
}; |
|
|
|
|
|
|
|
inputDtoList.Add(inputDto); |
|
|
|
} |
|
|
|
|
|
|
|
var lisRequestNoPrintMode = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "lis_request_no_print_mode"); |
|
|
|
if (string.IsNullOrWhiteSpace(lisRequestNoPrintMode)) |
|
|
|
lisRequestNoPrintMode = "0"; |
|
|
|
|
|
|
|
if (lisRequestNoPrintMode == "0") |
|
|
|
await ImportResultAsync(inputDtoList); |
|
|
|
else |
|
|
|
await ImportResultByPatientRegisterNoAsync(inputDtoList); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 从第三方接口导入结果
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
|
|
private async Task ImportResultByPatientRegisterNoAsync(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).FirstOrDefault() == patientRegister.PatientRegisterNo |
|
|
|
select new |
|
|
|
{ |
|
|
|
patientRegister, |
|
|
|
registerCheck, |
|
|
|
registerCheckAsbitem, |
|
|
|
registerCheckItem, |
|
|
|
item, |
|
|
|
lisRequest, |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
|
|
|
|
var registerChecks = new List<RegisterCheck>(); |
|
|
|
_referenceRanges = _referenceRangeRepository.GetListAsync().Result; |
|
|
|
|
|
|
|
input = input.Where(o => !string.IsNullOrWhiteSpace(o.Result) |
|
|
|
&& !string.IsNullOrWhiteSpace(o.LisRequestNo) |
|
|
|
&& o.ItemId != Guid.Empty).ToList(); |
|
|
|
|
|
|
|
foreach (var inputItem in input) |
|
|
|
{ |
|
|
|
if (string.IsNullOrWhiteSpace(inputItem.CheckDoctorName)) |
|
|
|
{ |
|
|
|
throw new UserFriendlyException("检查医生不能为空"); |
|
|
|
} |
|
|
|
var lisRequestItems = list.Where(o => o.patientRegister.PatientRegisterNo == inputItem.LisRequestNo |
|
|
|
&& o.registerCheckItem.ItemId == inputItem.ItemId).ToList(); |
|
|
|
foreach (var lisRequestItem in lisRequestItems) |
|
|
|
{ |
|
|
|
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; |
|
|
|
lisRequestItem.registerCheck.ExecOrganizationUnitId = inputItem.ExecOrganizationUnitId; |
|
|
|
lisRequestItem.registerCheck.LisAuditorDoctorName = inputItem.LisAuditorDoctorName; |
|
|
|
lisRequestItem.registerCheck.LisSampleNo = inputItem.LisSampleNo; |
|
|
|
registerChecks.Add(lisRequestItem.registerCheck); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
List<RegisterCheckAsbitem> updateRegisterCheckAsbitem = new List<RegisterCheckAsbitem>(); |
|
|
|
|
|
|
|
//更新参考范围和单位
|
|
|
|
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 |
|
|
|
{ |
|
|
|
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); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
await CurrentUnitOfWork.SaveChangesAsync(); |
|
|
|
//保存结果
|
|
|
|
|
|
|
|
foreach (var registerCheck in registerChecks) |
|
|
|
{ |
|
|
|
var updateCheckResultDto = new UpdateCheckResultDto() |
|
|
|
{ |
|
|
|
RegisterCheckId = registerCheck.Id, |
|
|
|
CheckDoctorId = registerCheck.CheckDoctorId, |
|
|
|
CheckDate = registerCheck.CheckDate, |
|
|
|
ExecOrganizationUnitId = registerCheck.ExecOrganizationUnitId, |
|
|
|
RegisterCheckItems = list.Where(o => o.registerCheck.Id == registerCheck.Id) |
|
|
|
.Select(o => new UpdateRegisterCheckItemDetail() |
|
|
|
{ |
|
|
|
ItemId = o.registerCheckItem.ItemId, |
|
|
|
Result = o.registerCheckItem.Result, |
|
|
|
|
|
|
|
}).ToList(), |
|
|
|
LisSampleNo = registerCheck.LisSampleNo, |
|
|
|
LisAuditorDoctorName = registerCheck.LisAuditorDoctorName |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
var getDiagnosisResultRequestDto = new 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() |
|
|
|
{ |
|
|
|
Summary = summarry.DiagnosisResultDetails[i].DiagnosisResult, |
|
|
|
SummaryFlag = '0' |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
await _registerCheckAppService.UpdateCheckResult(updateCheckResultDto); |
|
|
|
} |
|
|
|
|
|
|
|
await ImportResultAsync(inputDtoList); |
|
|
|
} |
|
|
|
} |
|
|
|
} |