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 running
Details
continuous-integration/drone/push Build is running
Details
commit
6355231e8b
|
@ -6625,7 +6625,7 @@
|
||||||
一致性分析临床数据签名
|
一致性分析临床数据签名
|
||||||
</summary>
|
</summary>
|
||||||
<param name="inDto"></param>
|
<param name="inDto"></param>
|
||||||
<returns></returns>
|
<returns></returns>kimjnyhujikljkljkl
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ReadingClinicalDataService.SetTaskValid(IRaCIS.Core.Application.Service.Reading.Dto.SetTaskValidInDto)">
|
<member name="M:IRaCIS.Core.Application.Service.ReadingClinicalDataService.SetTaskValid(IRaCIS.Core.Application.Service.Reading.Dto.SetTaskValidInDto)">
|
||||||
<summary>
|
<summary>
|
||||||
|
@ -17990,7 +17990,14 @@
|
||||||
<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,System.Boolean)">
|
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.GetNextIQCQuality(IRaCIS.Core.Application.Contracts.GetNextIQCQualityInDto)">
|
||||||
|
<summary>
|
||||||
|
因为不区分任务类型,按照同类型没找到,要自动切换到下一种类型,必须包一层
|
||||||
|
</summary>
|
||||||
|
<param name="inDto"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Image.QA.QCOperationService.GetNextIQCTask(IRaCIS.Core.Application.Contracts.GetNextIQCQualityInDto,System.Boolean)">
|
||||||
<summary>
|
<summary>
|
||||||
获取下一个质控任务
|
获取下一个质控任务
|
||||||
</summary>
|
</summary>
|
||||||
|
|
|
@ -13,6 +13,7 @@ using Newtonsoft.Json;
|
||||||
using Org.BouncyCastle.Asn1.Cmp;
|
using Org.BouncyCastle.Asn1.Cmp;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Linq.Dynamic.Core;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Image.QA
|
namespace IRaCIS.Core.Application.Image.QA
|
||||||
{
|
{
|
||||||
|
@ -1254,70 +1255,70 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
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 visit = await _subjectVisitRepository.Where(x => x.Id == nextIQCQuality.VisitId).FirstNotNullAsync();
|
||||||
|
if (!visit.IsTake)
|
||||||
|
{
|
||||||
|
await ObtainOrCancelQCTask(inDto.TrialId, nextIQCQuality.VisitId.Value, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nextIQCQuality;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 因为不区分任务类型,按照同类型没找到,要自动切换到下一种类型,必须包一层
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="inDto"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<GetNextIQCQualityOutDto> GetNextIQCQuality(GetNextIQCQualityInDto inDto)
|
||||||
|
{
|
||||||
var trialConfig = await _trialRepository
|
var trialConfig = await _trialRepository
|
||||||
.Select(t => new { TrialId = t.Id, t.IsIQCAutoNextTask, t.IsIQCAutoTaskDistinguishType })
|
.Select(t => new { TrialId = t.Id, t.IsIQCAutoNextTask, t.IsIQCAutoTaskDistinguishType })
|
||||||
.FirstOrDefaultAsync(t => t.TrialId == inDto.TrialId)
|
.FirstOrDefaultAsync(t => t.TrialId == inDto.TrialId)
|
||||||
.IfNullThrowException();
|
.IfNullThrowException();
|
||||||
|
|
||||||
var isDistinguishType = trialConfig.IsIQCAutoNextTask && trialConfig.IsIQCAutoTaskDistinguishType;
|
var isDistinguishType = trialConfig.IsIQCAutoNextTask && trialConfig.IsIQCAutoTaskDistinguishType;
|
||||||
|
|
||||||
|
|
||||||
if (isDistinguishType == false)
|
if (isDistinguishType == false)
|
||||||
{
|
{
|
||||||
//不区分任务类型,也要按照当前任务类型给,没找到,按照默认规则给任务 无质疑 普通质控任务
|
//不区分任务类型,也要按照当前任务类型给,没找到,按照默认规则给任务 无质疑 普通质控任务
|
||||||
|
|
||||||
var nextIQCQuality = await this.GetNextIQCQuality(inDto, true);
|
var nextIQCQuality = await this.GetNextIQCTask(inDto, true);
|
||||||
|
|
||||||
|
|
||||||
//没找到
|
//没找到
|
||||||
if (nextIQCQuality.VisitId == null)
|
if (nextIQCQuality.VisitId == null)
|
||||||
{
|
{
|
||||||
nextIQCQuality = await this.GetNextIQCQuality(inDto, false);
|
nextIQCQuality = await this.GetNextIQCTask(inDto, false);
|
||||||
|
|
||||||
if (nextIQCQuality.VisitId != null && nextIQCQuality.IsReceived == false)
|
return nextIQCQuality;
|
||||||
{
|
|
||||||
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;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//区分任务类型,那么按照当前任务类型给,没找到就结束
|
//区分任务类型,那么按照当前任务类型给,没找到就结束
|
||||||
var nextIQCQuality = await this.GetNextIQCQuality(inDto, true);
|
var nextIQCQuality = await this.GetNextIQCTask(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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取下一个质控任务
|
/// 获取下一个质控任务
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<GetNextIQCQualityOutDto> GetNextIQCQuality(GetNextIQCQualityInDto inDto, bool isDistinguishType)
|
public async Task<GetNextIQCQualityOutDto> GetNextIQCTask(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 })
|
||||||
|
@ -1360,11 +1361,12 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
var 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 == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
|
.WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
|
||||||
.WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any())
|
.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.SecondReviewState == SecondReviewState.None
|
.Where(x => x.SubmitState == SubmitStateEnum.Submitted && x.TrialId == inDto.TrialId && x.CurrentActionUserId == null)
|
||||||
&& x.TrialId == inDto.TrialId && x.PreliminaryAuditUserId != _userInfo.UserRoleId && (x.CurrentActionUserId == _userInfo.UserRoleId || (x.AuditState != AuditStateEnum.PrimaryQCPassed && !x.IsTake)))
|
//.WhereIf(isSecondReview, t => t.PreliminaryAuditUserId != null)
|
||||||
.Where(x => x.QCChallengeList.Count() == 0 || x.QCChallengeList.Where(y => !y.IsClosed).OrderByDescending(x => x.CreateTime).FirstOrDefault().CreateUserId != _userInfo.UserRoleId)
|
.WhereIf(isSecondReview == false, t => t.AuditState != AuditStateEnum.QCPassed)
|
||||||
|
//.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 })
|
.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();
|
.OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync();
|
||||||
|
|
||||||
|
@ -1400,10 +1402,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
||||||
.WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
|
.WhereIf(isDistinguishType, t => isSecondReview == true ? t.SecondReviewState == SecondReviewState.WaitAudit : t.SecondReviewState == SecondReviewState.None)
|
||||||
.WhereIf(isDistinguishType, t => ishaveQCChallenge == true ? t.QCChallengeList.Any() : !t.QCChallengeList.Any())
|
.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 == null)
|
||||||
((x.CurrentActionUserId == _userInfo.UserRoleId) || (!x.IsTake && x.AuditState != AuditStateEnum.QCPassed && (x.PreliminaryAuditUserId != _userInfo.UserRoleId)))
|
.WhereIf(isSecondReview == false, t => t.AuditState >= AuditStateEnum.PrimaryQCPassed ? t.PreliminaryAuditUserId != _userInfo.UserRoleId : true)
|
||||||
)
|
.WhereIf(isSecondReview == false, t => t.AuditState != AuditStateEnum.QCPassed)
|
||||||
.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)
|
||||||
.Select(t => new { t.IsUrgent, SubjectCode = t.Subject.Code, t.SubjectId, t.Id, t.VisitNum, IshaveQCChallenge = t.QCChallengeList.Any(), t.SecondReviewState })
|
.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();
|
.OrderBy(t => t.IshaveQCChallenge).ThenBy(t => t.SecondReviewState).ThenBy(x => x.IsUrgent).ThenBy(x => x.SubjectCode).ThenBy(x => x.VisitNum).ToListAsync();
|
||||||
|
|
||||||
|
|
|
@ -767,7 +767,9 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.CreateUserName, u => u.MapFrom(s => s.CreateUserRole.UserName))
|
.ForMember(d => d.CreateUserName, u => u.MapFrom(s => s.CreateUserRole.UserName))
|
||||||
.ForMember(d => d.CreateUserFullName, u => u.MapFrom(s => s.CreateUserRole.FullName));
|
.ForMember(d => d.CreateUserFullName, u => u.MapFrom(s => s.CreateUserRole.FullName));
|
||||||
|
|
||||||
CreateMap<DicomStudyEdit, DicomStudy>();
|
CreateMap<DicomStudyEdit, DicomStudy>()
|
||||||
|
.ForMember(d => d.ModalityForEdit, u => u.MapFrom(s => s.Modality))
|
||||||
|
.ForMember(d => d.BodyPartForEdit, u => u.MapFrom(s => s.BodyPart));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1221,7 +1221,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
/// 一致性分析临床数据签名
|
/// 一致性分析临床数据签名
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="inDto"></param>
|
/// <param name="inDto"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>kimjnyhujikljkljkl
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IResponseOutput> SignConsistencyAnalysisReadingClinicalData(SignConsistencyAnalysisReadingClinicalDataInDto inDto)
|
public async Task<IResponseOutput> SignConsistencyAnalysisReadingClinicalData(SignConsistencyAnalysisReadingClinicalDataInDto inDto)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue