Browse Source

叫号

master
wxd 11 months ago
parent
commit
ca641e6aea
  1. 1
      src/Shentun.Peis.Application.Contracts/Asbitems/AsbitemIdInputDto.cs
  2. 16
      src/Shentun.Peis.Application.Contracts/QueueRegisters/GetRoomListByAsbitemIdInputDto.cs
  3. 2
      src/Shentun.Peis.Application.Contracts/Rooms/BaseRoomDto.cs
  4. 25
      src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
  5. 4
      src/Shentun.Peis.DbMigrator/appsettings.json
  6. 75
      src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs
  7. 23
      src/Shentun.Peis.Domain/QueueRegisters/QueueRoomDto.cs

1
src/Shentun.Peis.Application.Contracts/Asbitems/AsbitemIdInputDto.cs

@ -7,5 +7,6 @@ namespace Shentun.Peis.Asbitems
public class AsbitemIdInputDto
{
public Guid AsbitemId { get; set; }
}
}

16
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; }
/// <summary>
/// 人员ID
/// </summary>
public Guid PatientRegisterId { get; set; }
}
}

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

25
src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs

@ -241,11 +241,18 @@ namespace Shentun.Peis.QueueRegisters
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QueueRegister/GetRoomListByAsbitemId")]
public async Task<List<BaseRoomDto>> GetRoomListByAsbitemIdAsync(AsbitemIdInputDto input)
public async Task<List<BaseRoomDto>> 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<QueueRegisterByPatientRegisterIdDto> 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)
{

4
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": {

75
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<QueueRoomDto> queueRoomDtoList = new List<QueueRoomDto>();
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
{

23
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; }
/// <summary>
/// 房间单个排队的时间
/// </summary>
public decimal QueueTime { get; set; }
/// <summary>
/// 该房间总等待时间
/// </summary>
public decimal SumQueueTime { get; set; }
}
}
Loading…
Cancel
Save