Browse Source

检验申请

bjmzak
DESKTOP-G961P6V\Zhh 2 years ago
parent
commit
2493ef5711
  1. 2
      src/Shentun.Peis.Application.Contracts/LisRequests/LisRequestDto.cs
  2. 154
      src/Shentun.Peis.Application/LisRequests/LisRequestAppService.cs
  3. 90
      src/Shentun.Peis.Domain/LisRequests/LisRequestManager.cs
  4. 22
      test/Shentun.Peis.Application.Tests/LisRequestAppServiceTest.cs
  5. 8
      test/Shentun.Peis.ColumnReference.Tests/ColumnReferencePlugInsTest.cs
  6. 63
      test/Shentun.Peis.Domain.Tests/LisRequestManagerTest.cs
  7. 4
      test/Shentun.Peis.EntityFrameworkCore.Tests/EntityFrameworkCore/PeisEntityFrameworkCoreTestModule.cs

2
src/Shentun.Peis.Application.Contracts/LisRequests/LisRequestDto.cs

@ -61,7 +61,7 @@ namespace Shentun.Peis.LisRequests
/// <summary>
/// 组合项目简称(多个“,”号隔开)
/// </summary>
public string AsbitemName { get; set; }
public string AsbitemNames { get; set; }
/// <summary>
/// 单位名称

154
src/Shentun.Peis.Application/LisRequests/LisRequestAppService.cs

