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
Details
continuous-integration/drone/push Build is passing
Details
commit
5ef075e4fe
|
@ -735,6 +735,15 @@
|
||||||
<param name="_trialRepository"></param>
|
<param name="_trialRepository"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.GetImageBackList_Export(IRaCIS.Core.Application.Contracts.ImageBackQueryDto,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisitImageBackRecord},IRaCIS.Application.Interfaces.IDictionaryService)">
|
||||||
|
<summary>
|
||||||
|
重传申请导表
|
||||||
|
</summary>
|
||||||
|
<param name="inQuery"></param>
|
||||||
|
<param name="_subjectVisitImageBackRecordReposiotry"></param>
|
||||||
|
<param name="_dictionaryService"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.GetSysDocumentConfirmList_Export(IRaCIS.Core.Application.Contracts.SystemDocQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SystemDocument},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.IdentityUser},IRaCIS.Application.Interfaces.IDictionaryService)">
|
<member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.GetSysDocumentConfirmList_Export(IRaCIS.Core.Application.Contracts.SystemDocQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SystemDocument},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.IdentityUser},IRaCIS.Application.Interfaces.IDictionaryService)">
|
||||||
getSysDocumentConfirmList 系统文档培训查询
|
getSysDocumentConfirmList 系统文档培训查询
|
||||||
|
|
||||||
|
@ -2169,7 +2178,7 @@
|
||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.StudyService.Item(System.Guid)">
|
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.StudyService.Item(System.Guid,System.Nullable{System.Boolean})">
|
||||||
<summary> 指定资源Id,获取Dicom检查信息 </summary>
|
<summary> 指定资源Id,获取Dicom检查信息 </summary>
|
||||||
<param name="studyId"> Dicom检查的Id </param>
|
<param name="studyId"> Dicom检查的Id </param>
|
||||||
</member>
|
</member>
|
||||||
|
@ -17582,7 +17591,7 @@
|
||||||
<param name="tpCode"></param>
|
<param name="tpCode"></param>
|
||||||
<param name="key"></param>
|
<param name="key"></param>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Services.SeriesService.List(System.Guid,System.Nullable{System.Boolean})">
|
<member name="M:IRaCIS.Core.Application.Services.SeriesService.List(System.Guid,System.Nullable{System.Boolean},System.Nullable{System.Boolean})">
|
||||||
<summary> 指定资源Id,获取Dicom检查所属序列信息列表 </summary>
|
<summary> 指定资源Id,获取Dicom检查所属序列信息列表 </summary>
|
||||||
<param name="studyId"> Dicom检查的Id </param>
|
<param name="studyId"> Dicom检查的Id </param>
|
||||||
<param name="isReading"></param>
|
<param name="isReading"></param>
|
||||||
|
@ -17981,7 +17990,7 @@
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.GetNextIQCQuality(IRaCIS.Core.Application.Contracts.GetNextIQCQualityInDto)">
|
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.GetNextIQCQuality(IRaCIS.Core.Application.Contracts.GetNextIQCQualityInDto,System.Boolean)">
|
||||||
<summary>
|
<summary>
|
||||||
获取下一个质控任务
|
获取下一个质控任务
|
||||||
</summary>
|
</summary>
|
||||||
|
|
|
@ -37,6 +37,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
IRepository<DicomStudy> _dicomStudyRepository,
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
IRepository<QCChallenge> _qcChallengeRepository,
|
IRepository<QCChallenge> _qcChallengeRepository,
|
||||||
IRepository<ReadModule> _readModuleRepository,
|
IRepository<ReadModule> _readModuleRepository,
|
||||||
|
IRepository<Trial> _trialRepository,
|
||||||
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
IRepository<NoneDicomStudy> _noneDicomStudyRepository,
|
||||||
IRepository<StudyMonitor> _studyMonitorRepository,
|
IRepository<StudyMonitor> _studyMonitorRepository,
|
||||||
IRepository<CommonDocument> _commonDocumentRepository,
|
IRepository<CommonDocument> _commonDocumentRepository,
|
||||||
|
@ -398,6 +399,46 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
|
|
||||||
#region 导表查询
|
#region 导表查询
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 重传申请导表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inQuery"></param>
|
||||||
|
/// <param name="_subjectVisitImageBackRecordReposiotry"></param>
|
||||||
|
/// <param name="_dictionaryService"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<IActionResult> GetImageBackList_Export(ImageBackQueryDto inQuery,
|
||||||
|
[FromServices] IRepository<SubjectVisitImageBackRecord> _subjectVisitImageBackRecordReposiotry, [FromServices] IDictionaryService _dictionaryService)
|
||||||
|
{
|
||||||
|
var svExpression = QCCommon.GetSubjectVisitImageBackRecordFilter(inQuery.VisitPlanArray);
|
||||||
|
|
||||||
|
var query = _subjectVisitImageBackRecordReposiotry.Where(t => t.SubjectVisit.TrialId == inQuery.TrialId)
|
||||||
|
.WhereIf(inQuery.TrialSiteId != null, t => t.SubjectVisit.TrialSiteId == inQuery.TrialSiteId)
|
||||||
|
.WhereIf(!string.IsNullOrEmpty(inQuery.SubjectCode), t => t.SubjectVisit.Subject.Code.Contains(inQuery.SubjectCode))
|
||||||
|
.WhereIf(!string.IsNullOrEmpty(inQuery.VisitName), t => t.SubjectVisit.VisitName.Contains(inQuery.VisitName))
|
||||||
|
.WhereIf(inQuery.VisitPlanArray != null && inQuery.VisitPlanArray?.Length > 0, svExpression)
|
||||||
|
.WhereIf(inQuery.CreateUserId != null, t => t.CreateUserId == inQuery.CreateUserId)
|
||||||
|
.WhereIf(inQuery.ApplyUserRole != null, t => t.ApplyUserRole == inQuery.ApplyUserRole)
|
||||||
|
.WhereIf(inQuery.ApplyBeginTime != null, t => t.CreateTime >= inQuery.ApplyBeginTime)
|
||||||
|
.WhereIf(inQuery.ApplyEndTime != null, t => t.CreateTime <= inQuery.ApplyEndTime)
|
||||||
|
.WhereIf(inQuery.ImageBackState != null, t => t.ImageBackState == inQuery.ImageBackState)
|
||||||
|
.WhereIf(inQuery.AuditBeginTime != null, t => t.AuditTime >= inQuery.AuditBeginTime)
|
||||||
|
.WhereIf(inQuery.AuditEndTime != null, t => t.AuditTime <= inQuery.AuditEndTime)
|
||||||
|
.ProjectTo<ImageBackViewModel>(_mapper.ConfigurationProvider);
|
||||||
|
|
||||||
|
var defalutSortArray = new string[] { nameof(ImageBackViewModel.IsUrgent) + " desc", nameof(ImageBackViewModel.SubjectCode), nameof(ImageBackViewModel.VisitNum) };
|
||||||
|
|
||||||
|
var list = await query.OrderByDescending(t=>t.IsUrgent).ThenBy(t=>t.SubjectCode).ThenBy(t=>t.VisitNum).ToListAsync();
|
||||||
|
|
||||||
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
|
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
|
||||||
|
|
||||||
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialImageBackRecordList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(ImageBackViewModel));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
///getSysDocumentConfirmList 系统文档培训查询
|
///getSysDocumentConfirmList 系统文档培训查询
|
||||||
///
|
///
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
|
@ -3109,7 +3150,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
{
|
{
|
||||||
|
|
||||||
//遍历病灶的每个问题
|
//遍历病灶的每个问题
|
||||||
foreach (var lessionItem in lession.LessionAnswerList)
|
foreach (var lessionItem in lession.LessionAnswerList.OrderBy(t=>t.ShowOrder))
|
||||||
{
|
{
|
||||||
|
|
||||||
var cloneItem = item.Clone();
|
var cloneItem = item.Clone();
|
||||||
|
|
|
@ -195,8 +195,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
Modalities = t.Modalities,
|
Modalities = t.Modalities,
|
||||||
SeriesCount = t.SeriesCount,
|
SeriesCount = t.SeriesCount,
|
||||||
|
|
||||||
ReadingInstanceCount=t.InstanceList.Where(t=>t.IsReading && t.DicomSerie.IsReading).Count(),
|
ReadingInstanceCount = t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading).Count(),
|
||||||
ReadingSeriesCount= t.SeriesList.Where(t => t.IsReading).Count(),
|
ReadingSeriesCount = t.SeriesList.Where(t => t.IsReading).Count(),
|
||||||
}).ToList(),
|
}).ToList(),
|
||||||
|
|
||||||
UploadStudyList = u.TaskStudyList.Select(t => new StudyBasicInfo()
|
UploadStudyList = u.TaskStudyList.Select(t => new StudyBasicInfo()
|
||||||
|
@ -731,7 +731,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
Path = t.Path
|
Path = t.Path
|
||||||
}).ToList(),
|
}).ToList(),
|
||||||
|
|
||||||
ReadingFileCount= ns.FileCount,
|
ReadingFileCount = ns.FileCount,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1126,7 +1126,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
HtmlPath = k.HtmlPath,
|
HtmlPath = k.HtmlPath,
|
||||||
Path = k.Path,
|
Path = k.Path,
|
||||||
InstanceNumber = k.InstanceNumber,
|
InstanceNumber = k.InstanceNumber,
|
||||||
FileSize=k.FileSize,
|
FileSize = k.FileSize,
|
||||||
}).ToList()
|
}).ToList()
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
@ -1228,9 +1228,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
//DicomImageSize = t.StudyList.SelectMany(t => t.InstanceList).Sum(t => t.FileSize),
|
//DicomImageSize = t.StudyList.SelectMany(t => t.InstanceList).Sum(t => t.FileSize),
|
||||||
//NoneDicomImageSize = t.NoneDicomStudyList.SelectMany(t => t.NoneDicomFileList).Sum(t => t.FileSize)
|
//NoneDicomImageSize = t.NoneDicomStudyList.SelectMany(t => t.NoneDicomFileList).Sum(t => t.FileSize)
|
||||||
});
|
});
|
||||||
|
var defalutSortArray = new string[] { nameof(TrialVisitImageStatView.TrialSiteCode), nameof(QCCRCVisitViewModel.SubjectCode), nameof(QCCRCVisitViewModel.VisitNum) };
|
||||||
|
|
||||||
|
var pagelist = await query.Where(t => t.TotalImageCount > 0).ToPagedListAsync(inQuery, defalutSortArray);
|
||||||
var pagelist = await query.Where(t => t.TotalImageCount > 0).ToPagedListAsync(inQuery);
|
|
||||||
|
|
||||||
return ResponseOutput.Ok(pagelist);
|
return ResponseOutput.Ok(pagelist);
|
||||||
}
|
}
|
||||||
|
|
|
@ -350,6 +350,8 @@ namespace IRaCIS.Application.Contracts
|
||||||
public string ResearchProgramNo { get; set; }
|
public string ResearchProgramNo { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public int JoinedTrialCount { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -154,6 +154,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.IdentityUserId, c => c.MapFrom(t => t.Id));
|
.ForMember(d => d.IdentityUserId, c => c.MapFrom(t => t.Id));
|
||||||
CreateMap<IdentityUser, UserListDTO>()
|
CreateMap<IdentityUser, UserListDTO>()
|
||||||
.ForMember(d => d.TrialCode, u => u.MapFrom(s => s.Trial.TrialCode))
|
.ForMember(d => d.TrialCode, u => u.MapFrom(s => s.Trial.TrialCode))
|
||||||
|
.ForMember(d => d.JoinedTrialCount, u => u.MapFrom(s => s.UserTrialList.Count()))
|
||||||
.ForMember(d => d.ResearchProgramNo, u => u.MapFrom(s => s.Trial.ResearchProgramNo));
|
.ForMember(d => d.ResearchProgramNo, u => u.MapFrom(s => s.Trial.ResearchProgramNo));
|
||||||
|
|
||||||
CreateMap<UserAddUserType, UserRole>().ReverseMap();
|
CreateMap<UserAddUserType, UserRole>().ReverseMap();
|
||||||
|
|
|
@ -1397,6 +1397,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[Comment("自定义单位")]
|
[Comment("自定义单位")]
|
||||||
public string CustomUnit { get; set; } = string.Empty;
|
public string CustomUnit { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public int ShowOrder { get; set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
@ -1775,12 +1777,15 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public DateTime? AuditTime { get; set; }
|
public DateTime? AuditTime { get; set; }
|
||||||
public Guid SubjectVisitId { get; set; }
|
public Guid SubjectVisitId { get; set; }
|
||||||
|
|
||||||
|
[DictionaryTranslateAttribute("ImageBackApplyEnum")]
|
||||||
public ImageBackApplyEnum ApplyUserRole { get; set; }
|
public ImageBackApplyEnum ApplyUserRole { get; set; }
|
||||||
|
|
||||||
|
[DictionaryTranslateAttribute("ImageBackApplyEnum")]
|
||||||
public ImageBackStateEnum ImageBackState { get; set; }
|
public ImageBackStateEnum ImageBackState { get; set; }
|
||||||
|
|
||||||
public DateTime? SubmitTime { get; set; }
|
public DateTime? SubmitTime { get; set; }
|
||||||
|
|
||||||
|
[DictionaryTranslateAttribute("YesOrNo")]
|
||||||
public bool IsUrgent { get; set; }
|
public bool IsUrgent { get; set; }
|
||||||
|
|
||||||
public string VisitName { get; set; } = string.Empty;
|
public string VisitName { get; set; } = string.Empty;
|
||||||
|
@ -1789,8 +1794,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public DateTime? LatestScanDate { get; set; }
|
public DateTime? LatestScanDate { get; set; }
|
||||||
public decimal VisitNum { get; set; }
|
public decimal VisitNum { get; set; }
|
||||||
|
|
||||||
|
[DictionaryTranslateAttribute("Subject_Visit_Status")]
|
||||||
|
public SubjectStatus SubjectStatus { get; set; }
|
||||||
public string SubjectCode { get; set; } = String.Empty;
|
public string SubjectCode { get; set; } = String.Empty;
|
||||||
|
|
||||||
public String TrialSiteCode { get; set; } = String.Empty;
|
public String TrialSiteCode { get; set; } = String.Empty;
|
||||||
|
|
|
@ -58,7 +58,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
.WhereIf(inQuery.AuditEndTime != null, t => t.AuditTime <= inQuery.AuditEndTime)
|
.WhereIf(inQuery.AuditEndTime != null, t => t.AuditTime <= inQuery.AuditEndTime)
|
||||||
.ProjectTo<ImageBackViewModel>(_mapper.ConfigurationProvider);
|
.ProjectTo<ImageBackViewModel>(_mapper.ConfigurationProvider);
|
||||||
|
|
||||||
var defalutSortArray = new string[] { nameof(ImageBackViewModel.IsUrgent) + " desc", nameof(ImageBackViewModel.SubjectCode), nameof(ImageBackViewModel.VisitNum) };
|
var defalutSortArray = new string[] { nameof(ImageBackViewModel.ImageBackState), nameof(ImageBackViewModel.CreateTime), nameof(ImageBackViewModel.SubjectCode), nameof(ImageBackViewModel.VisitNum) };
|
||||||
var pageList = await query.ToPagedListAsync(inQuery, defalutSortArray);
|
var pageList = await query.ToPagedListAsync(inQuery, defalutSortArray);
|
||||||
|
|
||||||
return ResponseOutput.Ok(pageList);
|
return ResponseOutput.Ok(pageList);
|
||||||
|
@ -489,7 +489,8 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
var secondReviewTime = inDto.SecondReviewTime != null ? (DateTime)inDto.SecondReviewTime : trialConfirmTime == null ? DateTime.Now : (DateTime)trialConfirmTime;
|
var secondReviewTime = inDto.SecondReviewTime != null ? (DateTime)inDto.SecondReviewTime : trialConfirmTime == null ? DateTime.Now : (DateTime)trialConfirmTime;
|
||||||
|
|
||||||
if ((sv.AuditState == AuditStateEnum.QCPassed && inDto.CurrentQCEnum != CurrentQC.SecondReview) || (inDto.CurrentQCEnum == CurrentQC.SecondReview && secondReviewTime.AddSeconds(1) < trialConfirmTime))
|
if ((sv.AuditState == AuditStateEnum.QCPassed && inDto.CurrentQCEnum != CurrentQC.SecondReview) || (inDto.CurrentQCEnum == CurrentQC.SecondReview && secondReviewTime.AddSeconds(1) < trialConfirmTime)
|
||||||
|
|| (sv.AuditState >= AuditStateEnum.PrimaryQCPassed && inDto.CurrentQCEnum == CurrentQC.First)) //1QC通过时,这个时候看1qc答案
|
||||||
{
|
{
|
||||||
|
|
||||||
//之前质控完的,+二次复核完的,都要从答案表中取 二次复核完的还需要加时间
|
//之前质控完的,+二次复核完的,都要从答案表中取 二次复核完的还需要加时间
|
||||||
|
@ -717,7 +718,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
var qaChallengeQuery = _qcChallengeRepository.Where(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess)
|
var qaChallengeQuery = _qcChallengeRepository.Where(t => t.SubjectVisitId == subjectVisitId && t.QCProcessEnum == trialQCProcess)
|
||||||
.ProjectTo<ChallengeAndDialog>(_mapper.ConfigurationProvider, new { currentUserId = _userInfo.UserRoleId });
|
.ProjectTo<ChallengeAndDialog>(_mapper.ConfigurationProvider, new { currentUserId = _userInfo.UserRoleId });
|
||||||
|
|
||||||
var list = await qaChallengeQuery.OrderByDescending(t=>t.CreateTime).ToListAsync();
|
var list = await qaChallengeQuery.OrderByDescending(t => t.CreateTime).ToListAsync();
|
||||||
|
|
||||||
//list.ForEach(t => t.DialogList.ToList().ForEach(u => u.IsCurrentUser = _userInfo.Id == u.CreateUserId));
|
//list.ForEach(t => t.DialogList.ToList().ForEach(u => u.IsCurrentUser = _userInfo.Id == u.CreateUserId));
|
||||||
|
|
||||||
|
|
|
@ -782,6 +782,16 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
//_mapper.Map(qcQuestionAnswerCommands, questionAnswerList);
|
//_mapper.Map(qcQuestionAnswerCommands, questionAnswerList);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
//可能还有新增的问题
|
||||||
|
|
||||||
|
var needAddList = qcQuestionAnswerCommands.Where(t => t.Id == null).ToList();
|
||||||
|
var addlist = _mapper.Map<List<TrialQCQuestionAnswer>>(needAddList);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
addlist.ForEach(t => { t.TrialId = trialId; t.SubjectVisitId = subjectVisitId; t.CurrentQCEnum = currentQCType; t.QCProcessEnum = trialQCProcess; t.SecondReviewTime = currentQCType == CurrentQC.SecondReview ? trialConfirmTime : null; });
|
||||||
|
|
||||||
|
await _trialQCQuestionAnswerRepository.AddRangeAsync(addlist);
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Ok(await _trialQCQuestionAnswerRepository.SaveChangesAsync());
|
return ResponseOutput.Ok(await _trialQCQuestionAnswerRepository.SaveChangesAsync());
|
||||||
|
@ -1231,19 +1241,60 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<GetNextIQCQualityOutDto> CollectNextIQCQuality(GetNextIQCQualityInDto inDto)
|
public async Task<GetNextIQCQualityOutDto> CollectNextIQCQuality(GetNextIQCQualityInDto inDto)
|
||||||
{
|
{
|
||||||
var nextIQCQuality = await this.GetNextIQCQuality(inDto);
|
|
||||||
|
|
||||||
if (nextIQCQuality.VisitId != null && nextIQCQuality.IsReceived == false)
|
var trialConfig = await _trialRepository
|
||||||
|
.Select(t => new { TrialId = t.Id, t.IsIQCAutoNextTask, t.IsIQCAutoTaskDistinguishType })
|
||||||
|
.FirstOrDefaultAsync(t => t.TrialId == inDto.TrialId)
|
||||||
|
.IfNullThrowException();
|
||||||
|
|
||||||
|
var isDistinguishType = trialConfig.IsIQCAutoNextTask && trialConfig.IsIQCAutoTaskDistinguishType;
|
||||||
|
|
||||||
|
|
||||||
|
if (isDistinguishType == false)
|
||||||
{
|
{
|
||||||
var visit = await _subjectVisitRepository.Where(x => x.Id == nextIQCQuality.VisitId).FirstNotNullAsync();
|
//不区分任务类型,也要按照当前任务类型给,没找到,按照默认规则给任务 无质疑 普通质控任务
|
||||||
if (!visit.IsTake)
|
|
||||||
|
var nextIQCQuality = await this.GetNextIQCQuality(inDto, true);
|
||||||
|
|
||||||
|
//没找到
|
||||||
|
if (nextIQCQuality.VisitId == null)
|
||||||
{
|
{
|
||||||
await ObtainOrCancelQCTask(inDto.TrialId, nextIQCQuality.VisitId.Value, true);
|
nextIQCQuality = await this.GetNextIQCQuality(inDto, false);
|
||||||
|
|
||||||
|
if (nextIQCQuality.VisitId != null && nextIQCQuality.IsReceived == false)
|
||||||
|
{
|
||||||
|
var visit = await _subjectVisitRepository.Where(x => x.Id == nextIQCQuality.VisitId).FirstNotNullAsync();
|
||||||
|
if (!visit.IsTake)
|
||||||
|
{
|
||||||
|
await ObtainOrCancelQCTask(inDto.TrialId, nextIQCQuality.VisitId.Value, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return nextIQCQuality;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//区分任务类型,那么按照当前任务类型给,没找到就结束
|
||||||
|
var nextIQCQuality = await this.GetNextIQCQuality(inDto, true);
|
||||||
|
|
||||||
|
if (nextIQCQuality.VisitId != null && nextIQCQuality.IsReceived == false)
|
||||||
|
{
|
||||||
|
var visit = await _subjectVisitRepository.Where(x => x.Id == nextIQCQuality.VisitId).FirstNotNullAsync();
|
||||||
|
if (!visit.IsTake)
|
||||||
|
{
|
||||||
|
await ObtainOrCancelQCTask(inDto.TrialId, nextIQCQuality.VisitId.Value, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return nextIQCQuality;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nextIQCQuality;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1254,7 +1305,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<GetNextIQCQualityOutDto> GetNextIQCQuality(GetNextIQCQualityInDto inDto)
|
public async Task<GetNextIQCQualityOutDto> GetNextIQCQuality(GetNextIQCQualityInDto inDto, bool isDistinguishType)
|
||||||
{
|
{
|
||||||
var trialConfig = await _trialRepository
|
var trialConfig = await _trialRepository
|
||||||
.Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification, t.IsIQCAutoNextTask, t.IsIQCAutoTaskDistinguishType })
|
.Select(t => new { TrialId = t.Id, t.QCProcessEnum, t.IsImageConsistencyVerification, t.IsIQCAutoNextTask, t.IsIQCAutoTaskDistinguishType })
|
||||||
|
@ -1263,16 +1314,18 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
//当前任务类型 是复核还是普通任务
|
//当前任务类型 是复核还是普通任务
|
||||||
|
|
||||||
var isDistinguishType = trialConfig.IsIQCAutoNextTask && trialConfig.IsIQCAutoTaskDistinguishType;
|
|
||||||
|
|
||||||
//当前是否是复核任务,复核任务,那么下一个任务也是复核的任务
|
//当前是否是复核任务,复核任务,那么下一个任务也是复核的任务
|
||||||
var isSecondReview = _subjectVisitRepository.Any(t => t.Id == inDto.SubjectVisitId && t.SecondReviewState == SecondReviewState.AuditPassed);
|
var isSecondReview = _subjectVisitRepository.Any(t => t.Id == inDto.SubjectVisitId && t.SecondReviewState == SecondReviewState.AuditPassed);
|
||||||
|
var ishaveQCChallenge = _subjectVisitRepository.Any(t => t.Id == inDto.SubjectVisitId && t.QCChallengeList.Any());
|
||||||
|
|
||||||
|
|
||||||
var currentActionList = await _subjectVisitRepository.Where(x => x.TrialId == inDto.TrialId && x.CurrentActionUserId == _userInfo.UserRoleId)
|
var currentActionList = await _subjectVisitRepository.Where(x => x.TrialId == inDto.TrialId && x.CurrentActionUserId == _userInfo.UserRoleId)
|
||||||
.Where(t => t.Subject.Status != SubjectStatus.EndOfVisit)
|
.Where(t => t.Subject.Status != SubjectStatus.EndOfVisit)
|
||||||
.WhereIf(isDistinguishType, t => isSecondReview == false ? t.SecondReviewState == SecondReviewState.None : t.SecondReviewState == SecondReviewState.WaitAudit)
|
.WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
|
||||||
.OrderByDescending(x => x.IsUrgent)
|
.WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any())
|
||||||
.ThenBy(x => x.Subject.Code).ThenBy(x => x.VisitNum).ToListAsync();
|
.Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState })
|
||||||
|
.OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
if (currentActionList.Count() > 0)
|
if (currentActionList.Count() > 0)
|
||||||
{
|
{
|
||||||
|
@ -1285,27 +1338,26 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
SubjectVisit? subjectVisit = null;
|
|
||||||
List<SubjectVisit>? visitList = null;
|
|
||||||
switch (trialConfig.QCProcessEnum)
|
switch (trialConfig.QCProcessEnum)
|
||||||
{
|
{
|
||||||
case TrialQCProcess.NotAudit:
|
case TrialQCProcess.NotAudit:
|
||||||
return new GetNextIQCQualityOutDto() { };
|
return new GetNextIQCQualityOutDto() { };
|
||||||
break;
|
break;
|
||||||
case TrialQCProcess.SingleAudit:
|
case TrialQCProcess.SingleAudit:
|
||||||
visitList = await _subjectVisitRepository
|
var visitList = await _subjectVisitRepository
|
||||||
.Where(t => t.Subject.Status != SubjectStatus.EndOfVisit)
|
.Where(t => t.Subject.Status != SubjectStatus.EndOfVisit)
|
||||||
.WhereIf(isDistinguishType, t => isSecondReview == false ? t.SecondReviewState == SecondReviewState.None : t.SecondReviewState == SecondReviewState.WaitAudit)
|
.WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
|
||||||
.Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None))
|
.WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any())
|
||||||
.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.SecondReviewState == SecondReviewState.None
|
.Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None))
|
||||||
&& x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId != _userInfo.UserRoleId && (x.CurrentActionUserId == _userInfo.UserRoleId || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake)))
|
.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.SecondReviewState == SecondReviewState.None
|
||||||
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId)
|
&& x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId != _userInfo.UserRoleId && (x.CurrentActionUserId == _userInfo.UserRoleId || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake)))
|
||||||
.Include(x => x.Subject).ToListAsync();
|
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId)
|
||||||
|
.Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState })
|
||||||
|
.OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync();
|
||||||
|
|
||||||
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId)
|
var subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId).OrderBy(x => x.VisitNum).FirstOrDefault();
|
||||||
|
|
||||||
|
|
||||||
.OrderBy(x => x.VisitNum).FirstOrDefault();
|
|
||||||
if (subjectVisit != null)
|
if (subjectVisit != null)
|
||||||
{
|
{
|
||||||
return new GetNextIQCQualityOutDto()
|
return new GetNextIQCQualityOutDto()
|
||||||
|
@ -1315,7 +1367,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
subjectVisit = visitList.OrderBy(x => x.Subject.Code).ThenBy(x => x.VisitNum).FirstOrDefault();
|
subjectVisit = visitList.OrderBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).FirstOrDefault();
|
||||||
if (subjectVisit != null)
|
if (subjectVisit != null)
|
||||||
{
|
{
|
||||||
return new GetNextIQCQualityOutDto()
|
return new GetNextIQCQualityOutDto()
|
||||||
|
@ -1333,13 +1385,18 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
visitList = await _subjectVisitRepository
|
visitList = await _subjectVisitRepository
|
||||||
.Where(t => t.Subject.Status != SubjectStatus.EndOfVisit)
|
.Where(t => t.Subject.Status != SubjectStatus.EndOfVisit)
|
||||||
.WhereIf(isDistinguishType, t => isSecondReview == false ? t.SecondReviewState == SecondReviewState.None : t.SecondReviewState == SecondReviewState.WaitAudit)
|
.WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
|
||||||
|
.WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any())
|
||||||
.Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None))
|
.Where(x => !x.SubjectVisitImageBackRecordList.Any(t => t.ImageBackState == ImageBackStateEnum.None))
|
||||||
.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId &&
|
.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId &&
|
||||||
((x.CurrentActionUserId == _userInfo.UserRoleId) || (!x.IsTake && x.AuditState != AuditStateEnum.QCPassed && (x.PreliminaryAuditUserId != _userInfo.UserRoleId)))
|
((x.CurrentActionUserId == _userInfo.UserRoleId) || (!x.IsTake && x.AuditState != AuditStateEnum.QCPassed && (x.PreliminaryAuditUserId != _userInfo.UserRoleId)))
|
||||||
)
|
)
|
||||||
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId)
|
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId)
|
||||||
.Include(x => x.Subject).ToListAsync();
|
.Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState })
|
||||||
|
.OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync();
|
||||||
|
|
||||||
|
subjectVisit = visitList.Where(x => x.SubjectId == inDto.SubjectId).OrderBy(x => x.VisitNum).FirstOrDefault();
|
||||||
|
|
||||||
if (subjectVisit != null)
|
if (subjectVisit != null)
|
||||||
{
|
{
|
||||||
return new GetNextIQCQualityOutDto()
|
return new GetNextIQCQualityOutDto()
|
||||||
|
@ -1349,7 +1406,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
subjectVisit = visitList.OrderBy(x => x.Subject.Code).ThenBy(x => x.VisitNum).FirstOrDefault();
|
subjectVisit = visitList.OrderBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).FirstOrDefault();
|
||||||
if (subjectVisit != null)
|
if (subjectVisit != null)
|
||||||
{
|
{
|
||||||
return new GetNextIQCQualityOutDto()
|
return new GetNextIQCQualityOutDto()
|
||||||
|
@ -2310,7 +2367,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
sv.AuditState = AuditStateEnum.ToAudit;
|
sv.AuditState = AuditStateEnum.ToAudit;
|
||||||
|
|
||||||
sv.CurrentActionUserExpireTime =null;
|
sv.CurrentActionUserExpireTime = null;
|
||||||
sv.CurrentActionUserId = null;
|
sv.CurrentActionUserId = null;
|
||||||
sv.IsTake = false;
|
sv.IsTake = false;
|
||||||
|
|
||||||
|
@ -2477,6 +2534,12 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
throw new BusinessValidationFailedException(_localizer["QCOperation_InvalidTransferStatus"]);
|
throw new BusinessValidationFailedException(_localizer["QCOperation_InvalidTransferStatus"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sv.SecondReviewState == SecondReviewState.WaitAudit)
|
||||||
|
{
|
||||||
|
//复核的时候不允许申请重传
|
||||||
|
throw new BusinessValidationFailedException(_localizer["QCOperation_SecondReviewNoReUpload"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (qcChallenge.ReuploadEnum == QCChanllengeReuploadEnum.CRCReuploaded)
|
if (qcChallenge.ReuploadEnum == QCChanllengeReuploadEnum.CRCReuploaded)
|
||||||
{
|
{
|
||||||
|
|
|
@ -303,9 +303,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(o => o.LessionAnswerList, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.ExportResultStr.Contains(((int)readingExportType).ToString()))));
|
.ForMember(o => o.LessionAnswerList, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.ExportResultStr.Contains(((int)readingExportType).ToString()))));
|
||||||
|
|
||||||
CreateMap<ReadingTableQuestionAnswer, CommonLessionQuestionAnswerInfo>()
|
CreateMap<ReadingTableQuestionAnswer, CommonLessionQuestionAnswerInfo>()
|
||||||
//.ForMember(o => o.LessionCode, t => t.MapFrom(u => u.Lesion.RowMark))
|
//.ForMember(o => o.LessionCode, t => t.MapFrom(u => u.Lesion.RowMark))
|
||||||
//.ForMember(o => o.LessionType, t => t.MapFrom(u => (int?)u.ReadingQuestionTrial.LesionType))
|
//.ForMember(o => o.LessionType, t => t.MapFrom(u => (int?)u.ReadingQuestionTrial.LesionType))
|
||||||
|
.ForMember(o => o.ShowOrder, t => t.MapFrom(u => u.ReadingTableQuestionTrial.ShowOrder))
|
||||||
.ForMember(o => o.CustomUnit, t => t.MapFrom(u => u.ReadingTableQuestionTrial.CustomUnit))
|
.ForMember(o => o.CustomUnit, t => t.MapFrom(u => u.ReadingTableQuestionTrial.CustomUnit))
|
||||||
.ForMember(o => o.Unit, t => t.MapFrom(u => u.ReadingTableQuestionTrial.Unit))
|
.ForMember(o => o.Unit, t => t.MapFrom(u => u.ReadingTableQuestionTrial.Unit))
|
||||||
.ForMember(o => o.TableQuesionId, t => t.MapFrom(u => u.ReadingTableQuestionTrial.Id))
|
.ForMember(o => o.TableQuesionId, t => t.MapFrom(u => u.ReadingTableQuestionTrial.Id))
|
||||||
|
@ -756,6 +756,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
CreateMap<SubjectVisitImageBackRecord, ImageBackViewModel>()
|
CreateMap<SubjectVisitImageBackRecord, ImageBackViewModel>()
|
||||||
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
|
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
|
||||||
|
.ForMember(d => d.SubjectStatus, u => u.MapFrom(s => s.SubjectVisit.Subject.Status))
|
||||||
.ForMember(d => d.IsSubjectQuit, u => u.MapFrom(s => s.SubjectVisit.Subject.IsSubjectQuit))
|
.ForMember(d => d.IsSubjectQuit, u => u.MapFrom(s => s.SubjectVisit.Subject.IsSubjectQuit))
|
||||||
.ForMember(d => d.VisitNum, u => u.MapFrom(t => t.SubjectVisit.VisitNum))
|
.ForMember(d => d.VisitNum, u => u.MapFrom(t => t.SubjectVisit.VisitNum))
|
||||||
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.SubjectVisit.TrialSite.TrialSiteCode))
|
.ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.SubjectVisit.TrialSite.TrialSiteCode))
|
||||||
|
|
|
@ -302,6 +302,8 @@ public static class StaticData
|
||||||
|
|
||||||
public const string TrialQCResult_Export = "TrialQCResult_Export";
|
public const string TrialQCResult_Export = "TrialQCResult_Export";
|
||||||
|
|
||||||
|
public const string TrialImageBackRecordList_Export = "TrialImageBackRecordList_Export";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue