From 88a3a10b020faafdfd7731daf75ec79e817935d8 Mon Sep 17 00:00:00 2001
From: wxd <123@qq.com>
Date: Wed, 17 Jul 2024 17:20:49 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8F=AB=E5=8F=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Asbitems/AsbitemIdInputDto.cs | 11 ++
.../QueueRegisters/NotTriageAsbitemListDto.cs | 24 +++
.../QueueRegisterByPatientRegisterIdDto.cs | 26 +++
.../QueueRegisters/QueueRegisterIdInputDto.cs | 12 ++
.../QueueRegisters/YesTriageAsbitemListDto.cs | 42 +++++
.../Rooms/BaseRoomDto.cs | 15 ++
.../QueueRegisters/QueueRegisterAppService.cs | 171 +++++++++++++++++-
.../Rooms/RoomAppService.cs | 10 +-
8 files changed, 305 insertions(+), 6 deletions(-)
create mode 100644 src/Shentun.Peis.Application.Contracts/Asbitems/AsbitemIdInputDto.cs
create mode 100644 src/Shentun.Peis.Application.Contracts/QueueRegisters/NotTriageAsbitemListDto.cs
create mode 100644 src/Shentun.Peis.Application.Contracts/QueueRegisters/QueueRegisterByPatientRegisterIdDto.cs
create mode 100644 src/Shentun.Peis.Application.Contracts/QueueRegisters/QueueRegisterIdInputDto.cs
create mode 100644 src/Shentun.Peis.Application.Contracts/QueueRegisters/YesTriageAsbitemListDto.cs
create mode 100644 src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs
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
{