diff --git a/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/LisResultImportPlugInsGem.cs b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/LisResultImportPlugInsGem.cs new file mode 100644 index 00000000..28688b78 --- /dev/null +++ b/ThirdPlugIns/Shentun.Peis.PlugIns.Gem/LisResultImportPlugInsGem.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.Peis.PlugIns.Gem +{ + public class LisResultImportPlugInsGem : LisResultImportPlugInsBase + { + public LisResultImportPlugInsGem(string parmValue) : base(parmValue) + { + } + public override Task ImportResult(LisResultImportPlugInsInput input) + { + return base.ImportResult(input); + } + } +} diff --git a/src/Shentun.ColumnReferencePlugIns/ColumnReferencePlugInsDbBase.cs b/src/Shentun.ColumnReferencePlugIns/ColumnReferencePlugInsDbBase.cs index 33fafb50..b363083d 100644 --- a/src/Shentun.ColumnReferencePlugIns/ColumnReferencePlugInsDbBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/ColumnReferencePlugInsDbBase.cs @@ -14,41 +14,14 @@ namespace Shentun.Peis.PlugIns { public class ColumnReferencePlugInsDbBase: ColumnReferencePlugInsBase { - protected string InterfaceSql; - protected string InterfaceDbType; - protected string? InterfaceConnctionStr; + public ColumnReferencePlugInsDbBase(string parmValue):base(parmValue) { InterfaceSql = InterfaceConfig.GetSection("Interface").GetSection("Sql").Value; InterfaceDbType = InterfaceConfig.GetSection("Interface").GetSection("DbType").Value; InterfaceConnctionStr = InterfaceConfig.GetSection("Interface").GetSection("ConnectionStrings").Value; } - protected DbConnection CreateInterfaceDbConnect() - { - DbConnection conn ; - if (string.IsNullOrWhiteSpace(InterfaceConnctionStr)) - { - throw new ArgumentException("数据连接设置中的DbType不能为空"); - } - InterfaceDbType = InterfaceDbType.ToLower(); - if (InterfaceDbType == "sqlserver") - { - conn = new SqlConnection(InterfaceConnctionStr); - } - else if (InterfaceDbType == "postgres") - { - conn = new NpgsqlConnection(InterfaceConnctionStr); - } - else if (InterfaceDbType == "oracle") - { - conn = new OracleConnection(InterfaceConnctionStr); - } - else - { - throw new ArgumentException("数据连接设置中的DbType不支持"); - } - return conn; - } + public override async Task> GetInterfaceCodeValuesAsync() { diff --git a/src/Shentun.ColumnReferencePlugIns/LisRequestForResultImportPlugIns.cs b/src/Shentun.ColumnReferencePlugIns/LisRequestForResultImportPlugIns.cs new file mode 100644 index 00000000..db6927cf --- /dev/null +++ b/src/Shentun.ColumnReferencePlugIns/LisRequestForResultImportPlugIns.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.Peis.PlugIns +{ + public class LisRequestForResultImportPlugIns + { + /// + /// LisRequest的ID + /// + public Guid LisRequestId { get; set; } + + + /// + /// 检验申请单号 + /// + public string LisRequestNo { get; set; } + } +} diff --git a/src/Shentun.ColumnReferencePlugIns/LisRequestPlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/LisRequestPlugInsBase.cs index e06376cc..b3f5d148 100644 --- a/src/Shentun.ColumnReferencePlugIns/LisRequestPlugInsBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/LisRequestPlugInsBase.cs @@ -13,16 +13,12 @@ namespace Shentun.Peis.PlugIns { public class LisRequestPlugInsBase : ThirdPlugInsBase { - protected IConfiguration InterfaceConfig; protected Guid AsbitemColumnReferenceId; protected Guid SampleTypeColumnReferenceId; public LisRequestPlugInsBase(string parmValue) : base(parmValue) { - var configurationBuilder = new ConfigurationBuilder() - .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); - InterfaceConfig = configurationBuilder.Build(); var asbitemColumnReferenceIdStr = InterfaceConfig.GetSection("Interface").GetSection("AsbitemColumnReferenceId").Value; if(!string.IsNullOrWhiteSpace(asbitemColumnReferenceIdStr)) { diff --git a/src/Shentun.ColumnReferencePlugIns/LisResult.cs b/src/Shentun.ColumnReferencePlugIns/LisResult.cs new file mode 100644 index 00000000..23ef8fab --- /dev/null +++ b/src/Shentun.ColumnReferencePlugIns/LisResult.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.Peis.PlugIns +{ + public class LisResult + { + public string LisRequestNo { get; set; } + /// 项目编号 + /// + public string ItemId { get; set; } + /// + /// 项目名称 + /// + public string ItemName { get; set; } + + /// + /// 结果 + /// + public string? Result { get; set; } + /// + /// 单位 + /// + + public string? Unit { get; set; } + /// + /// 参考范围 + /// + + public string? ReferenceRangeValue { get; set; } + /// + /// 危急值范围 + /// + + public string? CriticalRangeValue { get; set; } + /// + /// 危急值 + /// + + public string? CriticalValue { get; set; } + /// + /// 报告单状态 + /// + + public string? ResultStatusId { get; set; } = "01";//01-正常 + /// + /// 报告单提示 + /// + public string ReportPrompt { get; set; } + /// + /// 检查医生 + /// + + public string? CheckDoctorName { get; set; } + /// + /// 检查日期 + /// + + public DateTime? CheckDate { get; set; } + + public Guid ExecOrganizationUnitId { get; set; } + } +} diff --git a/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsBase.cs new file mode 100644 index 00000000..457d0f3e --- /dev/null +++ b/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsBase.cs @@ -0,0 +1,48 @@ +using Dapper; +using Npgsql; +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.Peis.PlugIns +{ + public class LisResultImportPlugInsBase : ThirdPlugInsBase + { + protected Guid ItemColumnReferenceId; + public LisResultImportPlugInsBase(string parmValue) : base(parmValue) + { + var itemColumnReferenceIdStr = InterfaceConfig.GetSection("Interface").GetSection("ItemColumnReferenceId").Value; + if (!string.IsNullOrWhiteSpace(itemColumnReferenceIdStr)) + { + ItemColumnReferenceId = new Guid(itemColumnReferenceIdStr); + } + } + public virtual async Task ImportResult(LisResultImportPlugInsInput input) + { + var result = new LisResultImportPlugInsOut(); + return result; + } + + public async Task> GetLisRequestForResultImportPlugInssAsync(Guid patientRegisterId) + { + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) + { + string sql; + sql = @" + SELECT lis_request.id , + lis_request.lis_request_no + from patient_register + JOIN register_check on patient_register.id = register_check.patient_register_id + JOIN register_check_asbitem on register_check.id = register_check_asbitem.register_check_id + JOIN lis_request on register_check_asbitem.lis_request_id = lis_request.id + where patient_register.id = @PatientRegisterId + "; + var lisRequestForResultImportPlugInss = (await conn.QueryAsync(sql)).ToList(); + return lisRequestForResultImportPlugInss; + } + } + } +} diff --git a/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsDbBase.cs b/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsDbBase.cs new file mode 100644 index 00000000..b4f1b7bf --- /dev/null +++ b/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsDbBase.cs @@ -0,0 +1,41 @@ +using Dapper; +using Microsoft.Data.SqlClient; +using Npgsql; +using Oracle.ManagedDataAccess.Client; +using Shentun.Utilities; +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.Peis.PlugIns +{ + public class LisResultImportPlugInsDbBase : LisResultImportPlugInsBase + { + + public LisResultImportPlugInsDbBase(string parmValue) : base(parmValue) + { + } + + public override async Task ImportResult(LisResultImportPlugInsInput input) + { + var lisRequests = await GetLisRequestForResultImportPlugInssAsync(input.PatientRegisterId); + using (DbConnection conn = CreateInterfaceDbConnect()) + { + var list = (await conn.QueryAsync(InterfaceSql)).ToList(); + //设置结果,生成小结 + foreach (var item in list) + { + + } + + } + + return new LisResultImportPlugInsOut(); + } + + + } +} diff --git a/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsInput.cs b/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsInput.cs new file mode 100644 index 00000000..eb302c01 --- /dev/null +++ b/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsInput.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.Peis.PlugIns +{ + public class LisResultImportPlugInsInput + { + public Guid PatientRegisterId { get; set; } + + } +} diff --git a/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsOut.cs b/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsOut.cs new file mode 100644 index 00000000..0a27fadb --- /dev/null +++ b/src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsOut.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.Peis.PlugIns +{ + public class LisResultImportPlugInsOut + { + } +} diff --git a/src/Shentun.ColumnReferencePlugIns/PlugInsBase.cs b/src/Shentun.ColumnReferencePlugIns/PlugInsBase.cs index 851e9a2a..2505e245 100644 --- a/src/Shentun.ColumnReferencePlugIns/PlugInsBase.cs +++ b/src/Shentun.ColumnReferencePlugIns/PlugInsBase.cs @@ -1,7 +1,11 @@ -using Microsoft.Extensions.Configuration; +using Microsoft.Data.SqlClient; +using Microsoft.Extensions.Configuration; +using Npgsql; +using Oracle.ManagedDataAccess.Client; using Shentun.Utilities; using System; using System.Collections.Generic; +using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -13,6 +17,11 @@ namespace Shentun.Peis.PlugIns protected IConfiguration AppConfig; protected IConfiguration InterfaceConfig; protected string? AppConnctionStr; + + protected string InterfaceSql; + protected string InterfaceDbType; + protected string? InterfaceConnctionStr; + static PlugInsBase() { Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true; @@ -30,6 +39,37 @@ namespace Shentun.Peis.PlugIns .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); InterfaceConfig = configurationBuilder.Build(); + InterfaceSql = InterfaceConfig.GetSection("Interface").GetSection("Sql").Value; + InterfaceDbType = InterfaceConfig.GetSection("Interface").GetSection("DbType").Value; + InterfaceConnctionStr = InterfaceConfig.GetSection("Interface").GetSection("ConnectionStrings").Value; + + } + + protected DbConnection CreateInterfaceDbConnect() + { + DbConnection conn; + if (string.IsNullOrWhiteSpace(InterfaceConnctionStr)) + { + throw new ArgumentException("数据连接设置中的DbType不能为空"); + } + InterfaceDbType = InterfaceDbType.ToLower(); + if (InterfaceDbType == "sqlserver") + { + conn = new SqlConnection(InterfaceConnctionStr); + } + else if (InterfaceDbType == "postgres") + { + conn = new NpgsqlConnection(InterfaceConnctionStr); + } + else if (InterfaceDbType == "oracle") + { + conn = new OracleConnection(InterfaceConnctionStr); + } + else + { + throw new ArgumentException("数据连接设置中的DbType不支持"); + } + return conn; } } } diff --git a/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs b/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs new file mode 100644 index 00000000..5409bd35 --- /dev/null +++ b/src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs @@ -0,0 +1,114 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Shentun.Peis.Models; +using Shentun.Peis.PlugIns; +using Shentun.Peis.RegisterCheckItems; +using Shentun.Peis.RegisterChecks; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Guids; +using Volo.Abp.Identity; +using Volo.Abp.Users; + +namespace Shentun.Peis.ImportLisResults +{ + public class ImportLisResultAppService : ApplicationService + { + 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 _registerCheckSummaryRepository; + private readonly IRepository _registerCheckSuggestionRepository; + private readonly IRepository _userRepository; + 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; + + 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) + { + _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; + } + [HttpGet("api/app/ImportLisResult/ImportResult")] + public async Task ImportResultAsync(List input) + { + //设置结果 + + var list = (from registerCheck in await _registerCheckRepository.GetQueryableAsync() + 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 lisRequest in await _lisRequestRepository.GetQueryableAsync() + on registerCheckAsbitem.LisRequestId equals lisRequest.Id + where input.Select(o => o.LisRequestNo).ToList().Contains(lisRequest.LisRequestNo) + select new + { + registerCheck, + registerCheckAsbitem, + registerCheckItem, + lisRequest, + }).ToList(); + + var lisRequestNos = input.Select(o => o.LisRequestNo).Distinct().ToList(); + foreach(var inputItem in input) + { + var lisRequestItem = list.Where(o=>o.lisRequest.LisRequestNo == inputItem.LisRequestNo + && o.registerCheckItem.ItemId == new Guid(inputItem.ItemId)).FirstOrDefault(); + if(lisRequestItem == null) + { + continue; + } + + + } + //生成小结 + //保存小结 + + } + } +} diff --git a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs index 51fc8227..cd7ee06a 100644 --- a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs +++ b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs @@ -210,12 +210,12 @@ namespace Shentun.Peis.PatientRegisters /// /// 编辑反写接口,包含档案表跟登记表的信息 /// - /// 登记表ID + /// /// [HttpPost("api/app/patientregister/getinfoorpatient")] - public async Task GetInfoOrPatientAsync(Guid PatientRegisterId) + public async Task GetInfoOrPatientAsync(PatientRegisterIdInputDto input) { - var ent = (await _repository.GetDbSetAsync()).Include(x => x.Patient).Where(m => m.Id == PatientRegisterId).FirstOrDefault(); + var ent = (await _repository.GetDbSetAsync()).Include(x => x.Patient).Where(m => m.Id == input.PatientRegisterId).FirstOrDefault(); var entdto = new PatientRegisterOrNoDto(); if (ent != null) diff --git a/src/Shentun.Peis.Domain/CacheService.cs b/src/Shentun.Peis.Domain/CacheService.cs index 7e34aded..9fd9acc3 100644 --- a/src/Shentun.Peis.Domain/CacheService.cs +++ b/src/Shentun.Peis.Domain/CacheService.cs @@ -277,12 +277,13 @@ namespace Shentun.Peis public async Task GetCustomerOrgAsync(Guid id) { - - var entity = await _customerOrgCache.GetOrAddAsync( - id, //缓存键 - async () => await _customerOrgRepository.GetAsync(o => o.Id == id) - - ); + var entity = await _customerOrgCache.GetAsync(id); + if (entity == null) + { + entity = await _customerOrgRepository.GetAsync(o => o.Id == id); + _customerOrgCache.Set(id, entity); + } + return entity; } @@ -298,13 +299,13 @@ namespace Shentun.Peis public async Task GetTopCustomerOrgAsync(Guid id) { - - var entity = await _customerOrgCache.GetOrAddAsync( - id, //缓存键 - async () => await _customerOrgRepository.GetAsync(o => o.Id == id) - - ); - + var entity = await _customerOrgCache.GetAsync(id); + if(entity == null) + { + entity = await _customerOrgRepository.GetAsync(o => o.Id == id); + _customerOrgCache.Set(id, entity); + } + if (entity.ParentId != null && entity.ParentId != Guid.Empty) { entity = await GetTopCustomerOrgAsync((Guid)entity.ParentId); @@ -331,15 +332,18 @@ namespace Shentun.Peis /// /// 根据部门ID 按PathCode码查询单位名称 /// - /// + /// /// - private async Task GetTopCustomerOrgNameInCustomerOrgIdAsync(Guid CustomerOrgId) + private async Task GetTopCustomerOrgNameInCustomerOrgIdAsync(Guid id) { - var entity = await _customerOrgCache.GetOrAddAsync( - CustomerOrgId, //缓存键 - async () => await _customerOrgRepository.GetAsync(o => o.Id == CustomerOrgId) + var entity = await _customerOrgCache.GetAsync(id); + if (entity == null) + { + entity = await _customerOrgRepository.GetAsync(o => o.Id == id); + _customerOrgCache.Set(id, entity); + } - ); + if (entity.Id == GuidFlag.PersonCustomerOrgId) { return entity.DisplayName; diff --git a/test/Shentun.Peis.Application.Tests/PatientRegisterAppServiceTest.cs b/test/Shentun.Peis.Application.Tests/PatientRegisterAppServiceTest.cs index a37ab04f..3d5be807 100644 --- a/test/Shentun.Peis.Application.Tests/PatientRegisterAppServiceTest.cs +++ b/test/Shentun.Peis.Application.Tests/PatientRegisterAppServiceTest.cs @@ -643,5 +643,21 @@ namespace Shentun.Peis await unitOfWork.CompleteAsync(); } } + + [Fact] + public async Task GetInfoOrPatientAsync() + { + using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true)) + { + + var items = await _appService.GetInfoOrPatientAsync( + new PatientRegisterIdInputDto() + { + PatientRegisterId = new Guid("3a1216d1-4bd1-5f3b-6a40-903589b570b8"), + }); + + await unitOfWork.CompleteAsync(); + } + } } }