From 468387a6f45c41f13f042627ac7e0d03af9e3e91 Mon Sep 17 00:00:00 2001
From: wxd <123@qq.com>
Date: Sat, 30 Nov 2024 18:21:33 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B0=8F=E7=A8=8B=E5=BA=8F?=
=?UTF-8?q?=E6=94=BE=E5=BC=83=E3=80=81=E8=B7=B3=E8=BF=87=E7=AD=89=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=EF=BC=8C=E7=AD=9B=E9=80=89=E6=94=BE=E5=BC=83=E8=B7=9F?=
=?UTF-8?q?=E5=B7=B2=E6=A3=80=E7=9A=84=E9=A1=B9=E7=9B=AE=E6=95=B0=E6=8D=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../CreateGiveUpAsbitemInputDto.cs | 19 ++
.../CreateNewAsbitemTriageInputDto.cs | 15 ++
.../GetAppQueueRegisterByIdNoDto.cs | 47 ++++-
.../QueueRegisters/QueueRegisterAppService.cs | 168 ++++++++++++++++--
.../Enums/QueueRegisterCompleteFlag.cs | 1 +
.../QueueRegisters/QueueRegisterManager.cs | 38 ++--
6 files changed, 246 insertions(+), 42 deletions(-)
create mode 100644 src/Shentun.Peis.Application.Contracts/QueueRegisters/CreateGiveUpAsbitemInputDto.cs
create mode 100644 src/Shentun.Peis.Application.Contracts/QueueRegisters/CreateNewAsbitemTriageInputDto.cs
diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/CreateGiveUpAsbitemInputDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/CreateGiveUpAsbitemInputDto.cs
new file mode 100644
index 0000000..32083fb
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/CreateGiveUpAsbitemInputDto.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.QueueRegisters
+{
+ public class CreateGiveUpAsbitemInputDto
+ {
+ ///
+ /// 检查ID
+ ///
+ public Guid RegisterCheckId { get; set; }
+
+ ///
+ /// 是否放弃 Y=放弃 N=未放弃
+ ///
+ public char IsGiveUp { get; set; }
+ }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/CreateNewAsbitemTriageInputDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/CreateNewAsbitemTriageInputDto.cs
new file mode 100644
index 0000000..ec1f1d6
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/CreateNewAsbitemTriageInputDto.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.QueueRegisters
+{
+
+ public class CreateNewAsbitemTriageInputDto
+ {
+ ///
+ /// 检查Id
+ ///
+ public Guid RegisterCheckId { get; set; }
+ }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/GetAppQueueRegisterByIdNoDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/GetAppQueueRegisterByIdNoDto.cs
index 9cbee38..e97a177 100644
--- a/src/Shentun.Peis.Application.Contracts/QueueRegisters/GetAppQueueRegisterByIdNoDto.cs
+++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/GetAppQueueRegisterByIdNoDto.cs
@@ -10,7 +10,7 @@ namespace Shentun.Peis.QueueRegisters
/// 姓名
///
public string PatientName { get; set; }
-
+
///
/// 身份证号码
///
@@ -24,7 +24,7 @@ namespace Shentun.Peis.QueueRegisters
///
/// 性别
///
- public string SexName { get; set;}
+ public string SexName { get; set; }
///
/// 手机号
@@ -54,8 +54,49 @@ namespace Shentun.Peis.QueueRegisters
public int QueueCount { get; set; }
///
- /// 完成标志 (o=候诊 1=已呼 2=过号)
+ /// 完成标志 (o=候诊 1=已呼 2=过号 3=放弃)
///
public char CompleteFlag { get; set; }
+
+ ///
+ /// 分诊过的项目,只取已呼人员
+ ///
+ public List TriageAsbitemDetail { get; set; } = new List();
+ }
+
+ ///
+ /// 分诊项目
+ ///
+ public class TriageAsbitemDetailDto
+ {
+
+ ///
+ /// 组合项目名称
+ ///
+ public string AsbitemName { get; set; }
+
+ ///
+ /// 检查ID
+ ///
+ public Guid RegisterCheckId { get; set; }
+
+
+
+ ///
+ /// 房间名称
+ ///
+ public string RoomName { get; set; }
+
+ ///
+ /// 状态(o=候诊 1=已呼 2=过号 )
+ ///
+ public char? CompleteFlag { get; set; }
+
+ ///
+ /// 是否放弃检查 Y=放弃 N=未放弃
+ ///
+ public char IsGiveUp { get; set; }
+
+
}
}
diff --git a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
index ed24e33..0358cab 100644
--- a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
+++ b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
@@ -79,7 +79,6 @@ namespace Shentun.Peis.QueueRegisters
join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on queueRegister.PatientRegisterId equals patientRegister.Id
where queueRegister.PatientRegisterId == input.PatientRegisterId
&& queueRegister.CreationTime >= DateTime.Now.Date
- && queueRegister.NoCompleteReason == '0'
orderby queueRegister.CreationTime descending
select new
{
@@ -133,8 +132,7 @@ namespace Shentun.Peis.QueueRegisters
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
- && m.NoCompleteReason == '0').AsQueryable()
+ && 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()
@@ -154,7 +152,7 @@ namespace Shentun.Peis.QueueRegisters
///
- /// 获取未分诊的组合项目 根据人员登记ID
+ /// 获取未分诊的组合项目 根据人员登记ID (弃检、已检的剔除)
///
///
///
@@ -166,7 +164,7 @@ namespace Shentun.Peis.QueueRegisters
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
+ select roomDetail.AsbitemId
).ToList();
var entListDto = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
@@ -175,7 +173,9 @@ namespace Shentun.Peis.QueueRegisters
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'
+ where patientRegister.Id == input.PatientRegisterId
+ && asbitem.IsCheck == 'Y'
+ && registerCheck.CompleteFlag == RegisterCheckCompleteFlag.UnChecked
orderby itemTypeHaveEmpty.DisplayOrder, asbitem.DisplayOrder ascending
select new NotTriageAsbitemListDto
{
@@ -325,8 +325,7 @@ namespace Shentun.Peis.QueueRegisters
//删除排队操作
await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId
- && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled
- && d.NoCompleteReason == '0', true);
+ && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
var entity = await _queueRegisterManager.ManualQueuingRoomAsync(input.PatientRegisterId, input.RoomId);
@@ -347,12 +346,11 @@ namespace Shentun.Peis.QueueRegisters
[HttpPost("api/app/QueueRegister/AutomaticQueuingRoom")]
public async Task AutomaticQueuingRoomAsync(AutomaticQueuingRoomInputDto input)
{
- //删除排队操作 NoCompleteReason为1时放弃检查
+ //删除排队操作
await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId
- && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled
- && d.NoCompleteReason == '0', true);
+ && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
- var entity = await _queueRegisterManager.AutomaticQueuingRoomAsync(input.PatientRegisterId);
+ var entity = await _queueRegisterManager.AutomaticQueuingRoomAsync(input.PatientRegisterId, new List());
await _queueRegisterRepository.InsertAsync(entity, true);
@@ -394,7 +392,6 @@ namespace Shentun.Peis.QueueRegisters
on queueRegister.RoomId equals roomDetail.RoomId
where queueRegister.CreationTime >= DateTime.Now.Date
&& queueRegister.RoomId == input.RoomId
- && queueRegister.NoCompleteReason == '0'
select new
{
completeFlag = queueRegister.CompleteFlag,
@@ -406,7 +403,7 @@ namespace Shentun.Peis.QueueRegisters
patientRegisterNo = patientRegister.PatientRegisterNo,
roomId = queueRegister.RoomId,
asbitemId = roomDetail.AsbitemId,
- //lastModificationTime = queueRegister.LastModificationTime,
+ //lastModificationTime = queueRegister.LastModificationTime,
callTime = queueRegister.CallTime
};
@@ -505,7 +502,6 @@ namespace Shentun.Peis.QueueRegisters
join room in await _roomRepository.GetQueryableAsync() on queueRegister.RoomId equals room.Id
where queueRegister.CreationTime >= DateTime.Now.Date
&& room.RoomNo == input.RoomNo
- && queueRegister.NoCompleteReason == '0'
select new
{
completeFlag = queueRegister.CompleteFlag,
@@ -602,8 +598,148 @@ namespace Shentun.Peis.QueueRegisters
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 triageAsbitemDetailList = new List();
+
+ 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;
- }
+ }
+
+ ///
+ /// 放弃项目
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QueueRegister/CreateGiveUpAsbitem")]
+ public async Task 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);
+ }
+ }
+
+
+ ///
+ /// 创建新的项目分诊
+ ///
+ ///
+ ///
+ [HttpPost("api/app/QueueRegister/CreateNewAsbitemTriage")]
+ public async Task CreateNewAsbitemTriageAsync(CreateNewAsbitemTriageInputDto input)
+ {
+
+ //登记的组合项目ID
+ 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 registerCheck.Id == input.RegisterCheckId
+ select new
+ {
+ registerCheckAsbitem.AsbitemId,
+ patientRegisterId = patientRegister.Id
+ }).ToList();
+
+ if (!asbitemIds.Any())
+ {
+ throw new UserFriendlyException("检查项目不存在");
+ }
+ var queueRegisterList = (from queueRegister in await _queueRegisterRepository.GetQueryableAsync()
+ join roomDetail in await _roomDetailRepository.GetQueryableAsync() on queueRegister.RoomId equals roomDetail.RoomId
+ where queueRegister.PatientRegisterId == asbitemIds.First().patientRegisterId
+ && asbitemIds.Select(s => s.AsbitemId).Contains(roomDetail.AsbitemId)
+ select queueRegister).ToList();
+ if (!queueRegisterList.Any())
+ {
+ throw new UserFriendlyException("该项目还未分诊,不需要跳过");
+ }
+
+ if (queueRegisterList.First().CompleteFlag == QueueRegisterCompleteFlag.AlreadyCalled)
+ {
+ throw new UserFriendlyException("该项目已叫号,不需要跳过");
+ }
+
+ //删除排队操作
+ await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == asbitemIds.First().patientRegisterId
+ && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
+
+ var entity = await _queueRegisterManager.AutomaticQueuingRoomAsync(asbitemIds.First().patientRegisterId, asbitemIds.Select(s => s.AsbitemId).ToList());
+
+ await _queueRegisterRepository.InsertAsync(entity, true);
+
+ }
#endregion
}
}
diff --git a/src/Shentun.Peis.Domain.Shared/Enums/QueueRegisterCompleteFlag.cs b/src/Shentun.Peis.Domain.Shared/Enums/QueueRegisterCompleteFlag.cs
index 7140cef..5e83fa1 100644
--- a/src/Shentun.Peis.Domain.Shared/Enums/QueueRegisterCompleteFlag.cs
+++ b/src/Shentun.Peis.Domain.Shared/Enums/QueueRegisterCompleteFlag.cs
@@ -24,5 +24,6 @@ namespace Shentun.Peis.Enums
///
[Description("过号")]
public const char OverNumber = '2';
+
}
}
diff --git a/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs b/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs
index 03eb582..1c0ead6 100644
--- a/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs
+++ b/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs
@@ -76,27 +76,35 @@ namespace Shentun.Peis.QueueRegisters
/// 自动排队
///
///
+ ///
///
- public async Task AutomaticQueuingRoomAsync(Guid PatientRegisterId)
+ ///
+ public async Task AutomaticQueuingRoomAsync(Guid PatientRegisterId, List excludeAsbitemIds)
{
//当天签到房间
var roomIds = await GetSignInRoomAsync();
- //获取当前人员登记的所有项目
+ //获取当前人员登记的所有项目 未检项目
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 == PatientRegisterId
+ && registerCheck.CompleteFlag == RegisterCheckCompleteFlag.UnChecked
select new
{
patientRegister.SexId,
registerCheckAsbitem.AsbitemId
}).ToList();
+ if (excludeAsbitemIds.Any())
+ {
+ asbitemIds = asbitemIds.Where(m => !excludeAsbitemIds.Contains(m.AsbitemId)).ToList();
+ }
+
if (!asbitemIds.Any())
- throw new UserFriendlyException("该人员未登记项目");
+ throw new UserFriendlyException("该人员无需要分诊的项目");
//获取项目所属房间需要等待的时间
var query = (from roomDetail in await _roomDetailRepository.GetQueryableAsync()
@@ -124,7 +132,8 @@ namespace Shentun.Peis.QueueRegisters
//获取已分诊的项目id
var triageAsbitemIds = query.Where(m => m.queueRegisterHaveEmpty != null
&& m.queueRegisterHaveEmpty.PatientRegisterId == PatientRegisterId
- && m.queueRegisterHaveEmpty.CompleteFlag == QueueRegisterCompleteFlag.AlreadyCalled).Select(s => s.roomDetail.AsbitemId)
+ && m.queueRegisterHaveEmpty.CompleteFlag == QueueRegisterCompleteFlag.AlreadyCalled
+ ).Select(s => s.roomDetail.AsbitemId)
.Distinct().ToList();
var roomGroup = query.GroupBy(g => g.roomId);
@@ -148,10 +157,6 @@ namespace Shentun.Peis.QueueRegisters
if (!triageAsbitemIds.Any(date => roomAsbitemIds.Contains(date))
&& isForSex)
{
-
- //asbitemIds
-
-
queueRoomDtoList.Add(new QueueRoomDto
{
RoomId = item.Key,
@@ -180,21 +185,6 @@ namespace Shentun.Peis.QueueRegisters
{
throw new UserFriendlyException("该人员登记的项目未在房间中维护");
}
- //else
- //{
- // //无排队信息
- // var roomId = (from roomDetail in await _roomDetailRepository.GetQueryableAsync()
- // join room in await _roomRepository.GetQueryableAsync() on roomDetail.RoomId equals room.Id
- // where asbitemIds.Contains(roomDetail.AsbitemId)
- // orderby room.QueueTime, room.DisplayOrder ascending
- // select room.Id).FirstOrDefault();
- // if (roomId == Guid.Empty)
- // {
- // throw new UserFriendlyException("该人员登记的项目未在房间中维护");
- // }
-
- // return await ManualQueuingRoomAsync(PatientRegisterId, roomId);
- //}
}
@@ -230,6 +220,8 @@ namespace Shentun.Peis.QueueRegisters
queueRegisterEnt.CallTime = DateTime.Now;
}
+
+
return queueRegisterEnt;
}