diff --git a/src/Shentun.Peis.Application.Contracts/Asbitems/AsbitemIdInputDto.cs b/src/Shentun.Peis.Application.Contracts/Asbitems/AsbitemIdInputDto.cs new file mode 100644 index 0000000..20956ca --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/Asbitems/AsbitemIdInputDto.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.Asbitems +{ + public class AsbitemIdInputDto + { + public Guid AsbitemId { get; set; } + } +} diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/NotTriageAsbitemListDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/NotTriageAsbitemListDto.cs new file mode 100644 index 0000000..cf34b3b --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/NotTriageAsbitemListDto.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.QueueRegisters +{ + public class NotTriageAsbitemListDto + { + /// + /// 项目类别名称 + /// + public string ItemTypeName { get; set; } + + /// + /// 组合项目ID + /// + public Guid AsbitemId { get; set; } + + /// + /// 组合项目名称 + /// + public string AsbitemName { get; set; } + } +} diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/QueueRegisterByPatientRegisterIdDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/QueueRegisterByPatientRegisterIdDto.cs new file mode 100644 index 0000000..ef24e0f --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/QueueRegisterByPatientRegisterIdDto.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Text; + +namespace Shentun.Peis.QueueRegisters +{ + public class QueueRegisterByPatientRegisterIdDto + { + /// + /// 当前排队房间 + /// + public string RoomName { get; set; } + + /// + /// 候诊人数 + /// + public int QueueCount { get; set; } + + /// + /// 完成标志 (o=候诊 1=已呼 2=过号) + /// + public char CompleteFlag { get; set; } + } +} diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/QueueRegisterIdInputDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/QueueRegisterIdInputDto.cs new file mode 100644 index 0000000..782e2fa --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/QueueRegisterIdInputDto.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.QueueRegisters +{ + public class QueueRegisterIdInputDto + { + + public Guid QueueRegisterId { get; set; } + } +} diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/YesTriageAsbitemListDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/YesTriageAsbitemListDto.cs new file mode 100644 index 0000000..afaa98d --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/YesTriageAsbitemListDto.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Text; +using System.Dynamic; + +namespace Shentun.Peis.QueueRegisters +{ + public class YesTriageAsbitemListDto + { + /// + /// 项目类别名称 + /// + public string ItemTypeName { get; set; } + + /// + /// 组合项目ID + /// + public Guid AsbitemId { get; set; } + + /// + /// 组合项目名称 + /// + public string AsbitemName { get; set; } + + /// + /// 房间名称 + /// + public string RoomName { get; set; } + + /// + /// 完成标志 (o=候诊 1=已呼 2=过号) + /// + public char CompleteFlag { get; set; } + + /// + /// 分诊人 + /// + public string TriageName { get; set; } + } +} diff --git a/src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs b/src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs new file mode 100644 index 0000000..504aa22 --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.Rooms +{ + public class BaseRoomDto + { + public Guid Id { get; set; } + + public string RoomName { get; set; } + + public int DisplayOrder { get; set; } + } +} diff --git a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs index 9c65b76..e31e68e 100644 --- a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs +++ b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs @@ -1,8 +1,12 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using Shentun.Peis.Asbitems; using Shentun.Peis.Enums; using Shentun.Peis.Models; +using Shentun.Peis.PatientRegisters; +using Shentun.Peis.Patients; +using Shentun.Peis.Rooms; using System; using System.Collections.Generic; using System.Linq; @@ -24,16 +28,72 @@ namespace Shentun.Peis.QueueRegisters private readonly IRepository _queueRegisterRepository; private readonly IRepository _roomRepository; private readonly IRepository _itemTypeRepository; + private readonly IRepository _patientRegisterRepository; + private readonly IRepository _registerCheckRepository; + private readonly IRepository _registerCheckAsbitemRepository; + private readonly IRepository _asbitemRepository; + private readonly IRepository _roomDetailRepository; + private readonly CacheService _cacheService; public QueueRegisterAppService( IRepository queueRegisterRepository, IRepository itemTypeRepository, - IRepository roomRepository) + IRepository roomRepository, + IRepository patientRegisterRepository, + IRepository registerCheckRepository, + IRepository registerCheckAsbitemRepository, + IRepository asbitemRepository, + IRepository roomDetailRepository, + CacheService cacheService) { _queueRegisterRepository = queueRegisterRepository; _itemTypeRepository = itemTypeRepository; _roomRepository = roomRepository; + _patientRegisterRepository = patientRegisterRepository; + _registerCheckRepository = registerCheckRepository; + _registerCheckAsbitemRepository = registerCheckAsbitemRepository; + _asbitemRepository = asbitemRepository; + _roomDetailRepository = roomDetailRepository; + _cacheService = cacheService; } + /// + /// 获取当前排队信息 + /// + /// + /// + [HttpPost("api/app/QueueRegister/GetQueueRegisterByPatientRegisterId")] + public async Task GetQueueRegisterByPatientRegisterIdAsync(PatientRegisterIdInputDto input) + { + var queueRegisterEnt = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync() + join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id + where queueRegister.PatientRegisterId == input.PatientRegisterId + orderby queueRegister.CreationTime descending + select new + { + queueRegister, + room + }).FirstOrDefault(); + if (queueRegisterEnt != null) + { + var queueCount = await _queueRegisterRepository.CountAsync(c => c.RoomId == queueRegisterEnt.queueRegister.RoomId + && c.CompleteFlag == QueueRegisterCompleteFlag.Wait); + + var entDto = new QueueRegisterByPatientRegisterIdDto + { + CompleteFlag = queueRegisterEnt.queueRegister.CompleteFlag, + RoomName = queueRegisterEnt.room.DisplayName, + QueueCount = queueCount + }; + + return entDto; + } + else + { + throw new UserFriendlyException("当前无分诊信息"); + } + } + + /// /// 获取房间排队信息 /// @@ -62,5 +122,114 @@ namespace Shentun.Peis.QueueRegisters return entListDto; } + + + /// + /// 获取未分诊的组合项目 根据人员登记ID + /// + /// + /// + [HttpPost("api/app/QueueRegister/GetNotTriageAsbitemList")] + public async Task> 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 room.Id + ).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 + 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; + } + + + + /// + /// 获取已分诊的组合项目 根据人员登记ID + /// + /// + /// + [HttpPost("api/app/QueueRegister/GetYesTriageAsbitemList")] + public async Task> GetYesTriageAsbitemListAsync(PatientRegisterIdInputDto input) + { + + 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 + 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).Result + }).ToList(); + + + return entListDto; + } + + + + /// + /// 获取房间信息 根据项目ID + /// + /// + /// + [HttpPost("api/app/QueueRegister/GetRoomListByAsbitemId")] + public async Task> GetRoomListByAsbitemIdAsync(AsbitemIdInputDto input) + { + var entListDto = (from room in await _roomRepository.GetQueryableAsync() + join roomDetail in await _roomDetailRepository.GetQueryableAsync() on room.Id equals roomDetail.RoomId + where roomDetail.AsbitemId == input.AsbitemId + orderby room.DisplayOrder ascending + select new BaseRoomDto + { + DisplayOrder = room.DisplayOrder, + Id = room.Id, + RoomName = room.DisplayName + }).ToList(); + + return entListDto; + } + + + /// + /// 取消分诊 删除 + /// + /// + /// + [HttpPost("api/app/QueueRegister/Delete")] + public async Task DeleteAsync(QueueRegisterIdInputDto input) + { + await _queueRegisterRepository.DeleteAsync(d => d.Id == input.QueueRegisterId); + } } } diff --git a/src/Shentun.Peis.Application/Rooms/RoomAppService.cs b/src/Shentun.Peis.Application/Rooms/RoomAppService.cs index 46d41d7..9d76e62 100644 --- a/src/Shentun.Peis.Application/Rooms/RoomAppService.cs +++ b/src/Shentun.Peis.Application/Rooms/RoomAppService.cs @@ -66,7 +66,7 @@ namespace Shentun.Peis.Rooms [HttpPost("api/app/Room/GetList")] public async Task> GetListAsync() { - var entListDto = (await _roomRepository.GetQueryableAsync()).Select(s => new RoomDto + var entListDto = (await _roomRepository.GetQueryableAsync()).OrderBy(o=>o.DisplayOrder).Select(s => new RoomDto { CreationTime = s.CreationTime, CreatorId = s.CreatorId, @@ -121,12 +121,12 @@ namespace Shentun.Peis.Rooms /// /// 删除 /// - /// + /// /// [HttpPost("api/app/Room/Delete")] - public async Task DeleteAsync(Guid id) + public async Task DeleteAsync(RoomIdInputDto input) { - await _roomManager.CheckAndDeleteAsync(id); + await _roomManager.CheckAndDeleteAsync(input.RoomId); } /// @@ -151,7 +151,7 @@ namespace Shentun.Peis.Rooms foreach (var asbitemId in input.AsbitemIds) { - if (roomDetails.FirstOrDefault(m => m.AsbitemId == asbitemId) != null) + if (roomDetails.FirstOrDefault(m => m.AsbitemId == asbitemId) == null) { roomDetails.Add(new RoomDetail {