新增修改裁表单修改
continuous-integration/drone/push Build is passing Details

Test_IRC_Net10
he 2026-08-12 11:22:49 +08:00
parent 6bb4167ac7
commit 7b1449189e
2 changed files with 112 additions and 30 deletions

View File

@ -2457,6 +2457,41 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public string R2Answer { get; set; } = string.Empty; public string R2Answer { get; set; } = string.Empty;
} }
public class GetJudgeFormInDto
{
[NotDefault]
public Guid VisitTaskId { get; set; }
}
public class GetJudgeFormOutDto
{
public List<JudgeFormQuestionDto> QuestionList { get; set; } = new List<JudgeFormQuestionDto>();
}
public class JudgeFormQuestionDto
{
public Guid ReadingQuestionId { get; set; }
public string QuestionName { get; set; } = string.Empty;
public string Type { get; set; } = string.Empty;
public string TypeValue { get; set; } = string.Empty;
public int ShowOrder { get; set; }
public string Answer { get; set; } = string.Empty;
}
public class SetJudgeFormInDto
{
[NotDefault]
public Guid VisitTaskId { get; set; }
public List<JudgeFormAnswerDto> QuestionList { get; set; } = new List<JudgeFormAnswerDto>();
}
public class JudgeFormAnswerDto
{
public Guid ReadingQuestionId { get; set; }
public string Answer { get; set; } = string.Empty;
}
public class JudgeReadingInfoDto public class JudgeReadingInfoDto
{ {
public string VisitName { get; set; } public string VisitName { get; set; }

View File

@ -119,41 +119,17 @@ namespace IRaCIS.Core.Application.Service
.Select(x => x.JudgeRuleEnum) .Select(x => x.JudgeRuleEnum)
.FirstNotNullAsync(); .FirstNotNullAsync();
var questionList = await _readingQuestionTrialRepository var displayQuestions = await GetJudgeDisplayQuestions(taskInfo.TrialReadingCriterionId, taskInfo.VisitTaskNum, judgeRule);
.Where(x => x.ReadingQuestionCriterionTrialId == taskInfo.TrialReadingCriterionId && x.IsJudgeQuestion) var judgeAnswers = displayQuestions
.OrderBy(x => x.ShowOrder) .Select(x => new SingleVisitJudgeAnswerItemDto
.Select(x => new
{ {
ReadingQuestionId = x.Id, ReadingQuestionId = x.Id,
QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us), QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us),
ShowOrder = x.ShowOrder, ShowOrder = x.ShowOrder,
x.JudgeType,
x.ExcludeShowVisitList,
})
.ToListAsync();
var questionIds = questionList.Select(x => x.ReadingQuestionId).ToList();
var visitJudgeRules = judgeRule == JudgeRule.Difference
? await _readingQuestionVisitJudgeRuleRepository
.Where(x => questionIds.Contains(x.ReadingQuestionId) && (x.VisitNum == taskInfo.VisitTaskNum || x.VisitNum == -1))
.ToListAsync()
: new List<ReadingQuestionVisitJudgeRule>();
var displayQuestions = questionList
.Where(x => !x.ExcludeShowVisitList.Contains(taskInfo.VisitTaskNum))
.Where(x => judgeRule == JudgeRule.Consistent
? x.JudgeType != JudgeTypeEnum.NotApplicable
: (visitJudgeRules.FirstOrDefault(rule => rule.ReadingQuestionId == x.ReadingQuestionId && rule.VisitNum == taskInfo.VisitTaskNum)
?? visitJudgeRules.FirstOrDefault(rule => rule.ReadingQuestionId == x.ReadingQuestionId && rule.VisitNum == -1))?.JudgeType != JudgeTypeEnum.NotApplicable)
.Select(x => new SingleVisitJudgeAnswerItemDto
{
ReadingQuestionId = x.ReadingQuestionId,
QuestionName = x.QuestionName,
ShowOrder = x.ShowOrder,
}) })
.ToList(); .ToList();
var displayQuestionIds = displayQuestions.Select(x => x.ReadingQuestionId).ToList(); var displayQuestionIds = judgeAnswers.Select(x => x.ReadingQuestionId).ToList();
var answerList = await _readingTaskQuestionAnswerRepository var answerList = await _readingTaskQuestionAnswerRepository
.Where(x => taskIds.Contains(x.VisitTaskId) && displayQuestionIds.Contains(x.ReadingQuestionTrialId)) .Where(x => taskIds.Contains(x.VisitTaskId) && displayQuestionIds.Contains(x.ReadingQuestionTrialId))
.Select(x => new .Select(x => new
@ -164,7 +140,7 @@ namespace IRaCIS.Core.Application.Service
}) })
.ToListAsync(); .ToListAsync();
displayQuestions.ForEach(question => judgeAnswers.ForEach(question =>
{ {
question.R1Answer = answerList.FirstOrDefault(x => x.VisitTaskId == judgeDataInfo.TaskIdOne && x.ReadingQuestionTrialId == question.ReadingQuestionId)?.Answer ?? string.Empty; question.R1Answer = answerList.FirstOrDefault(x => x.VisitTaskId == judgeDataInfo.TaskIdOne && x.ReadingQuestionTrialId == question.ReadingQuestionId)?.Answer ?? string.Empty;
question.R2Answer = answerList.FirstOrDefault(x => x.VisitTaskId == judgeDataInfo.TaskIdTwo && x.ReadingQuestionTrialId == question.ReadingQuestionId)?.Answer ?? string.Empty; question.R2Answer = answerList.FirstOrDefault(x => x.VisitTaskId == judgeDataInfo.TaskIdTwo && x.ReadingQuestionTrialId == question.ReadingQuestionId)?.Answer ?? string.Empty;
@ -172,10 +148,81 @@ namespace IRaCIS.Core.Application.Service
return new GetSingleVisitJudgeAnswerOutDto return new GetSingleVisitJudgeAnswerOutDto
{ {
QuestionList = displayQuestions, QuestionList = judgeAnswers,
}; };
} }
/// <summary>
/// 获取裁判表单
/// </summary>
[HttpPost]
public async Task<GetJudgeFormOutDto> GetJudgeForm(GetJudgeFormInDto inDto)
{
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
var judgeRule = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskInfo.TrialReadingCriterionId).Select(x => x.JudgeRuleEnum).FirstNotNullAsync();
var questionList = await GetJudgeDisplayQuestions(taskInfo.TrialReadingCriterionId, taskInfo.VisitTaskNum, judgeRule);
var questionIds = questionList.Select(x => x.Id).ToList();
var answers = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId && questionIds.Contains(x.ReadingQuestionTrialId)).ToListAsync();
return new GetJudgeFormOutDto
{
QuestionList = questionList.Select(x => new JudgeFormQuestionDto
{
ReadingQuestionId = x.Id,
QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us),
Type = x.Type,
TypeValue = x.TypeValue,
ShowOrder = x.ShowOrder,
Answer = answers.FirstOrDefault(answer => answer.ReadingQuestionTrialId == x.Id)?.Answer ?? string.Empty,
}).ToList(),
};
}
/// <summary>
/// 编辑裁判表单
/// </summary>
[HttpPost]
public async Task<IResponseOutput> SetJudgeForm(SetJudgeFormInDto inDto)
{
var taskInfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
var judgeRule = await _readingQuestionCriterionTrialRepository.Where(x => x.Id == taskInfo.TrialReadingCriterionId).Select(x => x.JudgeRuleEnum).FirstNotNullAsync();
var displayQuestionIds = (await GetJudgeDisplayQuestions(taskInfo.TrialReadingCriterionId, taskInfo.VisitTaskNum, judgeRule)).Select(x => x.Id).ToList();
var submittedQuestionIds = inDto.QuestionList.Select(x => x.ReadingQuestionId).ToList();
await _readingTaskQuestionAnswerRepository.BatchDeleteNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && submittedQuestionIds.Contains(x.ReadingQuestionTrialId));
if (inDto.QuestionList.Count > 0)
{
await _readingTaskQuestionAnswerRepository.AddRangeAsync(inDto.QuestionList.Select(x => new ReadingTaskQuestionAnswer
{
ReadingQuestionTrialId = x.ReadingQuestionId,
ReadingQuestionCriterionTrialId = taskInfo.TrialReadingCriterionId,
TrialId = taskInfo.TrialId,
SubjectId = taskInfo.SubjectId,
VisitTaskId = inDto.VisitTaskId,
Answer = x.Answer,
}).ToList());
}
return ResponseOutput.Result(await _readingTaskQuestionAnswerRepository.SaveChangesAsync());
}
private async Task<List<ReadingQuestionTrial>> GetJudgeDisplayQuestions(Guid trialReadingCriterionId, decimal visitNum, JudgeRule judgeRule)
{
var questionList = await _readingQuestionTrialRepository.Where(x => x.ReadingQuestionCriterionTrialId == trialReadingCriterionId && x.IsJudgeQuestion).OrderBy(x => x.ShowOrder).ToListAsync();
var questionIds = questionList.Select(x => x.Id).ToList();
var visitJudgeRules = judgeRule == JudgeRule.Difference
? await _readingQuestionVisitJudgeRuleRepository.Where(x => questionIds.Contains(x.ReadingQuestionId) && (x.VisitNum == visitNum || x.VisitNum == -1)).ToListAsync()
: new List<ReadingQuestionVisitJudgeRule>();
return questionList.Where(x => !x.ExcludeShowVisitList.Contains(visitNum))
.Where(x => judgeRule == JudgeRule.Consistent
? x.JudgeType != JudgeTypeEnum.NotApplicable
: (visitJudgeRules.FirstOrDefault(rule => rule.ReadingQuestionId == x.Id && rule.VisitNum == visitNum)
?? visitJudgeRules.FirstOrDefault(rule => rule.ReadingQuestionId == x.Id && rule.VisitNum == -1))?.JudgeType != JudgeTypeEnum.NotApplicable)
.ToList();
}
/// <summary> /// <summary>
/// 获取裁判阅片任务信息 /// 获取裁判阅片任务信息
/// </summary> /// </summary>