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; } + } +}