@ -36,6 +36,8 @@ namespace Shentun.Peis.LisRequests
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
private readonly ILisRequestReportRepository _lisRequestReportRepository;
private readonly LisRequestManager _lisRequestManager;
private readonly IRepository<SampleGroup, Guid> _sampleGroupRepository;
private readonly IRepository<SampleGroupDetail> _sampleGroupDetailRepository;
private readonly CacheService _cacheService;
private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
private readonly CustomerOrgManager _customerOrgManager;
@ -54,7 +56,9 @@ namespace Shentun.Peis.LisRequests
IRepository<RegisterCheck, Guid> registerCheckRepository,
IRepository<Asbitem, Guid> asbitemRepository,
IRepository<SampleContainer, Guid> sampleContainerRepository,
IRepository<SampleType, Guid> sampleTypeRepository
IRepository<SampleType, Guid> sampleTypeRepository,
IRepository<SampleGroup, Guid> sampleGroupRepository,
IRepository<SampleGroupDetail> sampleGroupDetailRepository
)
{
this._userRepository = userRepository;
@ -70,6 +74,8 @@ namespace Shentun.Peis.LisRequests
_asbitemRepository = asbitemRepository;
_sampleContainerRepository = sampleContainerRepository;
_sampleTypeRepository = sampleTypeRepository;
_sampleGroupRepository = sampleGroupRepository;
_sampleGroupDetailRepository = sampleGroupDetailRepository;
}
[HttpPost("api/app/LisRequest/GetListInFilter")]
@ -182,7 +188,7 @@ namespace Shentun.Peis.LisRequests
SampleContainerName = patient.sampleContainer.DisplayName,
ContainerColor = patient.sampleContainer.ContainerColor,
SampleContainerRemark = patient.sampleContainer.ContainerRemark,
AsbitemName = string.Join(",", patientList.OrderBy(o=>o.asbitem.DisplayOrder).Select(o=> o.asbitem.DisplayName ).Distinct()),
AsbitemNames = string.Join(",", patientList.OrderBy(o=>o.asbitem.DisplayOrder).Select(o=> o.asbitem.DisplayName ).Distinct()),
CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(patient.patientRegister.CustomerOrgId).Result.DisplayName,
DepartmentName = _cacheService.GetCustomerOrgNameAsync(patient.patientRegister.CustomerOrgId).Result
};
@ -194,7 +200,151 @@ namespace Shentun.Peis.LisRequests
return result;
}
[HttpPost("api/app/LisRequest/GetListByFilter")]
public async Task<PagedResultDto<LisRequestDto>> GetListByFilterAsync(GetLisRequestListDto input)
{
//var customerOrgList = await _customerOrgRepository.GetListAsync();
//Stopwatch stopwatch = Stopwatch.StartNew();
//stopwatch.Start();
#region MyRegion
var patientRegisterQuery = (await _patientRegisterRepository.GetQueryableAsync()).Include(x => x.Patient).AsQueryable();
if (!string.IsNullOrEmpty(input.PatientNo))
patientRegisterQuery = patientRegisterQuery.Where(m => m.Patient.PatientNo == input.PatientNo);
if (!string.IsNullOrEmpty(input.IdNo))
patientRegisterQuery = patientRegisterQuery.Where(m => m.Patient.IdNo == input.IdNo);
if (!string.IsNullOrEmpty(input.PatientName))
patientRegisterQuery = patientRegisterQuery.Where(m => !string.IsNullOrEmpty(m.PatientName) && m.PatientName.Contains(input.PatientName));
if (!string.IsNullOrEmpty(input.PatientRegisterNo))
patientRegisterQuery = patientRegisterQuery.Where(m => m.PatientRegisterNo == input.PatientRegisterNo);
if (!string.IsNullOrEmpty(input.Phone))
patientRegisterQuery = patientRegisterQuery.Where(m => m.Patient.MobileTelephone == input.Phone || m.Patient.Telephone == input.Phone);
if (input.SexId != null && input.SexId != ForSexFlag.All)
patientRegisterQuery = patientRegisterQuery.Where(m => m.SexId == input.SexId);
if (input.EndDate == null)
input.EndDate = DateTime.Now;
if (input.StartDate != null && input.EndDate != null)
patientRegisterQuery = patientRegisterQuery.Where(m => m.CreationTime >= input.StartDate &&
m.CreationTime < ((DateTime)input.EndDate).AddDays(1));
if (input.CustomerOrgId != null)
{
var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(input.CustomerOrgId.Value);
patientRegisterQuery = patientRegisterQuery.Where(m => CustomerOrgIds.Contains(m.CustomerOrgId));
}
if (input.CustomerOrgRegisterId != null && input.CustomerOrgRegisterId != Guid.Empty)
{
patientRegisterQuery = patientRegisterQuery.Where(m => m.CustomerOrgRegisterId == input.CustomerOrgRegisterId);
}
patientRegisterQuery.Where(o => o.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration);
#endregion
int totalCount = patientRegisterQuery.Count();
patientRegisterQuery = patientRegisterQuery.Skip(input.SkipCount * input.MaxResultCount).Take(input.MaxResultCount);
var patientRegisterList = patientRegisterQuery.ToList();
if (patientRegisterList.Count > 10000)
{
throw new UserFriendlyException("选择的人员数不能超过1万条");
}
var sampleGroups = await _sampleGroupRepository.GetListAsync();
var _sampleGroupDetail = await _sampleGroupDetailRepository.GetListAsync();
var patientRegisterRequests = (
from patientRegister in patientRegisterQuery
join registerCheck in await _registerCheckRepository.GetQueryableAsync()
on patientRegister.Id equals registerCheck.PatientRegisterId
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
select new
{
patientRegister,
registerCheckAsbitem
}).ToList();
//生成LIS申请数据
var patientRegisters = patientRegisterRequests.Select(o=>o.patientRegister).Distinct().ToList();
var createLisRequestList = new List<LisRequest>();
var updateRegisterCheckAsbitemList = new List<RegisterCheckAsbitem>();
foreach (var patientRegister in patientRegisters)
{
var registerCheckAsbitems = patientRegisterRequests.Select(o=>o.registerCheckAsbitem)
.Where(o => o.PatientRegisterId == patientRegister.Id).Distinct().ToList();
_lisRequestManager.Create(patientRegister, registerCheckAsbitems, sampleGroups, _sampleGroupDetail
, out var updateRegisterCheckAsbitems, out var createLisRequests);
createLisRequestList.AddRange(createLisRequests);
updateRegisterCheckAsbitemList.AddRange(updateRegisterCheckAsbitems);
}
await _lisRequestReportRepository.InsertManyAsync(createLisRequestList,true);
await _registerCheckAsbitemRepository.UpdateManyAsync(updateRegisterCheckAsbitemList, true);
//返回检索到的数据
var list = (from patient in await _patientRepository.GetQueryableAsync()
join patientRegister in patientRegisterQuery
on patient.Id equals patientRegister.PatientId
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 asbitem in await _asbitemRepository.GetQueryableAsync()
on registerCheckAsbitem.AsbitemId equals asbitem.Id
join lisRequest in await _lisRequestReportRepository.GetQueryableAsync()
on registerCheckAsbitem.LisRequestId equals lisRequest.Id
join sampleContainer in await _sampleContainerRepository.GetQueryableAsync()
on lisRequest.SampleContainerId equals sampleContainer.Id
join sampleType in await _sampleTypeRepository.GetQueryableAsync()
on lisRequest.SampleTypeId equals sampleType.Id
select new
{
patient,
patientRegister,
asbitem,
lisRequest,
sampleContainer,
sampleType
}).ToList();
var lisRequestIds = list.Select(o => new { Id = o.lisRequest.Id }).Distinct().ToList();
var lisRequestDtoList = new List<LisRequestDto>();
foreach (var lisRequestId in lisRequestIds)
{
var patientList = list.Where(o => o.lisRequest.Id == lisRequestId.Id).Distinct().ToList();
var patient = patientList.First();
var lisRequestDto = new LisRequestDto()
{
Id = lisRequestId.Id,
LisRequestNo = patient.lisRequest.LisRequestNo,
PatientNo = patient.patient.PatientNo,
PatientRegisterNo = patient.patientRegister.PatientRegisterNo,
PatientName = patient.patientRegister.PatientName,
SexName = _cacheService.GetSexNameAsync(patient.patientRegister.SexId).Result,
Age = patient.patientRegister.Age,
SampleTypeName = patient.sampleType.DisplayName,
SampleContainerName = patient.sampleContainer.DisplayName,
ContainerColor = patient.sampleContainer.ContainerColor,
SampleContainerRemark = patient.sampleContainer.ContainerRemark,
AsbitemNames = string.Join(",", patientList.OrderBy(o => o.asbitem.DisplayOrder).Select(o => o.asbitem.DisplayName).Distinct()),
CustomerOrgName = _cacheService.GetTopCustomerOrgAsync(patient.patientRegister.CustomerOrgId).Result.DisplayName,
DepartmentName = _cacheService.GetCustomerOrgNameAsync(patient.patientRegister.CustomerOrgId).Result
};
lisRequestDtoList.Add(lisRequestDto);
}
lisRequestDtoList = lisRequestDtoList.OrderBy(o => o.PatientNo).ToList();
var result = new PagedResultDto<LisRequestDto>(patientRegisterList.Count, lisRequestDtoList);
return result;
}
/// <summary>
/// 生成检验申请单 首次自动生成
/// </summary>

