Browse Source

体检登记

bjmzak
DESKTOP-G961P6V\Zhh 2 years ago
parent
commit
e06d4fd1c5
  1. 19
      ThirdPlugIns/Shentun.Peis.PlugIns.Gem/LisResultImportPlugInsGem.cs
  2. 31
      src/Shentun.ColumnReferencePlugIns/ColumnReferencePlugInsDbBase.cs
  3. 22
      src/Shentun.ColumnReferencePlugIns/LisRequestForResultImportPlugIns.cs
  4. 4
      src/Shentun.ColumnReferencePlugIns/LisRequestPlugInsBase.cs
  5. 68
      src/Shentun.ColumnReferencePlugIns/LisResult.cs
  6. 48
      src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsBase.cs
  7. 41
      src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsDbBase.cs
  8. 14
      src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsInput.cs
  9. 12
      src/Shentun.ColumnReferencePlugIns/LisResultImportPlugInsOut.cs
  10. 42
      src/Shentun.ColumnReferencePlugIns/PlugInsBase.cs
  11. 114
      src/Shentun.Peis.Application/ImportLisResults/ImportLisResultAppService.cs
  12. 6
      src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs
  13. 42
      src/Shentun.Peis.Domain/CacheService.cs
  14. 16
      test/Shentun.Peis.Application.Tests/PatientRegisterAppServiceTest.cs

19
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<LisResultImportPlugInsOut> ImportResult(LisResultImportPlugInsInput input)
{
return base.ImportResult(input);
}
}
}

31
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<List<ColumnReferenceCodeValue>> GetInterfaceCodeValuesAsync()
{

22
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
{
/// <summary>
/// LisRequest的ID
/// </summary>
public Guid LisRequestId { get; set; }
/// <summary>
/// 检验申请单号
/// </summary>
public string LisRequestNo { get; set; }
}
}

4
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))
{

68
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; }
/// 项目编号
/// </summary>
public string ItemId { get; set; }
/// <summary>
/// 项目名称
/// </summary>
public string ItemName { get; set; }
/// <summary>
/// 结果
/// </summary>
public string? Result { get; set; }
/// <summary>
/// 单位
/// </summary>
public string? Unit { get; set; }
/// <summary>
/// 参考范围
/// </summary>
public string? ReferenceRangeValue { get; set; }
/// <summary>
/// 危急值范围
/// </summary>
public string? CriticalRangeValue { get; set; }
/// <summary>
/// 危急值
/// </summary>
public string? CriticalValue { get; set; }
/// <summary>
/// 报告单状态
/// </summary>
public string? ResultStatusId { get; set; } = "01";//01-正常
/// <summary>
/// 报告单提示
/// </summary>
public string ReportPrompt { get; set; }
/// <summary>
/// 检查医生
/// </summary>
public string? CheckDoctorName { get; set; }
/// <summary>
/// 检查日期
/// </summary>
public DateTime? CheckDate { get; set; }
public Guid ExecOrganizationUnitId { get; set; }
}
}

48
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<LisResultImportPlugInsOut> ImportResult(LisResultImportPlugInsInput input)
{
var result = new LisResultImportPlugInsOut();
return result;
}
public async Task<List<LisRequestForResultImportPlugIns>> 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<LisRequestForResultImportPlugIns>(sql)).ToList();
return lisRequestForResultImportPlugInss;
}
}
}
}

41
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<LisResultImportPlugInsOut> ImportResult(LisResultImportPlugInsInput input)
{
var lisRequests = await GetLisRequestForResultImportPlugInssAsync(input.PatientRegisterId);
using (DbConnection conn = CreateInterfaceDbConnect())
{
var list = (await conn.QueryAsync<LisResult>(InterfaceSql)).ToList();
//设置结果,生成小结
foreach (var item in list)
{
}
}
return new LisResultImportPlugInsOut();
}
}
}

14
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; }
}
}

12
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
{
}
}

42
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;
}
}
}

114
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<RegisterCheckItem> _registerCheckItemRepository;
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
private readonly IRepository<ReferenceRange, Guid> _referenceRangeRepository;
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
private readonly IRepository<LisRequest, Guid> _lisRequestRepository;
private readonly IRepository<RegisterCheckSummary, Guid> _registerCheckSummaryRepository;
private readonly IRepository<RegisterCheckSuggestion, Guid> _registerCheckSuggestionRepository;
private readonly IRepository<IdentityUser, Guid> _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<UserItemType> _userItemTypeRepository;
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
public ImportLisResultAppService(IRepository<RegisterCheck, Guid> registerCheckRepository,
IRepository<RegisterCheckItem> registerCheckItemRepository,
IRepository<PatientRegister, Guid> patientRegisterRepository,
IRepository<ReferenceRange, Guid> referenceRangeRepository,
IRepository<RegisterCheckSummary, Guid> registerCheckSummaryRepository,
IRepository<RegisterCheckSuggestion, Guid> registerCheckSuggestionRepository,
IRepository<IdentityUser, Guid> userRepository,
RegisterCheckManager registerCheckManager,
RegisterCheckItemManager registerCheckItemManager,
CacheService cacheService,
IGuidGenerator guidGenerator,
IConfiguration configuration,
ICurrentUser currentUser,
IRepository<UserItemType> userItemTypeRepository,
IRepository<Asbitem, Guid> asbitemRepository,
IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
IRepository<LisRequest, Guid> 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<LisResult> 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;
}
}
//生成小结
//保存小结
}
}
}

6
src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs

@ -210,12 +210,12 @@ namespace Shentun.Peis.PatientRegisters
/// <summary>
/// 编辑反写接口,包含档案表跟登记表的信息
/// </summary>
/// <param name="PatientRegisterId">登记表ID</param>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/patientregister/getinfoorpatient")]
public async Task<PatientRegisterOrNoDto> GetInfoOrPatientAsync(Guid PatientRegisterId)
public async Task<PatientRegisterOrNoDto> 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)

42
src/Shentun.Peis.Domain/CacheService.cs

@ -277,12 +277,13 @@ namespace Shentun.Peis
public async Task<CustomerOrg> 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<CustomerOrg> 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
/// <summary>
/// 根据部门ID 按PathCode码查询单位名称
/// </summary>
/// <param name="CustomerOrgId"></param>
/// <param name="id"></param>
/// <returns></returns>
private async Task<string> GetTopCustomerOrgNameInCustomerOrgIdAsync(Guid CustomerOrgId)
private async Task<string> 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;

16
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();
}
}
}
}
Loading…
Cancel
Save