蓉易创项目
一、重要提示(不可违反)
全程使用中文!
不要修改和你无关的代码!
数据库表结构已经设计好了,你可以通过jdbc 创建要给test 函数来访问数据库获取表结构!, 不要在命令行里面执行mysql ,我没有安装!!!
修改任何功能都先对应查询对应模块的功能要求!
所有新增、编辑页面都是公用一个页面。
每个实体类都有对应的 Input 类型:id=null 表示新增,id≠null 表示修改。
关联媒体资源规则:
user 关联的头像、activity 关联的视频 / 图片、carousel 关联的视频 / 图像,均对应 t_media 数据表(实体类:Media);
通过 Target 字段关联区分。
二、需求描述
学员登录小程序 → 点击报名并录入报名信息 → 工作人员审核报名资料 → 评委评审资料,按比赛对应评分表给学员打分并填写评论。
三、Web 端需求
3.1 登录页面
核心功能:支持「手机号 + 密码」登录;
预留功能:微信扫码登录入口。
3.2 登录后首页(标准工作台模板)
区域 内容描述
左侧菜单 包含「比赛管理」「评委管理」「评分模板」「比赛报名」「新闻与推广」「员工管理」
右侧工作区 展示核心数据:当前进行比赛、参赛总人数、报名待审核人数
3.3 比赛管理(实体类:Activity)
3.3.1 比赛列表
顶部功能:查询框(支持按「比赛名称」模糊查询)、【新增比赛】按钮;
列表字段:比赛名称、报名人数、比赛时间、报名截至时间;
操作列:查看选手、编辑、删除。
3.3.2 比赛详情
基础信息配置:
比赛名称(最大长度≤30 字符);
报名截至日期(日历组件选择);
比赛开始时间(精确到「年月日 时分」);
比赛地址、最大参赛人数、比赛描述;
关联配置:选择评分模板、上传视频 / 图片(参考「五、设计要点」)。
比赛阶段定义(重要):
数据关联:比赛阶段与比赛共用 t_activity 表,通过 pid 关联(父 ID 为比赛 ID);
阶段配置项:
阶段名称(最大长度≤30 字符);
阶段开始时间(精确到「年月日 时分」);
阶段地址、阶段最大参赛人数、阶段描述;
评分模板(默认继承比赛模板,支持单独选择);
阶段列表操作:查看选手、编辑、删除。
3.4 评委管理(实体类:Judge)
3.4.1 评委列表
展示字段:头像、评委名称、专业标签、联系电话、性别。
3.4.2 评委详情
基础信息:评委名称、头像、性别、联系电话;
标签配置:专业标签(支持多选,参考「五、设计要点 3」);
补充信息:评委详情描述。
3.5 评分模板管理(实体类:RatingScheme)
3.5.1 评分模板列表
展示字段:模板名称、模板总分。
3.5.2 评分模板详情
基础配置:模板名称;
条目管理:
支持「新增 / 删除」评分条目(已绑定比赛的模板不可删除);
条目字段:条目名称、条目分值。
3.6 学员管理(实体类:Player)
3.6.1 学员列表
展示字段:学员头像、学员名称、报名的比赛名称、申请时间。
3.6.2 学员详情
基础信息:学员名称、头像、联系电话;
参赛记录列表(1 个学员可报多个比赛):
展示字段:比赛名称、当前状态;
状态说明:0-报名未审核、1-进行中、2-审核未通过、3-结束;
特殊规则:比赛结束后,「得分」「名次」不可修改。
3.7 新闻管理(实体类:Carousel)
3.7.1 新闻列表
展示字段:新闻名称、创建时间。
3.7.2 新闻播放设置(关联表:t_carousel_sort)
操作入口:列表查询按钮右侧 → 【设置播放】按钮;
设置页面:
顶部:新闻查询框;
下方:新闻列表,操作列支持「设置播放顺序」。
3.7.3 新闻详情
内容配置:新闻名称、新闻正文;
媒体配置:上传新闻关联的视频 / 图片;
播放配置:设置视频 / 图片的播放顺序。
3.8 权限角色
模型:采用标准 RBC(基于角色的访问控制)模型;
角色规则:内置 4 类角色(不可修改 / 编辑):学员、平台人员、评委、管理员。
3.9 专业标签管理(关联表:t_tag)
3.9.1 专业标签列表
支持功能:新增专业标签;
默认规则:新增标签的 code 与标签名称一致。
3.10 消息管理
功能:展示所有已发送的系统消息(含消息内容、发送时间、接收对象等)。
3.11 比赛报名(关联表:t_activity_player,t_player)
列表字段:
排序规则:
数据来源与关联:
GraphQL 规范:
前端按钮规则(根据 state):
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(结束):显示【已结束】,无操作按钮
四、微信端需求
暂时留空
五、设计要点
列表通用规则:所有模块的列表页面,均需包含「查询」「新增」功能;
媒体资源存储(关联表:t_media):
覆盖场景:user 头像、player 头像、activity 视频 / 图片、activityPlayer 报名资料、judge 头像、employee 头像、carousel 视频 / 图片;
区分规则:通过 TargetType 枚举区分资源类型(需定义包含上述所有场景的枚举);
标签管理(表:t_tag):
区分规则:通过 category 字段区分标签类型(例:专业标签的 category = 'major')。
六、环境配置
开发环境:Windows 系统,命令行工具:PowerShell;
JDK 配置:Java 25,安装路径:C:\Program Files\Java\jdk-25。
使用环境变量里面的mave。
七、技术规范
7.1 目录规范
根目录按「端 / 模块」拆分,backend 内部按「业务模块」划分,结构如下:
plaintext
backend/src/main/java/com/rongyichuang/
├── config/ # 全局配置(RabbitMQ、GraphQL、跨域等)
├── judge/ # 评委模块
│ ├── api/ # GraphQL接口(如JudgeGraphqlApi.java)
│ ├── entity/ # 实体类(如Judge.java)
│ ├── dto/ # 数据传输对象(分request/response子目录)
│ ├── service/ # 业务逻辑(如JudgeService.java,无单独接口层)
│ └── util/ # 模块内工具类
├── rating/ # 评分模板模块(结构同judge)
├── activity/ # 比赛模块(结构同judge)
├── player/ # 参赛人员模块(结构同judge)
├── carousel/ # 轮播图(新闻)模块(结构同judge)
├── employee/ # 平台员工模块(结构同judge)
└── common/ # 公共模块
├── entity/ # 基础实体(如BaseEntity.java,含id/state)
├── dto/ # 公共DTO(如PageRequest.java)
├── exception/ # 全局异常处理(如GlobalExceptionHandler.java)
└── util/ # 全局工具类(如DateUtil.java)
7.2 GraphQL 配置
文件路径:resources/graphql/;
命名规则:每个业务模块对应 1 个 graphqls 文件(例:评委模块 → judge.graphqls)。 业务模块的graphql里面query,Mutation都要extend scheme.graphqls ,不然会包重复的错误!
7.3 安全框架
采用 Spring Security + Token 实现身份认证与接口授权。
7.4 事务控制
作用范围:service 层核心业务方法(如评委评分、学员审核);
实现方式:添加 @Transactional 注解,确保数据一致性。
7.5 逻辑删除
通用规则:所有实体类含 state 字段(类型:int (1),默认值:1);
查询过滤:JPA 父接口添加 @Where(clause = "state = 1"),自动过滤已删除数据;
特殊说明:activityPlayer 的 state 含义与其他实体不同(参考 3.6.2 状态说明)。
7.6 云存储规范
存储目标:视频、图片上传至「腾讯云存储桶」;
目录规则:按「yyyyMMdd」(年月日)创建目录,当日资源存入对应目录。
7.8 前端代码是js ,不要用ts
八、资源信息
8.1 数据库连接(MySQL)
说明:以后端 application.yml 为准,避免环境不一致。
当前配置(摘自 backend/src/main/resources/application.yml):
超时建议:
8.2 RabbitMQ 连接
yaml
rabbitmq:
host: 140.143.152.226
port: 5672
virtual-host: ryc_prod
username: admin
password: ycl@2020
connection-timeout: 15000
8.3 腾讯云存储(COS)
SecretId:AKIDZ4Pcj9zbgaZgl6yJf0HSXXHzfGl9PcdT
SecretKey:qjYFnCas0xseEdsxrsobKuJiwzrZ7dzC
Bucket:ryc-1256886520
Region:ap-chengdu
Git 服务:
用户名:ai
密码:ai@ycl2025
库:
微信小程序开发者工具
路径:C:\Program Files (x86)\Tencent\微信web开发者工具