From f89768fb25d15544dfe8f43f2f38d96a8404ffd0 Mon Sep 17 00:00:00 2001 From: wxd <123@qq.com> Date: Tue, 31 Dec 2024 14:31:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9D=A1=E7=A0=81=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=89=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GetPeisAsbitemCompleteFlagDto.cs | 14 + .../DoctorPeisRecordListInputDto.cs | 5 + .../RegisterCheckWithAsbitemsDto.cs | 5 + .../GetRegisterCheckAsbitemNameDto.cs | 19 + .../GetRegisterCheckAsbitemNameInputDto.cs | 25 ++ .../GetWorklistPatientListInputDto.cs | 5 + .../UpdateWorklistIsSignInInputDto.cs | 30 ++ .../PacsBusiness/PacsBusinessAppService.cs | 324 +++++++++++------- .../PatientRegisterAppService.cs | 191 ++++++----- .../RegisterChecks/RegisterCheckAppService.cs | 107 +++--- .../Worklists/WorklistAppService.cs | 184 +++++++++- 11 files changed, 616 insertions(+), 293 deletions(-) create mode 100644 src/Shentun.Pacs.Application.Contracts/PacsBusiness/GetPeisAsbitemCompleteFlagDto.cs create mode 100644 src/Shentun.Pacs.Application.Contracts/Worklists/GetRegisterCheckAsbitemNameDto.cs create mode 100644 src/Shentun.Pacs.Application.Contracts/Worklists/GetRegisterCheckAsbitemNameInputDto.cs create mode 100644 src/Shentun.Pacs.Application.Contracts/Worklists/UpdateWorklistIsSignInInputDto.cs diff --git a/src/Shentun.Pacs.Application.Contracts/PacsBusiness/GetPeisAsbitemCompleteFlagDto.cs b/src/Shentun.Pacs.Application.Contracts/PacsBusiness/GetPeisAsbitemCompleteFlagDto.cs new file mode 100644 index 0000000..c0b4be5 --- /dev/null +++ b/src/Shentun.Pacs.Application.Contracts/PacsBusiness/GetPeisAsbitemCompleteFlagDto.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Pacs.PacsBusiness +{ + public class GetPeisAsbitemCompleteFlagDto + { + /// + /// 项目检查状态 + /// + public char CompleteFlag { get; set; } + } +} diff --git a/src/Shentun.Pacs.Application.Contracts/PatientRegisters/DoctorPeisRecordListInputDto.cs b/src/Shentun.Pacs.Application.Contracts/PatientRegisters/DoctorPeisRecordListInputDto.cs index 13b2989..abd8848 100644 --- a/src/Shentun.Pacs.Application.Contracts/PatientRegisters/DoctorPeisRecordListInputDto.cs +++ b/src/Shentun.Pacs.Application.Contracts/PatientRegisters/DoctorPeisRecordListInputDto.cs @@ -68,6 +68,11 @@ namespace Shentun.Pacs.PatientRegisters /// public List CheckDoctorIds { get; set; } = new List(); + /// + /// 设备Id 可不传 传null查询所有 + /// + public Guid? DeviceId { get; set; } + public override int MaxResultCount { get; set; } = 100; } } diff --git a/src/Shentun.Pacs.Application.Contracts/RegisterChecks/RegisterCheckWithAsbitemsDto.cs b/src/Shentun.Pacs.Application.Contracts/RegisterChecks/RegisterCheckWithAsbitemsDto.cs index 26fdf0c..7031ce1 100644 --- a/src/Shentun.Pacs.Application.Contracts/RegisterChecks/RegisterCheckWithAsbitemsDto.cs +++ b/src/Shentun.Pacs.Application.Contracts/RegisterChecks/RegisterCheckWithAsbitemsDto.cs @@ -65,5 +65,10 @@ namespace Shentun.Pacs.RegisterChecks /// 组合项目顺序 /// public int AsbitemDisplayOrder { get; set; } + + /// + /// 项目描述 + /// + public string PacsDesc { get; set; } } } diff --git a/src/Shentun.Pacs.Application.Contracts/Worklists/GetRegisterCheckAsbitemNameDto.cs b/src/Shentun.Pacs.Application.Contracts/Worklists/GetRegisterCheckAsbitemNameDto.cs new file mode 100644 index 0000000..7a098d9 --- /dev/null +++ b/src/Shentun.Pacs.Application.Contracts/Worklists/GetRegisterCheckAsbitemNameDto.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Pacs.Worklists +{ + public class GetRegisterCheckAsbitemNameDto + { + /// + /// 中文简称 + /// + public string AsbitemShortName { get; set; } + + /// + /// 英文简称 + /// + public string AsbitemEngShortName { get; set; } + } +} diff --git a/src/Shentun.Pacs.Application.Contracts/Worklists/GetRegisterCheckAsbitemNameInputDto.cs b/src/Shentun.Pacs.Application.Contracts/Worklists/GetRegisterCheckAsbitemNameInputDto.cs new file mode 100644 index 0000000..74ee353 --- /dev/null +++ b/src/Shentun.Pacs.Application.Contracts/Worklists/GetRegisterCheckAsbitemNameInputDto.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Pacs.Worklists +{ + public class GetRegisterCheckAsbitemNameInputDto + { + /// + /// 预检AET + /// + public string ScheduledAet { get; set; } + + /// + /// 设备类型 + /// + public string Modality { get; set; } + + + /// + /// 条码号 + /// + public string CheckRequestNo { get; set; } + } +} diff --git a/src/Shentun.Pacs.Application.Contracts/Worklists/GetWorklistPatientListInputDto.cs b/src/Shentun.Pacs.Application.Contracts/Worklists/GetWorklistPatientListInputDto.cs index b50173f..0afee18 100644 --- a/src/Shentun.Pacs.Application.Contracts/Worklists/GetWorklistPatientListInputDto.cs +++ b/src/Shentun.Pacs.Application.Contracts/Worklists/GetWorklistPatientListInputDto.cs @@ -26,5 +26,10 @@ namespace Shentun.Pacs.Worklists /// 结束日期 /// public string EndDate { get; set; } + + /// + /// 是否签收 Y=已签收 N=未签收 默认为N,查询未签收的 + /// + public char IsSignIn { get; set; } = 'N'; } } diff --git a/src/Shentun.Pacs.Application.Contracts/Worklists/UpdateWorklistIsSignInInputDto.cs b/src/Shentun.Pacs.Application.Contracts/Worklists/UpdateWorklistIsSignInInputDto.cs new file mode 100644 index 0000000..328261f --- /dev/null +++ b/src/Shentun.Pacs.Application.Contracts/Worklists/UpdateWorklistIsSignInInputDto.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Pacs.Worklists +{ + public class UpdateWorklistIsSignInInputDto + { + /// + /// 预检AET + /// + public string ScheduledAet { get; set; } + + /// + /// 设备类型 + /// + public string Modality { get; set; } + + /// + /// 条码号 + /// + public string CheckRequestNo { get; set; } + + /// + /// 签收状态 Y N + /// + public char IsSignIn { get; set; } + + } +} diff --git a/src/Shentun.Pacs.Application/PacsBusiness/PacsBusinessAppService.cs b/src/Shentun.Pacs.Application/PacsBusiness/PacsBusinessAppService.cs index 49512e1..8528388 100644 --- a/src/Shentun.Pacs.Application/PacsBusiness/PacsBusinessAppService.cs +++ b/src/Shentun.Pacs.Application/PacsBusiness/PacsBusinessAppService.cs @@ -20,6 +20,7 @@ using Shentun.Pacs.RegisterChecks; using Shentun.Pacs.RegisterCheckSuggestions; using Shentun.Pacs.RegisterCheckSummarys; using Shentun.Pacs.SumSummaryReports; +using Shentun.Pacs.SysParmValues; using Shentun.Pacs.ThirdBookingPushs; using Shentun.Pacs.ThirdPartyPublicInterfaces; using Shentun.Utilities; @@ -79,6 +80,7 @@ namespace Shentun.Pacs.PacsBusiness private readonly CacheService _cacheService; private readonly UnitOfWorkManager _unitOfWorkManager; private readonly IRepository _registerCheckSummaryRepository; + private readonly SysParmValueManager _sysParmValueManager; public PacsBusinessAppService( IConfiguration configuration, @@ -111,7 +113,8 @@ namespace Shentun.Pacs.PacsBusiness IRepository deviceTypeRepository, CacheService cacheService, UnitOfWorkManager unitOfWorkManager, - IRepository registerCheckSummaryRepository) + IRepository registerCheckSummaryRepository, + SysParmValueManager sysParmValueManager) { _configuration = configuration; _registerCheckRepository = registerCheckRepository; @@ -144,6 +147,7 @@ namespace Shentun.Pacs.PacsBusiness _cacheService = cacheService; _unitOfWorkManager = unitOfWorkManager; _registerCheckSummaryRepository = registerCheckSummaryRepository; + _sysParmValueManager = sysParmValueManager; } @@ -236,6 +240,7 @@ namespace Shentun.Pacs.PacsBusiness //} + #region 未用到 /// /// 导入pacs dicom数据 /// @@ -304,6 +309,74 @@ namespace Shentun.Pacs.PacsBusiness return entListDto; } + /// + /// 修改pacs项目检查状态及日期 已整合到其他接口,废弃 + /// + /// + /// + [HttpPost("api/app/PacsBusiness/UpdateRegisterCheckIsPacsCheck")] + [RemoteService(false)] + public async Task UpdateRegisterCheckIsPacsCheckAsync(UpdateRegisterCheckIsPacsCheckInputDto input) + { + var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.CheckRequestNo == input.CheckRequestNo); + if (registerCheckEnt == null) + { + throw new UserFriendlyException("条码号不正确"); + } + + registerCheckEnt.IsPacsCheck = input.IsPacsCheck; + registerCheckEnt.PacsCheckDate = Convert.ToDateTime(input.PacsCheckDate); + registerCheckEnt.PacsUploadDate = Convert.ToDateTime(input.PacsUploadDate); + + await _registerCheckRepository.UpdateAsync(registerCheckEnt); + } + + + /// + /// 查询人员的检查图片 为用到 + /// + /// + /// + [HttpPost("api/app/PacsBusiness/GetRegisterCheckPictureByPatientRegisterId")] + public async Task> GetRegisterCheckPictureByPatientRegisterIdAsync(GetRegisterCheckPictureByPatientRegisterIdInputDto input) + { + var query = (from registerCheckPicture in await _registerCheckPictureRepository.GetQueryableAsync() + join registerCheck in await _registerCheckRepository.GetQueryableAsync() on registerCheckPicture.RegisterCheckId equals registerCheck.Id + join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on registerCheck.PatientRegisterId equals patientRegister.Id + 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 + where patientRegister.Id == input.PatientRegisterId && itemType.CheckTypeFlag == input.CheckTypeFlag + select new + { + registerCheckPicture, + patientName = patientRegister.PatientName, + asbitemName = asbitem.DisplayName, + checkRequestNo = registerCheck.CheckRequestNo + }).ToList(); + + var registerCheckPictureGroup = query.GroupBy(g => g.registerCheckPicture); + + var entListDto = registerCheckPictureGroup.Select(s => new GetRegisterCheckPictureByPatientRegisterIdDto + { + AsbitemName = string.Join(",", s.Select(rs => rs.asbitemName).ToList()), + DisplayOrder = s.Key.DisplayOrder, + CheckRequestNo = s.FirstOrDefault().checkRequestNo, + LocalPathName = s.Key.LocalPathName, + PictureFilename = s.Key.PictureFilename, + PictureFileType = s.Key.PictureFileType, + PatientName = s.FirstOrDefault().patientName, + RegisterCheckId = s.Key.RegisterCheckId + }).ToList(); + + + + return entListDto; + } + + + #endregion + /// @@ -354,27 +427,7 @@ namespace Shentun.Pacs.PacsBusiness return resultDto; } - /// - /// 修改pacs项目检查状态及日期 - /// - /// - /// - [HttpPost("api/app/PacsBusiness/UpdateRegisterCheckIsPacsCheck")] - [RemoteService(false)] - public async Task UpdateRegisterCheckIsPacsCheckAsync(UpdateRegisterCheckIsPacsCheckInputDto input) - { - var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.CheckRequestNo == input.CheckRequestNo); - if (registerCheckEnt == null) - { - throw new UserFriendlyException("条码号不正确"); - } - - registerCheckEnt.IsPacsCheck = input.IsPacsCheck; - registerCheckEnt.PacsCheckDate = Convert.ToDateTime(input.PacsCheckDate); - registerCheckEnt.PacsUploadDate = Convert.ToDateTime(input.PacsUploadDate); - - await _registerCheckRepository.UpdateAsync(registerCheckEnt); - } + /// /// 获取pacs检查项目 pacs看图界面列表 @@ -475,33 +528,33 @@ namespace Shentun.Pacs.PacsBusiness query = query.Where(m => customerOrgIds.Contains(m.customerOrgId)); } - #region 增加项目类别权限 + //#region 增加项目类别权限 - string AdminId = _configuration.GetValue("AdminId"); + //string AdminId = _configuration.GetValue("AdminId"); - if (_currentUser.Id == null) - { - new PagedResultDto(0, new List()); - } - 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 (_currentUser.Id == null) + //{ + // new PagedResultDto(0, new List()); + //} + //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()) - { - query = query.Where(m => asbitemIds.Contains(m.asbitemId)); - } - else - { - new PagedResultDto(0, new List()); - } + // if (asbitemIds.Any()) + // { + // query = query.Where(m => asbitemIds.Contains(m.asbitemId)); + // } + // else + // { + // new PagedResultDto(0, new List()); + // } - } + //} - #endregion + //#endregion var checkRequestNoGroup = query.ToList().GroupBy(g => g.registerCheckId); @@ -519,29 +572,11 @@ namespace Shentun.Pacs.PacsBusiness if (fisrtItem.encodingFlag == '0') { - string examDescription = string.Join(",", item.Select(ss => ss.asbitemShortName).Distinct()); - if (item.Where(m => m.isFilmRelease == 'N').Count() > 0) - { - examDescription += ",不出片"; - } - - if (examDescription.Length > 64) - { - examDescription = examDescription.Substring(0, 64); - } - - pacsDesc = examDescription; + pacsDesc = fisrtItem.asbitemShortName; } else { - string examEngDescription = string.Join(",", item.Select(ss => ss.isFilmRelease == 'N' ? ss.endAsbitemShortName + "(BU)" : ss.endAsbitemShortName).Distinct()); - - if (examEngDescription.Length > 64) - { - examEngDescription = examEngDescription.Substring(0, 64); - } - - pacsDesc = examEngDescription; + pacsDesc = fisrtItem.endAsbitemShortName; } entListDto.Add(new GetPatientRegisterPacsCheckDto @@ -557,12 +592,15 @@ namespace Shentun.Pacs.PacsBusiness }); } + entListDto = entListDto.OrderByDescending(o => o.CheckRequestNo).ToList(); + return new PagedResultDto(totalCount, entListDto); } /// - /// 导入pacs dicom服务返回的数据 用作前端导出文件 修改pacs项目检查状态及日期 + /// 导入pacs dicom服务返回的数据 用作前端导出文件 修改pacs项目检查状态及日期 000 + /// InstanceId存在就不添加 /// /// [HttpPost("api/app/PacsBusiness/ImportPacsDicomServiceData")] @@ -596,23 +634,24 @@ namespace Shentun.Pacs.PacsBusiness if (string.IsNullOrWhiteSpace(input.FileName)) throw new UserFriendlyException("文件名称不能为空"); - var dicomFileDetailEnt = new DicomFileDetail - { - DisplayOrder = 1, - RegisterCheckId = registerCheckEnt.Id, - FileName = input.FileName, - InstanceId = input.InstanceId, - ParentPatientId = input.ParentPatientId, - ParentSeriesId = input.ParentSeriesId, - ParentStudyId = input.ParentStudyId, - Path = input.Path, - Status = input.Status - }; - - - await _dicomFileDetailRepository.InsertAsync(dicomFileDetailEnt); - + var dicomFileDetailEnt = await _dicomFileDetailRepository.FirstOrDefaultAsync(f => f.InstanceId == input.InstanceId); + if (dicomFileDetailEnt == null) + { + dicomFileDetailEnt = new DicomFileDetail + { + DisplayOrder = 1, + RegisterCheckId = registerCheckEnt.Id, + FileName = input.FileName, + InstanceId = input.InstanceId, + ParentPatientId = input.ParentPatientId, + ParentSeriesId = input.ParentSeriesId, + ParentStudyId = input.ParentStudyId, + Path = input.Path, + Status = input.Status + }; + await _dicomFileDetailRepository.InsertAsync(dicomFileDetailEnt); + } if (registerCheckEnt.IsPacsCheck != 'Y') { @@ -627,7 +666,7 @@ namespace Shentun.Pacs.PacsBusiness } /// - /// 查询人员的dicom数据 + /// 查询人员的dicom数据 000 /// /// /// @@ -668,49 +707,7 @@ namespace Shentun.Pacs.PacsBusiness } /// - /// 查询人员的检查图片 - /// - /// - /// - [HttpPost("api/app/PacsBusiness/GetRegisterCheckPictureByPatientRegisterId")] - public async Task> GetRegisterCheckPictureByPatientRegisterIdAsync(GetRegisterCheckPictureByPatientRegisterIdInputDto input) - { - var query = (from registerCheckPicture in await _registerCheckPictureRepository.GetQueryableAsync() - join registerCheck in await _registerCheckRepository.GetQueryableAsync() on registerCheckPicture.RegisterCheckId equals registerCheck.Id - join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on registerCheck.PatientRegisterId equals patientRegister.Id - 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 - where patientRegister.Id == input.PatientRegisterId && itemType.CheckTypeFlag == input.CheckTypeFlag - select new - { - registerCheckPicture, - patientName = patientRegister.PatientName, - asbitemName = asbitem.DisplayName, - checkRequestNo = registerCheck.CheckRequestNo - }).ToList(); - - var registerCheckPictureGroup = query.GroupBy(g => g.registerCheckPicture); - - var entListDto = registerCheckPictureGroup.Select(s => new GetRegisterCheckPictureByPatientRegisterIdDto - { - AsbitemName = string.Join(",", s.Select(rs => rs.asbitemName).ToList()), - DisplayOrder = s.Key.DisplayOrder, - CheckRequestNo = s.FirstOrDefault().checkRequestNo, - LocalPathName = s.Key.LocalPathName, - PictureFilename = s.Key.PictureFilename, - PictureFileType = s.Key.PictureFileType, - PatientName = s.FirstOrDefault().patientName, - RegisterCheckId = s.Key.RegisterCheckId - }).ToList(); - - - - return entListDto; - } - - /// - /// 删除体检dicom服务数据,并清理dicom服务记录 + /// 删除体检dicom服务数据,并清理dicom服务记录 000 /// /// /// @@ -746,7 +743,7 @@ namespace Shentun.Pacs.PacsBusiness /// - /// 获取dicom文件的数量 根据检查条码号或者实例ID查询 + /// 获取dicom文件的数量 根据检查条码号或者实例ID查询 000 /// /// /// @@ -788,7 +785,7 @@ namespace Shentun.Pacs.PacsBusiness } /// - /// 调用dicom服务api + /// 调用dicom服务api 删除dicom /// /// /// @@ -838,13 +835,15 @@ namespace Shentun.Pacs.PacsBusiness throw new UserFriendlyException("检查条码不存在"); } + string medicalCenterName = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "medical_center_name"); + var entDto = new GetPatientRegisterByCheckRequestNoDto { PatientAge = patientRegisterEnt.patientRegister.Age == null ? "" : patientRegisterEnt.patientRegister.Age.ToString(), PatientBirthDate = patientRegisterEnt.patientRegister.BirthDate == null ? "" : DataHelper.ConversionDateShortNoSymbolToString(patientRegisterEnt.patientRegister.BirthDate), PatientName = patientRegisterEnt.patientRegister.PatientName, PatientSex = patientRegisterEnt.patientRegister.SexId.ToString(), - HospitalName = patientRegisterEnt.medicalCenterName + HospitalName = medicalCenterName }; return entDto; @@ -1230,7 +1229,7 @@ namespace Shentun.Pacs.PacsBusiness if (input.BarcodeMode == '0') { registerAsbitemSql = "select a.name as patient_name,a.sex_id,a.mobile_telephone,a.telephone," + - "a.age,a.id_card_no,a.marital_status_id,a.complete_flag," + + "a.age,a.id_card_no,a.marital_status_id,a.complete_flag,a.birth_date," + "b.patient_register_id,b.print_barcode_no,b.asbitem_id,b.price,b.standard_price,b.charge_flag,b.payment_mode " + "from patient_register as a left join register_asbitem as b on a.patient_register_id=b.patient_register_id " + " left join asbitem as c on b.asbitem_id=c.asbitem_id " + @@ -1240,7 +1239,7 @@ namespace Shentun.Pacs.PacsBusiness { registerAsbitemSql = "select a.name as patient_name,a.sex_id,a.mobile_telephone,a.telephone," + - "a.age,a.id_card_no,a.marital_status_id,a.complete_flag," + + "a.age,a.id_card_no,a.marital_status_id,a.complete_flag,a.birth_date," + "b.patient_register_id,b.print_barcode_no,b.asbitem_id,b.price,b.standard_price,b.charge_flag,b.payment_mode " + "from patient_register as a left join register_asbitem as b on a.patient_register_id=b.patient_register_id " + " left join asbitem as c on b.asbitem_id=c.asbitem_id " + @@ -1359,6 +1358,14 @@ namespace Shentun.Pacs.PacsBusiness patientEnt = await _patientRepository.InsertAsync(patientEnt, true); } + //else + //{ + // if (patientEnt.BirthDate == null && newBirthDate != null) + // { + // patientEnt.BirthDate = newBirthDate; + // await _patientRepository.UpdateAsync(patientEnt); + // } + //} #endregion #region 人员 @@ -1387,7 +1394,8 @@ namespace Shentun.Pacs.PacsBusiness ReportPrintTimes = 0, PatientRegisterNo = await _patientRegisterManager.CreatePatientRegisterNo(Guid.Empty), SendFlag = '0', - SexId = sexId + SexId = sexId, + BirthDate = newBirthDate }; patientRegisterEnt = await _patientRegisterRepository.InsertAsync(patientRegisterEnt, true); @@ -1439,7 +1447,7 @@ namespace Shentun.Pacs.PacsBusiness IsAudit = 'N', IsLock = 'N', IsPacsCheck = 'N', - IsSignIn = 'Y', + IsSignIn = 'N', PatientRegisterId = tempPatientRegisterId, ScheduledAet = input.ScheduledAet, WorklistFlag = '1', @@ -1756,6 +1764,58 @@ namespace Shentun.Pacs.PacsBusiness } + /// + /// 根据检查id获取体检系统项目的检查状态 + /// + /// + /// + [HttpPost("api/app/PacsBusiness/GetPeisAsbitemCompleteFlag")] + public async Task GetPeisAsbitemCompleteFlagAsync(RegisterCheckIdInputDto input) + { + var registerCheckFirst = (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 + }).FirstOrDefault(); + + if (registerCheckFirst == null) + { + throw new UserFriendlyException("检查id不正确"); + } + + string connectionString = _configuration.GetValue("OldPeis:ConnectionStrings", ""); + SqlSugarClient oldDb = new SqlSugarClient(new ConnectionConfig() + { + ConnectionString = connectionString, + DbType = SqlSugar.DbType.SqlServer, + IsAutoCloseConnection = true + }); + + + string completeFlag = (await oldDb.Ado.GetScalarAsync("select complete_flag from register_asbitem where patient_register_id=@patient_register_id and asbitem_id=@asbitem_id", + new List() { + new SugarParameter("patient_register_id",registerCheckFirst.registerCheckAsbitem.OldPatientRegisterId), + new SugarParameter("asbitem_id",registerCheckFirst.registerCheckAsbitem.OldAsbitemId) + })).ToString(); + + if (string.IsNullOrWhiteSpace(completeFlag)) + { + throw new UserFriendlyException("体检系统未查到相关信息"); + } + + + var entDto = new GetPeisAsbitemCompleteFlagDto + { + CompleteFlag = Convert.ToChar(completeFlag) + }; + + return entDto; + + } + #endregion /// diff --git a/src/Shentun.Pacs.Application/PatientRegisters/PatientRegisterAppService.cs b/src/Shentun.Pacs.Application/PatientRegisters/PatientRegisterAppService.cs index 08819d0..1ab9da1 100644 --- a/src/Shentun.Pacs.Application/PatientRegisters/PatientRegisterAppService.cs +++ b/src/Shentun.Pacs.Application/PatientRegisters/PatientRegisterAppService.cs @@ -131,7 +131,7 @@ namespace Shentun.Pacs.PatientRegisters private readonly IRepository _patientPoisonRepository; private readonly PatientPoisonManager _patientPoisonManager; private readonly IRepository _diagnosisRepository; - + private readonly IRepository _thirdBookingRepository; public PatientRegisterAppService( IRepository repository, @@ -193,7 +193,7 @@ namespace Shentun.Pacs.PatientRegisters IRepository patientPoisonRepository, PatientPoisonManager patientPoisonManager, IRepository diagnosisRepository, - + IRepository thirdBookingRepository) : base(repository) { @@ -256,7 +256,7 @@ namespace Shentun.Pacs.PatientRegisters _patientPoisonRepository = patientPoisonRepository; _patientPoisonManager = patientPoisonManager; _diagnosisRepository = diagnosisRepository; - + _thirdBookingRepository = thirdBookingRepository; } /// @@ -988,7 +988,7 @@ namespace Shentun.Pacs.PatientRegisters } - + //throw new Exception("后续不更新"); if (createRegisterCheckAsbitemEntity != null) @@ -1547,20 +1547,25 @@ namespace Shentun.Pacs.PatientRegisters } - #region 增加项目类别权限 - - List asbitemIds = new List(); - - string AdminId = _configuration.GetValue("AdminId"); - if (_currentUser.Id.Value != Guid.Parse(AdminId)) + if (input.DeviceId != null) { - 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(); + sumquery = sumquery.Where(m => m.a.DeviceId == input.DeviceId); } - #endregion + //#region 增加项目类别权限 + + //List asbitemIds = new List(); + + //string AdminId = _configuration.GetValue("AdminId"); + //if (_currentUser.Id.Value != Guid.Parse(AdminId)) + //{ + // 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(); + //} + + //#endregion @@ -1571,86 +1576,86 @@ namespace Shentun.Pacs.PatientRegisters foreach (var s in sumqueryGroup.OrderBy(o => o.Key)) { - bool IsDisplay = false; + //bool IsDisplay = false; - if (_currentUser.Id.Value == Guid.Parse(AdminId)) - { - IsDisplay = true; - } - else if (s.Where(m => asbitemIds.Contains(m.AsbitemId)).Count() > 0) - { - IsDisplay = true; - } + //if (_currentUser.Id.Value == Guid.Parse(AdminId)) + //{ + // IsDisplay = true; + //} + //else if (s.Where(m => asbitemIds.Contains(m.AsbitemId)).Count() > 0) + //{ + // IsDisplay = true; + //} - if (IsDisplay) + //if (IsDisplay) + //{ + entlist.Add(new PatientRegisterOrNoDto { - entlist.Add(new PatientRegisterOrNoDto - { - CreationTime = s.FirstOrDefault().a.CreationTime, - CreatorId = s.FirstOrDefault().a.CreatorId, - Id = s.FirstOrDefault().a.Id, - LastModificationTime = s.FirstOrDefault().a.LastModificationTime, - LastModifierId = s.FirstOrDefault().a.LastModifierId, - ThirdInfo = s.FirstOrDefault().a.ThirdInfo, - SummaryDoctorId = s.FirstOrDefault().a.SummaryDoctorId, - SummaryDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.SummaryDate), - SexId = s.FirstOrDefault().a.SexId, - Age = s.FirstOrDefault().a.Age, - AuditDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.AuditDate), - AuditDoctorId = s.FirstOrDefault().a.AuditDoctorId, - BirthDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.BirthDate), - CompleteFlag = s.FirstOrDefault().a.CompleteFlag, - CustomerOrgGroupId = s.FirstOrDefault().a.CustomerOrgGroupId, - CustomerOrgId = s.FirstOrDefault().a.CustomerOrgId, - CustomerOrgRegisterId = s.FirstOrDefault().a.CustomerOrgRegisterId, - GuidePrintTimes = s.FirstOrDefault().a.GuidePrintTimes, - InterposeMeasure = s.FirstOrDefault().a.InterposeMeasure, - IsAudit = s.FirstOrDefault().a.IsAudit, - IsLock = s.FirstOrDefault().a.IsLock, - IsMedicalStart = s.FirstOrDefault().a.IsMedicalStart, - IsNameHide = s.FirstOrDefault().a.IsNameHide, - IsPhoneFollow = s.FirstOrDefault().a.IsPhoneFollow, - IsRecoverGuide = s.FirstOrDefault().a.IsRecoverGuide, - IsUpload = s.FirstOrDefault().a.IsUpload, - IsVip = s.FirstOrDefault().a.IsVip, - JobCardNo = s.FirstOrDefault().a.JobCardNo, - JobPost = s.FirstOrDefault().a.JobPost, - JobTitle = s.FirstOrDefault().a.JobTitle, - MaritalStatusId = s.FirstOrDefault().a.MaritalStatusId, - MedicalCardNo = s.FirstOrDefault().a.MedicalCardNo, - MedicalConclusionId = s.FirstOrDefault().a.MedicalConclusionId, - MedicalPackageId = s.FirstOrDefault().a.MedicalPackageId, - MedicalStartDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.MedicalStartDate), - MedicalTimes = s.FirstOrDefault().a.MedicalTimes, - MedicalTypeId = s.FirstOrDefault().a.MedicalTypeId, - MedicalCenterId = s.FirstOrDefault().a.MedicalCenterId, - PatientId = s.FirstOrDefault().a.PatientId, - PatientName = s.FirstOrDefault().a.PatientName, - PatientRegisterNo = s.FirstOrDefault().a.PatientRegisterNo, - PersonnelTypeId = s.FirstOrDefault().a.PersonnelTypeId, - Photo = s.FirstOrDefault().a.Photo, - Remark = s.FirstOrDefault().a.Remark, - ReportPrintTimes = s.FirstOrDefault().a.ReportPrintTimes, - Salesman = s.FirstOrDefault().a.Salesman, - SexHormoneTermId = s.FirstOrDefault().a.SexHormoneTermId, - CreatorName = "", - LastModifierName = "", - Address = s.FirstOrDefault().ab.Address, //档案表信息 - BirthPlaceId = s.FirstOrDefault().ab.BirthPlaceId, - DisplayName = s.FirstOrDefault().ab.DisplayName, - Email = s.FirstOrDefault().ab.Email, - IdNo = s.FirstOrDefault().ab.IdNo, - MobileTelephone = s.FirstOrDefault().ab.MobileTelephone, - NationId = s.FirstOrDefault().ab.NationId, - PatientNo = s.FirstOrDefault().ab.PatientNo, - PatientPassword = s.FirstOrDefault().ab.PatientPassword, - PostalCode = s.FirstOrDefault().ab.PostalCode, - Telephone = s.FirstOrDefault().ab.Telephone, - CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(s.FirstOrDefault().a.CustomerOrgId).Result, - CustomerOrgParentId = _cacheService.GetTopCustomerOrgAsync(s.FirstOrDefault().a.CustomerOrgId).Result.Id, - CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(s.FirstOrDefault().a.CustomerOrgId).Result - }); - } + CreationTime = s.FirstOrDefault().a.CreationTime, + CreatorId = s.FirstOrDefault().a.CreatorId, + Id = s.FirstOrDefault().a.Id, + LastModificationTime = s.FirstOrDefault().a.LastModificationTime, + LastModifierId = s.FirstOrDefault().a.LastModifierId, + ThirdInfo = s.FirstOrDefault().a.ThirdInfo, + SummaryDoctorId = s.FirstOrDefault().a.SummaryDoctorId, + SummaryDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.SummaryDate), + SexId = s.FirstOrDefault().a.SexId, + Age = s.FirstOrDefault().a.Age, + AuditDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.AuditDate), + AuditDoctorId = s.FirstOrDefault().a.AuditDoctorId, + BirthDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.BirthDate), + CompleteFlag = s.FirstOrDefault().a.CompleteFlag, + CustomerOrgGroupId = s.FirstOrDefault().a.CustomerOrgGroupId, + CustomerOrgId = s.FirstOrDefault().a.CustomerOrgId, + CustomerOrgRegisterId = s.FirstOrDefault().a.CustomerOrgRegisterId, + GuidePrintTimes = s.FirstOrDefault().a.GuidePrintTimes, + InterposeMeasure = s.FirstOrDefault().a.InterposeMeasure, + IsAudit = s.FirstOrDefault().a.IsAudit, + IsLock = s.FirstOrDefault().a.IsLock, + IsMedicalStart = s.FirstOrDefault().a.IsMedicalStart, + IsNameHide = s.FirstOrDefault().a.IsNameHide, + IsPhoneFollow = s.FirstOrDefault().a.IsPhoneFollow, + IsRecoverGuide = s.FirstOrDefault().a.IsRecoverGuide, + IsUpload = s.FirstOrDefault().a.IsUpload, + IsVip = s.FirstOrDefault().a.IsVip, + JobCardNo = s.FirstOrDefault().a.JobCardNo, + JobPost = s.FirstOrDefault().a.JobPost, + JobTitle = s.FirstOrDefault().a.JobTitle, + MaritalStatusId = s.FirstOrDefault().a.MaritalStatusId, + MedicalCardNo = s.FirstOrDefault().a.MedicalCardNo, + MedicalConclusionId = s.FirstOrDefault().a.MedicalConclusionId, + MedicalPackageId = s.FirstOrDefault().a.MedicalPackageId, + MedicalStartDate = DataHelper.ConversionDateToString(s.FirstOrDefault().a.MedicalStartDate), + MedicalTimes = s.FirstOrDefault().a.MedicalTimes, + MedicalTypeId = s.FirstOrDefault().a.MedicalTypeId, + MedicalCenterId = s.FirstOrDefault().a.MedicalCenterId, + PatientId = s.FirstOrDefault().a.PatientId, + PatientName = s.FirstOrDefault().a.PatientName, + PatientRegisterNo = s.FirstOrDefault().a.PatientRegisterNo, + PersonnelTypeId = s.FirstOrDefault().a.PersonnelTypeId, + Photo = s.FirstOrDefault().a.Photo, + Remark = s.FirstOrDefault().a.Remark, + ReportPrintTimes = s.FirstOrDefault().a.ReportPrintTimes, + Salesman = s.FirstOrDefault().a.Salesman, + SexHormoneTermId = s.FirstOrDefault().a.SexHormoneTermId, + CreatorName = "", + LastModifierName = "", + Address = s.FirstOrDefault().ab.Address, //档案表信息 + BirthPlaceId = s.FirstOrDefault().ab.BirthPlaceId, + DisplayName = s.FirstOrDefault().ab.DisplayName, + Email = s.FirstOrDefault().ab.Email, + IdNo = s.FirstOrDefault().ab.IdNo, + MobileTelephone = s.FirstOrDefault().ab.MobileTelephone, + NationId = s.FirstOrDefault().ab.NationId, + PatientNo = s.FirstOrDefault().ab.PatientNo, + PatientPassword = s.FirstOrDefault().ab.PatientPassword, + PostalCode = s.FirstOrDefault().ab.PostalCode, + Telephone = s.FirstOrDefault().ab.Telephone, + CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(s.FirstOrDefault().a.CustomerOrgId).Result, + CustomerOrgParentId = _cacheService.GetTopCustomerOrgAsync(s.FirstOrDefault().a.CustomerOrgId).Result.Id, + CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(s.FirstOrDefault().a.CustomerOrgId).Result + }); + //} } @@ -2201,7 +2206,7 @@ namespace Shentun.Pacs.PatientRegisters var entity = await _repository.GetAsync(input.PatientRegisterId); var entitydto = ObjectMapper.Map(input); var newentity = await _manager.UpdatePatientRegisterAuditorDoctorAsync(entitydto, entity); - + return ObjectMapper.Map(newentity); } diff --git a/src/Shentun.Pacs.Application/RegisterChecks/RegisterCheckAppService.cs b/src/Shentun.Pacs.Application/RegisterChecks/RegisterCheckAppService.cs index 05fbd50..36b0953 100644 --- a/src/Shentun.Pacs.Application/RegisterChecks/RegisterCheckAppService.cs +++ b/src/Shentun.Pacs.Application/RegisterChecks/RegisterCheckAppService.cs @@ -11,6 +11,7 @@ using Shentun.Pacs.Models; using Shentun.Pacs.PatientRegisters; using Shentun.Pacs.RegisterCheckItems; using Shentun.Pacs.RegisterCheckSummarys; +using Spire.Pdf.Exporting.XPS.Schema; using System; using System.Collections.Generic; using System.Linq; @@ -57,11 +58,13 @@ namespace Shentun.Pacs.RegisterChecks private readonly IRepository _userItemTypeRepository; private readonly IRepository _asbitemRepository; private readonly IRepository _lisRequestRepository; - + private readonly IRepository _doctorSignInRepository; private readonly IRepository _guideTypeRepository; private readonly UnitOfWorkManager _unitOfWorkManager; + private readonly IRepository _deviceRepository; + public RegisterCheckAppService(IRepository registerCheckRepository, IRepository registerCheckItemRepository, IRepository patientRegisterRepository, @@ -80,10 +83,11 @@ namespace Shentun.Pacs.RegisterChecks IRepository registerCheckAsbitemRepository, IRepository itemTypeRepository, IRepository lisRequestRepository, - + IRepository doctorSignInRepository, IRepository guideTypeRepository, - UnitOfWorkManager unitOfWorkManager) + UnitOfWorkManager unitOfWorkManager, + IRepository deviceRepository) { _registerCheckRepository = registerCheckRepository; _userRepository = userRepository; @@ -103,10 +107,11 @@ namespace Shentun.Pacs.RegisterChecks _registerCheckAsbitemRepository = registerCheckAsbitemRepository; _itemTypeRepository = itemTypeRepository; _lisRequestRepository = lisRequestRepository; - + _doctorSignInRepository = doctorSignInRepository; _guideTypeRepository = guideTypeRepository; _unitOfWorkManager = unitOfWorkManager; + _deviceRepository = deviceRepository; } /// @@ -278,61 +283,65 @@ namespace Shentun.Pacs.RegisterChecks 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')); + var query = 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 + join device in await _deviceRepository.GetQueryableAsync() on patientRegister.DeviceId equals device.Id into deviceTemp + from deviceHaveEmpty in deviceTemp.DefaultIfEmpty() + where patientRegister.Id == input.PatientRegisterId && asbitem.IsCheck == 'Y' + orderby itemType.DisplayOrder, asbitem.DisplayOrder ascending + select new + { + registerCheck, + registerCheckAsbitem, + asbitem, + itemType, + encodingFlag = deviceHaveEmpty != null ? deviceHaveEmpty.EncodingFlag : '0' + }; + + + var entListDto = new List(); - #region 增加项目类别权限 + var registerCheckGroup = query.ToList().GroupBy(g => g.registerCheck); - string AdminId = _configuration.GetValue("AdminId"); - if (_currentUser.Id.Value != Guid.Parse(AdminId)) + foreach (var item in registerCheckGroup) { - 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(); + var firstItem = item.FirstOrDefault(); - if (asbitemIds.Any()) + string pacsDesc = ""; + + if (firstItem.encodingFlag == '0') { - entlist = entlist.Where(m => asbitemIds.Contains(m.RegisterCheckAsbitems.FirstOrDefault().AsbitemId)); + pacsDesc = !string.IsNullOrWhiteSpace(firstItem.asbitem.ShortName) ? firstItem.asbitem.ShortName : firstItem.asbitem.DisplayName; } else { - return new List(); + pacsDesc = !string.IsNullOrWhiteSpace(firstItem.asbitem.EnglishShortName) ? firstItem.asbitem.EnglishShortName : firstItem.asbitem.DisplayName; } + entListDto.Add(new RegisterCheckWithAsbitemsDto + { + AsbitemName = string.Join(",", item.Select(rs => rs.asbitem.DisplayName).Distinct().ToList()), + AuditorUserId = item.Key.AuditorUserId, + AuditTime = item.Key.AuditTime, + CheckDate = DataHelper.ConversionDateToString(item.Key.CheckDate), + CheckDoctorId = item.Key.CheckDoctorId, + CheckRequestNo = item.Key.CheckRequestNo, + CompleteFlag = item.Key.CompleteFlag, + Id = item.Key.Id, + IsAudit = item.Key.IsAudit, + IsCharge = item.Where(m => m.registerCheckAsbitem.IsCharge == 'Y').Count() > 0 ? 'Y' : 'N', + IsLock = item.Key.IsLock, + CheckTypeFlag = firstItem.itemType.CheckTypeFlag, + ItemTypeDisplayOrder = firstItem.itemType.DisplayOrder, + AsbitemDisplayOrder = firstItem.asbitem.DisplayOrder, + PacsDesc = pacsDesc + }); } - #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; + return entListDto; } /// @@ -372,7 +381,7 @@ namespace Shentun.Pacs.RegisterChecks registerCheck.AuditorName = input.AuditorName; if (!string.IsNullOrWhiteSpace(input.LisSampleNo)) registerCheck.LisSampleNo = input.LisSampleNo; - if (input.SubmissionTime!=null) + if (input.SubmissionTime != null) registerCheck.SubmissionTime = input.SubmissionTime; if (input.AuditorTime != null) registerCheck.AuditorTime = input.AuditorTime; @@ -775,7 +784,7 @@ namespace Shentun.Pacs.RegisterChecks } - + /// /// 医生签到 签退 diff --git a/src/Shentun.Pacs.Application/Worklists/WorklistAppService.cs b/src/Shentun.Pacs.Application/Worklists/WorklistAppService.cs index c648d5b..42551a0 100644 --- a/src/Shentun.Pacs.Application/Worklists/WorklistAppService.cs +++ b/src/Shentun.Pacs.Application/Worklists/WorklistAppService.cs @@ -62,30 +62,37 @@ namespace Shentun.Pacs.Worklists } - var queryList = (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 deviceType in await _deviceTypeRepository.GetQueryableAsync() on asbitem.DeviceTypeId equals deviceType.Id - where registerCheck.ScheduledAet == input.ScheduledAet - && registerCheck.WorklistPreCheckDate != null - && registerCheck.WorklistPreCheckDate >= Convert.ToDateTime(input.StartDate) - && registerCheck.WorklistPreCheckDate < Convert.ToDateTime(input.EndDate).AddDays(1) - && (deviceType.DisplayName == input.Modality || deviceType.Alias.Contains(input.Modality)) - select new - { - patientRegister, - registerCheck, - deviceType, - asbitemName = !string.IsNullOrWhiteSpace(asbitem.ShortName) ? asbitem.ShortName : asbitem.DisplayName, - endAsbitemName = !string.IsNullOrWhiteSpace(asbitem.EnglishShortName) ? asbitem.EnglishShortName : asbitem.DisplayName, - isFilmRelease = asbitem.IsFilmRelease - }).ToList(); + var query = (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 deviceType in await _deviceTypeRepository.GetQueryableAsync() on asbitem.DeviceTypeId equals deviceType.Id + where registerCheck.ScheduledAet == input.ScheduledAet + && registerCheck.WorklistPreCheckDate != null + && registerCheck.WorklistPreCheckDate >= Convert.ToDateTime(input.StartDate) + && registerCheck.WorklistPreCheckDate < Convert.ToDateTime(input.EndDate).AddDays(1) + && (deviceType.DisplayName == input.Modality || deviceType.Alias.Contains(input.Modality)) + select new + { + patientRegister, + registerCheck, + deviceType, + asbitemName = !string.IsNullOrWhiteSpace(asbitem.ShortName) ? asbitem.ShortName : asbitem.DisplayName, + endAsbitemName = !string.IsNullOrWhiteSpace(asbitem.EnglishShortName) ? asbitem.EnglishShortName : asbitem.DisplayName, + isFilmRelease = asbitem.IsFilmRelease + }); + + + query = query.Where(m => m.registerCheck.IsSignIn == input.IsSignIn); + + + var queryList = query.ToList(); var checkRequestNoGroup = queryList.GroupBy(g => g.registerCheck.CheckRequestNo); var entListDto = new List(); + foreach (var item in checkRequestNoGroup) { string examDescription = string.Join(",", item.Select(ss => ss.asbitemName).Distinct()); @@ -130,13 +137,79 @@ namespace Shentun.Pacs.Worklists StudyUID = "", Title = "" }); + } + //#region 标记签收 + + //var signRegisterChecks = queryList.Select(s => s.registerCheck).Distinct().ToList(); + //foreach (var item in signRegisterChecks) + //{ + // item.SignInTime = DateTime.Now; + // item.IsSignIn = 'Y'; + //} + + //await _registerCheckRepository.UpdateManyAsync(signRegisterChecks); + + //#endregion return entListDto; } + /// + /// 修改worklist中数据的签收状态 + /// + /// + [HttpPost("api/app/Worklist/UpdateWorklistIsSignIn")] + [AllowAnonymous] + public async Task UpdateWorklistIsSignInAsync(UpdateWorklistIsSignInInputDto input) + { + if (string.IsNullOrWhiteSpace(input.ScheduledAet)) + { + throw new UserFriendlyException("预检AET不能为空"); + } + + if (string.IsNullOrWhiteSpace(input.Modality)) + { + throw new UserFriendlyException("设备类型不能为空"); + } + + if (string.IsNullOrWhiteSpace(input.CheckRequestNo)) + { + throw new UserFriendlyException("检查条码不能为空"); + } + + var queryList = (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 deviceType in await _deviceTypeRepository.GetQueryableAsync() on asbitem.DeviceTypeId equals deviceType.Id + where registerCheck.ScheduledAet == input.ScheduledAet + && registerCheck.CheckRequestNo == input.CheckRequestNo + && (deviceType.DisplayName == input.Modality || deviceType.Alias.Contains(input.Modality)) + select new + { + registerCheck + }).ToList(); + + if (queryList.Any()) + { + foreach (var item in queryList) + { + item.registerCheck.SignInTime = DateTime.Now; + item.registerCheck.IsSignIn = input.IsSignIn; + } + + await _registerCheckRepository.UpdateManyAsync(queryList.Select(s => s.registerCheck)); + } + else + { + throw new UserFriendlyException("未查询到数据"); + } + + } + /// /// 创建检查项目worklist数据 /// @@ -186,5 +259,78 @@ namespace Shentun.Pacs.Worklists await _registerCheckRepository.UpdateAsync(registerCheckEnt); } + + /// + /// 根据设备类型,AET,条形码获取组合项目简称 + /// + /// + [HttpPost("api/app/Worklist/GetRegisterCheckAsbitemName")] + [AllowAnonymous] + public async Task GetRegisterCheckAsbitemNameAsync(GetRegisterCheckAsbitemNameInputDto input) + { + var entDto = new GetRegisterCheckAsbitemNameDto(); + + if (string.IsNullOrWhiteSpace(input.ScheduledAet)) + { + throw new UserFriendlyException("预检AET不能为空"); + } + + if (string.IsNullOrWhiteSpace(input.Modality)) + { + throw new UserFriendlyException("设备类型不能为空"); + } + + if (string.IsNullOrWhiteSpace(input.CheckRequestNo)) + { + throw new UserFriendlyException("检查条码不能为空"); + } + + var queryList = (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 deviceType in await _deviceTypeRepository.GetQueryableAsync() on asbitem.DeviceTypeId equals deviceType.Id + where registerCheck.ScheduledAet == input.ScheduledAet + && registerCheck.CheckRequestNo == input.CheckRequestNo + && (deviceType.DisplayName == input.Modality || deviceType.Alias.Contains(input.Modality)) + select new + { + asbitemName = !string.IsNullOrWhiteSpace(asbitem.ShortName) ? asbitem.ShortName : asbitem.DisplayName, + endAsbitemName = !string.IsNullOrWhiteSpace(asbitem.EnglishShortName) ? asbitem.EnglishShortName : asbitem.DisplayName, + isFilmRelease = asbitem.IsFilmRelease + }).ToList(); + + if (queryList.Any()) + { + string examDescription = string.Join(",", queryList.Select(ss => ss.asbitemName).Distinct()); + if (queryList.Where(m => m.isFilmRelease == 'N').Count() > 0) + { + examDescription += ",不出片"; + } + + if (examDescription.Length > 64) + { + examDescription = examDescription.Substring(0, 64); + } + + string examEngDescription = string.Join(",", queryList.Select(ss => ss.isFilmRelease == 'N' ? ss.endAsbitemName + "(BU)" : ss.endAsbitemName).Distinct()); + + if (examEngDescription.Length > 64) + { + examEngDescription = examEngDescription.Substring(0, 64); + } + + + entDto.AsbitemShortName = examDescription; + entDto.AsbitemEngShortName = examEngDescription; + } + else + { + throw new UserFriendlyException("未查询到数据"); + } + + return entDto; + + } } }