vaining01 11 months ago
parent
commit
682903bd6a
  1. 19
      src/Shentun.Peis.Application.Contracts/QueueRegisters/CreateGiveUpAsbitemInputDto.cs
  2. 15
      src/Shentun.Peis.Application.Contracts/QueueRegisters/CreateNewAsbitemTriageInputDto.cs
  3. 47
      src/Shentun.Peis.Application.Contracts/QueueRegisters/GetAppQueueRegisterByIdNoDto.cs
  4. 11
      src/Shentun.Peis.Application.Contracts/QueueRegisters/SmallProgramResultDto.cs
  5. 181
      src/Shentun.Peis.Application/QueueRegisters/QueueRegisterAppService.cs
  6. 1
      src/Shentun.Peis.Domain.Shared/Enums/QueueRegisterCompleteFlag.cs
  7. 2
      src/Shentun.Peis.Domain/QueueRegisters/QueueRegister.cs
  8. 38
      src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs

19
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
{
/// <summary>
/// 检查ID
/// </summary>
public Guid RegisterCheckId { get; set; }
/// <summary>
/// 是否放弃 Y=放弃 N=未放弃
/// </summary>
public char IsGiveUp { get; set; }
}
}

15
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
{
/// <summary>
/// 检查Id
/// </summary>
public Guid RegisterCheckId { get; set; }
}
}

47
src/Shentun.Peis.Application.Contracts/QueueRegisters/GetAppQueueRegisterByIdNoDto.cs

@ -10,7 +10,7 @@ namespace Shentun.Peis.QueueRegisters
/// 姓名
/// </summary>
public string PatientName { get; set; }
/// <summary>
/// 身份证号码
/// </summary>
@ -24,7 +24,7 @@ namespace Shentun.Peis.QueueRegisters
/// <summary>
/// 性别
/// </summary>
public string SexName { get; set;}
public string SexName { get; set; }
/// <summary>
/// 手机号
@ -54,8 +54,49 @@ namespace Shentun.Peis.QueueRegisters
public int QueueCount { get; set; }
/// <summary>
/// 完成标志 (o=候诊 1=已呼 2=过号)
/// 完成标志 (o=候诊 1=已呼 2=过号 3=放弃)
/// </summary>
public char CompleteFlag { get; set; }
/// <summary>
/// 分诊过的项目,只取已呼人员
/// </summary>
public List<TriageAsbitemDetailDto> TriageAsbitemDetail { get; set; } = new List<TriageAsbitemDetailDto>();
}
/// <summary>
/// 分诊项目
/// </summary>
public class TriageAsbitemDetailDto
{
/// <summary>
/// 组合项目名称
/// </summary>
public string AsbitemName { get; set; }
/// <summary>
/// 检查ID
/// </summary>
public Guid RegisterCheckId { get; set; }
/// <summary>
/// 房间名称
/// </summary>
public string RoomName { get; set; }
/// <summary>
/// 状态(o=候诊 1=已呼 2=过号 )
/// </summary>
public char? CompleteFlag { get; set; }
/// <summary>
/// 是否放弃检查 Y=放弃 N=未放弃
/// </summary>
public char IsGiveUp { get; set; }
}
}

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

181
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
/// <summary>
/// 获取未分诊的组合项目 根据人员登记ID
/// 获取未分诊的组合项目 根据人员登记ID (弃检、已检的剔除)
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
@ -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<QueueRegisterByPatientRegisterIdDto> 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<Guid>());
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 提供给小程序
/// <summary>
/// 小程序获取当前排队信息
@ -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<TriageAsbitemDetailDto> triageAsbitemDetailList = new List<TriageAsbitemDetailDto>();
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;
}
/// <summary>
/// 放弃项目
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QueueRegister/CreateGiveUpAsbitem")]
public async Task<SmallProgramResultDto> 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
};
}
/// <summary>
/// 创建新的项目分诊
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QueueRegister/CreateNewAsbitemTriage")]
public async Task<SmallProgramResultDto> 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
}
}

1
src/Shentun.Peis.Domain.Shared/Enums/QueueRegisterCompleteFlag.cs

@ -24,5 +24,6 @@ namespace Shentun.Peis.Enums
/// </summary>
[Description("过号")]
public const char OverNumber = '2';
}
}

2
src/Shentun.Peis.Domain/QueueRegisters/QueueRegister.cs

@ -32,7 +32,7 @@ namespace Shentun.Peis.Models
[MaxLength(1)]
public char CompleteFlag { get; set; }
/// <summary>
/// 未完成原因 暂时未用到
/// 未完成原因 0-正常(默认值) 1-放弃检查
/// </summary>
[Column("no_complete_reason")]
[MaxLength(1)]

38
src/Shentun.Peis.Domain/QueueRegisters/QueueRegisterManager.cs

@ -76,27 +76,35 @@ namespace Shentun.Peis.QueueRegisters
/// 自动排队
/// </summary>
/// <param name="PatientRegisterId"></param>
/// <param name="excludeAsbitemIds"></param>
/// <returns></returns>
public async Task<QueueRegister> AutomaticQueuingRoomAsync(Guid PatientRegisterId)
/// <exception cref="UserFriendlyException"></exception>
public async Task<QueueRegister> AutomaticQueuingRoomAsync(Guid PatientRegisterId, List<Guid> 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;
}

Loading…
Cancel
Save