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 { /// /// 检验申请单 /// [ApiExplorerSettings(GroupName = "Work")] [Authorize] public class LisRequestAppService : ApplicationService { private readonly IRepository _userRepository; private readonly IRepository _patientRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _registerCheckAsbitemRepository; private readonly IRepository _asbitemRepository; private readonly IRepository _itemTypeRepository; private readonly ILisRequestReportRepository _lisRequestReportRepository; private readonly LisRequestManager _lisRequestManager; private readonly IRepository _sampleGroupRepository; private readonly IRepository _sampleGroupDetailRepository; private readonly CacheService _cacheService; private readonly IRepository _customerOrgRepository; private readonly CustomerOrgManager _customerOrgManager; private readonly IRepository _sampleContainerRepository; private readonly IRepository _sampleTypeRepository; private readonly IRepository _lisRequestRepository; private readonly SysParmValueManager _sysParmValueManager; private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly ICurrentUser _currentUser; public LisRequestAppService( IRepository userRepository, IRepository patientRegisterRepository, IRepository registerCheckAsbitemRepository, ILisRequestReportRepository lisRequestReportRepository, IRepository customerOrgRepository, LisRequestManager lisRequestManager, CacheService cacheService, CustomerOrgManager customerOrgManager, IRepository patientRepository, IRepository registerCheckRepository, IRepository asbitemRepository, IRepository sampleContainerRepository, IRepository sampleTypeRepository, IRepository sampleGroupRepository, IRepository sampleGroupDetailRepository, IRepository itemTypeRepository, IRepository 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> 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(); 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(patientRegisterList.Count, lisRequestDtoList); return result; } [HttpPost("api/app/LisRequest/GetListByFilter")] public async Task> 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(); var updateRegisterCheckAsbitemList = new List(); 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(); 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(patientRegisterList.Count, lisRequestDtoList); return result; } /// /// 生成检验申请单 首次自动生成 /// /// 人员登记ID /// [HttpPost("api/app/LisRequest/SetLisRequest")] [RemoteService(false)] public async Task> 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(); 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 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(); 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; } /// /// 追加项目到检验单 如lisrequest内有项目完成体检或者弃检 不允许追加 /// /// /// /// [HttpPost("api/app/LisRequest/AppendLisRequestMany")] public async Task AppendLisRequestManyAsync(List input) { if (input.Any()) { foreach (var item in input) { await _lisRequestManager.AppendLisRequestAsync(item.LisRequestId, item.RegisterCheckAsbitemIds); } } else { throw new UserFriendlyException("请选择登记的组合项目"); } } /// /// 追加项目到检验单 生成新的条码号 /// /// RegisterAsbitem表Id /// [HttpPost("api/app/LisRequest/AddLisRequest")] public async Task AddLisRequestAsync(List RegisterAsbitemIds) { if (RegisterAsbitemIds.Any()) { var lisRequests = await _lisRequestManager.AddLisRequestAsync(RegisterAsbitemIds); } else { throw new UserFriendlyException("请选择登记的组合项目"); } } /// /// 获取人员登记下的组合项目申请的检验申请号记录 /// /// /// [HttpPost("api/app/LisRequest/GetRegisterAsbitemLisRequest")] public async Task> GetRegisterAsbitemLisRequestAsync(Guid PatientRegisterId) { return await _lisRequestReportRepository.GetRegisterAsbitemLisRequestAsync(PatientRegisterId); } /// /// 修改LisRequest表打印状态 /// /// /// [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); } } } /// /// 根据检验单号返回信息给Lis系统 /// /// /// [HttpPost("api/app/LisRequest/GetPatientRegisterByLisRequestNo")] public async Task 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; } } } /// /// 设置人员的检验项目的采样信息 /// /// [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); } } } } } }