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