内容由 AI 生成
|
#蓉易创项目
|
## 重要提示,不可违反
|
1. 全程使用中文!
|
2. 不要修改和你无关的代码!
|
3. 修改任何功能都先对应查询对应模块的功能要求!
|
4. 所有新增、编辑页面都是公用一个页面。
|
5. 每个实体类都有对应的Input类型,id=null 就表示新增。id !=null 就表示修改。
|
6. user 关联的头像, activity关联的视频图片,carousel 关联的视频和图像,都对应 t_media 数据表,实体类Media . 通过Target
|
## 需求描述
|
学员登录小程序,点击报名,录入报名信息,工作人员审核报名资料。 评委评审报名资料,安装比赛对应的评分表给学员打分,并给出评论。
|
## web需求
|
1. 登录页面, 手机号和密码登录。同时预留 微信扫描登录。
|
2. 登录后首页是标准的工作台模板样式
|
2.1 左边是菜单栏目 包括:比赛管理,评委管理,评分模板。参赛人员,新闻与推广。 员工管理
|
2.2 右边是工作区,首页显示 当前进行比赛, 参赛人数,报名待审核人数。
|
3. 比赛管理
|
3.1 比赛列表
|
3.1.1 上面查询框,可以按名称查询,
|
3.1.2 右边是【新增比赛】
|
3.1.2 下面是比赛列表展示:名称,报名人数,比赛时间,报名截至时间。
|
3.1.2 后面又 查看选手,编辑,删除等操作。
|
3.2 比赛详情:
|
3.2.1 名称, 最大长度限制,小于30个字符
|
3.2.2 报名截至日期 ,通过日历选择
|
3.2.3 比赛开始时间, 年月日 和时分。
|
3.3.4 比赛地址。
|
3.3.5 最大参赛人数
|
3.3.5 比赛描述
|
3.3.6 选择评分模板
|
3.3.7. 选择视频和图片。 参考:设计要点 部分
|
3.3.7 比赛阶段定义
|
重要! 比赛阶段和比赛公用一个实体类和数据表(t_activity) .通过pid 关联。
|
3.3.7.1 名称, 最大长度限制,小于30个字符
|
3.3.7.2 比赛开始时间, 年月日 和时分。
|
3.3.7.3 比赛地址。
|
3.3.7.4 最大参赛人数
|
3.3.7.5 比赛描述
|
3.3.7.6 选择评分模板,默认是比赛的模板,也可以单独选择。
|
3.3.7.7 列表右边是 查看选手, 编辑,删除等操作
|
4.评委管理 对应 Judge
|
4.1 评委列表 显示 头像,名称,专业标签, 电话, 性别
|
4.2 评委详情: 名称,头像, 性别,专业标签,可以多选, 专业标签参考【设计要点第3点】,详情。
|
4. 评分模管理 对应 RatingScheme
|
4.1 评分模板列表。 名称, 总分。
|
4.2 评分模板详情: 名称, 下面是评分条目列表, 可以新增和删除,(已经绑定到比赛的不能删除)。 评分条目包括 名称和分值。
|
5. 学员管理
|
5.1 学员列表 显示头像,名称,报名的比赛, 申请时间。
|
5.2 学员详情页面: 名称,头像,电话,
|
5.2.1 学员详情页面的 比赛列表:
|
1.下面列表是参加报名的比赛(一个参赛人可以报名参加多个比赛),包括比赛名称和当前状态。 状态包括:带审核,进行中、 得分,名次等信息。
|
2. 得分,名次信息在比赛结束后不可修改!
|
3. activityPlayer的状态:0:删除, 1:待审核,2:进行中(审核通过), 3:结束。
|
6. 新闻 对应carousel
|
6.1 新闻列表 名称,创建时间。
|
6.2 新闻播放 对应 t_carousel_sort , 查询按钮后面有一个 按钮 【设置播放】, 点击到一个设置页面,上面是个查询框,下面是个列表,列表后面是播放顺序设置.
|
6.2 新闻详情 :名称,内容, 视频和图片 设置播放顺序
|
7. 权限角色。
|
采用标准的RBC模型
|
但是角色内置,不可修改和编辑: 学员,平台,评委,管理员。
|
8. 专业标签管理
|
8.1 专业标签列表, 可以新增标签, 新增的标签code 默认采用名称。
|
9. 发生消息类别
|
9.1 显示所有已经发生的消息。
|
## 微信端
|
暂时留空
|
|
|
## 设计要点
|
1. 列表通用设计: 都有查询, 新增
|
2. user的头像, player的头像, activity 的视频和图片,activiityPlayer 关联的报名人上传的资料,judge的头像, employee的头像,,carousel 的视频和图像的路径都记录在t_media表内。 通过TargetType区别
|
定义一个枚举类型要包括上述的类型。
|
3. 标签Tag 对应t_tag 表, 里面通过category 来区分不同的标签类型。比如:专业标签的category = 'major'.
|
|
## 环境配置
|
1. 开发环境是windows ,命令行是powersehll. 不要搞错了!
|
2. java 25 的目录在 : C:\Program Files\Java\jdk-25
|
3.
|
##技术规范
|
1. 目录规范:
|
根目录下分backend(后台)、web(预留前端)、wx(小程序),backend内部按模块划分,结构如下:重点:每个业务模块都包括api, dto, entity, service,repository 等目录!!!
|
|
backend/src/main/java/com/rongyichuang/
|
├── config/ # 配置类(RabbitMQ、GraphQL、跨域等)
|
├── judge/ # 评委模块
|
│ ├── api/ # GraphQL接口(如JudgeGraphqlApi)
|
│ ├── 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)
|
2. **Grpahqls文件放在 resources\graphqls目录下面, 每个模块对应一个graphqls文件。
|
3. spring security +token
|
4. **事务控制**:service核心方法(如评委评分、学员审核)添加@Transactional,确保数据一致性。
|
5. **逻辑删除**:所有实体类含state字段(int(1),默认1),JPA父接口加@Where(clause = "state = 1"),查询自动过滤已删除数据。 注意:activityPlayer 的satate 含义和其它的不同
|
6. 视频,图片直接上传到腾讯云存储桶里面
|
7. 存储桶目录,按yyyyMMyy 设置目录,每天的资源都放在对应的目录下。
|
##资源
|
### 3.4 数据库连接信息
|
- 类型:mysql
|
- IP:140.143.152.226
|
- 端口:3308
|
- 数据库:ryc
|
- 用户名:openai
|
- 密码:Xml@uk2025
|
|
### 3.5 RabbitMQ连接信息
|
rabbitmq:
|
host: 140.143.152.226
|
port: 5672
|
virtual-host: ryc_prod
|
username: admin
|
password: ycl@2020
|
connection-timeout: 15000
|
|
### 云存储信息
|
SecretId: 'AKIDZ4Pcj9zbgaZgl6yJf0HSXXHzfGl9PcdT',
|
SecretKey: 'qjYFnCas0xseEdsxrsobKuJiwzrZ7dzC',
|
Bucket: 'ryc-1256886520',
|
Region: 'ap-chengdu'
|
|
- 类型:mysql
|
- IP:140.143.152.226
|
- 端口:3308
|
- 数据库:ryc
|
- 用户名:openai
|
- 密码:Xml@uk2025
|
|
### 3.5 RabbitMQ连接信息
|
rabbitmq:
|
host: 140.143.152.226
|
port: 5672
|
virtual-host: ryc_prod
|
username: admin
|
password: ycl@2020
|
connection-timeout: 15000
|
|
### 云存储信息
|
|
SecretId: 'AKIDZ4Pcj9zbgaZgl6yJf0HSXXHzfGl9PcdT',
|
SecretKey: 'qjYFnCas0xseEdsxrsobKuJiwzrZ7dzC',
|
Bucket: 'ryc-1256886520',
|
Region: 'ap-chengdu'
|
|
把这个文档 整理规范一下,尤其标题和序号,还有缩进。
|
蓉易创项目
|
一、重要提示(不可违反)
|
全程使用中文!
|
不要修改和你无关的代码!
|
修改任何功能都先对应查询对应模块的功能要求!
|
所有新增、编辑页面都是公用一个页面。
|
每个实体类都有对应的Input类型,id=null 就表示新增;id !=null 就表示修改。
|
user 关联的头像、activity关联的视频图片、carousel 关联的视频和图像,都对应 t_media 数据表(实体类Media),通过Target关联。
|
二、需求描述
|
学员登录小程序,点击报名,录入报名信息,工作人员审核报名资料;评委评审报名资料,按照比赛对应的评分表给学员打分,并给出评论。
|
2.1 Web需求
|
2.1.1 登录页面
|
支持手机号和密码登录;
|
预留微信扫描登录入口。
|
2.1.2 登录后首页(标准工作台模板样式)
|
左侧:菜单栏目,包含「比赛管理」「评委管理」「评分模板」「参赛人员」「新闻与推广」「员工管理」;
|
右侧:工作区,首页显示「当前进行比赛」「参赛人数」「报名待审核人数」。
|
2.1.3 比赛管理(对应实体类:Activity)
|
2.1.3.1 比赛列表
|
顶部:查询框(支持按比赛名称查询);
|
右侧:【新增比赛】按钮;
|
列表展示字段:名称、报名人数、比赛时间、报名截至时间;
|
列表操作项:查看选手、编辑、删除。
|
2.1.3.2 比赛详情
|
名称(最大长度限制:小于30个字符);
|
报名截至日期(通过日历选择);
|
比赛开始时间(精确到年月日时分);
|
比赛地址;
|
最大参赛人数;
|
比赛描述;
|
选择评分模板;
|
选择视频和图片(参考「四、设计要点」部分);
|
比赛阶段定义(重要:比赛阶段和比赛公用一个实体类和数据表t_activity,通过pid关联):
|
阶段名称(最大长度限制:小于30个字符);
|
阶段比赛开始时间(精确到年月日时分);
|
阶段比赛地址;
|
阶段最大参赛人数;
|
阶段比赛描述;
|
选择评分模板(默认继承比赛模板,支持单独选择);
|
阶段列表操作项:查看选手、编辑、删除。
|
2.1.4 评委管理(对应实体类:Judge)
|
2.1.4.1 评委列表
|
列表展示字段:头像、名称、专业标签、电话、性别。
|
2.1.4.2 评委详情
|
基础信息:名称、头像、性别、专业标签(支持多选,参考「四、设计要点第3点」)、详情描述。
|
2.1.5 评分模板管理(对应实体类:RatingScheme)
|
2.1.5.1 评分模板列表
|
列表展示字段:名称、总分。
|
2.1.5.2 评分模板详情
|
基础信息:模板名称;
|
评分条目管理:支持新增、删除评分条目(已绑定到比赛的模板不可删除);
|
评分条目字段:名称、分值。
|
2.1.6 学员管理(对应实体类:Player)
|
2.1.6.1 学员列表
|
列表展示字段:头像、名称、报名的比赛、申请时间。
|
2.1.6.2 学员详情页面
|
基础信息:名称、头像、电话;
|
参赛记录列表(一个学员可报名多个比赛):
|
列表展示字段:比赛名称、当前状态;
|
状态说明:0-删除、1-待审核、2-进行中(审核通过)、3-结束;
|
特殊规则:得分、名次信息在比赛结束后不可修改。
|
2.1.7 新闻管理(对应实体类:Carousel)
|
2.1.7.1 新闻列表
|
列表展示字段:名称、创建时间。
|
2.1.7.2 新闻播放设置(对应表:t_carousel_sort)
|
操作入口:查询按钮右侧【设置播放】按钮;
|
设置页面:顶部查询框,下方列表(列表操作项:设置播放顺序)。
|
2.1.7.3 新闻详情
|
基础信息:名称、内容;
|
媒体设置:视频和图片配置;
|
播放设置:定义播放顺序。
|
2.1.8 权限角色
|
采用标准RBC模型;
|
角色规则:内置角色(不可修改/编辑),包括「学员」「平台」「评委」「管理员」。
|
2.1.9 专业标签管理(对应表:t_tag)
|
2.1.9.1 专业标签列表
|
支持功能:新增标签;
|
默认规则:新增标签的code默认与名称一致。
|
2.1.10 发送消息类别
|
功能:展示所有已发送的消息。
|
2.2 微信端
|
暂时留空
|
三、环境配置
|
开发环境:Windows,命令行工具:PowerShell;
|
JDK配置:Java 25,安装目录:C:\Program Files\Java\jdk-25。
|
四、设计要点
|
列表通用设计:所有列表页面均包含「查询」「新增」功能;
|
媒体资源存储规则:
|
用户头像(user)、选手头像(player)、比赛媒体(activity的视频/图片)、参赛报名资料(activiityPlayer)、评委头像(judge)、员工头像(employee)、新闻媒体(carousel的视频/图片),均存储于t_media表;
|
通过「TargetType」枚举区分资源类型(需定义包含上述所有类型的枚举);
|
标签管理规则:
|
标签存储于t_tag表,通过「category」字段区分标签类型(例:专业标签的category = 'major')。
|
五、技术规范
|
5.1 目录规范
|
根目录下分backend(后台)、web(预留前端)、wx(小程序),backend内部按模块划分,结构如下:
|
plaintext
|
backend/src/main/java/com/rongyichuang/
|
├── config/ # 配置类(RabbitMQ、GraphQL、跨域等)
|
├── judge/ # 评委模块
|
│ ├── api/ # GraphQL接口(如JudgeGraphqlApi)
|
│ ├── 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)
|
5.2 GraphQL配置
|
Graphqls文件统一放在 resources\graphqls 目录,每个业务模块对应一个graphqls文件。
|
5.3 安全框架
|
采用Spring Security + Token实现身份认证与授权。
|
5.4 事务控制
|
service层核心方法(如评委评分、学员审核)需添加@Transactional注解,确保数据一致性。
|
5.5 逻辑删除
|
所有实体类需包含state字段(类型:int(1),默认值:1);
|
JPA父接口需添加@Where(clause = "state = 1"),查询时自动过滤已删除数据;
|
特殊说明:activityPlayer的state含义与其他实体不同(参考2.1.6.2状态说明)。
|
5.6 云存储规范
|
存储目标:视频、图片直接上传至腾讯云存储桶;
|
目录规则:按「yyyyMMdd」格式创建目录,当日资源存入对应目录。
|
六、资源信息
|
6.1 数据库连接信息(MySQL)
|
类型:MySQL
|
IP:140.143.152.226
|
端口:3308
|
数据库名:ryc
|
用户名:openai
|
密码:Xml@uk2025
|
6.2 RabbitMQ连接信息
|
yaml
|
rabbitmq:
|
host: 140.143.152.226
|
port: 5672
|
virtual-host: ryc_prod
|
username: admin
|
password: ycl@2020
|
connection-timeout: 15000
|
6.3 腾讯云存储信息
|
SecretId: AKIDZ4Pcj9zbgaZgl6yJf0HSXXHzfGl9PcdT
|
SecretKey: qjYFnCas0xseEdsxrsobKuJiwzrZ7dzC
|
Bucket: ryc-1256886520
|
Region: ap-chengdu
|
能改成md格式吗
|
以下是完全遵循 Markdown(MD)规范 整理的「蓉易创项目」文档,包含标准标题层级、列表缩进、代码块、重点加粗等格式,可直接复制使用:
|
蓉易创项目
|
一、重要提示(不可违反)
|
全程使用中文!
|
不要修改和你无关的代码!
|
修改任何功能都先对应查询对应模块的功能要求!
|
所有新增、编辑页面都是公用一个页面。
|
每个实体类都有对应的 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 消息管理
|
功能:展示所有已发送的系统消息(含消息内容、发送时间、接收对象等)。
|
四、微信端需求
|
暂时留空
|
五、设计要点
|
列表通用规则:所有模块的列表页面,均需包含「查询」「新增」功能;
|
媒体资源存储(关联表: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。
|
七、技术规范
|
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/graphqls/;
|
命名规则:每个业务模块对应 1 个 graphqls 文件(例:评委模块 → judge.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」(年月日)创建目录,当日资源存入对应目录。
|
八、资源信息
|
8.1 数据库连接(MySQL)
|
参数 配置值
|
类型 MySQL
|
IP 140.143.152.226
|
端口 3308
|
数据库名 ryc
|
用户名 openai
|
密码 Xml@uk2025
|
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
|
如果要用这个来做开发,尤其是让AI 来做开发,还需要细化那些内容
|
要让 AI 基于这份文档高效开发,需要从「实体定义、业务流程、技术细节、接口规范」等维度进行细化,补充 AI 开发所需的「确定性信息」(避免歧义)和「约束规则」(明确边界)。以下是需要重点细化的内容:
|
一、核心实体类与数据库表结构(必须细化)
|
当前文档仅提到实体类名称(如 Judge、Activity),但缺少字段定义、数据类型、约束关系,AI 无法生成实体类和表结构。需补充:
|
1. 实体类字段明细(含数据库映射)
|
示例(以Activity为例):
|
实体字段名 数据库字段名 数据类型 约束规则(非空 / 长度 / 默认值) 说明
|
id id bigint 主键,自增,非空 比赛 ID
|
name name varchar(30) 非空,长度≤30 比赛名称
|
enrollEndTime enroll_end_time datetime 非空 报名截止时间
|
startTime start_time datetime 非空 比赛开始时间(精确到时分)
|
address address varchar(255) 可为空 比赛地址
|
maxPlayerCount max_player_count int 非空,默认 0,≥0 最大参赛人数
|
description description text 可为空 比赛描述
|
ratingSchemeId rating_scheme_id bigint 可为空(关联 RatingScheme.id) 关联的评分模板 ID
|
pid pid bigint 默认为 0(0 表示比赛,≠0 表示阶段) 父 ID(关联自身 id,用于阶段)
|
state state tinyint 非空,默认 1(1 - 正常,0 - 删除) 逻辑删除标识
|
需按此格式补充所有实体类(Judge、RatingScheme、Player、Media、Tag 等)。
|
2. 表关系与外键约束
|
明确表之间的关联规则,例如:
|
t_activity(比赛 / 阶段)的pid外键关联自身的id(自关联);
|
t_rating_scheme_item(评分条目)的scheme_id外键关联t_rating_scheme的id;
|
t_media的target_id关联对应实体的id(如 user 的 id、activity 的 id),target_type枚举值需明确(如USER_AVATAR=1、ACTIVITY_VIDEO=2)。
|
二、业务流程与状态流转(关键细化)
|
当前文档仅描述功能点,缺少流程步骤、状态触发条件,AI 无法实现业务逻辑。需补充:
|
1. 核心流程步骤
|
示例(学员报名 - 审核 - 评分流程):
|
学员报名:
|
输入:学员 ID、比赛 ID、报名资料(关联 t_media 的资源 ID);
|
校验:比赛是否在报名期内(当前时间≤enrollEndTime)、是否已达最大人数;
|
输出:生成 ActivityPlayer 记录(state=1 - 待审核)。
|
工作人员审核:
|
操作:审核通过 / 拒绝;
|
触发条件:仅管理员 / 平台角色可操作;
|
状态变更:通过→state=2(进行中);拒绝→state=0(删除,或新增 reject_reason 字段);
|
通知:审核结果通过 RabbitMQ 发送消息给学员(需明确消息格式)。
|
评委评分:
|
权限:评委只能给已关联的比赛 / 阶段打分(需新增judge_activity关联表);
|
输入:选手 ID、评分条目得分(每个条目得分≤条目分值)、评论;
|
校验:总分≤模板总分;
|
结果:比赛结束后自动计算平均分(或取去掉最高 / 最低分的规则),更新选手的score和rank(名次)。
|
2. 状态流转规则
|
明确所有状态字段的变更条件,例如:
|
ActivityPlayer.state流转:1-待审核→2-进行中(审核通过)→3-结束(比赛结束);
|
Activity.state流转:1-正常→0-删除(仅管理员可操作,且已结束的比赛才能删除)。
|
三、接口规范(GraphQL 细化)
|
当前仅提到 “每个模块对应一个 graphqls 文件”,但缺少查询 / 变更操作的参数、返回值、权限控制,AI 无法生成接口。需补充:
|
1. 查询操作(Query)
|
示例(比赛列表查询):
|
graphql
|
type Query {
|
# 比赛列表查询
|
activityList(
|
name: String # 名称模糊查询
|
page: Int! # 页码,默认1
|
size: Int! # 每页条数,默认10
|
): PageResult! # 返回分页结果(含总条数、列表数据)
|
}
|
|
# 分页结果结构
|
type PageResult {
|
total: Int! # 总条数
|
list: [Activity!]! # 数据列表
|
}
|
|
# 比赛数据结构
|
type Activity {
|
id: ID!
|
name: String!
|
enrollEndTime: String! # 格式:yyyy-MM-dd HH:mm:ss
|
# 其他字段...
|
}
|
2. 变更操作(Mutation)
|
示例(新增比赛):
|
graphql
|
type Mutation {
|
# 新增比赛
|
createActivity(input: ActivityInput!): Activity!
|
}
|
|
# 输入参数结构
|
input ActivityInput {
|
name: String! # 校验:非空,长度≤30
|
enrollEndTime: String! # 校验:格式正确,且≥当前时间
|
startTime: String! # 校验:格式正确,且≥enrollEndTime
|
# 其他字段...
|
}
|
3. 权限控制
|
明确每个接口的访问角色,例如:
|
createActivity:仅管理员 / 平台角色可访问;
|
queryPlayerList:管理员可查看所有,评委仅能查看自己负责的比赛选手。
|
四、技术细节与约束(开发必备)
|
当前文档提到技术规范但不具体,需补充:
|
1. 数据校验规则
|
手机号:格式必须为1[3-9]\d{9};
|
日期时间:统一格式yyyy-MM-dd HH:mm:ss,后端需校验合法性(如月份≤12);
|
评分条目:单个条目得分≥0 且≤条目分值,所有条目总分≤模板总分。
|
2. 媒体资源处理
|
上传限制:图片≤5MB(格式:jpg/png),视频≤100MB(格式:mp4);
|
腾讯云存储路径:{targetType}/{yyyyMMdd}/{uuid}.ext(如activity_video/20250921/123e456-e89b-12d3-a456-426614174000.mp4);
|
访问 URL:https://{Bucket}.cos.{Region}.myqcloud.com/{路径}。
|
3. 异常处理
|
明确常见异常场景及处理方式,例如:
|
报名人数超限:抛出BusinessException("报名人数已达上限"),HTTP 状态码 400;
|
评分模板已关联比赛:删除时抛出BusinessException("模板已关联比赛,不可删除")。
|
4. 消息队列(RabbitMQ)
|
交换机 / 队列定义:例如审核通知队列ryc.exchange.notice,路由键notice.audit;
|
消息格式:
|
json
|
{
|
"type": "AUDIT_PASS", // 消息类型
|
"userId": 123, // 接收用户ID
|
"content": "您报名的XX比赛已通过审核",
|
"createTime": "2025-09-21 10:00:00"
|
}
|
五、前端交互关联(影响后端设计)
|
即使重点是后端开发,也需明确前端交互对后端的要求:
|
分页参数:默认页码 1,每页 10 条,支持前端自定义;
|
列表排序:默认按创建时间降序,支持按指定字段排序(如比赛时间);
|
批量操作:是否支持批量删除比赛、批量审核选手(需后端提供批量接口)。
|
六、边界场景与特殊规则
|
补充 “例外情况” 处理,例如:
|
比赛时间修改:若已有人报名,需判断新时间是否≥当前时间,且通知已报名学员;
|
评委更换:已打分的评委被移除后,其评分是否保留(规则:保留但不计入最终得分);
|
数据导出:是否需要支持导出比赛报名名单、评分结果(需明确导出字段和格式)。
|
通过以上细化,AI 可获得足够的「确定性信息」,生成的代码将更贴合需求,减少后期修改成本。核心原则是:让每个功能点都有明确的 “输入 - 处理 - 输出” 规则,每个字段都有清晰的约束。
|
蓉易创项目
|
一、重要提示(不可违反)
|
全程使用中文!
|
不要修改和你无关的代码!
|
数据库表结构已经设计好了,你可以通过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 消息管理
|
功能:展示所有已发送的系统消息(含消息内容、发送时间、接收对象等)。
|
四、微信端需求
|
暂时留空
|
五、设计要点
|
列表通用规则:所有模块的列表页面,均需包含「查询」「新增」功能;
|
媒体资源存储(关联表: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/graphqls/;
|
命名规则:每个业务模块对应 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」(年月日)创建目录,当日资源存入对应目录。
|
八、资源信息
|
8.1 数据库连接(MySQL)
|
参数 配置值
|
类型 MySQL
|
IP 140.143.152.226
|
端口 3308
|
数据库名 ryc
|
用户名 openai
|
密码 Xml@uk2025
|
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 你基于这个再完善一下,细节
|
蓉易创项目(完善版)
|
一、重要提示(不可违反)
|
全程使用中文!
|
不要修改和你无关的代码!
|
数据库表结构获取方式:
|
因未安装 MySQL 命令行,需通过 JDBC 编写TestTableStructure函数查询表结构,具体实现如下(含依赖、代码示例、执行步骤):
|
依赖:在pom.xml中添加 MySQL JDBC 依赖(适配 MySQL 8.0+):
|
xml
|
<dependency>
|
<groupId>mysql</groupId>
|
<artifactId>mysql-connector-java</artifactId>
|
<version>8.0.33</version>
|
<scope>test</scope>
|
</dependency>
|
代码示例(位于test/java/com/rongyichuang/common/util/TestTableStructure.java):
|
java
|
import java.sql.*;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
public class TestTableStructure {
|
// 数据库连接信息(与文档8.1一致)
|
private static final String URL = "jdbc:mysql://140.143.152.226:3308/ryc?useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true";
|
private static final String USER = "openai";
|
private static final String PASSWORD = "Xml@uk2025";
|
|
// 需查询的表名(根据模块补充,如t_activity、t_judge)
|
private static final List<String> TABLE_NAMES = List.of("t_activity", "t_judge", "t_rating_scheme", "t_media");
|
|
public static void main(String[] args) {
|
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD)) {
|
for (String tableName : TABLE_NAMES) {
|
System.out.println("=== 表名:" + tableName + " ===");
|
// 查询表字段结构
|
String sql = "SELECT COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT, IS_NULLABLE, COLUMN_DEFAULT " +
|
"FROM INFORMATION_SCHEMA.COLUMNS " +
|
"WHERE TABLE_SCHEMA = 'ryc' AND TABLE_NAME = ?";
|
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
|
pstmt.setString(1, tableName);
|
ResultSet rs = pstmt.executeQuery();
|
while (rs.next()) {
|
System.out.printf("字段名:%s | 数据类型:%s | 注释:%s | 是否允许空:%s | 默认值:%s%n",
|
rs.getString("COLUMN_NAME"),
|
rs.getString("DATA_TYPE"),
|
rs.getString("COLUMN_COMMENT"),
|
rs.getString("IS_NULLABLE"),
|
rs.getString("COLUMN_DEFAULT"));
|
}
|
}
|
System.out.println(); // 换行分隔
|
}
|
} catch (SQLException e) {
|
e.printStackTrace();
|
System.err.println("查询表结构失败:" + e.getMessage());
|
}
|
}
|
}
|
执行步骤:在 PowerShell 中进入项目根目录,执行mvn test -Dtest=TestTableStructure,控制台输出表结构详情。
|
修改任何功能都先对应查询对应模块的功能要求!
|
所有新增、编辑页面都是公用一个页面。
|
每个实体类都有对应的Input类型:id=null表示新增,id≠null表示修改。
|
关联媒体资源规则:
|
user 关联的头像、activity 关联的视频 / 图片、carousel 关联的视频 / 图像,均对应t_media数据表(实体类:Media);
|
通过target_type(资源类型)和target_id(关联实体 ID)双字段区分,target_type枚举值见「五、设计要点 2」。
|
二、需求描述
|
学员登录小程序 → 选择目标比赛 → 填写报名信息 + 上传报名资料(关联t_media) → 工作人员(平台 / 管理员角色)审核报名资料 → 审核通过后,评委(仅指定比赛的评委)按关联评分模板打分 + 填写评论 → 比赛结束后,系统自动计算选手最终得分和名次(不可修改)。
|
三、Web 端需求(细化版)
|
3.1 登录页面
|
核心功能:
|
输入项:手机号(校验规则:11 位数字,匹配正则^1[3-9]\\d{9}$)、密码(校验规则:6-20 位,含数字 + 字母);
|
按钮:【登录】(点击后调用login接口,返回 Token 存入 LocalStorage)、【忘记密码】(预留,暂不实现);
|
预留功能:
|
微信扫码登录入口:显示微信扫码二维码(后端通过微信开放平台接口生成),扫码后回调wechatLoginCallback接口完成认证。
|
3.2 登录后首页(标准工作台模板)
|
区域 内容描述 补充细节
|
左侧菜单 包含「比赛管理」「评委管理」「评分模板」「参赛人员」「新闻与推广」「员工管理」 菜单权限控制:根据角色隐藏无权限项(如学员角色仅显示「新闻与推广」)
|
右侧工作区 展示核心数据:当前进行比赛、参赛总人数、报名待审核人数 数据实时性:每 5 分钟刷新一次;点击数据卡片跳转至对应列表页(如点击「待审核人数」跳转至参赛人员列表的「待审核」标签页)
|
3.3 比赛管理(实体类:Activity,对应表:t_activity)
|
3.3.1 比赛列表
|
顶部功能:
|
查询框:支持按「比赛名称」模糊查询(输入后实时过滤,或点击【查询】按钮触发);
|
【新增比赛】按钮:点击跳转至「比赛编辑页」(id=null);
|
列表字段:
|
字段名 展示格式 / 规则
|
比赛名称 超出 15 字符时显示省略号(hover 显示完整名称)
|
报名人数 格式:已报名X人/上限Y人(如 “已报名 23 人 / 上限 50 人”)
|
比赛时间 格式:yyyy-MM-dd HH:mm(如 “2024-10-01 09:00”)
|
报名截至时间 过期时标红(如当前时间 > 报名截至时间,文字颜色 #F53F3F)
|
操作列:
|
查看选手:跳转至「参赛人员列表」并筛选当前比赛的选手;
|
编辑:跳转至「比赛编辑页」(id=当前比赛ID);
|
删除:弹出确认弹窗(提示 “删除后不可恢复,是否确认?”),点击确认调用deleteActivity接口(仅管理员可操作)。
|
3.3.2 比赛详情(编辑页)
|
基础信息配置(表单项):
|
表单项 控件类型 校验规则
|
比赛名称 单行输入框 非空,长度≤30 字符,不允许包含特殊字符(`~!@#$%^&*()_+{} :"<>?`)
|
报名截至日期 日期时间选择器 非空,且≥当前时间,且≤比赛开始时间
|
比赛开始时间 日期时间选择器 非空,精确到「时分」(如 “2024-10-01 09:00”)
|
比赛地址 单行输入框 非空,长度≤255 字符
|
最大参赛人数 数字输入框 非空,≥1,≤9999
|
比赛描述 富文本编辑器 可为空,支持图片插入(插入的图片自动上传至 COS,路径rich_text/yyyyMMdd/)
|
评分模板 下拉选择框 非空,选项为所有状态正常的评分模板(t_rating_scheme.state=1)
|
媒体配置(上传区域):
|
视频上传:支持单个 MP4 格式视频(大小≤100MB),上传后显示预览图 + 删除按钮;
|
图片上传:支持多图上传(最多 5 张),格式 JPG/PNG(单张≤5MB),支持拖拽排序;
|
存储规则:上传后调用uploadMedia接口,媒体资源存入 COS 路径activity_media/yyyyMMdd/,并在t_media生成记录(target_type=ACTIVITY_MEDIA,target_id=比赛ID)。
|
比赛阶段定义(子表格):
|
显示当前比赛的所有阶段(t_activity.pid=当前比赛ID);
|
【新增阶段】按钮:点击弹出阶段编辑弹窗(默认继承比赛的评分模板、地址,可修改);
|
阶段表单项:与比赛基础信息一致(除 “报名截至日期”,阶段无需报名);
|
阶段操作列:查看选手(筛选当前阶段的选手)、编辑(弹窗修改)、删除(仅阶段未开始可删除)。
|
3.4 评委管理(实体类:Judge,对应表:t_judge)
|
3.4.1 评委列表
|
列表字段:
|
字段名 展示规则
|
头像 显示圆形头像(尺寸 40×40px),无头像时显示默认图标(路径/static/default-avatar.png)
|
评委名称 非空,超出 10 字符显示省略号
|
专业标签 多标签展示(如 “钢琴・声乐・作曲”),标签背景色 #E8F3FF,文字色 #1890FF
|
联系电话 脱敏显示(如 “138****5678”)
|
性别 显示图标(男:♂,女:♀)
|
操作列:编辑(跳转至评委编辑页)、删除(仅管理员可操作,需确认)。
|
3.4.2 评委详情(编辑页)
|
基础信息表单:
|
表单项 控件类型 校验规则
|
评委名称 单行输入框 非空,长度≤20 字符,不包含特殊字符
|
头像 图片上传控件 支持 JPG/PNG,大小≤2MB,上传后预览(路径judge_avatar/yyyyMMdd/)
|
性别 单选框 非空,选项 “男”“女”“保密”
|
联系电话 单行输入框 非空,匹配手机号正则^1[3-9]\\d{9}$
|
专业标签 标签选择器 非空,支持多选(选项来自t_tag表category='major'的标签)
|
评委详情 多行输入框 可为空,长度≤500 字符
|
关联比赛配置(多选框组):
|
选项:所有状态正常的比赛(t_activity.state=1且pid=0);
|
作用:指定评委可评审的比赛(仅关联的比赛可显示该评委并分配评分任务)。
|
3.5 评分模板管理(实体类:RatingScheme,对应表:t_rating_scheme;评分条目:RatingSchemeItem,对应表:t_rating_scheme_item)
|
3.5.1 评分模板列表
|
列表字段:
|
模板名称:非空,超出 15 字符显示省略号;
|
模板总分:格式 “XX 分”(如 “100 分”),由所有评分条目分值求和自动计算;
|
条目数量:格式 “XX 项”(如 “5 项”);
|
关联比赛数:显示当前模板已关联的比赛数量(如 “已关联 3 个比赛”,hover 显示比赛名称)。
|
操作列:
|
编辑:跳转至模板编辑页(若已关联比赛,“模板名称” 不可修改);
|
删除:仅未关联比赛的模板可删除(弹窗提示 “已关联比赛,不可删除”)。
|
3.5.2 评分模板详情(编辑页)
|
基础配置:
|
模板名称:单行输入框(已关联比赛时禁用),校验规则 “非空,长度≤20 字符”;
|
评分条目子表格:
|
列名 控件 / 规则
|
条目名称 单行输入框(新增 / 编辑时),非空,长度≤30 字符
|
条目分值 数字输入框(新增 / 编辑时),非空,≥1,≤100,且所有条目总分≤1000
|
操作 新增(点击【新增条目】添加行)、删除(仅未关联比赛的模板可删除条目)
|
总分计算:实时计算所有条目分值之和,显示在表格下方(如 “当前总分:100 分”)。
|
3.6 学员管理(实体类:Player,对应表:t_player;参赛记录:ActivityPlayer,对应表:t_activity_player)
|
3.6.1 学员列表
|
筛选条件(顶部标签页 + 查询框):
|
标签页:全部、待审核(state=1)、进行中(state=2)、已结束(state=3);
|
查询框:支持按 “学员名称”“报名比赛名称” 模糊查询;
|
列表字段:
|
字段名 展示规则
|
学员头像 圆形显示(40×40px),无头像显示默认图标
|
学员名称 超出 10 字符显示省略号
|
报名的比赛 显示比赛名称(超出 15 字符省略),若为阶段比赛,后缀 “-XX 阶段”(如 “校园歌手赛 - 初赛”)
|
申请时间 格式:yyyy-MM-dd HH:mm(如 “2024-09-15 14:30”)
|
当前状态 标签显示(待审核:#FF7D00;进行中:#00B42A;已结束:#86909C)
|
操作列:
|
查看详情:跳转至学员详情页;
|
审核:仅 “待审核” 状态显示(点击弹出审核弹窗,选择 “通过 / 拒绝” 并填写拒绝原因)。
|
3.6.2 学员详情页
|
基础信息卡片:
|
显示学员名称、头像、联系电话(脱敏)、报名总次数;
|
参赛记录列表(按报名时间倒序):
|
字段名 展示规则
|
比赛名称 点击可跳转至比赛详情页
|
报名时间 格式:yyyy-MM-dd HH:mm
|
当前状态 同列表页标签
|
报名资料 点击【查看】弹出弹窗,显示上传的资料(图片 / 文档,关联t_media)
|
得分 / 名次 已结束状态显示(得分:XX 分;名次:第 X 名,无名次显示 “未排名”)
|
评委评论 已结束状态显示(hover 显示所有评委的评论,格式 “评委 A:XXX;评委 B:XXX”)
|
3.7 新闻管理(实体类:Carousel,对应表:t_carousel;播放排序:CarouselSort,对应表:t_carousel_sort)
|
3.7.1 新闻列表
|
列表字段:
|
新闻名称:超出 20 字符显示省略号,点击跳转至新闻详情页;
|
封面图:显示缩略图(尺寸 120×80px),无封面图显示默认图;
|
创建时间:格式yyyy-MM-dd(如 “2024-09-01”);
|
播放状态:标签显示(已加入播放:#00B42A;未加入:#86909C)。
|
操作列:编辑、删除(仅管理员可操作)、【加入播放】/【移除播放】(切换播放状态)。
|
3.7.2 新闻播放设置
|
页面入口:新闻列表页查询框右侧【设置播放】按钮;
|
功能:
|
顶部查询框:按 “新闻名称” 模糊查询已加入播放的新闻;
|
排序列表:显示已加入播放的新闻(按播放顺序升序),每一行右侧有【上移】【下移】按钮(调整顺序)、【移除】按钮(从播放列表删除);
|
排序规则:播放顺序字段sort(int 类型,值越小越靠前,默认按加入时间排序)。
|
3.7.3 新闻详情(编辑页)
|
表单配置:
|
表单项 控件类型 校验规则
|
新闻名称 单行输入框 非空,长度≤50 字符
|
封面图 图片上传控件 非空,JPG/PNG,大小≤5MB,路径carousel_cover/yyyyMMdd/
|
新闻内容 富文本编辑器 非空,支持视频 / 图片插入(视频≤200MB,路径carousel_content/yyyyMMdd/)
|
媒体资源 视频 / 图片上传区 可选,支持多文件上传(视频≤500MB,图片≤10MB),用于详情页额外展示
|
播放顺序 数字输入框 可为空(加入播放时自动赋值,默认最大顺序 + 1)
|
3.8 权限角色(细化权限范围)
|
采用标准 RBAC 模型,内置 4 类不可修改的角色,权限范围如下表:
|
角色 可访问菜单 核心操作权限
|
学员 新闻与推广 查看新闻、小程序端报名比赛、查看个人参赛记录
|
平台人员 比赛管理、参赛人员、新闻与推广 编辑比赛 / 阶段、审核学员报名、管理新闻(不含删除)、查看评委 / 评分模板
|
评委 参赛人员(仅指定比赛) 查看指定比赛的学员资料、按评分模板打分 + 填写评论、查看评分结果
|
管理员 所有菜单 所有操作(含删除比赛 / 评委 / 模板、配置播放顺序、管理员工角色)
|
3.9 专业标签管理(对应表:t_tag)
|
3.9.1 专业标签列表
|
列表字段:
|
标签名称:非空,长度≤10 字符;
|
标签 Code:默认与标签名称一致(如名称 “钢琴”,Code “钢琴”),唯一不可修改;
|
关联评委数:显示当前标签已关联的评委数量(如 “关联 5 位评委”)。
|
操作列:
|
新增:点击【新增标签】弹出表单(输入标签名称,Code 自动生成,category='major');
|
删除:仅未关联评委的标签可删除(弹窗提示 “已关联评委,不可删除”)。
|
校验规则:新增标签时,校验 “标签名称 / Code 是否已存在”(避免重复)。
|
3.10 消息管理(实体类:Message,对应表:t_message)
|
列表字段(按发送时间倒序):
|
字段名 展示规则
|
消息类型 标签显示(审核通知:#FF7D00;评分通知:#00B42A;系统通知:#86909C)
|
消息内容 超出 30 字符显示省略号(hover 显示完整内容)
|
接收对象 格式:“学员:XXX”“评委:XXX”“所有人”
|
发送时间 格式:yyyy-MM-dd HH:mm
|
已读状态 未读标红(文字色 #F53F3F),已读正常(#1D2129)
|
操作列:
|
标记已读:点击将未读消息改为已读;
|
查看详情:弹出弹窗显示完整消息内容(含跳转链接,如审核通知跳转至学员详情页)。
|
消息发送规则:
|
审核通知:学员报名审核通过 / 拒绝时,自动发送给对应学员;
|
评分通知:评委完成评分后,自动发送给对应学员;
|
系统通知:管理员手动发送(新增 “发送系统消息” 表单,选择接收对象和内容)。
|
四、微信端需求(补充基础框架)
|
暂未实现,但需预留以下接口适配小程序:
|
学员登录接口(wechatMiniLogin):通过微信小程序 Code 获取 OpenID,关联t_player表;
|
比赛列表接口(miniActivityList):返回当前可报名的比赛(过滤已过期、已达人数上限的比赛);
|
报名接口(miniPlayerEnroll):接收学员 ID、比赛 ID、报名资料(媒体 ID),生成参赛记录;
|
个人中心接口(miniPlayerCenter):返回学员基本信息、参赛记录、消息列表。
|
五、设计要点(细化版)
|
列表通用规则:
|
分页:所有列表默认分页(页码默认 1,每页 10 条,支持切换 “10/20/50 条 / 页”);
|
排序:默认按 “创建时间
|
发消息或输入 / 选择技能
|