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.Contracts/QueueRegisters/SmallProgramResultDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/SmallProgramResultDto.cs
new file mode 100644
index 0000000..0d87587
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/SmallProgramResultDto.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.QueueRegisters
+{
+ public class SmallProgramResultDto
+ {
+ public bool IsSuccess { get; set; }
+ }
+}
diff --git a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
index 4383930..0b72202 100644
--- a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
+++ b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
@@ -77,7 +77,8 @@ namespace Shentun.Peis.QueueRegisters
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
+ where queueRegister.PatientRegisterId == input.PatientRegisterId
+ && queueRegister.CreationTime >= DateTime.Now.Date
orderby queueRegister.CreationTime descending
select new
{
@@ -95,6 +96,7 @@ namespace Shentun.Peis.QueueRegisters
&& queueRegister.CreationTime >= DateTime.Now.Date
&& queueRegister.DisplayOrder < queueRegisterEnt.queueRegister.DisplayOrder
&& patientRegister.IsVip == queueRegisterEnt.isVip
+ && queueRegister.NoCompleteReason == '0'
select queueRegister).CountAsync();
var entDto = new QueueRegisterByPatientRegisterIdDto
@@ -129,7 +131,8 @@ 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).AsQueryable()
+ .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()
@@ -149,7 +152,7 @@ namespace Shentun.Peis.QueueRegisters
///
- /// 获取未分诊的组合项目 根据人员登记ID
+ /// 获取未分诊的组合项目 根据人员登记ID (弃检、已检的剔除)
///
///
///
@@ -161,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()
@@ -170,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
{
@@ -274,7 +279,7 @@ namespace Shentun.Peis.QueueRegisters
{
RoomId = s.Key,
RoomName = s.FirstOrDefault().roomName,
- QueueTime = s.Count(m => m.queueRegisterHaveEmpty != null) * s.FirstOrDefault().queueTime,
+ QueueTime = s.Count(m => m.queueRegisterHaveEmpty != null && m.queueRegisterHaveEmpty.NoCompleteReason == '0') * s.FirstOrDefault().queueTime,
ForSexId = s.FirstOrDefault().forSexId
}).ToList();
@@ -319,7 +324,8 @@ namespace Shentun.Peis.QueueRegisters
}
//删除排队操作
- await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
+ await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId
+ && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
var entity = await _queueRegisterManager.ManualQueuingRoomAsync(input.PatientRegisterId, input.RoomId);
@@ -340,10 +346,11 @@ namespace Shentun.Peis.QueueRegisters
[HttpPost("api/app/QueueRegister/AutomaticQueuingRoom")]
public async Task AutomaticQueuingRoomAsync(AutomaticQueuingRoomInputDto input)
{
- //删除排队操作
- await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
+ //删除排队操作
+ await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId
+ && 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);
@@ -396,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
};
@@ -552,6 +559,7 @@ namespace Shentun.Peis.QueueRegisters
return entDto;
}
+ #region 提供给小程序
///
/// 小程序获取当前排队信息
@@ -590,7 +598,158 @@ 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);
+ }
+
+ return new SmallProgramResultDto
+ {
+ IsSuccess = true
+ };
+ }
+
+
+ ///
+ /// 创建新的项目分诊
+ ///
+ ///
+ ///
+ [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);
+
+ return new SmallProgramResultDto
+ {
+ IsSuccess = 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/QueueRegister.cs b/src/Shentun.Peis.Domain/QueueRegisters/QueueRegister.cs
index 1ea2c35..bad471c 100644
--- a/src/Shentun.Peis.Domain/QueueRegisters/QueueRegister.cs
+++ b/src/Shentun.Peis.Domain/QueueRegisters/QueueRegister.cs
@@ -32,7 +32,7 @@ namespace Shentun.Peis.Models
[MaxLength(1)]
public char CompleteFlag { get; set; }
///
- /// 未完成原因 暂时未用到
+ /// 未完成原因 0-正常(默认值) 1-放弃检查
///
[Column("no_complete_reason")]
[MaxLength(1)]
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;
}