90
src/Shentun.Peis.Domain/LisRequests/LisRequestManager.cs

@ -59,12 +59,84 @@ namespace Shentun.Peis.LisRequests
.Where(m => m.PatientRegisterId == PatientRegisterId && m.LisRequestId == null)
.ToList();
var registerCheckAsbitems = registerCheckAsbitemList.Select(o=>o.Id).ToList();
var registerCheckAsbitems = registerCheckAsbitemList.Select(o => o.Id).ToList();
lisRequests = await AddLisRequestAsync(registerCheckAsbitems);
return lisRequests;
}
public void Create(PatientRegister patientRegister,
List<RegisterCheckAsbitem> registerCheckAsbitems,
List<SampleGroup> sampleGroups,
List<SampleGroupDetail> sampleGroupDetails,
out List<RegisterCheckAsbitem> updateRegisterCheckAsbitems,
out List<LisRequest> createLisRequests)
{
var registerCheckAsbitemLisList = new List<RegisterCheckAsbitemLis>();
updateRegisterCheckAsbitems = new List<RegisterCheckAsbitem>();
foreach (var registerCheckAsbitem in registerCheckAsbitems)
{
var sampleGroupDetail = sampleGroupDetails.Where(o => o.AsbitemId == registerCheckAsbitem.AsbitemId).FirstOrDefault();
if (sampleGroupDetail != null)
{
registerCheckAsbitemLisList.Add(new RegisterCheckAsbitemLis()
{
RegisterCheckAsbitemId = registerCheckAsbitem.Id,
SampleGroupId = sampleGroupDetail.SampleGroupId,
LisRequestId = registerCheckAsbitem.LisRequestId,
});
}
}
//未设置的申请单设置到相同分组的已有申请单
var noRequestCheckAsbitems = registerCheckAsbitems.Where(o=>o.LisRequestId == null || o.LisRequestId == Guid.Empty).ToList();
foreach(var registerCheckAsbitem in noRequestCheckAsbitems)
{
var registerCheckAsbitemLis = registerCheckAsbitemLisList.Where(o => o.RegisterCheckAsbitemId == registerCheckAsbitem.Id).SingleOrDefault();
if (registerCheckAsbitemLis == null)
{
continue;
}
var haveRegisterCheckAsbitemLis = registerCheckAsbitemLisList.Where(o => o.SampleGroupId == registerCheckAsbitemLis.SampleGroupId
&& o.LisRequestId != null && o.LisRequestId != Guid.Empty).SingleOrDefault();
if( haveRegisterCheckAsbitemLis != null)
{
registerCheckAsbitem.LisRequestId = haveRegisterCheckAsbitemLis.LisRequestId;
updateRegisterCheckAsbitems.Add(registerCheckAsbitem);
}
}
//未设置的项目重新设置申请单
noRequestCheckAsbitems = registerCheckAsbitems.Where(o => o.LisRequestId == null || o.LisRequestId == Guid.Empty).ToList();
var noRequestLisList = registerCheckAsbitemLisList.Where(o => noRequestCheckAsbitems.Select(o => o.Id).Contains(o.RegisterCheckAsbitemId)).ToList();
var sampleGroupids = noRequestLisList.Select(o => o.SampleGroupId).Distinct();
createLisRequests = new List<LisRequest>();
foreach ( var sampleGroupid in sampleGroupids)
{
var sampleGroup = sampleGroups.Where(o => o.Id == sampleGroupid).Single();
//var guid = GuidGenerator.Create();
var lisRequest = new LisRequest(GuidGenerator.Create())
{
IsPrint = 'N',
IsSignIn = 'N',
LisRequestNo = CreateLisRequestNo(patientRegister.MedicalCenterId).Result,
SampleContainerId = sampleGroup.SampleContainerId,
SampleTypeId = sampleGroup.SampleTypeId
};
createLisRequests.Add(lisRequest);
foreach (var requestLis in noRequestLisList)
{
if(requestLis.SampleGroupId == sampleGroupid)
{
requestLis.LisRequestId = lisRequest.Id;
var registerCheckAsbitem = noRequestCheckAsbitems.Where(o => o.Id == requestLis.RegisterCheckAsbitemId).Single();
registerCheckAsbitem.LisRequestId = lisRequest.Id;
updateRegisterCheckAsbitems.Add(registerCheckAsbitem);
}
}
}
}
/// <summary>
/// 追加项目到检验单 如lisrequest内有项目完成体检或者弃检 不允许追加
@ -203,7 +275,7 @@ namespace Shentun.Peis.LisRequests
lis_request_no_rule_coding = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "lis_request_no_rule_coding");
lis_request_no_rule_tail_len = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "lis_request_no_rule_tail_len");
lis_request_no_rule_prefix = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "lis_request_no_rule_prefix");
if(string.IsNullOrWhiteSpace(lis_request_no_rule_coding))
if (string.IsNullOrWhiteSpace(lis_request_no_rule_coding))
{
throw new UserFriendlyException("LIS编码方式不能为空");
}
@ -212,11 +284,11 @@ namespace Shentun.Peis.LisRequests
throw new UserFriendlyException("LIS编码尾号长度不能为空");
}
int tailLen = 0;
if(!int.TryParse(lis_request_no_rule_tail_len, out tailLen))
if (!int.TryParse(lis_request_no_rule_tail_len, out tailLen))
{
throw new UserFriendlyException("LIS编码尾号长度不能为空");
}
if(tailLen < 3)
if (tailLen < 3)
{
throw new UserFriendlyException("LIS编码尾号长度至少为3位");
}
@ -306,5 +378,13 @@ namespace Shentun.Peis.LisRequests
return LisRequestNo;
}
private class RegisterCheckAsbitemLis
{
public Guid RegisterCheckAsbitemId { get; set; }
public Guid SampleGroupId { get; set; }
public Guid? LisRequestId { get; set; }
}
}
}

22
test/Shentun.Peis.Application.Tests/LisRequestAppServiceTest.cs

@ -44,7 +44,27 @@ namespace Shentun.Peis
});
foreach (var item in pagedResultDto.Items)
{
_output.WriteLine(item.PatientName + "," + item.AsbitemName);
_output.WriteLine(item.PatientName + "," + item.AsbitemNames);
}
await unitOfWork.CompleteAsync();
}
}
[Fact]
public async Task GetListByFilterAsync()
{
using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
{
PagedResultDto<LisRequestDto> pagedResultDto = await _appService.GetListByFilterAsync(new GetLisRequestListDto()
{
StartDate = DateTime.Now.Date.AddDays(-30),
MaxResultCount = 1000
});
foreach (var item in pagedResultDto.Items)
{
_output.WriteLine(item.PatientName + "," + item.AsbitemNames);
}
await unitOfWork.CompleteAsync();

8
test/Shentun.Peis.ColumnReference.Tests/ColumnReferencePlugInsTest.cs

@ -50,5 +50,13 @@ namespace Shentun.Peis.PlugIns.Tests
}
}
[Fact]
public void GetPYSimpleCode()
{
var simpleCode = LanguageConverter.GetPYSimpleCode("血常规5项");
_output.WriteLine(simpleCode);
}
}
}

