fix:修复评委打分403
This commit is contained in:
parent
f2c10d5e32
commit
1d43501983
@ -129,4 +129,12 @@ public class ContestReviewController {
|
|||||||
public Result<Map<String, Object>> calculateFinalScore(@PathVariable Long workId) {
|
public Result<Map<String, Object>> calculateFinalScore(@PathVariable Long workId) {
|
||||||
return Result.success(contestReviewService.calculateFinalScore(workId));
|
return Result.success(contestReviewService.calculateFinalScore(workId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/judge/contests/{contestId}/detail")
|
||||||
|
@RequirePermission("review:read")
|
||||||
|
@Operation(summary = "获取评委视角的赛事详情(含评审规则)")
|
||||||
|
public Result<Map<String, Object>> getJudgeContestDetail(@PathVariable Long contestId) {
|
||||||
|
Long judgeId = SecurityUtil.getCurrentUserId();
|
||||||
|
return Result.success(contestReviewService.getJudgeContestDetail(judgeId, contestId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,4 +31,6 @@ public interface IContestReviewService {
|
|||||||
List<Map<String, Object>> getWorkScores(Long workId);
|
List<Map<String, Object>> getWorkScores(Long workId);
|
||||||
|
|
||||||
Map<String, Object> calculateFinalScore(Long workId);
|
Map<String, Object> calculateFinalScore(Long workId);
|
||||||
|
|
||||||
|
Map<String, Object> getJudgeContestDetail(Long judgeId, Long contestId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -668,4 +668,51 @@ public class ContestReviewServiceImpl implements IContestReviewService {
|
|||||||
result.put("calculationRule", calculationRule);
|
result.put("calculationRule", calculationRule);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ====== 评委赛事详情 ======
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getJudgeContestDetail(Long judgeId, Long contestId) {
|
||||||
|
log.info("获取评委赛事详情,评委ID:{},赛事ID:{}", judgeId, contestId);
|
||||||
|
|
||||||
|
// 验证评委属于该赛事
|
||||||
|
LambdaQueryWrapper<BizContestJudge> judgeWrapper = new LambdaQueryWrapper<>();
|
||||||
|
judgeWrapper.eq(BizContestJudge::getContestId, contestId);
|
||||||
|
judgeWrapper.eq(BizContestJudge::getJudgeId, judgeId);
|
||||||
|
judgeWrapper.eq(BizContestJudge::getValidState, 1);
|
||||||
|
if (judgeMapper.selectCount(judgeWrapper) == 0) {
|
||||||
|
throw BusinessException.of(ErrorCode.FORBIDDEN, "您不是该赛事的评委");
|
||||||
|
}
|
||||||
|
|
||||||
|
BizContest contest = contestMapper.selectById(contestId);
|
||||||
|
if (contest == null) {
|
||||||
|
throw BusinessException.of(ErrorCode.NOT_FOUND, "赛事不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, Object> result = new LinkedHashMap<>();
|
||||||
|
result.put("contestId", contest.getId());
|
||||||
|
result.put("contestName", contest.getContestName());
|
||||||
|
result.put("contestType", contest.getContestType());
|
||||||
|
result.put("contestState", contest.getContestState());
|
||||||
|
result.put("status", contest.getStatus());
|
||||||
|
result.put("reviewStartTime", contest.getReviewStartTime());
|
||||||
|
result.put("reviewEndTime", contest.getReviewEndTime());
|
||||||
|
|
||||||
|
// 评审规则(前端ReviewWorkModal需要此数据)
|
||||||
|
if (contest.getReviewRuleId() != null) {
|
||||||
|
BizContestReviewRule rule = reviewRuleMapper.selectById(contest.getReviewRuleId());
|
||||||
|
if (rule != null) {
|
||||||
|
Map<String, Object> ruleMap = new LinkedHashMap<>();
|
||||||
|
ruleMap.put("id", rule.getId());
|
||||||
|
ruleMap.put("ruleName", rule.getRuleName());
|
||||||
|
ruleMap.put("ruleDescription", rule.getRuleDescription());
|
||||||
|
ruleMap.put("judgeCount", rule.getJudgeCount());
|
||||||
|
ruleMap.put("dimensions", rule.getDimensions());
|
||||||
|
ruleMap.put("calculationRule", rule.getCalculationRule());
|
||||||
|
result.put("reviewRule", ruleMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1242,6 +1242,14 @@ export const reviewsApi = {
|
|||||||
>(`/contests/reviews/judge/contests/${contestId}/works`, { params });
|
>(`/contests/reviews/judge/contests/${contestId}/works`, { params });
|
||||||
return response;
|
return response;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// 获取评委视角的赛事详情(含评审规则)
|
||||||
|
getJudgeContestDetail: async (contestId: number): Promise<any> => {
|
||||||
|
const response = await request.get<any, any>(
|
||||||
|
`/contests/reviews/judge/contests/${contestId}/detail`
|
||||||
|
);
|
||||||
|
return response;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// 公告管理
|
// 公告管理
|
||||||
|
|||||||
@ -490,7 +490,7 @@ const fetchWorkDetail = async () => {
|
|||||||
// 获取活动的评审规则
|
// 获取活动的评审规则
|
||||||
if (props.contestId) {
|
if (props.contestId) {
|
||||||
try {
|
try {
|
||||||
const contest = await contestsApi.getDetail(props.contestId);
|
const contest = await reviewsApi.getJudgeContestDetail(props.contestId);
|
||||||
|
|
||||||
if (contest.reviewRule) {
|
if (contest.reviewRule) {
|
||||||
// 确保 dimensions 是数组(可能是 JSON 字符串)
|
// 确保 dimensions 是数组(可能是 JSON 字符串)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user