lrj
14 小时以前 9f8395fab13ca4b230a0f7d62636e209745c91d4
project.md
@@ -186,7 +186,7 @@
数据来源与关联:
* 主表:t\_activity\_player,关联学员表 t\_player(player\_id),关联比赛表 t\_activity(activity\_id)
* 注意:t\_activity\_player.activity\_id 始终关联“比赛”;t\_activity\_player.stage\_id 必须关联该比赛的“阶段”ID。若该比赛未定义阶段(t\_activity 无子记录 pid=activity\_id),则将 stage\_id 设为 activity\_id(指向比赛自身)。
* 注意:t\_activity\_player.activity\_id 始终关联"比赛";t\_activity\_player.stage\_id 必须关联该比赛的"阶段"ID。若该比赛未定义阶段(t\_activity 无子记录 pid=activity\_id),则将 stage\_id 设为 activity\_id(指向比赛自身)。
GraphQL 规范:
@@ -198,11 +198,242 @@
* 0(报名未审核):显示按钮【审核通过】
* 1(进行中,已通过):显示按钮【取消资格】
* 2(审核未通过):显示【审核未通过】,无操作按钮
3.12 多评委评分系统
3.12.1 系统概述
多评委评分系统支持多个评委对同一选手进行独立评分,系统自动计算平均分,确保评分的公正性和透明度。
3.12.2 核心功能
评分页面增强:
* 显示当前评委信息(姓名)
* 展示所有评委的评分状态(已评分/未评分)
* 显示选手的平均分
* 支持评委查看和修改自己的评分
评分状态管理:
* 实时显示各评委的评分进度
* 区分当前评委和其他评委
* 显示每个评委的总分(已评分的情况下)
数据计算:
* 自动计算选手的平均分
* 支持评委修改评分后重新计算
* 保持评分历史记录
3.12.3 技术实现
前端实现(Vue.js):
* 组件:RatingForm.vue - 增强评分表单组件
* 页面:rating.vue - 评分页面
* API:activityPlayer.js - 新增多评委相关接口
后端实现(Spring Boot + GraphQL):
* API:PlayerGraphqlApi.java - 新增GraphQL查询方法
* 服务:ActivityPlayerRatingService.java - 评分业务逻辑
* DTO:新增响应类型支持多评委数据
新增GraphQL查询:
* judgeRatingsForPlayer - 获取选手的所有评委评分状态
* currentJudgeRating - 获取当前评委的评分详情
* averageScoreForPlayer - 获取选手平均分
* currentJudgeInfo - 获取当前评委信息
3.12.4 数据结构
评委评分状态响应(JudgeRatingStatusResponse):
* judgeId - 评委ID
* judgeName - 评委姓名
* totalScore - 总分
* status - 评分状态(0-未评分,1-已评分)
* isCurrentJudge - 是否为当前评委
当前评委评分响应(CurrentJudgeRatingResponse):
* id - 评分记录ID
* totalScore - 总分
* status - 评分状态
* remark - 评分备注
* items - 评分项目详情列表
当前评委信息响应(CurrentJudgeInfoResponse):
* id - 评委ID
* name - 评委姓名
* phone - 联系电话
* description - 评委描述
3.12.5 业务规则
评分权限:
* 评委只能查看和修改自己的评分
* 评委可以查看其他评委的评分状态(已评分/未评分)
* 评委可以查看选手的平均分
评分流程:
* 评委进入评分页面,系统显示当前评委信息
* 显示所有评委的评分状态
* 如果当前评委已评分,加载其历史评分数据
* 评委提交评分后,系统重新计算平均分
* 实时更新评分状态显示
数据一致性:
* 评分提交后立即更新数据库
* 重新加载页面数据确保状态同步
* 支持评委多次修改评分
* 3(结束):显示【已结束】,无操作按钮
四、微信端需求
暂时留空
聚焦“学员报名”“评委评审”“平台用户查询比赛进程和报名人数等等信息”核心场景,简化交互,避免冗余操作。
\#### 登录
    小程序登录,使用微信标准小程序登录流程,
    后台对应 wxLogin 方法。(不是webLogin)
    登录逻辑:
       1. 如果t\_user 里面 没有对应的 openid ,那么新增一个user 记录
       2. 如果存在user 记录, 则分别关联 t\_player ,t\_judge ,t\_employee 表里面的 user\_id,  返回前端的userDto  应该包含 player, judge, employee 的信息(如果有的话)
       3. 电话号码关联(非常重要)
          后台有个 saveUserPhone 的方法,小程序端或者web端更新电话后都必须调用这个方法,他的核心逻辑是:
          1,查询当前t\_user 里面的是否存在相同的电话号码,如果没有,就更新到当前user里面
          2. 如果存在相同的电话号码,并且对应user的openid 是null ,那么 清空原来user 的phone 设置为null,  把新的电话号码更新到 当前用户的phone字段,(因为电话号码不可重复), 同时更新t\_player, t\_judge, t\_employee  关联的user\_id 到 新的user\_id
 
\#### 2.3.1 首页
\- 顶部:展示“启用”状态的轮播图(按排序号播放)。
\- 赛事列表:显示“封面图+比赛名称+已报名人数+截止倒计时”,已截止标红;未截止赛事带“详情”按钮,跳转详情页面。
\- toolbar显示首页,消息,我的。三个模块。
  第一次打开小程序, 弹出手机号码授权,但是要有明显的【取消】按钮,用户可以不授权,如果用户取消授权,把 rejectPhone 记录到wx.setstorage 里面。 下次登录不在提醒授权手机号码。
 
\#### 2.3.2 详情页面
    顶部是比赛的图片和视频
    下面是比赛名称
    比赛开始时间
    报名截至时间。
    比赛简介
    最下面是报名按钮
    如果当前用户已经在这个比赛报过名,未审核, 那么显示【已报名-待审核】
    如果当前用户已经在这个比赛报过名,已经审核, 那么显示【已报名-进行中】
    如果当前用户已经在这个比赛报过名,已经审核, 那么显示【已结束】
  “当前时间大于截至时间”  灰色显示“报名已结束”, 不可报名
    “当前时间大于比赛时间+24 小时, 那么显示【已结束】
    当前未报名状态,并且时间状态符合要求,那么显示 按钮【我要报名】
\### 报名页面
    头像
    姓名
       电话:必填,并且不可录不可编辑(防止有人恶意注册他人电话号码),如果当前user(t\_user 有电话号码,就带出) 只能在旁边有个按钮【获取电话】,调用微信小程序授权获取电话。
    以上信息如果t\_user 里面有就自动带过来,没有是必填项。
    区域选择:来至于t\_region ,必填
    比赛名称:来自于上个比赛详情页面, 编辑时后台dto需要后台带出包含这个字段的activity.
      个人简介:必填
    项目名称:必填
      项目介绍:必填
      文档资料:必填(最少一个),最多5个,支持视频,图片,word,pdf 文件。
 
    提交按钮
\#### 2.3.3 我的
\- 顶部是头像,下面是姓名,旁边是设置按钮。点击进入设置。
\- 如果用户关联学员,就显示【我的比赛】。
\- 如果用户关联评委,就显示【我的评审】。
\- 如果用户关联员工,就显示【我的工作】。
\- 列表展示:每个比赛显示“封面图+名称+进度条(待审核→审核通过→评审中→已出结果)+最终得分(评审后显示)”。
\- 详情查看:点击“详情”可看提交资料、审核结果(拒绝显原因)、评审评语(评审后显)。
\#### 2.3.4 消息
\- 仅展示系统推送(审核结果、评审完成提示),按时间倒序,不支持回复。
\#### 2.3.5 评委身份功能
\- \*\*我的评审\*\*:
  - 分类展示:分“未评审”“已评审”tab页,显示“比赛名称+学员姓名+评审状态”。
  - 筛选支持:按比赛名称筛选任务。
\- \*\*评审操作\*\*:
  - 资料查看:点击“未评审”学员,查看其报名资料。
  - 评分提交:展示评分模板(评分项+满分值),必填得分(校验不超满分),可选填评语;提交后不可修改。
\- \*\*消息\*\*:仅展示系统通知(新评审任务、评审完成确认),按时间倒序,不支持回复。
五、设计要点
@@ -309,12 +540,14 @@
说明:以后端 application.yml 为准,避免环境不一致。
当前配置(摘自 backend/src/main/resources/application.yml):
- URL:jdbc:mysql://139.155.104.10:3306/ryc?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
- 用户名:ryc
- 密码:KiYap3E8X8RLcM6T
* URL:jdbc:mysql://139.155.104.10:3306/ryc?useUnicode=true\&characterEncoding=utf8\&useSSL=false\&serverTimezone=Asia/Shanghai
* 用户名:ryc
* 密码:KiYap3E8X8RLcM6T
超时建议:
- 在测试或批量操作场景下,追加 connectTimeout=60000、socketTimeout=60000 以提高稳定性。
* 在测试或批量操作场景下,追加 connectTimeout=60000、socketTimeout=60000 以提高稳定性。
8.2 RabbitMQ 连接
@@ -344,3 +577,21 @@
Region:ap-chengdu
Git 服务:
IP: http://42.193.1.25:9521/
用户名:ai
密码:ai@ycl2025
库:
微信小程序开发者工具
路径:C:\\Program Files (x86)\\Tencent\\微信web开发者工具