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
c16153fa19
|
@ -16646,6 +16646,16 @@
|
||||||
<param name="state"></param>
|
<param name="state"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.SetInstanceState(System.Guid,System.Guid,System.Guid,System.Int32)">
|
||||||
|
<summary>
|
||||||
|
1、设置为不读片,2 设置为读片(取消 先前设置为不读片) 4 设置为删除(数据库记录软删除) 5 恢复为未删除
|
||||||
|
</summary>
|
||||||
|
<param name="subjectVisitId"></param>
|
||||||
|
<param name="seriesId"></param>
|
||||||
|
<param name="instanceId"></param>
|
||||||
|
<param name="state"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.UpdateModality(IRaCIS.Core.Application.Contracts.DTO.UpdateModalityCommand)">
|
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.UpdateModality(IRaCIS.Core.Application.Contracts.DTO.UpdateModalityCommand)">
|
||||||
<summary>
|
<summary>
|
||||||
type 1 :study 2: series 3:非dicom QC修改检查部位和 拍片类型
|
type 1 :study 2: series 3:非dicom QC修改检查部位和 拍片类型
|
||||||
|
|
|
@ -79,6 +79,11 @@ namespace IRaCIS.Core.Application.Contracts.Dicom.DTO
|
||||||
|
|
||||||
public int InstanceNumber { get; set; }
|
public int InstanceNumber { get; set; }
|
||||||
|
|
||||||
|
public bool IsReading { get; set; }
|
||||||
|
public bool IsDeleted { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Guid? StudyId { get; set; }
|
public Guid? StudyId { get; set; }
|
||||||
|
|
||||||
public List<int?> KeyFramesList { get; set; } = new List<int?> { };
|
public List<int?> KeyFramesList { get; set; } = new List<int?> { };
|
||||||
|
|
|
@ -23,9 +23,9 @@ namespace IRaCIS.Core.Application.Services
|
||||||
ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime)
|
ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime)
|
||||||
.ProjectTo<DicomInstanceDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
.ProjectTo<DicomInstanceDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
var imageResizePath = await _instanceRepository.Where(s => s.SeriesId == seriesId).Select(t => t.DicomSerie.ImageResizePath).FirstOrDefaultAsync();
|
var seriesInfo = await _instanceRepository.Where(s => s.SeriesId == seriesId).Select(t => new { t.DicomSerie.ImageResizePath,t.DicomSerie.IsDeleted,t.DicomSerie.IsReading }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok(list, new { ImageResizePath = imageResizePath });
|
return ResponseOutput.Ok(list, seriesInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
var instanceList = await _instanceRepository.Where(s => s.StudyId == studyId).OrderBy(t => t.SeriesId).ThenBy(t => t.InstanceNumber)
|
var instanceList = await _instanceRepository.Where(s => s.StudyId == studyId).OrderBy(t => t.SeriesId).ThenBy(t => t.InstanceNumber)
|
||||||
.ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime)
|
.ThenBy(s => s.InstanceTime).ThenBy(s => s.CreateTime)
|
||||||
.Select(t => new { t.SeriesId, t.Id, t.Path, t.NumberOfFrames, t.InstanceNumber, t.HtmlPath }).ToListAsync();//.GroupBy(u => u.SeriesId);
|
.Select(t => new { t.SeriesId, t.Id, t.Path, t.NumberOfFrames, t.InstanceNumber, t.HtmlPath ,t.IsReading,t.IsDeleted}).ToListAsync();//.GroupBy(u => u.SeriesId);
|
||||||
|
|
||||||
foreach (var series in seriesList)
|
foreach (var series in seriesList)
|
||||||
{
|
{
|
||||||
|
@ -42,6 +42,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
HtmlPath = k.HtmlPath,
|
HtmlPath = k.HtmlPath,
|
||||||
Path = k.Path,
|
Path = k.Path,
|
||||||
InstanceNumber = k.InstanceNumber,
|
InstanceNumber = k.InstanceNumber,
|
||||||
|
IsReading=k.IsReading,
|
||||||
|
IsDeleted=k.IsDeleted
|
||||||
|
|
||||||
}).ToList();
|
}).ToList();
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,9 +84,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
|
|
||||||
CreateMap<DicomInstance, DicomInstanceDTO>()
|
CreateMap<DicomInstance, DicomInstanceDTO>()
|
||||||
.ForMember(o => o.IsDeleted, t => t.MapFrom(u => u.DicomSerie.IsDeleted))
|
.ForMember(o => o.SliceThickness, t => t.MapFrom(u => u.DicomSerie.SliceThickness));
|
||||||
.ForMember(o => o.SliceThickness, t => t.MapFrom(u => u.DicomSerie.SliceThickness))
|
|
||||||
.ForMember(o => o.IsReading, t => t.MapFrom(u => u.DicomSerie.IsReading));
|
|
||||||
CreateMap<DicomStudy, DicomStudyDTO>();
|
CreateMap<DicomStudy, DicomStudyDTO>();
|
||||||
CreateMap<DicomSeries, DicomSeriesDTO>();
|
CreateMap<DicomSeries, DicomSeriesDTO>();
|
||||||
CreateMap<SCPSeries, DicomSeriesDTO>();
|
CreateMap<SCPSeries, DicomSeriesDTO>();
|
||||||
|
|
|
@ -34,7 +34,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
IRepository<DicomInstance> _dicomInstanceRepository,
|
IRepository<DicomInstance> _dicomInstanceRepository,
|
||||||
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
IRepository<TrialQCQuestionAnswer> _trialQCQuestionAnswerRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IDistributedLockProvider _distributedLockProvider, IReadingClinicalDataService _readingClinicalDataService,
|
IDistributedLockProvider _distributedLockProvider, IReadingClinicalDataService _readingClinicalDataService,
|
||||||
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IWebHostEnvironment _hostEnvironment) : BaseService, IQCOperationService
|
IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer, IWebHostEnvironment _hostEnvironment) : BaseService, IQCOperationService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
#region QC质疑 以及回复 关闭
|
#region QC质疑 以及回复 关闭
|
||||||
|
|
||||||
[HttpGet("{trialId:guid}/{subjectVisitId:guid}/{currentQCType:int}")]
|
[HttpGet("{trialId:guid}/{subjectVisitId:guid}/{currentQCType:int}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||||
public async Task<IResponseOutput> VerifyQCCanAddChallenge(Guid subjectVisitId, [FromRoute] CurrentQC currentQCType)
|
public async Task<IResponseOutput> VerifyQCCanAddChallenge(Guid subjectVisitId, [FromRoute] CurrentQC currentQCType)
|
||||||
{
|
{
|
||||||
|
@ -67,7 +67,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="currentQCType"></param>
|
/// <param name="currentQCType"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost("{trialId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
|
[HttpPost("{trialId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||||
public async Task<IResponseOutput> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
|
public async Task<IResponseOutput> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
|
||||||
{
|
{
|
||||||
|
@ -126,7 +126,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPut]
|
[HttpPut]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||||
public async Task<IResponseOutput> CloseQCChallenge(CloseQCChallengeInDto input)
|
public async Task<IResponseOutput> CloseQCChallenge(CloseQCChallengeInDto input)
|
||||||
|
@ -181,7 +181,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
|
[HttpDelete("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||||
public async Task<IResponseOutput> DeleteQCChallenge(Guid qcChallengeId)
|
public async Task<IResponseOutput> DeleteQCChallenge(Guid qcChallengeId)
|
||||||
{
|
{
|
||||||
|
@ -209,7 +209,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="qaDialogCommand"></param>
|
/// <param name="qaDialogCommand"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost("{trialId:guid}")]
|
[HttpPost("{trialId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
// [Authorize(Policy = IRaCISPolicy.CRC_IQC)]
|
// [Authorize(Policy = IRaCISPolicy.CRC_IQC)]
|
||||||
public async Task<IResponseOutput> AddQCChallengeReply(QADialogCommand qaDialogCommand)
|
public async Task<IResponseOutput> AddQCChallengeReply(QADialogCommand qaDialogCommand)
|
||||||
{
|
{
|
||||||
|
@ -244,7 +244,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="checkDialogCommand"></param>
|
/// <param name="checkDialogCommand"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost("{trialId:guid}")]
|
[HttpPost("{trialId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.PM_APM_CRC)]
|
//[Authorize(Policy = IRaCISPolicy.PM_APM_CRC)]
|
||||||
public async Task<IResponseOutput> AddCheckChallengeReply(CheckChallengeDialogCommand checkDialogCommand)
|
public async Task<IResponseOutput> AddCheckChallengeReply(CheckChallengeDialogCommand checkDialogCommand)
|
||||||
{
|
{
|
||||||
|
@ -284,7 +284,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPut("{trialId:guid}")]
|
[HttpPut("{trialId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||||
public async Task<IResponseOutput> CloseCheckChallenge(CloseCheckChallengeDto input)
|
public async Task<IResponseOutput> CloseCheckChallenge(CloseCheckChallengeDto input)
|
||||||
{
|
{
|
||||||
|
@ -320,7 +320,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPut("{trialId:guid}")]
|
[HttpPut("{trialId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
public async Task<IResponseOutput> SetCheckPass(SetCheckPassDt data)
|
public async Task<IResponseOutput> SetCheckPass(SetCheckPassDt data)
|
||||||
|
@ -367,7 +367,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="subjectVisitId"></param>
|
/// <param name="subjectVisitId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||||
public async Task<IResponseOutput> CRCRequstCheckBack(Guid subjectVisitId)
|
public async Task<IResponseOutput> CRCRequstCheckBack(Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
|
@ -413,7 +413,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
public async Task<IResponseOutput> RejectCheckBack(Guid subjectVisitId)
|
public async Task<IResponseOutput> RejectCheckBack(Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
//if (_userInfo.UserTypeEnumInt != (int)UserTypeEnum.ProjectManager && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.APM)
|
//if (_userInfo.UserTypeEnumInt != (int)UserTypeEnum.ProjectManager && _userInfo.UserTypeEnumInt != (int)UserTypeEnum.APM)
|
||||||
|
@ -446,7 +446,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
//[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
public async Task<IResponseOutput> CheckBack(Guid subjectVisitId)
|
public async Task<IResponseOutput> CheckBack(Guid subjectVisitId)
|
||||||
|
@ -525,7 +525,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// 添加或者更新 QC核对问题列表 两个人不能同时操作,就算意外进去了,提交数据,也不会覆盖前一个人数据, 后台已经做好判断
|
/// 添加或者更新 QC核对问题列表 两个人不能同时操作,就算意外进去了,提交数据,也不会覆盖前一个人数据, 后台已经做好判断
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpPost("{trialId:guid}/{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
|
[HttpPost("{trialId:guid}/{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||||
public async Task<IResponseOutput> AddOrUpdateQCQuestionAnswerList(QCQuestionAnswerCommand[] qcQuestionAnswerCommands, Guid trialId, Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
|
public async Task<IResponseOutput> AddOrUpdateQCQuestionAnswerList(QCQuestionAnswerCommand[] qcQuestionAnswerCommands, Guid trialId, Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
|
||||||
{
|
{
|
||||||
|
@ -597,7 +597,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="state"></param>
|
/// <param name="state"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{studyId:guid}/{seriesId:guid}/{state:int}")]
|
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{studyId:guid}/{seriesId:guid}/{state:int}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||||
public async Task<IResponseOutput> SetSeriesState(Guid subjectVisitId, Guid studyId, Guid seriesId, int state)
|
public async Task<IResponseOutput> SetSeriesState(Guid subjectVisitId, Guid studyId, Guid seriesId, int state)
|
||||||
{
|
{
|
||||||
|
@ -659,12 +659,80 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
return ResponseOutput.Ok(await _dicomStudyRepository.SaveChangesAsync());
|
return ResponseOutput.Ok(await _dicomStudyRepository.SaveChangesAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 1、设置为不读片,2 设置为读片(取消 先前设置为不读片) 4 设置为删除(数据库记录软删除) 5 恢复为未删除
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="subjectVisitId"></param>
|
||||||
|
/// <param name="seriesId"></param>
|
||||||
|
/// <param name="instanceId"></param>
|
||||||
|
/// <param name="state"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{seriesId:guid}/{instanceId:guid}/{state:int}")]
|
||||||
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
|
public async Task<IResponseOutput> SetInstanceState(Guid subjectVisitId, Guid seriesId, Guid instanceId, int state)
|
||||||
|
{
|
||||||
|
|
||||||
|
await VerifyIsCanQCAsync(null, subjectVisitId);
|
||||||
|
|
||||||
|
var instance = (await _dicomInstanceRepository.Where(t => t.Id == instanceId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
|
||||||
|
if (state == 1)
|
||||||
|
{
|
||||||
|
instance.IsReading = false;
|
||||||
|
}
|
||||||
|
else if (state == 2)
|
||||||
|
{
|
||||||
|
instance.IsReading = true;
|
||||||
|
}
|
||||||
|
else if (state == 4)
|
||||||
|
{
|
||||||
|
instance.IsDeleted = true;
|
||||||
|
|
||||||
|
var series = (await _dicomSeriesRepository.Where(t => t.Id == seriesId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
series.InstanceCount = series.InstanceCount - 1;
|
||||||
|
|
||||||
|
var study = (await _dicomStudyRepository.Where(t => t.Id == series.StudyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
study.InstanceCount = study.InstanceCount - 1;
|
||||||
|
|
||||||
|
////删除到最后一个instance
|
||||||
|
//if (series.InstanceCount == 0)
|
||||||
|
//{
|
||||||
|
// series.IsDeleted = true;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (state == 5)
|
||||||
|
{
|
||||||
|
instance.IsDeleted = false;
|
||||||
|
|
||||||
|
var series = (await _dicomSeriesRepository.Where(t => t.Id == seriesId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
series.InstanceCount = series.InstanceCount + 1;
|
||||||
|
|
||||||
|
var study = (await _dicomStudyRepository.Where(t => t.Id == series.StudyId, true).IgnoreQueryFilters().FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
|
study.InstanceCount = study.InstanceCount + 1;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return ResponseOutput.Ok(await _dicomStudyRepository.SaveChangesAsync());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///type 1 :study 2: series 3:非dicom QC修改检查部位和 拍片类型
|
///type 1 :study 2: series 3:非dicom QC修改检查部位和 拍片类型
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost("{trialId:guid}")]
|
[HttpPost("{trialId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
// [Authorize(Policy = IRaCISPolicy.CRC_IQC)]
|
// [Authorize(Policy = IRaCISPolicy.CRC_IQC)]
|
||||||
public async Task<IResponseOutput> UpdateModality(UpdateModalityCommand updateModalityCommand)
|
public async Task<IResponseOutput> UpdateModality(UpdateModalityCommand updateModalityCommand)
|
||||||
{
|
{
|
||||||
|
@ -744,7 +812,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="trialId"></param>
|
/// <param name="trialId"></param>
|
||||||
/// <returns></returns>SeriesCount
|
/// <returns></returns>SeriesCount
|
||||||
[HttpPost, Route("{trialId:guid}/{subjectVisitId:guid}")]
|
[HttpPost, Route("{trialId:guid}/{subjectVisitId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
// [Authorize(Policy = IRaCISPolicy.CRC_IQC)]
|
// [Authorize(Policy = IRaCISPolicy.CRC_IQC)]
|
||||||
public async Task<IResponseOutput> DeleteStudyList(Guid[] ids, Guid subjectVisitId, Guid trialId)
|
public async Task<IResponseOutput> DeleteStudyList(Guid[] ids, Guid subjectVisitId, Guid trialId)
|
||||||
|
@ -848,7 +916,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <summary>替换当前领取人 </summary>
|
/// <summary>替换当前领取人 </summary>
|
||||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
public async Task<IResponseOutput> ReplaceQCTaskActionUser(Guid trialId, Guid subjectVisitId)
|
public async Task<IResponseOutput> ReplaceQCTaskActionUser(Guid trialId, Guid subjectVisitId)
|
||||||
{
|
{
|
||||||
var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
||||||
|
@ -1010,7 +1078,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="obtaionOrCancel">true 获取 false是取消领取</param>
|
/// <param name="obtaionOrCancel">true 获取 false是取消领取</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{obtaionOrCancel:bool}")]
|
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{obtaionOrCancel:bool}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||||
public async Task<IResponseOutput> ObtainOrCancelQCTask(Guid trialId, Guid subjectVisitId, bool obtaionOrCancel)
|
public async Task<IResponseOutput> ObtainOrCancelQCTask(Guid trialId, Guid subjectVisitId, bool obtaionOrCancel)
|
||||||
{
|
{
|
||||||
|
@ -1235,7 +1303,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||||
public async Task<IResponseOutput> CRCRequestToQC(CRCRequestToQCCommand cRCRequestToQCCommand)
|
public async Task<IResponseOutput> CRCRequestToQC(CRCRequestToQCCommand cRCRequestToQCCommand)
|
||||||
{
|
{
|
||||||
|
@ -1523,7 +1591,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="auditState"></param>
|
/// <param name="auditState"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost("{trialId:guid}/{subjectVisitId:guid}/{auditState:int}")]
|
[HttpPost("{trialId:guid}/{subjectVisitId:guid}/{auditState:int}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
public async Task<IResponseOutput> QCPassedOrFailed(Guid trialId, Guid subjectVisitId, [FromRoute] AuditStateEnum auditState)
|
public async Task<IResponseOutput> QCPassedOrFailed(Guid trialId, Guid subjectVisitId, [FromRoute] AuditStateEnum auditState)
|
||||||
|
@ -1757,7 +1825,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="setOrCancel"></param>
|
/// <param name="setOrCancel"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{setOrCancel:bool}")]
|
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{setOrCancel:bool}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||||
public async Task<IResponseOutput> SetVisitUrgent(Guid trialId, Guid subjectVisitId, bool setOrCancel)
|
public async Task<IResponseOutput> SetVisitUrgent(Guid trialId, Guid subjectVisitId, bool setOrCancel)
|
||||||
{
|
{
|
||||||
|
@ -1795,7 +1863,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <param name="qcChallengeId"></param>
|
/// <param name="qcChallengeId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
|
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
//[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||||
public async Task<IResponseOutput> SetNeedReupload(Guid trialId, Guid qcChallengeId)
|
public async Task<IResponseOutput> SetNeedReupload(Guid trialId, Guid qcChallengeId)
|
||||||
{
|
{
|
||||||
|
@ -1896,7 +1964,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||||
public async Task<IResponseOutput> SetReuploadFinished(CRCReuploadFinishedCommand cRCReuploadFinishedCommand)
|
public async Task<IResponseOutput> SetReuploadFinished(CRCReuploadFinishedCommand cRCReuploadFinishedCommand)
|
||||||
{
|
{
|
||||||
|
@ -2009,7 +2077,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
|
|
||||||
|
|
||||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
|
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
//[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||||
public async Task<IResponseOutput> CRCRequestReUpload(Guid qcChallengeId)
|
public async Task<IResponseOutput> CRCRequestReUpload(Guid qcChallengeId)
|
||||||
{
|
{
|
||||||
|
@ -2056,7 +2124,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
|
||||||
[HttpPut("{trialId:guid}")]
|
[HttpPut("{trialId:guid}")]
|
||||||
[TrialGlobalLimit( "AfterStopCannNotOpt" )]
|
[TrialGlobalLimit("AfterStopCannNotOpt")]
|
||||||
public async Task<IResponseOutput> UpdateSubjectAndSVInfo(UploadSubjectAndVisitCommand command)
|
public async Task<IResponseOutput> UpdateSubjectAndSVInfo(UploadSubjectAndVisitCommand command)
|
||||||
{
|
{
|
||||||
var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == command.SubjectVisitId)).IfNullThrowException();
|
var dbSubjectVisit = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == command.SubjectVisitId)).IfNullThrowException();
|
||||||
|
|
|
@ -237,7 +237,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
var studyIds = studyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId))
|
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId))
|
||||||
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.HtmlPath }).ToListAsync();
|
.WhereIf(isReading == 1, s => s.IsReading)
|
||||||
|
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.HtmlPath,t.IsReading,t.IsDeleted }).ToListAsync();
|
||||||
|
|
||||||
foreach (var t in studyList)
|
foreach (var t in studyList)
|
||||||
{
|
{
|
||||||
|
@ -257,6 +258,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
HtmlPath = k.HtmlPath,
|
HtmlPath = k.HtmlPath,
|
||||||
Path = k.Path,
|
Path = k.Path,
|
||||||
InstanceNumber = k.InstanceNumber,
|
InstanceNumber = k.InstanceNumber,
|
||||||
|
IsReading=k.IsReading,
|
||||||
|
IsDeleted=k.IsDeleted,
|
||||||
}).ToList();
|
}).ToList();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -497,8 +500,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
var studyIds = dicomStudyList.Select(t => t.StudyId).ToList();
|
||||||
|
|
||||||
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId))
|
var instanceList = await _dicomInstanceRepository.Where(t => studyIds.Contains(t.StudyId) && t.IsReading)
|
||||||
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath }).ToListAsync();
|
.Select(t => new { t.SeriesId, t.Id, t.InstanceNumber, t.Path, t.NumberOfFrames, t.WindowCenter, t.WindowWidth, t.HtmlPath,t.IsReading }).ToListAsync();
|
||||||
|
|
||||||
List<DicomSeriesDTO> seriesLists = await _dicomSeriesRepository.Where(s => studyIds.Contains(s.StudyId))
|
List<DicomSeriesDTO> seriesLists = await _dicomSeriesRepository.Where(s => studyIds.Contains(s.StudyId))
|
||||||
.WhereIf(isManualGenerate == false, t => t.IsReading)
|
.WhereIf(isManualGenerate == false, t => t.IsReading)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
[Comment("归档 - Instance表")]
|
[Comment("归档 - Instance表")]
|
||||||
[Table("DicomInstance")]
|
[Table("DicomInstance")]
|
||||||
public class DicomInstance : BaseFullAuditEntity, IEntitySeqId
|
public class DicomInstance : BaseFullDeleteAuditEntity, IEntitySeqId
|
||||||
{
|
{
|
||||||
#region 导航属性
|
#region 导航属性
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
|
@ -75,4 +75,6 @@ public class DicomInstance : BaseFullAuditEntity, IEntitySeqId
|
||||||
|
|
||||||
|
|
||||||
public string WindowWidth { get; set; } = null!;
|
public string WindowWidth { get; set; } = null!;
|
||||||
|
|
||||||
|
public bool IsReading { get; set; } = true;
|
||||||
}
|
}
|
||||||
|
|
18581
IRaCIS.Core.Infra.EFCore/Migrations/20250213021502_AddInstanceIsReading.Designer.cs
generated
Normal file
18581
IRaCIS.Core.Infra.EFCore/Migrations/20250213021502_AddInstanceIsReading.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,61 @@
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class AddInstanceIsReading : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<Guid>(
|
||||||
|
name: "DeleteUserId",
|
||||||
|
table: "DicomInstance",
|
||||||
|
type: "uniqueidentifier",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<DateTime>(
|
||||||
|
name: "DeletedTime",
|
||||||
|
table: "DicomInstance",
|
||||||
|
type: "datetime2",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<bool>(
|
||||||
|
name: "IsDeleted",
|
||||||
|
table: "DicomInstance",
|
||||||
|
type: "bit",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: false);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<bool>(
|
||||||
|
name: "IsReading",
|
||||||
|
table: "DicomInstance",
|
||||||
|
type: "bit",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "DeleteUserId",
|
||||||
|
table: "DicomInstance");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "DeletedTime",
|
||||||
|
table: "DicomInstance");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "IsDeleted",
|
||||||
|
table: "DicomInstance");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "IsReading",
|
||||||
|
table: "DicomInstance");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -813,6 +813,12 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
b.Property<Guid>("CreateUserId")
|
b.Property<Guid>("CreateUserId")
|
||||||
.HasColumnType("uniqueidentifier");
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<Guid?>("DeleteUserId")
|
||||||
|
.HasColumnType("uniqueidentifier");
|
||||||
|
|
||||||
|
b.Property<DateTime?>("DeletedTime")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
b.Property<long?>("FileSize")
|
b.Property<long?>("FileSize")
|
||||||
.HasColumnType("bigint");
|
.HasColumnType("bigint");
|
||||||
|
|
||||||
|
@ -846,6 +852,12 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
|
||||||
b.Property<DateTime?>("InstanceTime")
|
b.Property<DateTime?>("InstanceTime")
|
||||||
.HasColumnType("datetime2");
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
|
b.Property<bool>("IsDeleted")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<bool>("IsReading")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
b.Property<int>("NumberOfFrames")
|
b.Property<int>("NumberOfFrames")
|
||||||
.HasColumnType("int");
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue