You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
826 lines
44 KiB
826 lines
44 KiB
using Azure;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Query.Internal;
|
|
using Org.BouncyCastle.Asn1.Ocsp;
|
|
using Shentun.Peis.CustomerOrgs;
|
|
using Shentun.Peis.Enums;
|
|
using Shentun.Peis.Models;
|
|
using Shentun.Peis.PatientRegisters;
|
|
using Shentun.Peis.PrintReports;
|
|
using Shentun.Peis.SysParmValues;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Xml.Linq;
|
|
using Volo.Abp;
|
|
using Volo.Abp.Application.Dtos;
|
|
using Volo.Abp.Application.Services;
|
|
using Volo.Abp.Domain.Repositories;
|
|
using Volo.Abp.Identity;
|
|
using Volo.Abp.Uow;
|
|
using Volo.Abp.Users;
|
|
|
|
namespace Shentun.Peis.LisRequests
|
|
{
|
|
/// <summary>
|
|
/// 检验申请单
|
|
/// </summary>
|
|
[ApiExplorerSettings(GroupName = "Work")]
|
|
[Authorize]
|
|
public class LisRequestAppService : ApplicationService
|
|
{
|
|
private readonly IRepository<IdentityUser, Guid> _userRepository;
|
|
private readonly IRepository<Patient, Guid> _patientRepository;
|
|
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
|
|
private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
|
|
private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
|
|
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
|
|
private readonly IRepository<ItemType, Guid> _itemTypeRepository;
|
|
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;
|
|
private readonly IRepository<SampleContainer, Guid> _sampleContainerRepository;
|
|
private readonly IRepository<SampleType, Guid> _sampleTypeRepository;
|
|
private readonly IRepository<LisRequest, Guid> _lisRequestRepository;
|
|
private readonly SysParmValueManager _sysParmValueManager;
|
|
private readonly IUnitOfWorkManager _unitOfWorkManager;
|
|
private readonly ICurrentUser _currentUser;
|
|
public LisRequestAppService(
|
|
IRepository<IdentityUser, Guid> userRepository,
|
|
IRepository<PatientRegister, Guid> patientRegisterRepository,
|
|
IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
|
|
ILisRequestReportRepository lisRequestReportRepository,
|
|
IRepository<CustomerOrg, Guid> customerOrgRepository,
|
|
LisRequestManager lisRequestManager,
|
|
CacheService cacheService,
|
|
CustomerOrgManager customerOrgManager,
|
|
IRepository<Patient, Guid> patientRepository,
|
|
IRepository<RegisterCheck, Guid> registerCheckRepository,
|
|
IRepository<Asbitem, Guid> asbitemRepository,
|
|
IRepository<SampleContainer, Guid> sampleContainerRepository,
|
|
IRepository<SampleType, Guid> sampleTypeRepository,
|
|
IRepository<SampleGroup, Guid> sampleGroupRepository,
|
|
IRepository<SampleGroupDetail> sampleGroupDetailRepository,
|
|
IRepository<ItemType, Guid> itemTypeRepository,
|
|
IRepository<LisRequest, Guid> lisRequestRepository,
|
|
SysParmValueManager sysParmValueManager,
|
|
IUnitOfWorkManager unitOfWorkManager,
|
|
ICurrentUser currentUser)
|
|
{
|
|
this._userRepository = userRepository;
|
|
this._patientRegisterRepository = patientRegisterRepository;
|
|
this._registerCheckAsbitemRepository = registerCheckAsbitemRepository;
|
|
this._lisRequestReportRepository = lisRequestReportRepository;
|
|
this._lisRequestManager = lisRequestManager;
|
|
_cacheService = cacheService;
|
|
_customerOrgRepository = customerOrgRepository;
|
|
_customerOrgManager = customerOrgManager;
|
|
_patientRepository = patientRepository;
|
|
_registerCheckRepository = registerCheckRepository;
|
|
_asbitemRepository = asbitemRepository;
|
|
_sampleContainerRepository = sampleContainerRepository;
|
|
_sampleTypeRepository = sampleTypeRepository;
|
|
_sampleGroupRepository = sampleGroupRepository;
|
|
_sampleGroupDetailRepository = sampleGroupDetailRepository;
|
|
_itemTypeRepository = itemTypeRepository;
|
|
_lisRequestRepository = lisRequestRepository;
|
|
_sysParmValueManager = sysParmValueManager;
|
|
_unitOfWorkManager = unitOfWorkManager;
|
|
_currentUser = currentUser;
|
|
}
|
|
|
|
[HttpPost("api/app/LisRequest/GetListInFilter")]
|
|
public async Task<PagedResultDto<LisRequestDto>> GetListInFilterAsync(GetLisRequestListDto input)
|
|
{
|
|
//var customerOrgList = await _customerOrgRepository.GetListAsync();
|
|
|
|
//Stopwatch stopwatch = Stopwatch.StartNew();
|
|
//stopwatch.Start();
|
|
throw new UserFriendlyException("接口已禁止");
|
|
#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万条");
|
|
}
|
|
//生成LIS申请数据
|
|
foreach (var patientRegister in patientRegisterList)
|
|
{
|
|
var lisRequests = await _lisRequestManager.SetLisRequestAsync(patientRegister.Id);
|
|
}
|
|
//返回检索到的数据
|
|
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;
|
|
}
|
|
|
|
[HttpPost("api/app/LisRequest/GetListByFilter")]
|
|
public async Task<PagedResultDto<LisRequestDto>> GetListByFilterAsync(GetLisRequestListDto input)
|
|
{
|
|
throw new UserFriendlyException("禁止启用");
|
|
//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 &&
|
|
o.CompleteFlag != PatientRegisterCompleteFlag.SumCheck);
|
|
#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
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync()
|
|
on registerCheckAsbitem.AsbitemId equals asbitem.Id
|
|
join itemType in await _itemTypeRepository.GetQueryableAsync()
|
|
on asbitem.ItemTypeId equals itemType.Id
|
|
where itemType.CheckTypeFlag == CheckTypeFlag.Laboratory &&
|
|
registerCheck.CompleteFlag == RegisterCheckCompleteFlag.UnChecked
|
|
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.SetLisRequest(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 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
|
|
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
|
|
{
|
|
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.patientRegister.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>
|
|
/// <param name="patientRegisterId">人员登记ID</param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/LisRequest/SetLisRequest")]
|
|
[RemoteService(false)]
|
|
public async Task<List<LisRequestDto>> SetLisRequestAsync(PatientRegisterIdInputDto input)
|
|
{
|
|
var entlist = await _lisRequestManager.SetLisRequestAsync(input.PatientRegisterId);
|
|
|
|
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 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
|
|
where patientRegister.Id == input.PatientRegisterId
|
|
select new
|
|
{
|
|
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.patientRegister.Patient.PatientNo,
|
|
PatientRegisterNo = patient.patientRegister.PatientRegisterNo,
|
|
PatientName = patient.patientRegister.PatientName,
|
|
SexName = _cacheService.GetSexNameAsync(patient.patientRegister.SexId).Result,
|
|
Age = patient.patientRegister.Age,
|
|
IsPrint = patient.lisRequest.IsPrint,
|
|
IsSignIn = patient.lisRequest.IsSignIn,
|
|
SamplingTime = patient.lisRequest.SamplingTime,
|
|
SignInOrder = patient.lisRequest.SignInOrder,
|
|
SignInPerson = patient.lisRequest.SignInPerson,
|
|
SignInTime = patient.lisRequest.SignInTime,
|
|
|
|
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();
|
|
|
|
|
|
return lisRequestDtoList;
|
|
}
|
|
|
|
[HttpPost("api/app/LisRequest/GetLisRequestByPatientRegisterId")]
|
|
public async Task<LisRequestDto> GetLisRequestByPatientRegisterIdAsync(LisRequestIdInputDto 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 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
|
|
where lisRequest.Id == input.LisRequestId
|
|
select new
|
|
{
|
|
patientRegister,
|
|
asbitem,
|
|
lisRequest,
|
|
sampleContainer,
|
|
sampleType
|
|
|
|
}).Distinct().ToList();
|
|
if (!list.Any())
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var lisRequestDtoList = new List<LisRequestDto>();
|
|
var patient = list.First();
|
|
var lisRequestDto = new LisRequestDto()
|
|
{
|
|
Id = input.LisRequestId,
|
|
LisRequestNo = patient.lisRequest.LisRequestNo,
|
|
PatientNo = patient.patientRegister.Patient.PatientNo,
|
|
PatientRegisterNo = patient.patientRegister.PatientRegisterNo,
|
|
PatientName = patient.patientRegister.PatientName,
|
|
SexName = _cacheService.GetSexNameAsync(patient.patientRegister.SexId).Result,
|
|
Age = patient.patientRegister.Age,
|
|
IsPrint = patient.lisRequest.IsPrint,
|
|
IsSignIn = patient.lisRequest.IsSignIn,
|
|
SamplingTime = patient.lisRequest.SamplingTime,
|
|
SignInOrder = patient.lisRequest.SignInOrder,
|
|
SignInPerson = patient.lisRequest.SignInPerson,
|
|
SignInTime = patient.lisRequest.SignInTime,
|
|
|
|
SampleTypeName = patient.sampleType.DisplayName,
|
|
SampleContainerName = patient.sampleContainer.DisplayName,
|
|
ContainerColor = patient.sampleContainer.ContainerColor,
|
|
SampleContainerRemark = patient.sampleContainer.ContainerRemark,
|
|
AsbitemNames = string.Join(",", list.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
|
|
};
|
|
|
|
|
|
return lisRequestDto;
|
|
}
|
|
/// <summary>
|
|
/// 追加项目到检验单 如lisrequest内有项目完成体检或者弃检 不允许追加
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="UserFriendlyException"></exception>
|
|
[HttpPost("api/app/LisRequest/AppendLisRequestMany")]
|
|
public async Task AppendLisRequestManyAsync(List<AppendLisRequestDto> input)
|
|
{
|
|
if (input.Any())
|
|
{
|
|
foreach (var item in input)
|
|
{
|
|
await _lisRequestManager.AppendLisRequestAsync(item.LisRequestId, item.RegisterCheckAsbitemIds);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
throw new UserFriendlyException("请选择登记的组合项目");
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 追加项目到检验单 生成新的条码号
|
|
/// </summary>
|
|
/// <param name="RegisterAsbitemIds">RegisterAsbitem表Id</param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/LisRequest/AddLisRequest")]
|
|
public async Task AddLisRequestAsync(List<Guid> RegisterAsbitemIds)
|
|
{
|
|
if (RegisterAsbitemIds.Any())
|
|
{
|
|
var lisRequests = await _lisRequestManager.AddLisRequestAsync(RegisterAsbitemIds);
|
|
}
|
|
else
|
|
{
|
|
throw new UserFriendlyException("请选择登记的组合项目");
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取人员登记下的组合项目申请的检验申请号记录
|
|
/// </summary>
|
|
/// <param name="PatientRegisterId"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/LisRequest/GetRegisterAsbitemLisRequest")]
|
|
public async Task<List<RegisterAsbitemLisRequestDto>> GetRegisterAsbitemLisRequestAsync(Guid PatientRegisterId)
|
|
{
|
|
return await _lisRequestReportRepository.GetRegisterAsbitemLisRequestAsync(PatientRegisterId);
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 修改LisRequest表打印状态
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/LisRequest/UpdateLisRequestIsPrint")]
|
|
public async Task UpdateLisRequestIsPrintAsync(UpdateLisRequestIsPrintDto input)
|
|
{
|
|
if (input.OperateType == 1)
|
|
{
|
|
var _patientRegister = await _patientRegisterRepository.GetAsync((Guid)input.PatientRegisterId);
|
|
if (_patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
|
|
{
|
|
throw new UserFriendlyException("未正式登记,不能打印");
|
|
}
|
|
//按人员登记批量修改
|
|
var LisRequestIds = (await _registerCheckAsbitemRepository.GetListAsync(m => m.PatientRegisterId == input.PatientRegisterId && m.LisRequestId != null)).Select(s => s.LisRequestId);
|
|
if (LisRequestIds.Count() > 0)
|
|
{
|
|
var oldlist = await _lisRequestReportRepository.GetListAsync(m => LisRequestIds.Contains(m.Id));
|
|
if (oldlist.Count > 0)
|
|
{
|
|
oldlist.ForEach(f => f.IsPrint = 'Y');
|
|
await _lisRequestReportRepository.UpdateManyAsync(oldlist);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
//按lisrequestid修改
|
|
var oldent = await _lisRequestReportRepository.FirstOrDefaultAsync(m => m.Id == input.LisRequestId);
|
|
if (oldent != null)
|
|
{
|
|
var registerAsbitem = (await _registerCheckAsbitemRepository.GetListAsync(o => o.LisRequestId == input.LisRequestId)).FirstOrDefault();
|
|
var _patientRegister = await _patientRegisterRepository.GetAsync(registerAsbitem.PatientRegisterId);
|
|
if (_patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
|
|
{
|
|
throw new UserFriendlyException("未正式登记,不能打印");
|
|
}
|
|
|
|
oldent.IsPrint = 'Y';
|
|
|
|
await _lisRequestReportRepository.UpdateAsync(oldent);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 根据检验单号返回信息给Lis系统
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/LisRequest/GetPatientRegisterByLisRequestNo")]
|
|
public async Task<LisPatientRegisterDto> GetLisPatientRegisterByLisRequestNoAsync(LisRequestNoInputDto input)
|
|
{
|
|
if (input == null)
|
|
throw new UserFriendlyException("请求参数无效");
|
|
|
|
var lisRequestNoPrintMode = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "lis_request_no_print_mode");
|
|
if (string.IsNullOrWhiteSpace(lisRequestNoPrintMode))
|
|
lisRequestNoPrintMode = "0";
|
|
|
|
|
|
Guid patientRegisterId;
|
|
if (lisRequestNoPrintMode == "0")
|
|
{
|
|
patientRegisterId = (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 lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id
|
|
where lisRequest.LisRequestNo == input.LisRequestNo
|
|
select patientRegister.Id).FirstOrDefault();
|
|
}
|
|
else
|
|
{
|
|
patientRegisterId = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
where patientRegister.PatientRegisterNo == input.LisRequestNo
|
|
select patientRegister.Id).FirstOrDefault();
|
|
}
|
|
|
|
if (patientRegisterId == Guid.Empty)
|
|
{
|
|
throw new UserFriendlyException("条码不正确");
|
|
}
|
|
|
|
//生成LIS条码
|
|
var lisRequests = await _lisRequestManager.SetLisRequestAsync(patientRegisterId);
|
|
await _unitOfWorkManager.Current.SaveChangesAsync();
|
|
await _unitOfWorkManager.Current.CompleteAsync();
|
|
|
|
using (var uow = _unitOfWorkManager.Begin(
|
|
requiresNew: false, isTransactional: false
|
|
))
|
|
{
|
|
if (lisRequestNoPrintMode == "0")
|
|
{
|
|
|
|
var query = (from lisRequest in await _lisRequestRepository.GetQueryableAsync()
|
|
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on lisRequest.Id equals registerCheckAsbitem.LisRequestId
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() on registerCheckAsbitem.RegisterCheckId equals registerCheck.Id
|
|
join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on registerCheck.PatientRegisterId equals patientRegister.Id
|
|
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
|
|
where lisRequest.LisRequestNo == input.LisRequestNo
|
|
select new
|
|
{
|
|
lisRequest,
|
|
registerCheckAsbitem,
|
|
asbitem,
|
|
registerCheck,
|
|
patientRegister,
|
|
patient
|
|
}).ToList();
|
|
|
|
if (query.Count == 0)
|
|
{
|
|
throw new UserFriendlyException("检验单号不存在");
|
|
}
|
|
|
|
var patientRegisterGroup = query.GroupBy(g => g.patientRegister);
|
|
|
|
var resultDto = new LisPatientRegisterDto
|
|
{
|
|
Age = patientRegisterGroup.FirstOrDefault().Key.Age,
|
|
LisRequestNo = input.LisRequestNo,
|
|
PatientName = patientRegisterGroup.FirstOrDefault().Key.PatientName,
|
|
SexName = _cacheService.GetSexNameAsync(patientRegisterGroup.FirstOrDefault().Key.SexId).Result,
|
|
SampleTypeName = _cacheService.GetSampleTypeNameAsync(patientRegisterGroup.FirstOrDefault().FirstOrDefault().lisRequest.SampleTypeId).Result,
|
|
AsbitemDetail = patientRegisterGroup.FirstOrDefault().Select(ss => new LisPatientRegisterDetailDto
|
|
{
|
|
AsbitemId = ss.registerCheckAsbitem.AsbitemId,
|
|
AsbitemName = ss.asbitem.DisplayName,
|
|
AsbitemPrice = ss.registerCheckAsbitem.ChargePrice * ss.registerCheckAsbitem.Amount
|
|
}).ToList()
|
|
};
|
|
|
|
return resultDto;
|
|
}
|
|
else
|
|
{
|
|
//人员条码模式
|
|
var query = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
|
|
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 _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id
|
|
where patientRegister.PatientRegisterNo == input.LisRequestNo
|
|
select new
|
|
{
|
|
registerCheckAsbitem,
|
|
asbitem,
|
|
registerCheck,
|
|
patientRegister,
|
|
patient,
|
|
lisRequest
|
|
}).ToList();
|
|
|
|
if (query.Count == 0)
|
|
{
|
|
throw new UserFriendlyException("人员条码号不存在");
|
|
}
|
|
|
|
var patientRegisterGroup = query.GroupBy(g => g.patientRegister);
|
|
|
|
var resultDto = new LisPatientRegisterDto
|
|
{
|
|
Age = patientRegisterGroup.FirstOrDefault().Key.Age,
|
|
LisRequestNo = input.LisRequestNo,
|
|
PatientName = patientRegisterGroup.FirstOrDefault().Key.PatientName,
|
|
SexName = _cacheService.GetSexNameAsync(patientRegisterGroup.FirstOrDefault().Key.SexId).Result,
|
|
SampleTypeName = _cacheService.GetSampleTypeNameAsync(patientRegisterGroup.FirstOrDefault().FirstOrDefault().lisRequest.SampleTypeId).Result,
|
|
AsbitemDetail = patientRegisterGroup.FirstOrDefault().Select(ss => new LisPatientRegisterDetailDto
|
|
{
|
|
AsbitemId = ss.registerCheckAsbitem.AsbitemId,
|
|
AsbitemName = ss.asbitem.DisplayName,
|
|
AsbitemPrice = ss.registerCheckAsbitem.ChargePrice * ss.registerCheckAsbitem.Amount
|
|
}).ToList()
|
|
};
|
|
|
|
return resultDto;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 设置人员的检验项目的采样信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/LisRequest/SetLisRequestSamplerStatus")]
|
|
public async Task SetLisRequestSamplerStatusAsync(SetLisRequestSamplerStatusInputDto input)
|
|
{
|
|
var lisRequestNoPrintMode = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "lis_request_no_print_mode");
|
|
if (string.IsNullOrWhiteSpace(lisRequestNoPrintMode))
|
|
lisRequestNoPrintMode = "0";
|
|
|
|
if (lisRequestNoPrintMode == "0")
|
|
{
|
|
if (input.LisRequestNos.Any())
|
|
{
|
|
//检验条码
|
|
var lisRequestList = await _lisRequestRepository.GetListAsync(m => input.LisRequestNos.Contains(m.LisRequestNo));
|
|
lisRequestList.ForEach(lisRequest =>
|
|
{
|
|
if (_currentUser.Id != null)
|
|
lisRequest.SamplerId = _currentUser.Id;
|
|
lisRequest.SamplingTime = DateTime.Now;
|
|
|
|
});
|
|
|
|
await _lisRequestRepository.UpdateManyAsync(lisRequestList);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//人员条码
|
|
if (input.LisRequestNos.Any())
|
|
{
|
|
var patientRegisterNo = input.LisRequestNos.First();
|
|
|
|
var query = 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 lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id
|
|
where patientRegister.PatientRegisterNo == patientRegisterNo
|
|
select new
|
|
{
|
|
lisRequest
|
|
};
|
|
|
|
if (input.SampleTypeIds.Any())
|
|
{
|
|
query = query.Where(m => input.SampleTypeIds.Contains(m.lisRequest.SampleTypeId));
|
|
}
|
|
|
|
var lisRequestList = query.Select(s => s.lisRequest).ToList();
|
|
|
|
if (lisRequestList.Any())
|
|
{
|
|
foreach (var lisRequest in lisRequestList)
|
|
{
|
|
if (_currentUser.Id != null)
|
|
lisRequest.SamplerId = _currentUser.Id;
|
|
lisRequest.SamplingTime = DateTime.Now;
|
|
}
|
|
|
|
await _lisRequestRepository.UpdateManyAsync(lisRequestList);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|