5.4 KiB
评委端:评审任务
所属端:评委端(
tenant_id对应评委租户,如code=judge)
菜单与定位见 菜单配置说明 中「评委端」章节:仅能查看被分配的活动与作品。
活动列表
接口:GET /contests/reviews/judge/contests
活动来源(并集):
t_biz_contest_judge中judge_id且valid_state=1的赛事(机构显式添加的评委);t_biz_contest_work_judge_assignment中该评委出现过的contest_id(含仅通过作品分配参与的隐式场景)。
响应字段(与前端 activities/Review.vue 对齐):
| 字段 | 说明 |
|---|---|
contestId |
活动 ID |
contestName |
活动名称 |
contestState / status |
活动状态 |
reviewStartTime / reviewEndTime |
评审时间窗 |
totalAssigned |
该评委在该活动下的分配记录总数 |
reviewed |
其中 status=completed 的数量(已提交评分) |
pending |
totalAssigned - reviewed(待评审) |
活动下作品列表
接口:GET /contests/reviews/judge/contests/{contestId}/works
分配状态 reviewStatus 查询参数(与库表兼容):
- 库中
t_biz_contest_work_judge_assignment.status实际使用:assigned(已分配未评完)、completed(已评审)。 - 前端下拉「未评审」传
pending→ 后端按status != completed筛选。 - 前端「已评审」传
reviewed→ 后端按status = completed筛选。
作品编号:workNo 为空时,前端可用作品 workId 展示兜底(如 #123)。
活动详情(含评审规则)
接口:GET /contests/reviews/judge/contests/{contestId}/detail
权限:满足以下任一即可:
- 存在有效的
t_biz_contest_judge关联;或 - 存在该
contestId+judgeId的作品分配记录。
避免「列表能进、详情 403」与隐式评委场景不一致。
预设评语(跨活动同步)
与 菜单配置说明 中「预设评语」能力一致:评委维护常用评语模板,不按活动筛选;列表与评审弹窗「老师点评 → 选择评语」使用同一查询。
列表:GET /contests/preset-comments
- 按当前登录用户的评委身份(
judge_id)返回其全部有效预设评语。 - 不要使用 query 参数
contestId(接口不提供按活动筛选)。
创建:POST /contests/preset-comments
- 请求体中
contestId可选;不传或为null表示全局模板(库表t_biz_preset_comment.contest_id为空,所有活动评审可选用)。 content必填。
其它:详情/修改/删除/批量删除/增加使用次数等见 PresetCommentController(Knife4j)。
标记作品违规(活动参赛作品)
接口:POST /contests/reviews/work/{workId}/violation
权限:review:score(与提交评分一致)
请求体(JSON):
| 字段 | 必填 | 说明 |
|---|---|---|
assignmentId |
是 | 当前评委在该作品上的分配记录 ID(t_biz_contest_work_judge_assignment.id),与打分接口一致 |
reason |
否 | 违规说明,写入 t_biz_contest_work.violation_reason |
行为:
- 将
t_biz_contest_work.status置为violation,并写入violation_mark_time、violation_judge_id(及可选violation_reason)。 - 将该评委对应的分配记录
status置为completed,与「已处理该评审任务」一致,避免长期占用「待评审」。 - 若作品已是
violation,幂等返回成功。
列表字段:GET .../works 响应中增加 workStatus(作品表 status),便于前端展示「违规」等状态;与分配维度上的 status(assignment 是否 completed)区分。
说明:此为活动赛事投稿作品(t_biz_contest_work)的违规标记,与 UGC 绘本广场超管审核(/content-review/...)不同。
公众端:GET /public/activities/{id}/my-registration 返回最新参赛作品 latestWorkStatus、violationReason 等;若最新作品为 violation,参赛者在活动提交期内可重新从作品库提交(submitRule=once 时亦允许覆盖违规版本)。
与租户端「评审进度」的口径对齐
| 维度 | 租户机构端 contests/reviews/progress(活动列表行) |
评委端 activities/review(上表) |
|---|---|---|
| 数据来源 | GET /contests 列表项中的 reviewedCount / totalWorksCount |
GET /contests/reviews/judge/contests |
| 含义 | totalWorksCount:该活动最新有效作品总数。reviewedCount:该活动下已分配评委且全部分配记录均为 completed 的作品数(与分配表 t_biz_contest_work_judge_assignment 一致,与作品表 accepted/awarded 终态无关) |
评委维度:reviewed/totalAssigned/pending 为该评委在分配表上的任务数;与租户「整作品是否全部评委评完」为不同聚合粒度 |
| 作品列表/详情 | GET /contests/works 每条作品含 reviewedCount/totalJudgesCount(按该作品分配条数统计) |
评委在单活动下作品列表同样基于分配 completed |
说明:顶部「作品统计」卡片若仍按作品 status 汇总,可能与逐活动行「分配完成作品数」不完全同数,属汇总维度不同;列表/详情/评委任务以分配表为准。