工作台发起成绩修正后裁判端同步消息
This commit is contained in:
parent
87bce5806e
commit
9e0e1457ea
@ -1224,7 +1224,15 @@ public class WorkbenchController : IDynamicApiController
|
||||
var assignment = await _assignmentRepository.GetByIdAsync(correction.JudgeAssignmentId);
|
||||
if (assignment == null || assignment.DeleteMark)
|
||||
throw Oops.Bah("原裁判分配不存在,无法下发修正任务");
|
||||
|
||||
|
||||
var originalSheet = await _sheetRepository.GetByIdAsync(correction.OriginalScoreSheetId)
|
||||
?? throw Oops.Bah("原评分单不存在,无法下发修正任务");
|
||||
var originalTask = originalSheet.JudgeTaskId > 0
|
||||
? await _taskRepository.GetByIdAsync(originalSheet.JudgeTaskId)
|
||||
: null;
|
||||
var session = await _sessionRepository.GetByIdAsync(correction.SessionId)
|
||||
?? throw Oops.Bah("比赛场次不存在,无法下发修正任务");
|
||||
var receiverUserId = await ResolveJudgeUserIdAsync(assignment, originalSheet);
|
||||
var task = new EventJudgeTask
|
||||
{
|
||||
Id = _idGenerator.NextId(),
|
||||
@ -1234,12 +1242,17 @@ public class WorkbenchController : IDynamicApiController
|
||||
JudgeAssignmentId = correction.JudgeAssignmentId,
|
||||
EventRefereeId = assignment.EventRefereeId,
|
||||
RefereeId = assignment.RefereeId,
|
||||
JudgeUserId = assignment.JudgeUserId,
|
||||
JudgeUserId = receiverUserId,
|
||||
JudgeRole = assignment.JudgeRole,
|
||||
JudgeRoleType = assignment.JudgeRoleType,
|
||||
TaskSnapshotJson = "{}",
|
||||
ScoreRuleId = originalTask?.ScoreRuleId ?? session.ScoreRuleId,
|
||||
RuleVersion = originalTask?.RuleVersion ?? originalSheet.RuleVersion,
|
||||
TaskSnapshotJson = originalTask?.TaskSnapshotJson ?? "{}",
|
||||
TaskType = 1,
|
||||
TaskStatus = 0,
|
||||
TaskStatus = 10,
|
||||
TaskVersion = (originalTask?.TaskVersion ?? 0) + 1,
|
||||
OriginalTaskId = originalTask?.Id,
|
||||
DispatchedTime = now,
|
||||
CreatedUserId = currentUserId,
|
||||
CreatedTime = now
|
||||
};
|
||||
@ -1249,18 +1262,18 @@ public class WorkbenchController : IDynamicApiController
|
||||
correction.CorrectionTaskId = task.Id;
|
||||
await _correctionRepository.UpdateAsync(correction);
|
||||
|
||||
if (assignment.JudgeUserId != null)
|
||||
if (receiverUserId.HasValue)
|
||||
{
|
||||
var message = new EventJudgeMessage
|
||||
{
|
||||
Id = _idGenerator.NextId(),
|
||||
EventId = correction.EventId,
|
||||
ReceiverUserId = assignment.JudgeUserId.Value,
|
||||
ReceiverUserId = receiverUserId.Value,
|
||||
RefereeId = assignment.RefereeId,
|
||||
MessageType = 1,
|
||||
Title = "成绩修正任务通知",
|
||||
Content = $"您有一条成绩修正任务需要处理,申请原因:{correction.ApplyReason}",
|
||||
RelationType = "ScoreCorrection",
|
||||
RelationType = nameof(EventScoreCorrection),
|
||||
RelationId = correction.Id,
|
||||
IsRead = false,
|
||||
CreatedUserId = currentUserId,
|
||||
@ -1289,6 +1302,8 @@ public class WorkbenchController : IDynamicApiController
|
||||
|
||||
var entry = await _entryRepository.GetFirstAsync(e => e.Id == input.SessionEntryId && !e.DeleteMark)
|
||||
?? throw Oops.Bah("出场记录不存在");
|
||||
var session = await _sessionRepository.GetByIdAsync(entry.SessionId)
|
||||
?? throw Oops.Bah("比赛场次不存在");
|
||||
|
||||
var sheetIds = input.ScoreSheetIds.Where(id => id > 0).Distinct().ToList();
|
||||
if (sheetIds.Count == 0) throw Oops.Bah("请至少选择一名裁判");
|
||||
@ -1305,7 +1320,8 @@ public class WorkbenchController : IDynamicApiController
|
||||
throw Oops.Bah($"{notSubmitted.JudgeRole}号位评分单当前为“{GetSheetStatusName(notSubmitted.SheetStatus)}”,不能修正");
|
||||
|
||||
var pendingSheetIds = (await _correctionRepository.AsQueryable()
|
||||
.Where(c => !c.DeleteMark && sheetIds.Contains(c.OriginalScoreSheetId) && c.CorrectionStatus < 20)
|
||||
.Where(c => !c.DeleteMark && sheetIds.Contains(c.OriginalScoreSheetId)
|
||||
&& (c.CorrectionStatus == 0 || c.CorrectionStatus == 10 || c.CorrectionStatus == 30))
|
||||
.Select(c => c.OriginalScoreSheetId).ToListAsync()).ToHashSet();
|
||||
var pending = sheets.FirstOrDefault(s => pendingSheetIds.Contains(s.Id));
|
||||
if (pending != null)
|
||||
@ -1339,6 +1355,10 @@ public class WorkbenchController : IDynamicApiController
|
||||
};
|
||||
await _correctionRepository.InsertAsync(correction);
|
||||
|
||||
var originalTask = sheet.JudgeTaskId > 0
|
||||
? await _taskRepository.GetByIdAsync(sheet.JudgeTaskId)
|
||||
: null;
|
||||
var receiverUserId = await ResolveJudgeUserIdAsync(assignment, sheet);
|
||||
var task = new EventJudgeTask
|
||||
{
|
||||
Id = _idGenerator.NextId(),
|
||||
@ -1348,12 +1368,17 @@ public class WorkbenchController : IDynamicApiController
|
||||
JudgeAssignmentId = correction.JudgeAssignmentId,
|
||||
EventRefereeId = assignment.EventRefereeId,
|
||||
RefereeId = assignment.RefereeId,
|
||||
JudgeUserId = assignment.JudgeUserId,
|
||||
JudgeUserId = receiverUserId,
|
||||
JudgeRole = assignment.JudgeRole,
|
||||
JudgeRoleType = assignment.JudgeRoleType,
|
||||
TaskSnapshotJson = "{}",
|
||||
ScoreRuleId = originalTask?.ScoreRuleId ?? session.ScoreRuleId,
|
||||
RuleVersion = originalTask?.RuleVersion ?? sheet.RuleVersion,
|
||||
TaskSnapshotJson = originalTask?.TaskSnapshotJson ?? "{}",
|
||||
TaskType = 1,
|
||||
TaskStatus = 0,
|
||||
TaskStatus = 10,
|
||||
TaskVersion = (originalTask?.TaskVersion ?? 0) + 1,
|
||||
OriginalTaskId = originalTask?.Id,
|
||||
DispatchedTime = now,
|
||||
CreatedUserId = currentUserId,
|
||||
CreatedTime = now
|
||||
};
|
||||
@ -1363,18 +1388,18 @@ public class WorkbenchController : IDynamicApiController
|
||||
await _correctionRepository.UpdateAsync(correction);
|
||||
|
||||
// 裁判未绑定小程序账号时消息无处投递,只保留修正记录,不阻断主流程
|
||||
if (assignment.JudgeUserId.HasValue)
|
||||
if (receiverUserId.HasValue)
|
||||
{
|
||||
await _messageRepository.InsertAsync(new EventJudgeMessage
|
||||
{
|
||||
Id = _idGenerator.NextId(),
|
||||
EventId = correction.EventId,
|
||||
ReceiverUserId = assignment.JudgeUserId.Value,
|
||||
ReceiverUserId = receiverUserId.Value,
|
||||
RefereeId = assignment.RefereeId,
|
||||
MessageType = 1,
|
||||
Title = "成绩修正通知",
|
||||
Content = $"请对{assignment.JudgeRole}号位的评分重新提交,原因:{reason}",
|
||||
RelationType = "ScoreCorrection",
|
||||
RelationType = nameof(EventScoreCorrection),
|
||||
RelationId = correction.Id,
|
||||
IsRead = false,
|
||||
CreatedUserId = currentUserId,
|
||||
@ -2003,6 +2028,20 @@ public class WorkbenchController : IDynamicApiController
|
||||
return reason;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resolve the App user that currently owns a judge assignment. Older assignments may not
|
||||
/// have JudgeUserId populated, while the referee profile or submitted sheet still has it.
|
||||
/// </summary>
|
||||
private async Task<long?> ResolveJudgeUserIdAsync(EventJudgeAssignment assignment,
|
||||
EventJudgeScoreSheet? sheet = null)
|
||||
{
|
||||
var receiverUserId = sheet?.JudgeUserId ?? assignment.JudgeUserId;
|
||||
if (receiverUserId.HasValue) return receiverUserId;
|
||||
|
||||
var referee = await _refereeRepository.GetByIdAsync(assignment.RefereeId);
|
||||
return referee?.AppUserId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 同步成绩当前版本的状态,保证 EventResult 与 EventResultVersion 状态一致
|
||||
/// </summary>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user