diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index f54a1f2c..b2b6cb60 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -479,6 +479,16 @@ + + + 影像上传监控表 + + + + + + + 阅片期信息表 diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index f11c1996..cb47c580 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -334,6 +334,75 @@ namespace IRaCIS.Core.Application.Service.Common } + /// + /// 影像上传监控表 + /// + /// + /// + /// + /// + /// + [HttpPost] + public async Task GetStudyUploadMonitor_Export(StudyQuery studyQuery, + [FromServices] IRepository _commonDocumentRepository, + [FromServices] IDictionaryService _dictionaryService, + [FromServices] IRepository _trialRepository) + { + + var svExpression = QCCommon.GetStudyMonitorSubjectVisitFilter(studyQuery.VisitPlanArray); + var StudyMonitorQuery = _repository.Where(t => t.TrialId == studyQuery.TrialId) + .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id)) + .WhereIf(studyQuery.VisitPlanArray != null && studyQuery.VisitPlanArray?.Length > 0, svExpression) + .WhereIf(!string.IsNullOrWhiteSpace(studyQuery.SubjectInfo), t => t.Subject.Code.Contains(studyQuery.SubjectInfo)) + .WhereIf(studyQuery.SubjectId != null, t => t.SubjectId == studyQuery.SubjectId) + .WhereIf(studyQuery.SubjectVisitId != null, t => t.SubjectId == studyQuery.SubjectVisitId) + .WhereIf(studyQuery.SiteId != null, t => t.SiteId == studyQuery.SiteId) + .Select(t => new UnionStudyMonitorExportDto() + { + TrialSiteCode = t.TrialSite.TrialSiteCode, + TrialSiteAliasName = t.TrialSite.TrialSiteAliasName, + + SubjectCode = t.Subject.Code, + + + VisitName = t.SubjectVisit.VisitName, + + StudyCode = t.StudyCode, + + IsDicom = t.IsDicom, + + Uploader = t.Uploader.UserName, + + IP = t.IP, + + UploadStartTime = t.UploadStartTime, + + UploadFinishedTime = t.UploadFinishedTime, + + TotalMillisecondsInterval = t.TotalMillisecondsInterval, + + UploadTime = t.CreateTime, + + FileCount = t.FileCount, + FileSize = t.FileSize, + + IsDicomReUpload = t.IsDicomReUpload, + + IsSuccess = t.IsSuccess, + Note = t.Note, + }); + + var list = await StudyMonitorQuery.ToListAsync(); + + var exportInfo = (await _trialRepository.Where(t => t.Id == studyQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException(); + + exportInfo.List = list; + + return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialStudyUploadMonitor_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(UnionStudyMonitorExportDto)); + + + } + /// diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs index 3635d4e3..8b62a57f 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs @@ -440,6 +440,72 @@ namespace IRaCIS.Core.Application.Contracts + } + + + public class UnionStudyMonitorExportDto + { + public string SubjectCode { get; set; } = String.Empty; + + public string VisitName { get; set; } = string.Empty; + + + public string TrialSiteCode { get; set; } = string.Empty; + + public string TrialSiteAliasName { get; set; } = string.Empty; + + public string Uploader { get; set; } = string.Empty; + + public DateTime UploadTime { get; set; } + + public string StudyCode { get; set; } + + + public bool IsDicom { get; set; } + + public string IsDicomStr => IsDicom ? "DICOM" : "Non-DICOM"; + + public string UploadStartTimeStr => UploadStartTime.ToString("yyyy-MM-dd HH:mm:ss.fff"); + public string UploadFinishedTimeStr => UploadFinishedTime.ToString("yyyy-MM-dd HH:mm:ss.fff"); + + + public double TotalMillisecondsInterval { get; set; } + + + public string TimeInterval + { + get + { + + var uploadTimeSpan = UploadFinishedTime - UploadStartTime; + + return $" {uploadTimeSpan.Hours}:{uploadTimeSpan.Minutes}:{uploadTimeSpan.Seconds}.{uploadTimeSpan.Milliseconds}"; + } + } + + public DateTime UploadStartTime { get; set; } + + + public DateTime UploadFinishedTime { get; set; } + + + public decimal FileSize { get; set; } + + public string FileSizeStr => $"{(FileSize / (decimal)Math.Pow(1024, 2)).ToString("F")}M"; + + public string IP { get; set; } = String.Empty; + + + public bool IsDicomReUpload { get; set; } + + + public int FileCount { get; set; } + + [DictionaryTranslateAttribute("YesOrNo")] + public bool IsSuccess { get; set; } = true; + + public string Note = string.Empty; + } public class UnionStudyExportDTO diff --git a/IRaCIS.Core.Domain/_Config/_StaticData.cs b/IRaCIS.Core.Domain/_Config/_StaticData.cs index 41cf031d..ac9372d2 100644 --- a/IRaCIS.Core.Domain/_Config/_StaticData.cs +++ b/IRaCIS.Core.Domain/_Config/_StaticData.cs @@ -149,6 +149,8 @@ public static class StaticData public const string TrialStudyList_Export = "TrialStudyList_Export"; + public const string TrialStudyUploadMonitor_Export = "TrialStudyUploadMonitor_Export"; + public const string TrialSubjectVisitCheckList_Export = "TrialSubjectVisitCheckList_Export"; public const string TrialReadingTaskList_Export = "TrialReadingTaskList_Export";