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