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.
980 lines
50 KiB
980 lines
50 KiB
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.Logging;
|
|
using NPOI.SS.Formula.Functions;
|
|
using Shentun.Peis.Asbitems;
|
|
using Shentun.Peis.Enums;
|
|
using Shentun.Peis.Models;
|
|
using Shentun.Peis.PatientRegisters;
|
|
using Shentun.Peis.Patients;
|
|
using Shentun.Peis.RegisterChecks;
|
|
using Shentun.Peis.Rooms;
|
|
using Shentun.Peis.SysParmValues;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Volo.Abp;
|
|
using Volo.Abp.Application.Services;
|
|
using Volo.Abp.Auditing;
|
|
using Volo.Abp.Domain.Repositories;
|
|
using static NPOI.HSSF.Util.HSSFColor;
|
|
|
|
namespace Shentun.Peis.QueueRegisters
|
|
{
|
|
/// <summary>
|
|
/// 叫号排队
|
|
/// </summary>
|
|
[Authorize]
|
|
[ApiExplorerSettings(GroupName = "Work")]
|
|
[DisableAuditing]
|
|
public class QueueRegisterAppService : ApplicationService
|
|
{
|
|
private readonly IRepository<QueueRegister, Guid> _queueRegisterRepository;
|
|
private readonly IRepository<Room, Guid> _roomRepository;
|
|
private readonly IRepository<ItemType, Guid> _itemTypeRepository;
|
|
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<RoomDetail> _roomDetailRepository;
|
|
private readonly CacheService _cacheService;
|
|
private readonly QueueRegisterManager _queueRegisterManager;
|
|
private readonly ILogger<QueueRegisterAppService> _logger;
|
|
private readonly SysParmValueManager _sysParmValueManager;
|
|
private readonly IRepository<DoctorSignIn, Guid> _doctorSignInRepository;
|
|
private readonly RegisterCheckAppService _registerCheckAppService;
|
|
private readonly IRepository<Patient, Guid> _patientRepository;
|
|
|
|
public QueueRegisterAppService(
|
|
IRepository<QueueRegister, Guid> queueRegisterRepository,
|
|
IRepository<ItemType, Guid> itemTypeRepository,
|
|
IRepository<Room, Guid> roomRepository,
|
|
IRepository<PatientRegister, Guid> patientRegisterRepository,
|
|
IRepository<RegisterCheck, Guid> registerCheckRepository,
|
|
IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
|
|
IRepository<Asbitem, Guid> asbitemRepository,
|
|
IRepository<RoomDetail> roomDetailRepository,
|
|
CacheService cacheService,
|
|
QueueRegisterManager queueRegisterManager,
|
|
ILogger<QueueRegisterAppService> logger,
|
|
SysParmValueManager sysParmValueManager,
|
|
IRepository<DoctorSignIn, Guid> doctorSignInRepository,
|
|
RegisterCheckAppService registerCheckAppService,
|
|
IRepository<Patient, Guid> patientRepository)
|
|
{
|
|
_queueRegisterRepository = queueRegisterRepository;
|
|
_itemTypeRepository = itemTypeRepository;
|
|
_roomRepository = roomRepository;
|
|
_patientRegisterRepository = patientRegisterRepository;
|
|
_registerCheckRepository = registerCheckRepository;
|
|
_registerCheckAsbitemRepository = registerCheckAsbitemRepository;
|
|
_asbitemRepository = asbitemRepository;
|
|
_roomDetailRepository = roomDetailRepository;
|
|
_cacheService = cacheService;
|
|
_queueRegisterManager = queueRegisterManager;
|
|
_logger = logger;
|
|
_sysParmValueManager = sysParmValueManager;
|
|
_doctorSignInRepository = doctorSignInRepository;
|
|
_registerCheckAppService = registerCheckAppService;
|
|
_patientRepository = patientRepository;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取当前排队信息
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/GetQueueRegisterByPatientRegisterId")]
|
|
public async Task<QueueRegisterByPatientRegisterIdDto> GetQueueRegisterByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
|
|
{
|
|
var queueRegisterEnt = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
|
|
join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
|
|
join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on queueRegister.PatientRegisterId equals patientRegister.Id
|
|
where queueRegister.PatientRegisterId == input.PatientRegisterId
|
|
&& queueRegister.CreationTime >= DateTime.Now.Date
|
|
orderby queueRegister.CreationTime descending
|
|
select new
|
|
{
|
|
queueRegister,
|
|
room,
|
|
patientName = patientRegister.PatientName,
|
|
isVip = patientRegister.IsVip,
|
|
}).FirstOrDefault();
|
|
if (queueRegisterEnt != null)
|
|
{
|
|
var queueCount = await (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
|
|
join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on queueRegister.PatientRegisterId equals patientRegister.Id
|
|
where queueRegister.RoomId == queueRegisterEnt.queueRegister.RoomId
|
|
&& queueRegister.CompleteFlag == QueueRegisterCompleteFlag.Wait
|
|
&& queueRegister.CreationTime >= DateTime.Now.Date
|
|
&& queueRegister.DisplayOrder < queueRegisterEnt.queueRegister.DisplayOrder
|
|
&& patientRegister.IsVip == queueRegisterEnt.isVip
|
|
&& queueRegister.NoCompleteReason == '0'
|
|
select queueRegister).CountAsync();
|
|
|
|
var entDto = new QueueRegisterByPatientRegisterIdDto
|
|
{
|
|
CompleteFlag = queueRegisterEnt.queueRegister.CompleteFlag,
|
|
RoomName = queueRegisterEnt.room.DisplayName,
|
|
QueueCount = queueCount,
|
|
PatientName = queueRegisterEnt.patientName,
|
|
RoomId = queueRegisterEnt.room.Id
|
|
};
|
|
|
|
return entDto;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取房间排队信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/GetRoomQueueList")]
|
|
public async Task<List<RoomQueueListDto>> GetRoomQueueListAsync(MedicalCenterIdInputDto input)
|
|
{
|
|
if (input.MedicalCenterId == Guid.Empty)
|
|
throw new UserFriendlyException("体检中心不能为空");
|
|
|
|
//var doctorAutoSignIn = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "call_number_is_sign");
|
|
//if (doctorAutoSignIn == "Y")
|
|
//{
|
|
// //自动签到
|
|
// var isSignInCount = await _doctorSignInRepository.CountAsync(m => m.CreationTime.Date == DateTime.Now.Date && m.SignInFlag == SignInFlag.SignIn);
|
|
// if (isSignInCount == 0)
|
|
// {
|
|
// await _registerCheckAppService.CreateDoctorBatchSignInAsync(new CreateDoctorBatchSignInInputDto { });
|
|
// }
|
|
//}
|
|
|
|
var doctorAutoSignIn = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "call_number_is_sign");
|
|
if (string.IsNullOrWhiteSpace(doctorAutoSignIn))
|
|
doctorAutoSignIn = "Y";
|
|
|
|
|
|
|
|
|
|
if (doctorAutoSignIn == "Y")
|
|
{
|
|
//已签到的房间
|
|
var roomIds = await _queueRegisterManager.GetSignInRoomAsync();
|
|
var entListDto = (from room in await _roomRepository.GetQueryableAsync()
|
|
join queueRegister in (await _queueRegisterRepository.GetQueryableAsync())
|
|
.Where(m => m.CompleteFlag == QueueRegisterCompleteFlag.Wait
|
|
&& m.CreationTime >= DateTime.Now.Date).AsQueryable()
|
|
on room.Id equals queueRegister.RoomId into queueRegisterTemp
|
|
from queueRegisterEmpty in queueRegisterTemp.DefaultIfEmpty()
|
|
join itemType in await _itemTypeRepository.GetQueryableAsync()
|
|
on room.ItemTypeId equals itemType.Id into itemTypeTemp
|
|
from itemTypeEmpty in itemTypeTemp.DefaultIfEmpty()
|
|
where room.IsActive == 'Y' && roomIds.Contains(room.Id)
|
|
group new { room, itemTypeEmpty, queueRegisterEmpty } by room.Id into roomGroup
|
|
select new RoomQueueListDto
|
|
{
|
|
ItemTypeName = roomGroup.FirstOrDefault().itemTypeEmpty != null ? roomGroup.FirstOrDefault().itemTypeEmpty.DisplayName : "",
|
|
RoomName = roomGroup.FirstOrDefault().room.DisplayName,
|
|
WaitCount = roomGroup.Count(c => c.queueRegisterEmpty != null),
|
|
ItemTypeDisplayOrder = roomGroup.FirstOrDefault().itemTypeEmpty != null ? roomGroup.FirstOrDefault().itemTypeEmpty.DisplayOrder : 0,
|
|
RoomDisplayOrder = roomGroup.FirstOrDefault().room.DisplayOrder
|
|
}).ToList().OrderBy(o => o.RoomDisplayOrder).ToList();
|
|
|
|
return entListDto;
|
|
}
|
|
else
|
|
{
|
|
var entListDto = (from room in await _roomRepository.GetQueryableAsync()
|
|
join queueRegister in (await _queueRegisterRepository.GetQueryableAsync())
|
|
.Where(m => m.CompleteFlag == QueueRegisterCompleteFlag.Wait
|
|
&& m.CreationTime >= DateTime.Now.Date).AsQueryable()
|
|
on room.Id equals queueRegister.RoomId into queueRegisterTemp
|
|
from queueRegisterEmpty in queueRegisterTemp.DefaultIfEmpty()
|
|
join itemType in await _itemTypeRepository.GetQueryableAsync()
|
|
on room.ItemTypeId equals itemType.Id into itemTypeTemp
|
|
from itemTypeEmpty in itemTypeTemp.DefaultIfEmpty()
|
|
where room.IsActive == 'Y'
|
|
group new { room, itemTypeEmpty, queueRegisterEmpty } by room.Id into roomGroup
|
|
select new RoomQueueListDto
|
|
{
|
|
ItemTypeName = roomGroup.FirstOrDefault().itemTypeEmpty != null ? roomGroup.FirstOrDefault().itemTypeEmpty.DisplayName : "",
|
|
RoomName = roomGroup.FirstOrDefault().room.DisplayName,
|
|
WaitCount = roomGroup.Count(c => c.queueRegisterEmpty != null),
|
|
ItemTypeDisplayOrder = roomGroup.FirstOrDefault().itemTypeEmpty != null ? roomGroup.FirstOrDefault().itemTypeEmpty.DisplayOrder : 0,
|
|
RoomDisplayOrder = roomGroup.FirstOrDefault().room.DisplayOrder
|
|
}).ToList().OrderBy(o => o.RoomDisplayOrder).ToList();
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取未分诊的组合项目 根据人员登记ID (弃检、已检的剔除)
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/GetNotTriageAsbitemList")]
|
|
public async Task<List<NotTriageAsbitemListDto>> GetNotTriageAsbitemListAsync(PatientRegisterIdInputDto input)
|
|
{
|
|
//分诊过的组合项目id
|
|
var triageAsbitemIds = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
|
|
join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
|
|
join roomDetail in await _roomDetailRepository.GetQueryableAsync() on room.Id equals roomDetail.RoomId
|
|
where queueRegister.PatientRegisterId == input.PatientRegisterId
|
|
select roomDetail.AsbitemId
|
|
).ToList();
|
|
|
|
var entListDto = (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 itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id into itemTypeTemp
|
|
from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
|
|
where patientRegister.Id == input.PatientRegisterId
|
|
&& asbitem.IsCheck == 'Y'
|
|
&& registerCheck.CompleteFlag == RegisterCheckCompleteFlag.UnChecked
|
|
orderby itemTypeHaveEmpty.DisplayOrder, asbitem.DisplayOrder ascending
|
|
select new NotTriageAsbitemListDto
|
|
{
|
|
ItemTypeName = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.DisplayName : "",
|
|
AsbitemId = asbitem.Id,
|
|
AsbitemName = asbitem.DisplayName
|
|
}).ToList();
|
|
|
|
if (triageAsbitemIds.Any())
|
|
{
|
|
entListDto = entListDto.Where(m => !triageAsbitemIds.Contains(m.AsbitemId)).ToList();
|
|
}
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 获取已分诊的组合项目 根据人员登记ID
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/GetYesTriageAsbitemList")]
|
|
public async Task<List<YesTriageAsbitemListDto>> GetYesTriageAsbitemListAsync(PatientRegisterIdInputDto input)
|
|
{
|
|
|
|
|
|
var asbitemIds = (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
|
|
where patientRegister.Id == input.PatientRegisterId
|
|
select registerCheckAsbitem.AsbitemId).ToList();
|
|
|
|
if (!asbitemIds.Any())
|
|
throw new UserFriendlyException("该人员未登记项目");
|
|
|
|
var entListDto = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
|
|
join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
|
|
join roomDetail in await _roomDetailRepository.GetQueryableAsync() on room.Id equals roomDetail.RoomId
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync() on roomDetail.AsbitemId equals asbitem.Id
|
|
join itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id into itemTypeTemp
|
|
from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
|
|
where queueRegister.PatientRegisterId == input.PatientRegisterId
|
|
&& asbitemIds.Contains(roomDetail.AsbitemId)
|
|
&& asbitem.IsCheck == 'Y'
|
|
orderby queueRegister.CreationTime descending
|
|
select new YesTriageAsbitemListDto
|
|
{
|
|
ItemTypeName = itemTypeHaveEmpty != null ? itemTypeHaveEmpty.DisplayName : "",
|
|
AsbitemId = asbitem.Id,
|
|
AsbitemName = asbitem.DisplayName,
|
|
CompleteFlag = queueRegister.CompleteFlag,
|
|
RoomName = room.DisplayName,
|
|
TriageName = _cacheService.GetSurnameAsync(queueRegister.CreatorId).GetAwaiter().GetResult(),
|
|
TriageTime = queueRegister.CreationTime.ToString("HH:mm:ss")
|
|
}).ToList();
|
|
|
|
entListDto = entListDto.GroupBy(g => g.RoomName).Select(s => new YesTriageAsbitemListDto
|
|
{
|
|
RoomName = s.Key,
|
|
AsbitemId = Guid.Empty,
|
|
AsbitemName = string.Join(",", s.Select(s => s.AsbitemName)),
|
|
CompleteFlag = s.FirstOrDefault().CompleteFlag,
|
|
ItemTypeName = s.FirstOrDefault().ItemTypeName,
|
|
TriageName = s.FirstOrDefault().TriageName,
|
|
TriageTime = s.FirstOrDefault().TriageTime
|
|
}).ToList();
|
|
|
|
|
|
return entListDto;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 获取房间信息 根据项目ID
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/GetRoomListByAsbitemId")]
|
|
public async Task<List<BaseRoomDto>> GetRoomListByAsbitemIdAsync(GetRoomListByAsbitemIdInputDto input)
|
|
{
|
|
|
|
var doctorAutoSignIn = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "call_number_is_sign");
|
|
if (string.IsNullOrWhiteSpace(doctorAutoSignIn))
|
|
doctorAutoSignIn = "Y";
|
|
|
|
|
|
var patientRegisterEnt = await _patientRegisterRepository.FirstOrDefaultAsync(f => f.Id == input.PatientRegisterId);
|
|
|
|
if (patientRegisterEnt == null)
|
|
{
|
|
throw new UserFriendlyException("人员不存在");
|
|
}
|
|
|
|
var query = (from room in await _roomRepository.GetQueryableAsync()
|
|
join roomDetail in await _roomDetailRepository.GetQueryableAsync() on room.Id equals roomDetail.RoomId
|
|
join queueRegister in await _queueRegisterRepository.GetQueryableAsync() on room.Id equals queueRegister.RoomId into queueRegisterTemp
|
|
from queueRegisterHaveEmpty in queueRegisterTemp.DefaultIfEmpty()
|
|
where roomDetail.AsbitemId == input.AsbitemId
|
|
&& room.IsActive == 'Y'
|
|
// && roomIds.Contains(room.Id)
|
|
orderby room.DisplayOrder ascending
|
|
select new
|
|
{
|
|
roomId = room.Id,
|
|
roomName = room.DisplayName,
|
|
queueTime = room.QueueTime,
|
|
forSexId = room.ForSexId,
|
|
queueRegisterHaveEmpty
|
|
});
|
|
|
|
if (doctorAutoSignIn == "Y")
|
|
{
|
|
//已签到的房间
|
|
var roomIds = await _queueRegisterManager.GetSignInRoomAsync();
|
|
query = query.Where(m => roomIds.Contains(m.roomId));
|
|
}
|
|
|
|
var queryList = query.ToList();
|
|
|
|
var roomGroup = queryList.GroupBy(g => g.roomId).Select(s => new BaseRoomDto
|
|
{
|
|
RoomId = s.Key,
|
|
RoomName = s.FirstOrDefault().roomName,
|
|
QueueTime = s.Count(m => m.queueRegisterHaveEmpty != null && m.queueRegisterHaveEmpty.NoCompleteReason == '0') * s.FirstOrDefault().queueTime,
|
|
ForSexId = s.FirstOrDefault().forSexId
|
|
}).ToList();
|
|
|
|
if (patientRegisterEnt.SexId == SexFlag.UnKnown)
|
|
{
|
|
roomGroup = roomGroup.Where(m => m.ForSexId == ForSexFlag.All).ToList();
|
|
}
|
|
else
|
|
{
|
|
roomGroup = roomGroup.Where(m => m.ForSexId == ForSexFlag.All || m.ForSexId == patientRegisterEnt.SexId).ToList();
|
|
}
|
|
|
|
|
|
return roomGroup;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 取消分诊 删除
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/Delete")]
|
|
public async Task DeleteAsync(QueueRegisterIdInputDto input)
|
|
{
|
|
await _queueRegisterRepository.DeleteAsync(d => d.Id == input.QueueRegisterId);
|
|
}
|
|
|
|
[HttpPost("api/app/QueueRegister/DeleteByPatientRegisterId")]
|
|
public async Task DeleteByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
|
|
{
|
|
await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId && d.CompleteFlag == QueueRegisterCompleteFlag.Wait);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 人工排队房间
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/ManualQueuingRoom")]
|
|
public async Task<QueueRegisterByPatientRegisterIdDto> ManualQueuingRoomAsync(ManualQueuingRoomInputDto input)
|
|
{
|
|
var doctorAutoSignIn = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "call_number_is_sign");
|
|
if (string.IsNullOrWhiteSpace(doctorAutoSignIn))
|
|
doctorAutoSignIn = "Y";
|
|
|
|
if (doctorAutoSignIn == "Y")
|
|
{
|
|
//已签到的房间
|
|
var roomIds = await _queueRegisterManager.GetSignInRoomAsync();
|
|
if (!roomIds.Contains(input.RoomId))
|
|
{
|
|
throw new UserFriendlyException("房间未签到,不能分配");
|
|
}
|
|
}
|
|
|
|
//删除排队操作
|
|
await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId
|
|
&& d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
|
|
|
|
var entity = await _queueRegisterManager.ManualQueuingRoomAsync(input.PatientRegisterId, input.RoomId);
|
|
|
|
await _queueRegisterRepository.InsertAsync(entity, true);
|
|
|
|
return await GetQueueRegisterByPatientRegisterIdAsync(new PatientRegisterIdInputDto
|
|
{
|
|
PatientRegisterId = input.PatientRegisterId
|
|
});
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 自动排队房间
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/AutomaticQueuingRoom")]
|
|
public async Task<QueueRegisterByPatientRegisterIdDto> AutomaticQueuingRoomAsync(AutomaticQueuingRoomInputDto input)
|
|
{
|
|
//删除排队操作
|
|
await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId
|
|
&& d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
|
|
|
|
var entity = await _queueRegisterManager.AutomaticQueuingRoomAsync(input.PatientRegisterId, new List<Guid>());
|
|
|
|
await _queueRegisterRepository.InsertAsync(entity, true);
|
|
|
|
return await GetQueueRegisterByPatientRegisterIdAsync(new PatientRegisterIdInputDto
|
|
{
|
|
PatientRegisterId = input.PatientRegisterId
|
|
});
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 修改排队人员状态
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/UpdateQueueRegisterStatus")]
|
|
public async Task UpdateQueueRegisterStatusAsync(UpdateQueueRegisterStatusInputDto input)
|
|
{
|
|
var entity = await _queueRegisterManager.UpdateQueueRegisterStatusAsync(input.QueueRegisterId, input.CompleteFlag);
|
|
await _queueRegisterRepository.UpdateAsync(entity);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取医生诊台叫号人员列表 根据房间ID
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/GetQueueRegisterListByRoomId")]
|
|
public async Task<GetQueueRegisterListByRoomIdDto> GetQueueRegisterListByRoomIdAsync(QueueRegisterListByRoomIdInputDto input)
|
|
{
|
|
var entDto = new GetQueueRegisterListByRoomIdDto();
|
|
|
|
|
|
var query = from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
|
|
join patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
on queueRegister.PatientRegisterId equals patientRegister.Id
|
|
join roomDetail in await _roomDetailRepository.GetQueryableAsync()
|
|
on queueRegister.RoomId equals roomDetail.RoomId
|
|
where queueRegister.CreationTime >= DateTime.Now.Date
|
|
&& queueRegister.RoomId == input.RoomId
|
|
select new
|
|
{
|
|
completeFlag = queueRegister.CompleteFlag,
|
|
patientName = patientRegister.PatientName,
|
|
isVip = patientRegister.IsVip,
|
|
queueRegisterId = queueRegister.Id,
|
|
queueRegisterNumber = queueRegister.DisplayOrder,
|
|
patientRegisterId = queueRegister.PatientRegisterId,
|
|
patientRegisterNo = patientRegister.PatientRegisterNo,
|
|
roomId = queueRegister.RoomId,
|
|
asbitemId = roomDetail.AsbitemId,
|
|
//lastModificationTime = queueRegister.LastModificationTime,
|
|
callTime = queueRegister.CallTime
|
|
};
|
|
|
|
if (input.ItemTypeIds.Any())
|
|
{
|
|
|
|
var patientRegisterIds = query.Select(s => s.patientRegisterId).ToList();
|
|
|
|
//筛选项目类别
|
|
//项目类别下登记的所有组合项目
|
|
var asbitemIds = (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
|
|
where patientRegisterIds.Contains(patientRegister.Id) && input.ItemTypeIds.Contains(asbitem.ItemTypeId)
|
|
group registerCheckAsbitem by registerCheckAsbitem.AsbitemId into cc
|
|
select cc.Key).ToList();
|
|
|
|
|
|
query = query.Where(m => asbitemIds.Contains(m.asbitemId));
|
|
|
|
}
|
|
|
|
|
|
|
|
var roomGroup = query.ToList().GroupBy(g => g.queueRegisterId).Select(s => new
|
|
{
|
|
completeFlag = s.FirstOrDefault().completeFlag,
|
|
patientName = s.FirstOrDefault().patientName,
|
|
isVip = s.FirstOrDefault().isVip,
|
|
queueRegisterId = s.Key,
|
|
queueRegisterNumber = s.FirstOrDefault().queueRegisterNumber,
|
|
//lastModificationTime = s.FirstOrDefault().lastModificationTime,
|
|
patientRegisterId = s.FirstOrDefault().patientRegisterId,
|
|
patientRegisterNo = s.FirstOrDefault().patientRegisterNo,
|
|
callTime = s.FirstOrDefault().callTime
|
|
}).ToList();
|
|
|
|
|
|
var queueRegisterList = roomGroup.Where(m => m.isVip == 'Y').OrderBy(o => o.queueRegisterNumber).ToList();
|
|
queueRegisterList.AddRange(roomGroup.Where(m => m.isVip == 'N').OrderBy(o => o.queueRegisterNumber).ToList());
|
|
|
|
|
|
entDto.WaitDetail = queueRegisterList.Where(m => m.completeFlag == QueueRegisterCompleteFlag.Wait)
|
|
.Select(s => new GetQueueRegisterListByRoomIdDetailDto
|
|
{
|
|
IsVip = s.isVip,
|
|
PatientName = s.patientName,
|
|
QueueRegisterId = s.queueRegisterId,
|
|
QueueRegisterNumber = (s.isVip == 'Y' ? "V" : "") + s.queueRegisterNumber.ToString(),
|
|
PatientRegisterId = s.patientRegisterId,
|
|
PatientRegisterNo = s.patientRegisterNo
|
|
}).ToList();
|
|
|
|
entDto.AlreadyCalledDetail = queueRegisterList.Where(m => m.completeFlag == QueueRegisterCompleteFlag.AlreadyCalled).OrderByDescending(o => o.callTime)
|
|
.Select(s => new GetQueueRegisterListByRoomIdDetailDto
|
|
{
|
|
IsVip = s.isVip,
|
|
PatientName = s.patientName,
|
|
QueueRegisterId = s.queueRegisterId,
|
|
QueueRegisterNumber = (s.isVip == 'Y' ? "V" : "") + s.queueRegisterNumber.ToString(),
|
|
PatientRegisterId = s.patientRegisterId,
|
|
PatientRegisterNo = s.patientRegisterNo
|
|
}).ToList();
|
|
|
|
entDto.OverNumberDetail = roomGroup.Where(m => m.completeFlag == QueueRegisterCompleteFlag.OverNumber).OrderByDescending(o => o.callTime)
|
|
.Select(s => new GetQueueRegisterListByRoomIdDetailDto
|
|
{
|
|
IsVip = s.isVip,
|
|
PatientName = s.patientName,
|
|
QueueRegisterId = s.queueRegisterId,
|
|
QueueRegisterNumber = (s.isVip == 'Y' ? "V" : "") + s.queueRegisterNumber.ToString(),
|
|
PatientRegisterId = s.patientRegisterId,
|
|
PatientRegisterNo = s.patientRegisterNo
|
|
}).ToList();
|
|
|
|
return entDto;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取叫号屏人员数据
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/GetScreenQueueRegisterListByRoomNo")]
|
|
public async Task<GetScreenQueueRegisterListByRoomIdDto> GetScreenQueueRegisterListByRoomIdAsync(RoomNoInputDto input)
|
|
{
|
|
var entDto = new GetScreenQueueRegisterListByRoomIdDto();
|
|
var query = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
|
|
join patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
on queueRegister.PatientRegisterId equals patientRegister.Id
|
|
join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
|
|
where queueRegister.CreationTime >= DateTime.Now.Date
|
|
&& room.RoomNo == input.RoomNo
|
|
select new
|
|
{
|
|
completeFlag = queueRegister.CompleteFlag,
|
|
patientName = patientRegister.PatientName,
|
|
isVip = patientRegister.IsVip,
|
|
queueRegisterId = queueRegister.Id,
|
|
queueRegisterNumber = queueRegister.DisplayOrder,
|
|
callTime = queueRegister.CallTime
|
|
}).ToList();
|
|
|
|
var queueRegisterList = query.Where(m => m.isVip == 'Y').OrderBy(o => o.queueRegisterNumber).ToList();
|
|
queueRegisterList.AddRange(query.Where(m => m.isVip == 'N').OrderBy(o => o.queueRegisterNumber).ToList());
|
|
|
|
var visitEnt = queueRegisterList.Where(m => m.completeFlag == QueueRegisterCompleteFlag.AlreadyCalled).OrderByDescending(o => o.callTime).FirstOrDefault();
|
|
|
|
if (visitEnt != null)
|
|
{
|
|
entDto.VisitNumber = visitEnt.queueRegisterNumber;
|
|
entDto.VisitName = visitEnt.patientName;
|
|
}
|
|
|
|
entDto.WaitDetail = queueRegisterList.Where(m => m.completeFlag == QueueRegisterCompleteFlag.Wait)
|
|
.Select(s => new GetScreenQueueRegisterListByRoomIdDetailDto
|
|
{
|
|
PatientName = s.patientName,
|
|
QueueRegisterNumber = (s.isVip == 'Y' ? "V" : "") + s.queueRegisterNumber.ToString()
|
|
}).ToList();
|
|
|
|
entDto.OverNumberDetail = queueRegisterList.Where(m => m.completeFlag == QueueRegisterCompleteFlag.OverNumber).OrderByDescending(o => o.callTime)
|
|
.Select(s => new GetScreenQueueRegisterListByRoomIdDetailDto
|
|
{
|
|
PatientName = s.patientName,
|
|
QueueRegisterNumber = (s.isVip == 'Y' ? "V" : "") + s.queueRegisterNumber.ToString()
|
|
}).ToList();
|
|
|
|
return entDto;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取房间名称 根据房间号
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/GetRoomNameByRoomNo")]
|
|
public async Task<GetRoomNameByRoomNoDto> GetRoomNameByRoomNoAsync(RoomNoInputDto input)
|
|
{
|
|
var roomEnt = await _roomRepository.FirstOrDefaultAsync(f => f.RoomNo == input.RoomNo);
|
|
if (roomEnt == null)
|
|
throw new UserFriendlyException("房间号不存在");
|
|
var entDto = new GetRoomNameByRoomNoDto
|
|
{
|
|
RoomName = roomEnt.DisplayName
|
|
};
|
|
return entDto;
|
|
}
|
|
|
|
#region 提供给小程序
|
|
|
|
/// <summary>
|
|
/// 小程序获取当前排队信息
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/GetAppQueueRegisterByIdNo")]
|
|
public async Task<GetAppQueueRegisterByIdNoDto> GetAppQueueRegisterByIdNoAsync(IdNoInputDto input)
|
|
{
|
|
var msg = new GetAppQueueRegisterByIdNoDto();
|
|
var patientRegisterEnt = (await _patientRegisterRepository.GetQueryableAsync()).Include(x => x.Patient)
|
|
.Where(m => m.CompleteFlag != PatientRegisterCompleteFlag.PreRegistration
|
|
&& m.CompleteFlag != PatientRegisterCompleteFlag.SumCheck
|
|
&& m.Patient.IdNo == input.IdNo).OrderByDescending(o => o.MedicalStartDate).FirstOrDefault();
|
|
|
|
if (patientRegisterEnt == null)
|
|
throw new UserFriendlyException("无人员登记记录或已总检");
|
|
//if (patientRegisterEnt.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
|
|
// throw new UserFriendlyException("当前人员未正式登记");
|
|
//if (patientRegisterEnt.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration)
|
|
// throw new UserFriendlyException("当前人员已总检");
|
|
|
|
msg.PatientRegisterNo = patientRegisterEnt.PatientRegisterNo;
|
|
msg.MobileTelephone = patientRegisterEnt.Patient.MobileTelephone;
|
|
msg.IdNo = patientRegisterEnt.Patient.IdNo;
|
|
msg.MaritalStatusName = await _cacheService.GetMaritalStatusNameAsync(patientRegisterEnt.MaritalStatusId);
|
|
msg.PatientName = patientRegisterEnt.PatientName;
|
|
msg.Photo = patientRegisterEnt.Photo;
|
|
msg.SexName = await _cacheService.GetSexNameAsync(patientRegisterEnt.SexId);
|
|
msg.PatientRegisterId = patientRegisterEnt.Id;
|
|
|
|
var queueRegisterInfo = await GetQueueRegisterByPatientRegisterIdAsync(new PatientRegisterIdInputDto { PatientRegisterId = patientRegisterEnt.Id });
|
|
if (queueRegisterInfo != null)
|
|
{
|
|
msg.QueueCount = queueRegisterInfo.QueueCount;
|
|
msg.RoomName = queueRegisterInfo.RoomName;
|
|
msg.RoomId = queueRegisterInfo.RoomId;
|
|
msg.CompleteFlag = queueRegisterInfo.CompleteFlag;
|
|
}
|
|
|
|
#region 分诊项目
|
|
|
|
//登记的所有项目
|
|
var registerCheckAsbitemList = (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 itemType in await _itemTypeRepository.GetQueryableAsync() on asbitem.ItemTypeId equals itemType.Id into itemTypeTemp
|
|
from itemTypeHaveEmpty in itemTypeTemp.DefaultIfEmpty()
|
|
where patientRegister.Id == patientRegisterEnt.Id
|
|
&& asbitem.IsCheck == 'Y'
|
|
orderby itemTypeHaveEmpty.DisplayOrder, asbitem.DisplayOrder ascending
|
|
select new
|
|
{
|
|
asbitemId = asbitem.Id,
|
|
registerCheckId = registerCheck.Id,
|
|
isGiveUp = registerCheck.CompleteFlag == RegisterCheckCompleteFlag.GiveUpChecked ? 'Y' : 'N',
|
|
asbitemName = asbitem.DisplayName
|
|
}).ToList();
|
|
|
|
//分诊过的项目
|
|
var queueRegisterList = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
|
|
join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
|
|
join roomDetail in await _roomDetailRepository.GetQueryableAsync() on room.Id equals roomDetail.RoomId
|
|
where queueRegister.PatientRegisterId == patientRegisterEnt.Id
|
|
select new
|
|
{
|
|
completeFlag = queueRegister.CompleteFlag,
|
|
roomName = room.DisplayName,
|
|
asbitemId = roomDetail.AsbitemId
|
|
}).ToList();
|
|
|
|
List<TriageAsbitemDetailDto> triageAsbitemDetailList = new List<TriageAsbitemDetailDto>();
|
|
|
|
foreach (var item in registerCheckAsbitemList)
|
|
{
|
|
var triageAsbitemDetail = new TriageAsbitemDetailDto
|
|
{
|
|
AsbitemName = item.asbitemName,
|
|
IsGiveUp = item.isGiveUp,
|
|
RegisterCheckId = item.registerCheckId
|
|
};
|
|
|
|
var queueRegisterAsbitem = queueRegisterList.FirstOrDefault(f => f.asbitemId == item.asbitemId);
|
|
if (queueRegisterAsbitem != null)
|
|
{
|
|
triageAsbitemDetail.CompleteFlag = queueRegisterAsbitem.completeFlag;
|
|
triageAsbitemDetail.RoomName = queueRegisterAsbitem.roomName;
|
|
}
|
|
|
|
triageAsbitemDetailList.Add(triageAsbitemDetail);
|
|
}
|
|
|
|
msg.TriageAsbitemDetail = triageAsbitemDetailList;
|
|
|
|
#endregion
|
|
|
|
|
|
return msg;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 放弃项目
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/CreateGiveUpAsbitem")]
|
|
public async Task<SmallProgramResultDto> CreateGiveUpAsbitemAsync(CreateGiveUpAsbitemInputDto input)
|
|
{
|
|
var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == input.RegisterCheckId);
|
|
if (registerCheckEnt == null)
|
|
{
|
|
throw new UserFriendlyException("检查项目不存在");
|
|
}
|
|
|
|
if (registerCheckEnt.CompleteFlag == RegisterCheckCompleteFlag.Checked)
|
|
{
|
|
throw new UserFriendlyException("项目已检查,无法操作");
|
|
}
|
|
|
|
if (input.IsGiveUp == 'Y')
|
|
{
|
|
registerCheckEnt.CompleteFlag = RegisterCheckCompleteFlag.GiveUpChecked;
|
|
await _registerCheckRepository.UpdateAsync(registerCheckEnt);
|
|
}
|
|
else if (input.IsGiveUp == 'N')
|
|
{
|
|
registerCheckEnt.CompleteFlag = RegisterCheckCompleteFlag.UnChecked;
|
|
await _registerCheckRepository.UpdateAsync(registerCheckEnt);
|
|
}
|
|
|
|
return new SmallProgramResultDto
|
|
{
|
|
IsSuccess = true
|
|
};
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 创建新的项目分诊
|
|
/// </summary>
|
|
/// <param name="input"></param>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/CreateNewAsbitemTriage")]
|
|
public async Task<SmallProgramResultDto> CreateNewAsbitemTriageAsync(CreateNewAsbitemTriageInputDto input)
|
|
{
|
|
|
|
//当前排队的组合项目id集合
|
|
var asbitemIds = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
|
|
join roomDetail in await _roomDetailRepository.GetQueryableAsync() on queueRegister.RoomId equals roomDetail.RoomId
|
|
where queueRegister.PatientRegisterId == input.PatientRegisterId
|
|
&& roomDetail.RoomId == input.RoomId
|
|
select new
|
|
{
|
|
queueRegister,
|
|
roomDetail.AsbitemId
|
|
}).ToList();
|
|
|
|
if (!asbitemIds.Any())
|
|
{
|
|
throw new UserFriendlyException("无排队信息");
|
|
}
|
|
|
|
//删除排队操作
|
|
await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId
|
|
&& d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
|
|
|
|
var entity = await _queueRegisterManager.AutomaticQueuingRoomAsync(input.PatientRegisterId, asbitemIds.Select(s => s.AsbitemId).ToList());
|
|
|
|
await _queueRegisterRepository.InsertAsync(entity, true);
|
|
|
|
return new SmallProgramResultDto
|
|
{
|
|
IsSuccess = true
|
|
};
|
|
|
|
}
|
|
#endregion
|
|
|
|
|
|
#region 分诊屏
|
|
|
|
/// <summary>
|
|
/// 获取人员信息根据条码号
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/GetTriageScreenPatientRegisterByPatientRegisterNo")]
|
|
public async Task<GetTriageScreenPatientRegisterByPatientRegisterNoDto> GetTriageScreenPatientRegisterByPatientRegisterNoAsync(PatientRegisterNoInputDto input)
|
|
{
|
|
var patientRegisterQuery = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
|
|
select new
|
|
{
|
|
patientRegister,
|
|
patient
|
|
};
|
|
if (!string.IsNullOrWhiteSpace(input.PatientRegisterNo))
|
|
{
|
|
patientRegisterQuery = patientRegisterQuery.Where(m => m.patientRegister.PatientRegisterNo == input.PatientRegisterNo);
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(input.PatientNo))
|
|
{
|
|
patientRegisterQuery = patientRegisterQuery.Where(m => m.patient.PatientNo == input.PatientNo);
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(input.IdNo))
|
|
{
|
|
patientRegisterQuery = patientRegisterQuery.Where(m => m.patient.IdNo == input.IdNo);
|
|
}
|
|
|
|
|
|
var patientRegisterFirst = await patientRegisterQuery.FirstOrDefaultAsync();
|
|
if (patientRegisterFirst == null)
|
|
{
|
|
throw new UserFriendlyException("人员不存在");
|
|
}
|
|
|
|
var entDto = new GetTriageScreenPatientRegisterByPatientRegisterNoDto
|
|
{
|
|
MedicalStartDate = DataHelper.ConversionDateShortToString(patientRegisterFirst.patientRegister.MedicalStartDate),
|
|
MobileTelephone = patientRegisterFirst.patient.MobileTelephone,
|
|
PatientName = patientRegisterFirst.patientRegister.PatientName,
|
|
PatientRegisterId = patientRegisterFirst.patientRegister.Id
|
|
};
|
|
|
|
return entDto;
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取当前人员排队信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost("api/app/QueueRegister/GetTriageScreenPatientRegisterQueueInfo")]
|
|
public async Task<GetTriageScreenPatientRegisterQueueInfoDto> GetTriageScreenPatientRegisterQueueInfoAsync(PatientRegisterNoInputDto input)
|
|
{
|
|
|
|
|
|
var patientRegisterQuery = from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
|
|
join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id
|
|
select new
|
|
{
|
|
patientRegister,
|
|
patient
|
|
};
|
|
if (!string.IsNullOrWhiteSpace(input.PatientRegisterNo))
|
|
{
|
|
patientRegisterQuery = patientRegisterQuery.Where(m => m.patientRegister.PatientRegisterNo == input.PatientRegisterNo);
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(input.PatientNo))
|
|
{
|
|
patientRegisterQuery = patientRegisterQuery.Where(m => m.patient.PatientNo == input.PatientNo);
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(input.IdNo))
|
|
{
|
|
patientRegisterQuery = patientRegisterQuery.Where(m => m.patient.IdNo == input.IdNo);
|
|
}
|
|
|
|
|
|
var patientRegisterFirst = await patientRegisterQuery.FirstOrDefaultAsync();
|
|
if (patientRegisterFirst == null)
|
|
{
|
|
throw new UserFriendlyException("人员不存在");
|
|
}
|
|
|
|
|
|
|
|
var queueRegisterEnt = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
|
|
join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
|
|
join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on queueRegister.PatientRegisterId equals patientRegister.Id
|
|
where queueRegister.PatientRegisterId == patientRegisterFirst.patientRegister.Id
|
|
&& queueRegister.CreationTime >= DateTime.Now.Date
|
|
orderby queueRegister.CreationTime descending
|
|
select new
|
|
{
|
|
queueRegister,
|
|
room,
|
|
patientName = patientRegister.PatientName,
|
|
isVip = patientRegister.IsVip,
|
|
}).FirstOrDefault();
|
|
if (queueRegisterEnt != null)
|
|
{
|
|
var queueCount = await (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
|
|
join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on queueRegister.PatientRegisterId equals patientRegister.Id
|
|
where queueRegister.RoomId == queueRegisterEnt.queueRegister.RoomId
|
|
&& queueRegister.CompleteFlag == QueueRegisterCompleteFlag.Wait
|
|
&& queueRegister.CreationTime >= DateTime.Now.Date
|
|
&& queueRegister.DisplayOrder < queueRegisterEnt.queueRegister.DisplayOrder
|
|
&& queueRegister.NoCompleteReason == '0'
|
|
select queueRegister).CountAsync();
|
|
|
|
var entDto = new GetTriageScreenPatientRegisterQueueInfoDto
|
|
{
|
|
|
|
RoomName = queueRegisterEnt.room.DisplayName,
|
|
QueueCount = queueCount,
|
|
PatientName = queueRegisterEnt.patientName,
|
|
QueueNum = queueRegisterEnt.queueRegister.DisplayOrder.ToString()
|
|
};
|
|
|
|
return entDto;
|
|
}
|
|
else
|
|
{
|
|
throw new UserFriendlyException("当前无排队信息");
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|