diff --git a/src/Shentun.Peis.Application.Contracts/Asbitems/AsbitemIdInputDto.cs b/src/Shentun.Peis.Application.Contracts/Asbitems/AsbitemIdInputDto.cs
index 20956ca..a97a818 100644
--- a/src/Shentun.Peis.Application.Contracts/Asbitems/AsbitemIdInputDto.cs
+++ b/src/Shentun.Peis.Application.Contracts/Asbitems/AsbitemIdInputDto.cs
@@ -7,5 +7,6 @@ namespace Shentun.Peis.Asbitems
public class AsbitemIdInputDto
{
public Guid AsbitemId { get; set; }
+
}
}
diff --git a/src/Shentun.Peis.Application.Contracts/QueueRegisters/GetRoomListByAsbitemIdInputDto.cs b/src/Shentun.Peis.Application.Contracts/QueueRegisters/GetRoomListByAsbitemIdInputDto.cs
new file mode 100644
index 0000000..6edc080
--- /dev/null
+++ b/src/Shentun.Peis.Application.Contracts/QueueRegisters/GetRoomListByAsbitemIdInputDto.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.Peis.QueueRegisters
+{
+ public class GetRoomListByAsbitemIdInputDto
+ {
+ public Guid AsbitemId { get; set; }
+
+ ///
+ /// 人员ID
+ ///
+ public Guid PatientRegisterId { get; set; }
+ }
+}
diff --git a/src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs b/src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs
index 0c55a5c..1d0e214 100644
--- a/src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs
+++ b/src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs
@@ -10,6 +10,8 @@ namespace Shentun.Peis.Rooms
public string RoomName { get; set; }
+ public char ForSexId { get; set; }
+
public decimal QueueTime { get; set; }
}
}
diff --git a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
index 26e8890..4383930 100644
--- a/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
+++ b/src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
@@ -241,11 +241,18 @@ namespace Shentun.Peis.QueueRegisters
///
///
[HttpPost("api/app/QueueRegister/GetRoomListByAsbitemId")]
- public async Task> GetRoomListByAsbitemIdAsync(AsbitemIdInputDto input)
+ public async Task> GetRoomListByAsbitemIdAsync(GetRoomListByAsbitemIdInputDto input)
{
//已签到的房间
var roomIds = await _queueRegisterManager.GetSignInRoomAsync();
+ 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
@@ -259,6 +266,7 @@ namespace Shentun.Peis.QueueRegisters
roomId = room.Id,
roomName = room.DisplayName,
queueTime = room.QueueTime,
+ forSexId = room.ForSexId,
queueRegisterHaveEmpty
}).ToList();
@@ -267,8 +275,17 @@ namespace Shentun.Peis.QueueRegisters
RoomId = s.Key,
RoomName = s.FirstOrDefault().roomName,
QueueTime = s.Count(m => m.queueRegisterHaveEmpty != null) * 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;
@@ -302,7 +319,7 @@ namespace Shentun.Peis.QueueRegisters
}
//删除排队操作
- await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId, true);
+ await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
var entity = await _queueRegisterManager.ManualQueuingRoomAsync(input.PatientRegisterId, input.RoomId);
@@ -324,7 +341,7 @@ namespace Shentun.Peis.QueueRegisters
public async Task AutomaticQueuingRoomAsync(AutomaticQueuingRoomInputDto input)
{
//删除排队操作
- await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId, true);
+ await _queueRegisterRepository.DeleteAsync(d => d.PatientRegisterId == input.PatientRegisterId && d.CompleteFlag != QueueRegisterCompleteFlag.AlreadyCalled, true);
var entity = await _queueRegisterManager.AutomaticQueuingRoomAsync(input.PatientRegisterId);
@@ -491,7 +508,7 @@ namespace Shentun.Peis.QueueRegisters
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).FirstOrDefault();
+ var visitEnt = queueRegisterList.Where(m => m.completeFlag == QueueRegisterCompleteFlag.AlreadyCalled).OrderByDescending(o => o.callTime).FirstOrDefault();
if (visitEnt != null)
{
diff --git a/src/Shentun.Peis.DbMigrator/appsettings.json b/src/Shentun.Peis.DbMigrator/appsettings.json
index f671d85..3fd082f 100644
--- a/src/Shentun.Peis.DbMigrator/appsettings.json
+++ b/src/Shentun.Peis.DbMigrator/appsettings.json
@@ -1,9 +1,9 @@
{
"ConnectionStrings": {
//"Default": "Host=140.143.162.39;Port=5432;Database=ShentunPeis240701;User ID=postgres;Password=shentun123;"
- "Default": "Host=192.168.2.67;Port=5432;Database=ShentunPeis;User ID=postgres;Password=st123;"
+ //"Default": "Host=192.168.2.67;Port=5432;Database=ShentunPeis;User ID=postgres;Password=st123;"
//"Default": "Host=localhost;Port=5432;Database=ShentunPeis1218;User ID=postgres;Password=wxd123;"
- //"Default": "Host=10.1.12.140;Port=5432;Database=ShentunPeis0508;User ID=postgres;Password=st123;"
+ "Default": "Host=10.1.12.140;Port=5432;Database=ShentunPeis0508;User ID=postgres;Password=st123;"
},
"OpenIddict": {
"Applications": {
diff --git a/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs b/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs
index cf6fa58..03eb582 100644
--- a/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs
+++ b/src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs
@@ -1,4 +1,5 @@
using log4net.Util;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.EntityFrameworkCore;
using Shentun.Peis.Enums;
using Shentun.Peis.Models;
@@ -88,7 +89,11 @@ namespace Shentun.Peis.QueueRegisters
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
where patientRegister.Id == PatientRegisterId
- select registerCheckAsbitem.AsbitemId).ToList();
+ select new
+ {
+ patientRegister.SexId,
+ registerCheckAsbitem.AsbitemId
+ }).ToList();
if (!asbitemIds.Any())
throw new UserFriendlyException("该人员未登记项目");
@@ -96,30 +101,80 @@ namespace Shentun.Peis.QueueRegisters
//获取项目所属房间需要等待的时间
var query = (from roomDetail in await _roomDetailRepository.GetQueryableAsync()
join room in await _roomRepository.GetQueryableAsync() on roomDetail.RoomId equals room.Id
- join queueRegister in (await _queueRegisterRepository.GetQueryableAsync()).Where(m => m.CreationTime >= DateTime.Now.Date).AsQueryable()
+ join queueRegister in (await _queueRegisterRepository.GetQueryableAsync())
+ .Where(m => m.CreationTime >= DateTime.Now.Date).AsQueryable()
on room.Id equals queueRegister.RoomId into queueRegisterTemp
from queueRegisterHaveEmpty in queueRegisterTemp.DefaultIfEmpty()
- where asbitemIds.Contains(roomDetail.AsbitemId)
+ where asbitemIds.Select(s => s.AsbitemId).Contains(roomDetail.AsbitemId)
&& room.IsActive == 'Y'
&& roomIds.Contains(room.Id)
select new
{
roomId = room.Id,
+ forSexId = room.ForSexId,
queueTime = room.QueueTime,
- queueRegisterHaveEmpty
+ queueRegisterHaveEmpty,
+ roomDetail
}).ToList();
if (query.Any())
{
- var roomGroup = query.ToList().GroupBy(g => g.roomId).Select(s => new
+
+
+ //获取已分诊的项目id
+ var triageAsbitemIds = query.Where(m => m.queueRegisterHaveEmpty != null
+ && m.queueRegisterHaveEmpty.PatientRegisterId == PatientRegisterId
+ && m.queueRegisterHaveEmpty.CompleteFlag == QueueRegisterCompleteFlag.AlreadyCalled).Select(s => s.roomDetail.AsbitemId)
+ .Distinct().ToList();
+
+ var roomGroup = query.GroupBy(g => g.roomId);
+
+ List queueRoomDtoList = new List();
+
+ foreach (var item in roomGroup)
+ {
+ var isForSex = false; //适配性别
+
+ if (asbitemIds.FirstOrDefault().SexId == SexFlag.UnKnown)
+ {
+ isForSex = item.FirstOrDefault().forSexId == ForSexFlag.All ? true : false;
+ }
+ else
+ {
+ isForSex = item.FirstOrDefault().forSexId == ForSexFlag.All || item.FirstOrDefault().forSexId == asbitemIds.FirstOrDefault().SexId ? true : false;
+ }
+
+ var roomAsbitemIds = item.Select(s => s.roomDetail.AsbitemId).ToList();
+ if (!triageAsbitemIds.Any(date => roomAsbitemIds.Contains(date))
+ && isForSex)
+ {
+
+ //asbitemIds
+
+
+ queueRoomDtoList.Add(new QueueRoomDto
+ {
+ RoomId = item.Key,
+ QueueTime = item.FirstOrDefault().queueTime,
+ SumQueueTime = item.Count(m => m.queueRegisterHaveEmpty != null
+ && m.queueRegisterHaveEmpty.CompleteFlag == QueueRegisterCompleteFlag.Wait) * item.FirstOrDefault().queueTime
+ });
+ }
+ }
+
+
+ if (queueRoomDtoList.Any())
+ {
+ var roomId = queueRoomDtoList.OrderBy(o => o.SumQueueTime).ThenBy(o => o.QueueTime).FirstOrDefault().RoomId;
+
+ return await ManualQueuingRoomAsync(PatientRegisterId, roomId);
+ }
+ else
{
- roomId = s.Key,
- queueTime = s.FirstOrDefault().queueTime,
- sumQueueTime = s.Count(m => m.queueRegisterHaveEmpty != null) * s.FirstOrDefault().queueTime
- }).OrderBy(o => o.sumQueueTime).ThenBy(o => o.queueTime).First();
+ throw new UserFriendlyException("无合适的房间分配");
+ }
- return await ManualQueuingRoomAsync(PatientRegisterId, roomGroup.roomId);
}
else
{
diff --git a/src/Shentun.Peis.Domain/QueueRegisters/QueueRoomDto.cs b/src/Shentun.Peis.Domain/QueueRegisters/QueueRoomDto.cs
new file mode 100644
index 0000000..842b74b
--- /dev/null
+++ b/src/Shentun.Peis.Domain/QueueRegisters/QueueRoomDto.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Shentun.Peis.QueueRegisters
+{
+ public class QueueRoomDto
+ {
+ public Guid RoomId { get; set; }
+
+ ///
+ /// 房间单个排队的时间
+ ///
+ public decimal QueueTime { get; set; }
+
+ ///
+ /// 该房间总等待时间
+ ///
+ public decimal SumQueueTime { get; set; }
+ }
+}