using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using NPOI.SS.Formula.Functions; using NPOI.Util; using Shentun.Peis.ColumnReferenceCodes; using Shentun.Peis.DiagnosisFunctions; using Shentun.Peis.Enums; using Shentun.Peis.Items; using Shentun.Peis.LisRequests; using Shentun.Peis.Models; using Shentun.Peis.PatientRegisters; using Shentun.Peis.PlugIns.ImportLisResults; using Shentun.Peis.PlugIns.LisRequests; using Shentun.Peis.ReferenceRanges; using Shentun.Peis.RegisterCheckItems; using Shentun.Peis.RegisterChecks; using Shentun.Peis.SysParmValues; using Shentun.Peis.Units; using SqlSugar; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; 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 { [ApiExplorerSettings(GroupName = "Work")] [Authorize] public class ImportLisResultAppService : ApplicationService, IImportLisResultAppService { private readonly IRepository _thirdInterfaceRepository; private readonly IRepository _registerCheckItemRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _referenceRangeRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _registerCheckAsbitemRepository; private readonly IRepository _lisRequestRepository; private readonly IRepository _itemRepository; private readonly IRepository _registerCheckSummaryRepository; private readonly IRepository _registerCheckSuggestionRepository; private readonly IRepository _userRepository; private readonly IRepository _unitRepository; private readonly RegisterCheckManager _registerCheckManager; private readonly RegisterCheckItemManager _registerCheckItemManager; private readonly CacheService _cacheService; private readonly IGuidGenerator _guidGenerator; private readonly IConfiguration _configuration; private readonly ICurrentUser _currentUser; private readonly IRepository _userItemTypeRepository; private readonly IRepository _asbitemRepository; private readonly DiagnosisFunctionAppService _diagnosisFunctionAppService; private readonly ReferenceRangeManager _referenceRangeManager; private readonly ItemManager _itemManager; private readonly UnitManager _unitManager; private readonly RegisterCheckAppService _registerCheckAppService; private List _units; private List _referenceRanges; private static bool _isRunning = false; private static readonly object lockObject = new object(); private readonly ColumnReferenceCodeManager _columnReferenceCodeManager; private readonly SysParmValueManager _sysParmValueManager; public ImportLisResultAppService(IRepository registerCheckRepository, IRepository registerCheckItemRepository, IRepository patientRegisterRepository, IRepository referenceRangeRepository, IRepository registerCheckSummaryRepository, IRepository registerCheckSuggestionRepository, IRepository userRepository, RegisterCheckManager registerCheckManager, RegisterCheckItemManager registerCheckItemManager, CacheService cacheService, IGuidGenerator guidGenerator, IConfiguration configuration, ICurrentUser currentUser, IRepository userItemTypeRepository, IRepository asbitemRepository, IRepository registerCheckAsbitemRepository, IRepository lisRequestRepository, IRepository unitRepository, DiagnosisFunctionAppService diagnosisFunctionAppService, ReferenceRangeManager referenceRangeManager, IRepository itemRepository, ItemManager itemManager, UnitManager unitManager, RegisterCheckAppService registerCheckAppService, IRepository thirdInterfaceRepository, ColumnReferenceCodeManager columnReferenceCodeManager, SysParmValueManager sysParmValueManager) { _registerCheckRepository = registerCheckRepository; _userRepository = userRepository; _registerCheckManager = registerCheckManager; _patientRegisterRepository = patientRegisterRepository; _referenceRangeRepository = referenceRangeRepository; _registerCheckItemRepository = registerCheckItemRepository; _registerCheckSummaryRepository = registerCheckSummaryRepository; _registerCheckSuggestionRepository = registerCheckSuggestionRepository; _registerCheckItemManager = registerCheckItemManager; _cacheService = cacheService; _guidGenerator = guidGenerator; _configuration = configuration; _currentUser = currentUser; _userItemTypeRepository = userItemTypeRepository; _asbitemRepository = asbitemRepository; _registerCheckAsbitemRepository = registerCheckAsbitemRepository; _lisRequestRepository = lisRequestRepository; _diagnosisFunctionAppService = diagnosisFunctionAppService; _referenceRangeManager = referenceRangeManager; _itemRepository = itemRepository; _itemManager = itemManager; _unitRepository = unitRepository; _units = _unitRepository.GetListAsync().Result; _unitManager = unitManager; _registerCheckAppService = registerCheckAppService; _thirdInterfaceRepository = thirdInterfaceRepository; _columnReferenceCodeManager = columnReferenceCodeManager; _sysParmValueManager = sysParmValueManager; } /// /// 从第三方接口导入结果 /// /// /// /// [HttpPost("api/app/ImportLisResult/ImportResult")] 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; 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.lisRequest.LisRequestNo == 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 //}; //项目如果是性激素参考范围,不更新 if (lisRequestItem.item.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.SexHormone) { //修改参考范围 await UpdateItemReferenceRangeValueAsync(inputItem.ItemId, lisRequestItem.patientRegister.SexId, lisRequestItem.patientRegister.Age, inputItem.ReferenceRangeValue, inputItem.CriticalRangeValue); } //修改单位 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.AuditorName = inputItem.AuditorName; lisRequestItem.registerCheck.LisSampleNo = inputItem.LisSampleNo; lisRequestItem.registerCheck.AuditorTime = inputItem.AuditorTime; lisRequestItem.registerCheck.SubmissionTime = inputItem.SubmissionTime; registerChecks.Add(lisRequestItem.registerCheck); } } } List updateRegisterCheckAsbitem = new List(); //更新参考范围和单位 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, lisRequestItem.patientRegister.SexHormoneTermId); 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, AuditorName = registerCheck.AuditorName, AuditorTime = registerCheck.AuditorTime, SubmissionTime = registerCheck.SubmissionTime }; 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); } } /// /// 导入某个人的结果 /// /// /// [HttpPost("api/app/ImportLisResult/ImportResultByPatientRegisterId")] public async Task ImportResultByPatientRegisterIdAsync(PatientRegisterIdInputDto input) { var patientRegister = await _patientRegisterRepository.GetAsync(input.PatientRegisterId); var thirdInterfaces = await _thirdInterfaceRepository.GetListAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.ImportLisResult && o.MedicalCenterId == patientRegister.MedicalCenterId && o.IsActive == 'Y'); foreach (var thirdInterface in thirdInterfaces) { var parmValue = thirdInterface.ParmValue; var configurationBuilder = new ConfigurationBuilder() .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); var config = configurationBuilder.Build(); var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value; var className = config.GetSection("Interface").GetSection("ClassName").Value; object[] objects = new object[] { input.PatientRegisterId }; var pluginsOut = await Utilities.ReflectionHelper.InvokeAsync(assemblyName, className, [thirdInterface.Id], "ImportResultByPatientRegisterIdAsync", objects); } } /// /// 导入迪安、艾迪康结果 外检 /// /// /// [HttpPost("api/app/ImportLisResult/ImportDianResultByPatientRegisterId")] public async Task ImportDianResultByPatientRegisterIdAsync(PatientRegisterIdInputDto input) { var patientRegister = await _patientRegisterRepository.GetAsync(input.PatientRegisterId); var thirdInterfaces = await _thirdInterfaceRepository.GetListAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.OutSend && o.MedicalCenterId == patientRegister.MedicalCenterId && o.IsActive == 'Y'); foreach (var thirdInterface in thirdInterfaces) { var parmValue = thirdInterface.ParmValue; var configurationBuilder = new ConfigurationBuilder() .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); var config = configurationBuilder.Build(); var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value; var className = config.GetSection("Interface").GetSection("ClassName").Value; object[] objects = new object[] { input.PatientRegisterId }; var pluginsOut = await Utilities.ReflectionHelper.InvokeAsync(assemblyName, className, [thirdInterface.Id], "ImportOueSendResultByPatientRegisterIdAsync", objects); } } /// /// 根据lis传过来的参考范围更新体检系统的值 /// /// /// /// /// /// /// private async Task UpdateItemReferenceRangeValueAsync(Guid itemId, char sexId, int? age, string referenceRangeValue, string criticalRangeValue) { var referenceRanges = _referenceRanges.Where(o => o.ItemId == itemId).ToList(); if (age == null) age = 30; if (string.IsNullOrWhiteSpace(referenceRangeValue)) { return; } var item = await _itemRepository.GetAsync(itemId); ReferenceRange referenceRange = null; if (_referenceRangeManager.IsNumberReferenceRange(referenceRangeValue)) { //数字型 item.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number; await _itemRepository.UpdateAsync(item); referenceRange = referenceRanges.Where(o => o.ForSexId == sexId && age >= o.AgeLowerLimit && age <= o.AgeUpperLimit && o.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Number).FirstOrDefault(); if (referenceRange != null) { referenceRange.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number; referenceRange.ReferenceRangeValue = referenceRangeValue; if (!string.IsNullOrWhiteSpace(criticalRangeValue)) { referenceRange.CriticalRangeValue = criticalRangeValue; referenceRange.FollowUpRangeValue = criticalRangeValue; } await _referenceRangeRepository.UpdateAsync(referenceRange); return; } referenceRange = referenceRanges.Where(o => o.ForSexId == ForSexFlag.All && age >= o.AgeLowerLimit && age <= o.AgeUpperLimit && o.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Number).FirstOrDefault(); if (referenceRange != null) { referenceRange.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number; referenceRange.ReferenceRangeValue = referenceRangeValue; if (!string.IsNullOrWhiteSpace(criticalRangeValue)) { referenceRange.CriticalRangeValue = criticalRangeValue; referenceRange.FollowUpRangeValue = criticalRangeValue; } await _referenceRangeRepository.UpdateAsync(referenceRange); return; } referenceRange = new ReferenceRange() { ItemId = itemId, AgeLowerLimit = 0, AgeUpperLimit = 200, ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number, ReferenceRangeValue = referenceRangeValue, CriticalRangeValue = criticalRangeValue, ForSexId = ForSexFlag.All }; referenceRange = _referenceRangeManager.Create(referenceRange); await _referenceRangeRepository.InsertAsync(referenceRange); referenceRanges.Add(referenceRange); return; } item.ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Character; 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); return; } referenceRange = new ReferenceRange() { ItemId = itemId, AgeLowerLimit = 0, AgeUpperLimit = 200, ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Character, ReferenceRangeValue = referenceRangeValue, ForSexId = ForSexFlag.All }; referenceRange = _referenceRangeManager.Create(referenceRange); await _referenceRangeRepository.InsertAsync(referenceRange); referenceRanges.Add(referenceRange); return; } private async Task UpdateItemUnitAsync(Guid itemId, string unitName) { if (string.IsNullOrWhiteSpace(unitName)) { return; } unitName = unitName.Trim(); var item = await _itemRepository.GetAsync(itemId); var unit = _units.Where(o => o.DisplayName.Trim().ToLower() == unitName.ToLower()).FirstOrDefault(); if (unit != null) { if (item.UnitId == unit.Id) { return; } item.UnitId = unit.Id; await _itemRepository.UpdateAsync(item); return; } unit = new Unit() { DisplayName = unitName, }; unit = await _unitManager.CreateAsync(unit); await _unitRepository.InsertAsync(unit); _units.Add(unit); } #region 蓝豚lis结果导入 /// /// 根据lis检验单号导入结果 /// /// [HttpPost("api/app/ImportLisResult/ImportResultByLisRequestNo")] public async Task ImportResultByLisRequestNoAsync(List input) { if (!input.Any()) throw new UserFriendlyException("请求参数无效"); var thirdInterface = await _thirdInterfaceRepository.FirstOrDefaultAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.ImportLisResult); if (thirdInterface == null) throw new UserFriendlyException($"未配置检验导入的参数"); var parmValue = thirdInterface.ParmValue; var configurationBuilder = new ConfigurationBuilder() .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); var config = configurationBuilder.Build(); Guid execOrganizationUnitId = Guid.Parse(config.GetSection("Interface").GetSection("ExecOrganizationUnitId").Value); Guid columnReferenId = Guid.Parse(config.GetSection("Interface").GetSection("ColumnReferenId").Value); Guid userColumnReferenId = Guid.Parse(config.GetSection("Interface").GetSection("UserColumnReferenId").Value); List inputDtoList = new List(); foreach (var item in input) { var codeValues = await _columnReferenceCodeManager.GetColumnReferenCodeValueAsync(columnReferenId, item.ItemId); if (!codeValues.Any()) { throw new UserFriendlyException($"项目编号:{item.ItemId}没有对照"); } //转换检查医生ID var checkDoctorUserId = (await _columnReferenceCodeManager.GetColumnReferenCodeValueAsync(userColumnReferenId, item.CheckDoctorName)).FirstOrDefault(); if (!string.IsNullOrWhiteSpace(checkDoctorUserId)) { item.CheckDoctorName = checkDoctorUserId; } //转换审核医生ID var lisAuditorDoctorUserId = (await _columnReferenceCodeManager.GetColumnReferenCodeValueAsync(userColumnReferenId, item.AuditorName)).FirstOrDefault(); if (!string.IsNullOrWhiteSpace(lisAuditorDoctorUserId)) { item.AuditorName = lisAuditorDoctorUserId; } foreach (var codeValue in codeValues) { Guid itemId = Guid.Parse(codeValue); var inputDto = new CreateImportLisResultDto { CheckDate = item.CheckDate, CheckDoctorName = item.CheckDoctorName, CriticalRangeValue = item.CriticalRangeValue, CriticalValue = item.CriticalValue, ExecOrganizationUnitId = execOrganizationUnitId, ItemId = itemId, ItemName = item.ItemName, LisRequestNo = item.LisRequestNo, ReferenceRangeValue = item.ReferenceRangeValue, ReportPrompt = "", ResultStatusId = null, Result = item.Result, Unit = item.Unit, AuditorName = item.AuditorName, LisSampleNo = item.LisSampleNo, AuditorTime = item.AuditorTime, SubmissionTime = item.SubmissionTime }; 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); } /// /// 从第三方接口导入结果 /// /// /// /// private async Task ImportResultByPatientRegisterNoAsync(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).FirstOrDefault() == patientRegister.PatientRegisterNo select new { patientRegister, registerCheck, registerCheckAsbitem, registerCheckItem, item, lisRequest, }).ToList(); var registerChecks = new List(); _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 //}; if (lisRequestItem.item.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.SexHormone) { //修改参考范围 await UpdateItemReferenceRangeValueAsync(inputItem.ItemId, lisRequestItem.patientRegister.SexId, lisRequestItem.patientRegister.Age, inputItem.ReferenceRangeValue, inputItem.CriticalRangeValue); } //修改单位 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.AuditorName = inputItem.AuditorName; lisRequestItem.registerCheck.LisSampleNo = inputItem.LisSampleNo; lisRequestItem.registerCheck.SubmissionTime = inputItem.SubmissionTime; lisRequestItem.registerCheck.AuditorTime = inputItem.AuditorTime; registerChecks.Add(lisRequestItem.registerCheck); } } } List updateRegisterCheckAsbitem = new List(); //更新参考范围和单位 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, lisRequestItem.patientRegister.SexHormoneTermId); 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, AuditorName = registerCheck.AuditorName, AuditorTime = registerCheck.AuditorTime, SubmissionTime = registerCheck.SubmissionTime }; 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); } } #endregion #region 批量导入lis结果 需要单独对照 /// /// 按excel批量导入检验结果 /// /// /// /// [HttpPost("api/app/ImportLisResult/ImportResultExcelByLisRequestNo")] public async Task ImportResultExcelByLisRequestNoAsync(ImportResultExcelByLisRequestNoInputDto input) { List inputDtoList = new List(); //对照主表Id var columnReferenceId = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "import_file_lis_result"); if (string.IsNullOrWhiteSpace(columnReferenceId)) throw new UserFriendlyException("未找到对照主表Id,请到系统参数配置"); foreach (var item in input.Details) { var codeValues = await _columnReferenceCodeManager.GetColumnReferenCodeValueAsync(Guid.Parse(columnReferenceId), item.ItemName); if (!codeValues.Any()) { throw new UserFriendlyException($"项目名称:{item.ItemName}没有对照"); } foreach (var codeValue in codeValues) { Guid itemId = Guid.Parse(codeValue); var inputDto = new CreateImportLisResultDto { CheckDate = string.IsNullOrWhiteSpace(item.CheckDate) ? null : Convert.ToDateTime(item.CheckDate), CheckDoctorName = item.CheckDoctorName, CriticalRangeValue = "", CriticalValue = "", ExecOrganizationUnitId = Guid.Empty, ItemId = itemId, ItemName = item.ItemName, LisRequestNo = input.BarCode, ReferenceRangeValue = "", ReportPrompt = "", ResultStatusId = null, Result = item.ItemResult, Unit = "", AuditorName = "", LisSampleNo = input.SampleNo }; inputDtoList.Add(inputDto); } } if (input.BarcodeMode == '0') { if (await _patientRegisterRepository.CountAsync(f => f.PatientRegisterNo == input.BarCode) == 0) throw new UserFriendlyException($"条码号{input.BarCode}不正确"); await ImportResultByPatientRegisterNoAsync(inputDtoList); } else if (input.BarcodeMode == '1') { var isBarCode = await (from registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() join lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id where lisRequest.LisRequestNo == input.BarCode select lisRequest.LisRequestNo).CountAsync(); if (isBarCode == 0) throw new UserFriendlyException($"条码号{input.BarCode}不正确"); await ImportResultAsync(inputDtoList); } } #endregion } }