复制其他访视的项目阅片标准裁判规则配置
continuous-integration/drone/push Build is passing Details

Uat_IRC_Net10
he 2026-08-18 15:14:17 +08:00
parent c35ec016dd
commit bc8aeb8d7c
2 changed files with 67 additions and 0 deletions

View File

@ -29,6 +29,22 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public List<TrialQuestionVisitJudgeRuleItemDto> QuestionList { get; set; } = new List<TrialQuestionVisitJudgeRuleItemDto>();
}
public class CopyTrialQuestionVisitJudgeRuleInDto
{
[NotDefault]
public Guid TrialReadingCriterionId { get; set; }
/// <summary>
/// 来源访视
/// </summary>
public decimal SourceVisitNum { get; set; }
/// <summary>
/// 目标访视
/// </summary>
public decimal TargetVisitNum { get; set; }
}
public class TrialQuestionVisitJudgeRuleItemDto
{
public Guid ReadingQuestionTrialId { get; set; }

View File

@ -43,6 +43,9 @@ namespace IRaCIS.Core.Application.Service
#region 项目访视裁判规则
/// <summary>
/// 获取项目阅片标准各访视的裁判规则配置。
/// 未配置规则的访视问题也会返回,供前端直接进行配置。
@ -132,6 +135,54 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.Result(await _readingQuestionVisitJudgeRuleRepository.SaveChangesAsync());
}
/// <summary>
/// 复制其他访视的项目阅片标准裁判规则配置。
/// 目标访视不适用的问题保留其已有的不适用规则,不参与复制。
/// </summary>
[HttpPost]
public async Task<IResponseOutput> CopyTrialQuestionVisitJudgeRule(CopyTrialQuestionVisitJudgeRuleInDto inDto)
{
var targetQuestionIds = await _readingQuestionTrialRepository
.Where(x => x.ReadingQuestionCriterionTrialId == inDto.TrialReadingCriterionId && x.IsJudgeQuestion)
.Where(x => x.LimitShow == LimitShow.AllShow
|| (x.LimitShow == LimitShow.BaseLineShow && inDto.TargetVisitNum == 0)
|| (x.LimitShow == LimitShow.FollowShow && inDto.TargetVisitNum != 0)
|| (x.LimitShow == LimitShow.ExcludeSomeVisits && !x.ExcludeShowVisitList.Contains(inDto.TargetVisitNum)))
.Select(x => x.Id)
.ToListAsync();
if (targetQuestionIds.Count == 0)
{
return ResponseOutput.Ok();
}
var sourceRules = await _readingQuestionVisitJudgeRuleRepository
.Where(x => x.VisitNum == inDto.SourceVisitNum && targetQuestionIds.Contains(x.ReadingQuestionId))
.ToListAsync();
await _readingQuestionVisitJudgeRuleRepository.BatchDeleteNoTrackingAsync(x =>
x.VisitNum == inDto.TargetVisitNum && targetQuestionIds.Contains(x.ReadingQuestionId));
var targetRules = sourceRules.Select(rule => new ReadingQuestionVisitJudgeRule
{
Id = NewId.NextGuid(),
ReadingQuestionId = rule.ReadingQuestionId,
VisitNum = inDto.TargetVisitNum,
AnswerGroup = rule.AnswerGroup,
AnswerCombination = rule.AnswerCombination,
JudgeType = rule.JudgeType,
JudgeDifferenceValue = rule.JudgeDifferenceValue,
JudgeDifferenceType = rule.JudgeDifferenceType,
}).ToList();
if (targetRules.Count > 0)
{
await _readingQuestionVisitJudgeRuleRepository.AddRangeAsync(targetRules);
}
return ResponseOutput.Result(await _readingQuestionVisitJudgeRuleRepository.SaveChangesAsync());
}
#endregion