Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing

This commit is contained in:
he
2024-09-11 16:37:31 +08:00
53 changed files with 325 additions and 1720 deletions
@@ -221,7 +221,6 @@ namespace IRaCIS.Core.Application.ViewModel
public class AnalysisTaskView : ReadingTaskView
{
public bool? IsSelfAnalysis { get; set; }
public int ConsistentClinicalDataCount { get; set; } = 0;
@@ -965,7 +965,6 @@ namespace IRaCIS.Core.Application.Service.Allocation
else
{
var taskQuery = _visitTaskRepository.Where(x => x.TrialId == inQuery.TrialId && x.DoctorUserId == _userInfo.Id && x.TaskState == TaskState.Effect && x.TrialReadingCriterionId == trialReadingCriterionId)
// .Where(x=>x.Subject.ClinicalDataList.Any(c => c.IsSign && (c.ReadingId == x.SouceReadModuleId || c.ReadingId == x.SourceSubjectVisitId)))
.Where(x => !x.Subject.IsDeleted).Where(x => (x.IsNeedClinicalDataSign && x.IsClinicalDataSign) || !x.IsNeedClinicalDataSign);
iRUnReadOut = new IRUnReadOutDto()
@@ -821,7 +821,7 @@ namespace IRaCIS.Core.Application.Service.Common
.WhereIf(inQuery.SubjectVisitId != null, t => t.SubjectId == inQuery.SubjectVisitId)
.WhereIf(inQuery.TrialSiteId != null, t => t.Subject.TrialSiteId == inQuery.TrialSiteId)
.WhereIf(inQuery.IsDicom != null, t => t.IsDicom == inQuery.IsDicom)
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Uploader), t => t.Uploader.UserName.Contains(inQuery.Uploader))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Uploader), t => t.CreateUser.UserName.Contains(inQuery.Uploader))
.WhereIf(inQuery.IsSuccess != null, t => t.IsSuccess == inQuery.IsSuccess)
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.StudyCode), t => t.StudyCode.Contains(inQuery.StudyCode))
.Select(t => new UnionStudyMonitorExportDto()
@@ -838,7 +838,7 @@ namespace IRaCIS.Core.Application.Service.Common
IsDicom = t.IsDicom,
Uploader = t.Uploader.UserName,
Uploader = t.CreateUser.UserName,
IP = t.IP,
@@ -1,4 +1,5 @@
using IRaCIS.Core.Application.Service.ImageAndDoc.DTO;
using IRaCIS.Core.Domain.Share;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
@@ -551,6 +552,54 @@ namespace IRaCIS.Core.Application.Contracts
}
public class TrialImageDownloadView
{
public Guid TrialId { get; set; }
public string SubjectCode { get; set; }
public bool IsSuccess { get; set; }
public DateTime DownloadStartTime { get; set; }
public DateTime? DownloadEndTime { get; set; }
public string VisitName { get; set; }
public ImageType ImageType { get; set; }
public int NoneDicomStudyCount { get; set; }
public int DicomStudyCount { get; set; }
public int ImageCount { get; set; }
public long ImageSize { get; set; }
public string UserName { get; set; }
public string UserFullName { get; set; }
public DateTime CreateTime { get; set; }
}
public class TrialIamgeDownQuery:PageInput
{
[NotDefault]
public Guid TrialId { get; set; }
public string? SubjectCode { get; set; }
public ImageType? ImageType { get; set; }
public UserTypeEnum? UserType { get; set; }
public bool? IsSuccess { get; set; }
public DateTime? DownloadStartTime { get; set; }
public DateTime? DownloadEndTime { get; set; }
public string? IP { get; set; }
}
public class SubjectVisitTaskInfo
{
@@ -49,7 +49,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
IRepository<NoneDicomStudy> _noneDicomStudyReposiotry,
IRepository<NoneDicomStudyFile> _noneDicomStudyFileReposiotry,
IDistributedLockProvider _distributedLockProvider) : BaseService, IDownloadAndUploadService
IDistributedLockProvider _distributedLockProvider,
IRepository<TrialImageDownload> _trialImageDownloadRepository,
IRepository<Subject> _subjectRepository) : BaseService, IDownloadAndUploadService
{
@@ -220,9 +222,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
}
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
public async Task<IResponseOutput> PreArchiveDicomStudy(PriArchiveTaskStudyCommand preArchiveStudyCommand)
@@ -678,11 +677,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var isQueryDicom = inQuery.DicomStudyIdList.Count > 0;
var isQueryNoneDicom = inQuery.NoneDicomStudyIdList.Count > 0;
var imageType = (isQueryDicom && isQueryNoneDicom) ? ImageType.DicomAndNoneDicom : (isQueryDicom ? ImageType.Dicom : ImageType.NoneDicom);
var query = from sv in _subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId)
select new
{
TrialId = sv.TrialId,
SubjectCode = sv.Subject.Code,
VisitName = sv.VisitName,
@@ -719,14 +721,32 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
{
file.FileName,
file.Path,
file.FileType
file.FileType,
file.FileSize,
})
}).ToList()
};
var result = query.FirstOrDefault();
return ResponseOutput.Ok(result);
var preDownloadInfo = new TrialImageDownload()
{
Id = NewId.NextSequentialGuid(),
TrialId = result.TrialId,
SubjectCode = result.SubjectCode,
IP = _userInfo.IP,
DownloadStartTime = DateTime.Now,
IsSuccess = false,
ImageType = imageType,
VisitName = string.Join(" | ", result.VisitName),
NoneDicomStudyCount = result.NoneDicomStudyList.Count(),
DicomStudyCount = result.StudyList.Count(),
ImageCount = result.StudyList.Sum(s => s.SeriesList.Sum(s => s.InstanceList.Count())) + result.NoneDicomStudyList.Sum(s => s.FileList.Count()),
ImageSize = result.StudyList.Sum(t => t.SeriesList.Sum(s => s.InstanceList.Sum(i => i.FileSize))) + result.NoneDicomStudyList.Sum(t => t.FileList.Sum(s => s.FileSize))
?? 0
};
await _trialImageDownloadRepository.AddAsync(preDownloadInfo, true);
return ResponseOutput.Ok(result, preDownloadInfo.Id);
}
@@ -752,10 +772,10 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
}
var query = _visitTaskRepository.Where(t => t.SubjectId == inQuery.SubjectId && t.TrialReadingCriterionId == inQuery.TrialReadingCriterionId
&& t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == isAnalysisCreate)
&& t.SourceSubjectVisitId != null && t.DoctorUserId == doctorUserId && t.TaskState == TaskState.Effect)
.ProjectTo<SubjectCRCImageUploadedDto>(_mapper.ConfigurationProvider);
//这里过滤是否是一致性分析的
var list = await query.Where(t => t.SubjectCode == inQuery.SubjectCode).ToListAsync();
foreach (var item in list)
@@ -817,17 +837,18 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
/// 检查在访视下面,所以需要传递下载的访视Id,另外下载访视下面那些检查,就把访视下的对应的检查Id 丢到数组里就好
/// </summary>
/// <param name="inQuery"></param>
/// <param name="_subjectRepository"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> GetIRReadingDownloadStudyInfo(IRDownloadQuery inQuery, [FromServices] IRepository<Subject> _subjectRepository)
public async Task<IResponseOutput> GetIRReadingDownloadStudyInfo(IRDownloadQuery inQuery)
{
var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId)
.Select(t => new { t.IsImageFilter, t.CriterionModalitys }).FirstNotNullAsync();
.Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.TrialId }).FirstNotNullAsync();
var isQueryDicom = inQuery.DicomStudyIdList.Count > 0;
var isQueryNoneDicom = inQuery.NoneDicomStudyIdList.Count > 0;
var imageType = (isQueryDicom && isQueryNoneDicom) ? ImageType.DicomAndNoneDicom : (isQueryDicom ? ImageType.Dicom : ImageType.NoneDicom);
var taskIdList = inQuery.SubjectVisitTaskList.Select(t => t.TaskId).ToList();
var subjectVisitIdList = inQuery.SubjectVisitTaskList.Select(t => t.SubjectVisitId).ToList();
@@ -856,7 +877,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
InstancePathList = z.DicomInstanceList.Select(k => new
{
k.Path
k.Path,
k.FileSize
})
})
@@ -874,7 +896,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
{
file.FileName,
file.Path,
file.FileType
file.FileType,
file.FileSize
})
})
};
@@ -885,7 +908,25 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
return ResponseOutput.Ok(result);
var preDownloadInfo = new TrialImageDownload()
{
Id = NewId.NextSequentialGuid(),
TrialId = info.TrialId,
SubjectCode = inQuery.SubjectCode,
IP=_userInfo.IP,
DownloadStartTime = DateTime.Now,
IsSuccess = false,
ImageType = imageType,
VisitName = string.Join(" | ", result.Select(t => t.VisitName).OrderBy(t => t).ToList()),
NoneDicomStudyCount = result.Sum(t => t.NoneDicomStudyList.Count()),
DicomStudyCount = result.Sum(t => t.StudyList.Count()),
ImageCount = result.Sum(t => t.StudyList.Sum(s => s.SeriesList.Sum(s => s.InstancePathList.Count())) + t.NoneDicomStudyList.Sum(s => s.FileList.Count())),
ImageSize = result.Sum(t => t.StudyList.Sum(t => t.SeriesList.Sum(s => s.InstancePathList.Sum(i => i.FileSize))) + t.NoneDicomStudyList.Sum(t => t.FileList.Sum(s => s.FileSize))
) ?? 0
};
await _trialImageDownloadRepository.AddAsync(preDownloadInfo,true);
return ResponseOutput.Ok(result, preDownloadInfo.Id);
}
/// <summary>
@@ -937,6 +978,40 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
/// <summary>
/// 影像下载成功回调
/// </summary>
/// <param name="trialImageDownloadId"></param>
/// <returns></returns>
public async Task<IResponseOutput> DownloadImageSuccess(Guid trialImageDownloadId)
{
await _trialImageDownloadRepository.UpdatePartialFromQueryAsync(t => t.Id == trialImageDownloadId, u => new TrialImageDownload()
{ DownloadEndTime = DateTime.Now, IsSuccess = true }, true);
return ResponseOutput.Ok();
}
/// <summary>
/// 项目影像下载监控列表
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<TrialImageDownloadView>> GetTrialDownloadList(TrialIamgeDownQuery inQuery)
{
var query = _trialImageDownloadRepository.Where(t => t.TrialId == inQuery.TrialId)
.WhereIf(inQuery.SubjectCode.IsNotNullOrEmpty(), t => t.SubjectCode.Contains(inQuery.SubjectCode))
.WhereIf(inQuery.IP.IsNotNullOrEmpty(), t => t.IP.Contains(inQuery.IP))
.WhereIf(inQuery.ImageType != null, t => t.ImageType == inQuery.ImageType)
.WhereIf(inQuery.UserType != null, t => t.CreateUser.UserTypeEnum == inQuery.UserType)
.WhereIf(inQuery.IsSuccess != null, t => t.IsSuccess == inQuery.IsSuccess)
.WhereIf(inQuery.DownloadStartTime != null, t => t.DownloadStartTime >= inQuery.DownloadStartTime)
.WhereIf(inQuery.DownloadEndTime != null, t => t.DownloadEndTime <= inQuery.DownloadEndTime)
.ProjectTo<TrialImageDownloadView>(_mapper.ConfigurationProvider);
return await query.ToPagedListAsync(inQuery);
}
#region
/// <summary>
@@ -1361,9 +1436,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
}
#endregion
#region
/// <summary>
/// IR 影像上传任务列表 --old 20240903 界面调整,现在先废弃
@@ -411,7 +411,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
TrialSiteCode = t.Subject.TrialSite.TrialSiteCode,
Uploader = t.Uploader.UserName,
Uploader = t.CreateUser.UserName,
UploadTime = t.CreateTime
@@ -493,7 +493,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
.WhereIf(inQuery.SubjectVisitId != null, t => t.SubjectId == inQuery.SubjectVisitId)
.WhereIf(inQuery.TrialSiteId != null, t => t.Subject.TrialSiteId == inQuery.TrialSiteId)
.WhereIf(inQuery.IsDicom != null, t => t.IsDicom == inQuery.IsDicom)
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Uploader), t => t.Uploader.UserName.Contains(inQuery.Uploader))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.Uploader), t => t.CreateUser.UserName.Contains(inQuery.Uploader))
.WhereIf(inQuery.IsSuccess != null, t => t.IsSuccess == inQuery.IsSuccess)
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.StudyCode), t => t.StudyCode.Contains(inQuery.StudyCode))
.Select(t => new UnionStudyMonitorModel()
@@ -514,7 +514,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
TrialSiteCode = t.Subject.TrialSite.TrialSiteCode,
Uploader = t.Uploader.UserName,
Uploader = t.CreateUser.UserName,
UploadTime = t.CreateTime,
@@ -43,8 +43,8 @@ namespace IRaCIS.Core.Application.Service
CreateMap<DicomStudy, StudyDTO>().IncludeMembers(t => t.Subject, u => u.SubjectVisit)
.ForMember(d => d.SiteName, u => u.MapFrom(s => s.Subject.TrialSite.TrialSiteName))
.ForMember(d => d.UploaderFirstName, u => u.MapFrom(s => s.Uploader.FirstName))
.ForMember(d => d.UploaderLastName, u => u.MapFrom(s => s.Uploader.LastName))
.ForMember(d => d.UploaderFirstName, u => u.MapFrom(s => s.CreateUser.FirstName))
.ForMember(d => d.UploaderLastName, u => u.MapFrom(s => s.CreateUser.LastName))
.ForMember(d => d.UploadedTime, u => u.MapFrom(s => s.CreateTime));
CreateMap<Subject, StudyDTO>();
@@ -69,7 +69,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<DicomStudy, QAStudyInfoDTO>()
.ForMember(o => o.IsCompleteClinicalData, t => t.MapFrom(u => !u.ReadingClinicalDataList.Any(x => x.ReadingClinicalDataPDFList.Count() == 0)))
.ForMember(o => o.UploadedTime, t => t.MapFrom(u => u.CreateTime))
.ForMember(o => o.Uploader, t => t.MapFrom(u => u.Uploader.LastName + " / " + u.Uploader.FirstName))
.ForMember(o => o.Uploader, t => t.MapFrom(u => u.CreateUser.LastName + " / " + u.CreateUser.FirstName))
.ForMember(o => o.StudyId, t => t.MapFrom(u => u.Id))
.ForMember(o => o.IsHaveUploadFailed, t => t.MapFrom(u => u.DicomStudyMonitorList.Any(t => t.FailedFileCount > 0)))
.ForMember(o => o.Modalities, t => t.MapFrom(u => string.Join('、', u.SeriesList.Select(t => t.Modality).Distinct())));
@@ -143,7 +143,10 @@ namespace IRaCIS.Core.Application.Service
.ForMember(d => d.NoneDicomStudyList, u => u.MapFrom(s => s.SourceSubjectVisit.NoneDicomStudyList))
;
CreateMap<TrialImageDownload, TrialImageDownloadView>()
.ForMember(d => d.UserFullName, u => u.MapFrom(s => s.CreateUser.FullName))
.ForMember(d => d.UserName, u => u.MapFrom(s => s.CreateUser.UserName));
}
}
@@ -1279,7 +1279,6 @@ namespace IRaCIS.Core.Application.Contracts
public bool IsBaseLine { get; set; }
public bool IsUrgent { get; set; }
public Guid? ClinicalDataSignUserId { get; set; }
public bool IsQCConfirmedReupload { get; set; }
@@ -536,7 +536,7 @@ namespace IRaCIS.Core.Application.Service
// 一致性核查文件
CreateMap<InspectionFile, GetUserUploadFileDto>()
.ForMember(d => d.CreateUserName, u => u.MapFrom(t => t.User.FirstName + "/" + t.User.LastName));
.ForMember(d => d.CreateUserName, u => u.MapFrom(t => t.CreateUser.FullName));
//CRC 质疑列表
@@ -376,11 +376,11 @@ namespace IRaCIS.Application.Services
return ResponseOutput.Result(result);
}
/// <summary>
/// 一致性分析的临床数据
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
///// <summary>
///// 一致性分析的临床数据
///// </summary>
///// <param name="inDto"></param>
///// <returns></returns>
//public async Task<IResponseOutput> ReadClinicalDataSign(ReadingClinicalDataSignIndto inDto)
//{
@@ -161,11 +161,6 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public List<string> TrialCriterionNameList { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 创建人
/// </summary>
@@ -337,7 +337,7 @@ namespace IRaCIS.Core.Application.Service
CreateMap<DicomStudy, SelectStudyView>()
.ForMember(o => o.UploadedTime, t => t.MapFrom(u => u.CreateTime))
.ForMember(o => o.Uploader, t => t.MapFrom(u => u.Uploader.LastName + " / " + u.Uploader.FirstName))
.ForMember(o => o.Uploader, t => t.MapFrom(u => u.CreateUser.LastName + " / " + u.CreateUser.FirstName))
.ForMember(o => o.StudyId, t => t.MapFrom(u => u.Id));
CreateMap<VisitTask, HaveGeneratedTaskDto>()
@@ -132,7 +132,7 @@ namespace IRaCIS.Core.Application.Service.Third_partyProject
TrialSiteCode = dicomStudy.Subject.TrialSite.TrialSiteCode,
Uploader = dicomStudy.Uploader.UserName,
Uploader = dicomStudy.CreateUser.UserName,
UploadTime = dicomStudy.CreateTime
};
@@ -191,8 +191,8 @@ namespace IRaCIS.Core.Application.Service
CreateMap<SignDTO, TrialSign>();
CreateMap<TrialStateChange, TrialStateChangeDTO>()
.ForMember(t => t.UserRealName, u => u.MapFrom(c => c.User.FullName))
.ForMember(t => t.UserName, u => u.MapFrom(c => c.User.UserName));
.ForMember(t => t.UserRealName, u => u.MapFrom(c => c.CreateUser.FullName))
.ForMember(t => t.UserName, u => u.MapFrom(c => c.CreateUser.UserName));