蓉易创项目 一、重要提示(不可违反) 全程使用中文! 不要修改和你无关的代码! 数据库表结构已经设计好了,你可以通过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) 列表字段: * 学员名称(来自 t\_player.name) * 报名项目(活动名称,t\_activity\_player.activity\_id 关联 t\_activity) * 联系电话(来自 t\_player.phone) * 报名时间(t\_activity\_player.create\_time) * 当前状态(按上述状态说明显示) 排序规则: * 默认按报名时间(create\_time)降序,最新在最前 数据来源与关联: * 主表: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(指向比赛自身)。 GraphQL 规范: * schema 文件放在 resources/graphqls/player.graphqls * 所有 query/mutation 必须 extend scheme.graphqls,避免重复定义问题 前端按钮规则(根据 state): * 0(报名未审核):显示按钮【审核通过】 * 1(进行中,已通过):显示按钮【取消资格】 * 2(审核未通过):显示【审核未通过】,无操作按钮 * 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): - URL:jdbc:mysql://139.155.104.10:3306/ryc?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai - 用户名:ryc - 密码:KiYap3E8X8RLcM6T 超时建议: - 在测试或批量操作场景下,追加 connectTimeout=60000、socketTimeout=60000 以提高稳定性。 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