using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Org.BouncyCastle.Asn1.Ocsp; using Shentun.Peis.Asbitems; using Shentun.Peis.Enums; using Shentun.Peis.FollowUps; using Shentun.Peis.MenuInfos; using Shentun.Peis.Models; using Shentun.Peis.PatientRegisters; using Shentun.Peis.RegisterCheckItems; using Shentun.Peis.RegisterCheckSummarys; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.Domain.Repositories; using Volo.Abp.Guids; using Volo.Abp.Identity; using Volo.Abp.ObjectMapping; using Volo.Abp.Users; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; namespace Shentun.Peis.RegisterChecks { /// /// 登记检查单 /// [ApiExplorerSettings(GroupName = "Work")] [Authorize] public class RegisterCheckAppService : ApplicationService { private readonly IRepository _registerCheckItemRepository; private readonly IRepository _registerCheckAsbitemRepository; private readonly IRepository _itemTypeRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _referenceRangeRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _registerCheckSummaryRepository; private readonly IRepository _registerCheckSuggestionRepository; private readonly IRepository _userRepository; private readonly RegisterCheckManager _registerCheckManager; private readonly RegisterCheckItemManager _registerCheckItemManager; private readonly CacheService _cacheService; private readonly IGuidGenerator _guidGenerator; private readonly IConfiguration _configuration; private readonly ICurrentUser _currentUser; private readonly IRepository _userItemTypeRepository; private readonly IRepository _asbitemRepository; private readonly IRepository _lisRequestRepository; private readonly FollowUpAppService _followUpAppService; private readonly IRepository _doctorSignInRepository; public RegisterCheckAppService(IRepository registerCheckRepository, IRepository registerCheckItemRepository, IRepository patientRegisterRepository, IRepository referenceRangeRepository, IRepository registerCheckSummaryRepository, IRepository registerCheckSuggestionRepository, IRepository userRepository, RegisterCheckManager registerCheckManager, RegisterCheckItemManager registerCheckItemManager, CacheService cacheService, IGuidGenerator guidGenerator, IConfiguration configuration, ICurrentUser currentUser, IRepository userItemTypeRepository, IRepository asbitemRepository, IRepository registerCheckAsbitemRepository, IRepository itemTypeRepository, IRepository lisRequestRepository, FollowUpAppService followUpAppService, IRepository doctorSignInRepository) { _registerCheckRepository = registerCheckRepository; _userRepository = userRepository; _registerCheckManager = registerCheckManager; _patientRegisterRepository = patientRegisterRepository; _referenceRangeRepository = referenceRangeRepository; _registerCheckItemRepository = registerCheckItemRepository; _registerCheckSummaryRepository = registerCheckSummaryRepository; _registerCheckSuggestionRepository = registerCheckSuggestionRepository; _registerCheckItemManager = registerCheckItemManager; _cacheService = cacheService; _guidGenerator = guidGenerator; _configuration = configuration; _currentUser = currentUser; _userItemTypeRepository = userItemTypeRepository; _asbitemRepository = asbitemRepository; _registerCheckAsbitemRepository = registerCheckAsbitemRepository; _itemTypeRepository = itemTypeRepository; _lisRequestRepository = lisRequestRepository; _followUpAppService = followUpAppService; _doctorSignInRepository = doctorSignInRepository; } /// /// 根据RegisterCheckId获取当前实体数据 /// /// /// [HttpGet("api/app/registercheck/getregistercheck")] public async Task GetRegisterCheckAsync(Guid id) { var registerCheckEntity = (await _registerCheckRepository.GetQueryableAsync()) .Include(x => x.RegisterCheckAsbitems) .ThenInclude(x => x.Asbitem) .ThenInclude(x => x.ItemType) .FirstOrDefault(f => f.Id == id); var registerCheckDto = new RegisterCheckDto { AuditorUserId = registerCheckEntity.AuditorUserId, AuditTime = registerCheckEntity.AuditTime, CheckDate = DataHelper.ConversionDateToString(registerCheckEntity.CheckDate), CheckDoctorId = registerCheckEntity.CheckDoctorId, CheckRequestNo = registerCheckEntity.CheckRequestNo, CheckRequestPrintTimes = registerCheckEntity.CheckRequestPrintTimes, CompleteFlag = registerCheckEntity.CompleteFlag, CreationTime = registerCheckEntity.CreationTime, CreatorId = registerCheckEntity.CreatorId, //CriticalValue = registerCheckEntity.CriticalValue, //CriticalValueCreateDate = DataHelper.ConversionDateToString(registerCheckEntity.CriticalValueCreateDate), //CriticalValueFlag = registerCheckEntity.IsCriticalValue, //CriticalValueProcessContent = registerCheckEntity.CriticalValueContent, //CriticalValueProcessDate = DataHelper.ConversionDateToString(registerCheckEntity.CriticalValueProcessDate), //CriticalValueProcessDoctor = registerCheckEntity.CriticalValueProcessDoctor, //CriticalValueProcessFlag = registerCheckEntity.CriticalValueProcessFlag, Id = registerCheckEntity.Id, IsAudit = registerCheckEntity.IsAudit, IsLock = registerCheckEntity.IsLock, LastModificationTime = registerCheckEntity.LastModificationTime, LastModifierId = registerCheckEntity.LastModifierId, ThirdInfo = registerCheckEntity.ThirdInfo, LastModifierName = _cacheService.GetSurnameAsync(registerCheckEntity.LastModifierId).Result, CreatorName = _cacheService.GetSurnameAsync(registerCheckEntity.CreatorId).Result, IsCharge = registerCheckEntity.RegisterCheckAsbitems.Where(m => m.PayTypeFlag == PayTypeFlag.PersonPay && m.IsCharge == 'N').Count() > 0 ? 'N' : 'Y', AsbitemName = string.Join(",", registerCheckEntity.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()), IsPacsCheck = registerCheckEntity.IsPacsCheck, PacsUploadDate = DataHelper.ConversionDateToString(registerCheckEntity.PacsUploadDate), PacsCheckDate = DataHelper.ConversionDateToString(registerCheckEntity.PacsCheckDate), CriticalValueContent = registerCheckEntity.CriticalValueContent, CriticalValueCreationTime = DataHelper.ConversionDateToString(registerCheckEntity.CriticalValueCreationTime), //CriticalValueCreatorId = registerCheckEntity.CriticalValueCreatorId, //CriticalValuePhoneCreatorId = registerCheckEntity.CriticalValuePhoneCreatorId, FollowUpCreationTime = DataHelper.ConversionDateToString(registerCheckEntity.FollowUpCreationTime), // FollowUpCreatorId = registerCheckEntity.FollowUpCreatorId, IsFollowUp = registerCheckEntity.IsFollowUp == null ? 'N' : registerCheckEntity.IsFollowUp, IsCriticalValue = registerCheckEntity.IsCriticalValue == null ? 'N' : registerCheckEntity.IsCriticalValue, IsCriticalValueAudit = registerCheckEntity.IsCriticalValueAudit == null ? 'N' : registerCheckEntity.IsCriticalValueAudit, //IsCriticalValuePhoneComplete = registerCheckEntity.IsCriticalValuePhoneComplete, //IsCriticalValueSmsComplete = registerCheckEntity.IsCriticalValueSmsComplete, IsReview = registerCheckEntity.IsReview == null ? 'N' : registerCheckEntity.IsReview, CriticalRangeValue = registerCheckEntity.CriticalRangeValue, CriticalValueCreatorName = _cacheService.GetSurnameAsync(registerCheckEntity.CriticalValueCreatorId).GetAwaiter().GetResult(), FollowUpCreatorName = _cacheService.GetSurnameAsync(registerCheckEntity.FollowUpCreatorId).GetAwaiter().GetResult(), DiagnosisLevelId = registerCheckEntity.DiagnosisLevelId, CheckTypeFlag = registerCheckEntity.RegisterCheckAsbitems.FirstOrDefault().Asbitem.ItemType.CheckTypeFlag }; return registerCheckDto; } /// /// 获取登记check表数据(附带组合项目名称跟是否收费) 医生诊台左边列表 只有一个收费就显示收费 /// /// /// [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterId")] public async Task> GetRegisterCheckAsbitemsByPatientRegisterIdAsync(PatientRegisterIdInputDto input) { //var list = (from registerCheck in await _registerCheckRepository.GetQueryableAsync() // join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() // on registerCheck.Id equals registerCheckAsbitem.AsbitemId // join asbitem in await _asbitemRepository.GetQueryableAsync() // on registerCheckAsbitem.AsbitemId equals asbitem.Id // join itemType in await _itemTypeRepository.GetQueryableAsync() // on asbitem.ItemTypeId equals itemType.Id // where registerCheck.PatientRegisterId == input.PatientRegisterId // orderby itemType.DisplayName, asbitem.DisplayOrder // select new // { // registerCheck, // registerCheckAsbitem, // asbitem, // itemType // }).ToList(); var entlist = (await _registerCheckRepository.GetQueryableAsync()) .Include(x => x.RegisterCheckAsbitems) .ThenInclude(x => x.Asbitem).ThenInclude(x => x.ItemType) .Where(m => m.PatientRegisterId == input.PatientRegisterId).ToList(); //排序 entlist = entlist.OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.ItemType.DisplayOrder)).ToList() .OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.DisplayOrder)).ToList(); var entdto = entlist.Where(m => m.RegisterCheckAsbitems.Where(mm => mm.Asbitem.IsCheck == 'Y').Count() > 0).Select(s => new RegisterCheckOrAsbitemNameOrIsChargeDto { CheckTypeFlag = s.RegisterCheckAsbitems.First().Asbitem.ItemType.CheckTypeFlag, AsbitemName = string.Join(",", s.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()), AuditorUserId = s.AuditorUserId, AuditTime = s.AuditTime, CheckDate = DataHelper.ConversionDateToString(s.CheckDate), CheckDoctorId = s.CheckDoctorId, CheckRequestNo = s.CheckRequestNo, CheckRequestPrintTimes = s.CheckRequestPrintTimes, CompleteFlag = s.CompleteFlag, CreationTime = s.CreationTime, CreatorId = s.CreatorId, //CriticalValue = s.CriticalValue, CriticalValueContent = s.CriticalValueContent, CriticalValueCreationTime = DataHelper.ConversionDateToString(s.CriticalValueCreationTime), // CriticalValueCreatorId = s.CriticalValueCreatorId, //CriticalValuePhoneCreatorId = s.CriticalValuePhoneCreatorId, FollowUpCreationTime = DataHelper.ConversionDateToString(s.FollowUpCreationTime), //FollowUpCreatorId = s.FollowUpCreatorId, IsFollowUp = s.IsFollowUp == null ? 'N' : s.IsFollowUp, IsCriticalValue = s.IsCriticalValue == null ? 'N' : s.IsCriticalValue, IsCriticalValueAudit = s.IsCriticalValueAudit == null ? 'N' : s.IsCriticalValueAudit, // IsCriticalValuePhoneComplete = s.IsCriticalValuePhoneComplete, // IsCriticalValueSmsComplete = s.IsCriticalValueSmsComplete, IsReview = s.IsReview == null ? 'N' : s.IsReview, CriticalRangeValue = s.CriticalRangeValue, IsPacsCheck = s.IsPacsCheck, PacsUploadDate = DataHelper.ConversionDateToString(s.PacsUploadDate), PacsCheckDate = DataHelper.ConversionDateToString(s.PacsCheckDate), //CriticalValueCreateDate = DataHelper.ConversionDateToString(s.CriticalValueCreateDate), //CriticalValueFlag = s.IsCriticalValue, //CriticalValueProcessContent = s.CriticalValueContent, // CriticalValueProcessDate = DataHelper.ConversionDateToString(s.CriticalValueProcessDate), // CriticalValueProcessDoctor = s.CriticalValueProcessDoctor, // CriticalValueProcessFlag = s.CriticalValueProcessFlag, Id = s.Id, IsAudit = s.IsAudit, IsCharge = s.RegisterCheckAsbitems.Where(m => m.IsCharge == 'Y').Count() > 0 ? 'Y' : 'N', IsLock = s.IsLock, LastModificationTime = s.LastModificationTime, LastModifierId = s.LastModifierId, //RegisterAsbitemId = s.RegisterAsbitemId, ThirdInfo = s.ThirdInfo, CreatorName = _cacheService.GetSurnameAsync(s.CreatorId).Result, LastModifierName = _cacheService.GetSurnameAsync(s.LastModifierId).Result, ItemTypeDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.ItemType.DisplayOrder, AsbitemDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.DisplayOrder, CriticalValueCreatorName = _cacheService.GetSurnameAsync(s.CriticalValueCreatorId).GetAwaiter().GetResult(), FollowUpCreatorName = _cacheService.GetSurnameAsync(s.FollowUpCreatorId).GetAwaiter().GetResult() }).ToList(); return entdto; } /// /// 获取登记check表数据(附带组合项目名称跟是否收费) 医生诊台左边列表 只有一个收费就显示收费 增加项目类别权限控制 /// /// /// [HttpPost("api/app/RegisterCheck/GetRegisterCheckWithAsbitems")] public async Task> GetRegisterCheckWithAsbitemsAsync(PatientRegisterIdInputDto input) { var entlist = (await _registerCheckRepository.GetQueryableAsync()) .Include(x => x.RegisterCheckAsbitems) .ThenInclude(x => x.Asbitem).ThenInclude(x => x.ItemType) .Where(m => m.RegisterCheckAsbitems.Select(s => s.PatientRegisterId) .Contains(input.PatientRegisterId) && m.RegisterCheckAsbitems.Select(s => s.Asbitem.IsCheck).Contains('Y')); #region 增加项目类别权限 string AdminId = _configuration.GetValue("AdminId"); if (_currentUser.Id.Value != Guid.Parse(AdminId)) { var asbitemIds = (from userItemType in await _userItemTypeRepository.GetQueryableAsync() join asbitem in await _asbitemRepository.GetQueryableAsync() on userItemType.ItemTypeId equals asbitem.ItemTypeId where userItemType.UserId == _currentUser.Id.Value select asbitem.Id).ToList(); if (asbitemIds.Any()) { entlist = entlist.Where(m => asbitemIds.Contains(m.RegisterCheckAsbitems.FirstOrDefault().AsbitemId)); } else { return new List(); } } #endregion //排序 entlist = entlist.OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.ItemType.DisplayOrder)) .ThenBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.DisplayOrder)); var entdto = entlist.ToList().Select(s => new RegisterCheckWithAsbitemsDto { AsbitemName = string.Join(",", s.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()), AuditorUserId = s.AuditorUserId, AuditTime = s.AuditTime, CheckDate = DataHelper.ConversionDateToString(s.CheckDate), CheckDoctorId = s.CheckDoctorId, CheckRequestNo = s.CheckRequestNo, CompleteFlag = s.CompleteFlag, Id = s.Id, IsAudit = s.IsAudit, IsCharge = s.RegisterCheckAsbitems.Where(m => m.IsCharge == 'Y').Count() > 0 ? 'Y' : 'N', IsLock = s.IsLock, CheckTypeFlag = s.RegisterCheckAsbitems.First().Asbitem.ItemType.CheckTypeFlag, ItemTypeDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.ItemType.DisplayOrder, AsbitemDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.DisplayOrder, }).ToList(); return entdto; } /// /// 保存结果 /// /// /// /// [HttpPost("api/app/registercheck/UpdateCheckResult")] public async Task UpdateCheckResult(UpdateCheckResultDto input) { if (input == null) { throw new UserFriendlyException("input参数不能为空"); } if (input.RegisterCheckItems == null) { throw new UserFriendlyException("RegisterCheckItems参数不能为空"); } if (!input.RegisterCheckItems.Where(o => !string.IsNullOrWhiteSpace(o.Result)).ToList().Any()) { throw new UserFriendlyException("明细结果不能全部为空"); } if (input.Summarys == null || !input.Summarys.Any()) { throw new UserFriendlyException("小结不能为空"); } var registerCheck = await _registerCheckRepository.GetAsync(input.RegisterCheckId); var patientRegister = await _patientRegisterRepository.GetAsync(registerCheck.PatientRegisterId); //修改医生和检查日期 if (string.IsNullOrWhiteSpace(input.CheckDoctorId)) { input.CheckDoctorId = CurrentUser.Id.ToString(); } _registerCheckManager.UpdateCheckDoctorAndDateAsync(patientRegister, registerCheck, input.CheckDoctorId, input.CheckDate, input.ExecOrganizationUnitId); if (!string.IsNullOrWhiteSpace(input.AuditorName)) registerCheck.AuditorName = input.AuditorName; if (!string.IsNullOrWhiteSpace(input.LisSampleNo)) registerCheck.LisSampleNo = input.LisSampleNo; //更新人员登记信息完成标志 patientRegister.CompleteFlag = PatientRegisterCompleteFlag.PartCheck; await _patientRegisterRepository.UpdateAsync(patientRegister); await _registerCheckRepository.UpdateAsync(registerCheck); //修改项目结果 var registerCheckItems = await _registerCheckItemRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId); foreach (var registerCheckItem in registerCheckItems) { var inputCheckItem = input.RegisterCheckItems.Where(o => o.ItemId == registerCheckItem.ItemId).FirstOrDefault(); if (inputCheckItem == null) { continue; } var registerCheckItemUpdate = new RegisterCheckItem() { Result = inputCheckItem.Result, CheckDoctorName = inputCheckItem.CheckDoctorName, CriticalValue = inputCheckItem.CriticalValue, CheckDate = DateTime.Now }; await _registerCheckItemManager.UpdateRegisterCheckItemAsync(registerCheckItemUpdate, registerCheckItem); } await _registerCheckItemRepository.UpdateManyAsync(registerCheckItems); //修改小结 var deleteRegisterCheckSummarys = await _registerCheckSummaryRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId); await _registerCheckSummaryRepository.DeleteManyAsync(deleteRegisterCheckSummarys); for (var i = 0; i < input.Summarys.Count; i++) { var registerCheckSummary = new RegisterCheckSummary(_guidGenerator.Create()) { DisplayOrder = i + 1, RegisterCheckId = input.RegisterCheckId, Summary = input.Summarys[i].Summary, SummaryFlag = '0' }; await _registerCheckSummaryRepository.InsertAsync(registerCheckSummary); } //修改建议 var _registerCheckSuggestions = await _registerCheckSuggestionRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId); await _registerCheckSuggestionRepository.DeleteManyAsync(_registerCheckSuggestions); for (var i = 0; i < input.Suggestions.Count; i++) { var registerCheckSuggestion = new RegisterCheckSuggestion(_guidGenerator.Create()) { DisplayOrder = i + 1, RegisterCheckId = input.RegisterCheckId, Suggestion = input.Suggestions[i].Suggestion, }; await _registerCheckSuggestionRepository.InsertAsync(registerCheckSuggestion); } } ///// ///// 弃检跟恢复操作 0(为未检), 1(已检), 2(弃检) ///// ///// 检查单ID ///// 检查状态 ///// //[HttpPost("api/app/registercheck/updatecomplete")] //public async Task UpdateCompleteAsync(Guid RegisterCheckId, char CompleteFlag) //{ // var registerCheckEnt = await _registerCheckManager.UpdateCompleteAsync(RegisterCheckId, CompleteFlag); // return ObjectMapper.Map(registerCheckEnt); //} /// /// 批量弃检跟恢复操作 0(为未检), 1(已检), 2(弃检) /// /// /// [HttpPost("api/app/registercheck/updatecompletemany")] public async Task> UpdateCompleteManyAsync(List input) { List msg = new List(); if (input.Any()) { foreach (var item in input) { var registerCheckEnt = await _registerCheckManager.UpdateCompleteAsync(item.RegisterCheckId, item.CompleteFlag); var newentity = ObjectMapper.Map(registerCheckEnt); if (newentity != null) { msg.Add(newentity); } } } return msg; } /// /// 更新审核状态 Y 已审核 N 未审核 /// /// 检查单ID /// 审核状态( Y 已审核 N 未审核) /// [HttpPost("api/app/registercheck/updateisaudit")] public async Task UpdateIsAuditAsync(Guid RegisterCheckId, char IsAudit) { var registerCheckEnt = await _registerCheckManager.UpdateIsAuditAsync(RegisterCheckId, IsAudit); return ObjectMapper.Map(registerCheckEnt); } /// /// 更改检查医生(自动更新完成状态为已检) /// /// /// [HttpPost("api/app/registercheck/updatecheckdoctor")] public async Task UpdateCheckDoctorAsync(UpdateCheckDoctorDto input) { if (input == null || input.RegisterCheckId == Guid.Empty) { throw new UserFriendlyException("请求参数有误"); } var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId); var entitydto = ObjectMapper.Map(input); var newentity = await _registerCheckManager.UpdateCheckDoctorAsync(entitydto, entity); return ObjectMapper.Map(newentity); } /// /// 更改危警值内容 /// /// /// [HttpPost("api/app/registercheck/updatecriticalvalue")] public async Task UpdateCriticalValueAsync(UpdateCriticalValueDto input) { if (input == null || input.RegisterCheckId == Guid.Empty) { throw new UserFriendlyException("请求参数有误"); } var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId); var entitydto = ObjectMapper.Map(input); var newentity = await _registerCheckManager.UpdateCriticalValueAsync(entitydto, entity); return ObjectMapper.Map(newentity); } /// /// 更改审核医生(自动更新审核状态为已审核) /// /// /// [HttpPost("api/app/registercheck/updateauditordoctor")] public async Task UpdateAuditorDoctorAsync(UpdateAuditorDoctorDto input) { if (input == null || input.RegisterCheckId == Guid.Empty) { throw new UserFriendlyException("请求参数有误"); } var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId); var entitydto = ObjectMapper.Map(input); var newentity = await _registerCheckManager.UpdateAuditorDoctorAsync(entitydto, entity); return ObjectMapper.Map(newentity); } /// /// 修改人员登记的组合项目锁定状态 批量 /// /// /// /// [HttpPost("api/app/registercheck/updateregistercheckislockmany")] public async Task> UpdateRegisterCheckIsLockManyAsync(List input) { if (!input.Any()) throw new UserFriendlyException("请求参数有误"); List entlist = new List(); foreach (var item in input) { var ent = await _registerCheckRepository.GetAsync(item.RegisterCheckId); ent.IsLock = item.IsLock; entlist.Add(ent); } await _registerCheckRepository.UpdateManyAsync(entlist); return ObjectMapper.Map, List>(entlist); } /// /// 根据人员ID集合获取所有项目 /// /// /// [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterIds")] public async Task> GetRegisterCheckAsbitemsByPatientRegisterIdsAsync(PatientRegisterIdsInputDto input) { if (!input.PatientRegisterIds.Any()) throw new UserFriendlyException("人员ID不能为空"); var entListDto = (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 where input.PatientRegisterIds.Contains(patientRegister.Id) && asbitem.IsCheck == 'Y' select new SimpleAsbitemDto { AsbitemId = registerCheckAsbitem.AsbitemId, AsbitemName = asbitem.DisplayName }).Distinct().ToList(); return entListDto; } /// /// 根据人员条码号集合获取所有项目 /// /// /// [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterNos")] public async Task> GetRegisterCheckAsbitemsByPatientRegisterNosAsync(PatientRegisterNosInputDto input) { if (!input.PatientRegisterNos.Any()) throw new UserFriendlyException("人员条码号不能为空"); var entListDto = (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 where input.PatientRegisterNos.Contains(patientRegister.PatientRegisterNo) && asbitem.IsCheck == 'Y' select new SimpleAsbitemDto { AsbitemId = registerCheckAsbitem.AsbitemId, AsbitemName = asbitem.DisplayName }).Distinct().ToList(); return entListDto; } /// /// 根据检验条码号集合获取所有项目 /// /// /// [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByLisRequestNos")] public async Task> GetRegisterCheckAsbitemsByLisRequestNosAsync(LisRequestNosInputDto input) { if (!input.LisRequestNos.Any()) throw new UserFriendlyException("检验条码号不能为空"); var entListDto = (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 lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id where input.LisRequestNos.Contains(lisRequest.LisRequestNo) && asbitem.IsCheck == 'Y' select new SimpleAsbitemDto { AsbitemId = registerCheckAsbitem.AsbitemId, AsbitemName = asbitem.DisplayName }).Distinct().ToList(); return entListDto; } /// /// 批量修改医生 根据人员ID集合 /// /// /// [HttpPost("api/app/RegisterCheck/UpdateBatchCheckDoctor")] public async Task UpdateBatchCheckDoctorAsync(UpdateBatchCheckDoctorInputDto input) { if (!input.PatientRegisterIds.Any()) throw new UserFriendlyException("人员ID不能为空"); if (!input.CheckDoctorDetail.Any()) throw new UserFriendlyException("需要修改的信息不能为空"); 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 where input.PatientRegisterIds.Contains(patientRegister.Id) select registerCheckAsbitem).ToList(); if (registerCheckAsbitemList.Any()) { foreach (var registerCheckAsbitem in registerCheckAsbitemList) { var checkDoctorEnt = input.CheckDoctorDetail.FirstOrDefault(f => f.AsbitemId == registerCheckAsbitem.AsbitemId); if (checkDoctorEnt != null) { var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == registerCheckAsbitem.RegisterCheckId); if (registerCheckEnt != null) { registerCheckEnt.CheckDoctorId = checkDoctorEnt.CheckDoctorId; await _registerCheckRepository.UpdateAsync(registerCheckEnt); } } } } } /// /// 修改检查表危急值相关内容 /// /// /// [HttpPost("api/app/RegisterCheck/UpdateRegisterCheckCritical")] public async Task UpdateRegisterCheckCriticalAsync(UpdateRegisterCheckCriticalInputDto input) { var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == input.RegisterCheckId); if (registerCheckEnt == null) { throw new UserFriendlyException("参数不正确"); } if (input.IsCriticalValue != null) { registerCheckEnt.IsCriticalValue = input.IsCriticalValue; } if (input.IsCriticalValueAudit != null) { registerCheckEnt.IsCriticalValueAudit = input.IsCriticalValueAudit; } if (input.IsReview != null) { registerCheckEnt.IsReview = input.IsReview; } registerCheckEnt.CriticalValueContent = input.CriticalValueContent; if (input.IsFollowUp != null) { registerCheckEnt.IsFollowUp = input.IsFollowUp; } if (input.IsCriticalValue == 'Y' && registerCheckEnt.CriticalValueCreatorId == null) { registerCheckEnt.CriticalValueCreatorId = _currentUser.Id; registerCheckEnt.CriticalValueCreationTime = DateTime.Now; } if (input.IsFollowUp == 'Y' && registerCheckEnt.FollowUpCreatorId == null) { registerCheckEnt.FollowUpCreatorId = _currentUser.Id; registerCheckEnt.FollowUpCreationTime = DateTime.Now; } registerCheckEnt.DiagnosisLevelId = input.DiagnosisLevelId; await _registerCheckRepository.UpdateAsync(registerCheckEnt); bool isCreateFollowUp = false; if (input.IsFollowUp == 'Y' || input.IsCriticalValue == 'Y') { isCreateFollowUp = true; } if (isCreateFollowUp) { //增加随访表记录 await _followUpAppService.CreateAsync(new PatientRegisterIdInputDto { PatientRegisterId = registerCheckEnt.PatientRegisterId }); } else { //#region 更新明细项目的危急值跟随访值状态 //var registerCheckItemList = await _registerCheckItemRepository.GetListAsync(m => m.RegisterCheckId == input.RegisterCheckId); //foreach (var registerCheckItem in registerCheckItemList) //{ // registerCheckItem.IsCriticalValue = registerCheckEnt.IsCriticalValue; // registerCheckItem.IsFollowUp = registerCheckEnt.IsFollowUp; //} //await _registerCheckItemRepository.UpdateManyAsync(registerCheckItemList); //#endregion //删除随访表记录 await _followUpAppService.DeleteByPatientRegisterId(new PatientRegisterIdInputDto { PatientRegisterId = registerCheckEnt.PatientRegisterId }); } } /// /// 医生签到 签退 /// /// /// [HttpPost("api/app/RegisterCheck/CreateDoctorSignIn")] public async Task CreateDoctorSignInAsync(CreateDoctorSignInInputDto input) { //1、创建日期就是签到日期 //2、创建者ID就是签到的医生ID //3、今天已经签到的再点签到的时候不做处理 //4、签退的再点签到先将当天sign_in_flag标志为0的这条记录设置为1,然后重新创建一条签到记录 //5、分配房间的逻辑修改为只能分配给已经签到的房间 var doctorId = _currentUser.Id; if (doctorId != null) { if (input.SignInFlag == SignInFlag.SignIn) { //签到 var doctorSignInEnt = await _doctorSignInRepository.FirstOrDefaultAsync(f => f.CreatorId == doctorId && f.RoomId == input.RoomId && f.CreationTime.Date == DateTime.Now.Date); if (doctorSignInEnt != null) { if (doctorSignInEnt.SignInFlag == SignInFlag.SignOut) { //有签退记录 //创建一条信息的 doctorSignInEnt = new DoctorSignIn { RoomId = doctorSignInEnt.RoomId, SignInFlag = SignInFlag.SignIn }; await _doctorSignInRepository.InsertAsync(doctorSignInEnt); } else { throw new UserFriendlyException("当天已签到"); } } else { //当天无记录 直接插入 doctorSignInEnt = new DoctorSignIn { RoomId = input.RoomId, SignInFlag = SignInFlag.SignIn }; await _doctorSignInRepository.InsertAsync(doctorSignInEnt); } } else { //签退 var doctorSignInEnt = await _doctorSignInRepository.FirstOrDefaultAsync(f => f.CreatorId == doctorId && f.RoomId == input.RoomId && f.CreationTime.Date == DateTime.Now.Date && f.SignInFlag == SignInFlag.SignIn); if (doctorSignInEnt != null) { doctorSignInEnt.SignInFlag = SignInFlag.SignOut; doctorSignInEnt.SignOutDate = DateTime.Now; await _doctorSignInRepository.UpdateAsync(doctorSignInEnt); } else { throw new UserFriendlyException("当天无签到记录"); } } } else { throw new UserFriendlyException("医生未登录"); } } /// /// 获取医生是否签到 /// /// /// [HttpPost("api/app/RegisterCheck/GetDoctorIsSignIn")] public async Task GetDoctorIsSignInAsync(GetDoctorIsSignInInputDto input) { var entDto = new GetDoctorIsSignInDto { IsSignIn = 'N' }; var doctorId = _currentUser.Id; if (doctorId != null) { //签到 var doctorSignInEnt = await _doctorSignInRepository.FirstOrDefaultAsync(f => f.CreatorId == doctorId && f.RoomId == input.RoomId && f.CreationTime.Date == DateTime.Now.Date && f.SignInFlag == SignInFlag.SignIn); if (doctorSignInEnt != null) { entDto.IsSignIn = 'Y'; } } else { throw new UserFriendlyException("医生未登录"); } return entDto; } } }