63
test/Shentun.Peis.Domain.Tests/LisRequestManagerTest.cs

@ -0,0 +1,63 @@
using NPOI.SS.Formula.Functions;
using Shentun.Peis.CardRegisters;
using Shentun.Peis.Enums;
using Shentun.Peis.IncludeDetails;
using Shentun.Peis.LisRequests;
using Shentun.Peis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Uow;
using Xunit;
using Xunit.Abstractions;
namespace Shentun.Peis
{
public class LisRequestManagerTest : PeisDomainTestBase
{
private readonly IRepository<LisRequest, Guid> _repository;
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
private readonly IRepository<SampleGroup, Guid> _sampleGroupRepository;
private readonly IRepository<SampleGroupDetail> _sampleGroupDetailRepository;
private readonly LisRequestManager _manager;
private readonly ITestOutputHelper _output;
private readonly IUnitOfWorkManager _unitOfWorkManager;
public LisRequestManagerTest(ITestOutputHelper output)
{
_output = output;
_repository = GetRequiredService<IRepository<LisRequest, Guid>>();
_patientRegisterRepository = GetRequiredService<IRepository<PatientRegister, Guid>>();
_registerCheckAsbitemRepository = GetRequiredService<IRepository<RegisterCheckAsbitem, Guid>>();
_sampleGroupRepository = GetRequiredService<IRepository<SampleGroup, Guid>>();
_sampleGroupDetailRepository = GetRequiredService<IRepository<SampleGroupDetail>>();
_manager = GetRequiredService<LisRequestManager>();
_unitOfWorkManager = GetRequiredService<IUnitOfWorkManager>();
}
[Fact]
public async Task Create()
{
using (IUnitOfWork unitOfWork = _unitOfWorkManager.Begin())
{
var patientRegister = await _patientRegisterRepository.GetAsync(new Guid("3a11ee70-02cb-c5e6-a087-79ecdd0356b6"));
var registerCheckAsbitems = await _registerCheckAsbitemRepository.GetListAsync(o => o.PatientRegisterId == patientRegister.Id);
var sampleGroups = await _sampleGroupRepository.GetListAsync();
var _sampleGroupDetail = await _sampleGroupDetailRepository.GetListAsync();
_manager.Create(patientRegister, registerCheckAsbitems, sampleGroups, _sampleGroupDetail
,out var updateRegisterCheckAsbitems,out var createLisRequests);
await _repository.InsertManyAsync(createLisRequests);
await _registerCheckAsbitemRepository.UpdateManyAsync(updateRegisterCheckAsbitems);
await unitOfWork.CompleteAsync();
}
}
}
}

4
test/Shentun.Peis.EntityFrameworkCore.Tests/EntityFrameworkCore/PeisEntityFrameworkCoreTestModule.cs

@ -40,8 +40,8 @@ public class PeisEntityFrameworkCoreTestModule : AbpModule
}
private void ConfigurePostGress(IServiceCollection services)
{
//string connectStr = "Host=140.143.162.39;Port=5432;Database=ShentunPeis070703;User ID=postgres;Password=shentun123";
string connectStr = "Host=10.1.12.140;Port=5432;Database=ShentunPeis;User ID=postgres;Password=st123;";
string connectStr = "Host=140.143.162.39;Port=5432;Database=ShentunPeis070703;User ID=postgres;Password=shentun123";
//string connectStr = "Host=10.1.12.140;Port=5432;Database=ShentunPeis;User ID=postgres;Password=st123;";
services.Configure<AbpDbContextOptions>(options =>
{

Loading…
Cancel
Save