经过全面检查,发现项目中存在多处硬编码问题,主要集中在比赛阶段名称的处理上。这些硬编码会导致系统在用户自定义阶段名称时出现功能异常。
文件: backend/src/main/java/com/rongyichuang/player/service/PlayerApplicationService.java
位置: 第35行
问题代码:java // 默认只显示海选阶段的数据,过滤掉复赛等后续阶段 whereClause.append("(stage.name NOT LIKE '%复赛%' AND stage.name NOT LIKE '%决赛%')");
问题分析:
- 硬编码了"复赛"和"决赛"字符串
- 如果用户自定义阶段名称(如"第二轮"、"半决赛"等),过滤逻辑将失效
- 这是最严重的硬编码问题,直接影响业务逻辑
文件: web/src/views/ActivityForm.vue
位置: 第668行
问题代码:javascript const stageNames = ['', '海选', '复赛', '半决赛', '决赛', '总决赛']
问题分析:
- 硬编码了默认阶段名称数组
- 限制了用户的自定义能力
- 不够灵活,无法适应不同类型的比赛
文件: web/src/views/competition-promotion/index.vue
位置: 第300行、第310行、第430行
问题代码:javascript stageName: '初赛', stageName: '决赛', currentStageName: '初赛'
问题分析:
- 模拟数据中硬编码了阶段名称
- 可能影响测试和开发环境的数据一致性
文件: db.sql
位置: 第39-45行
问题代码:sql INSERT INTO `t_activity` (..., `name`, ...) VALUES (..., '海选', ...); INSERT INTO `t_activity` (..., `name`, ...) VALUES (..., '复赛', ...);
问题分析:
- 初始化数据中硬编码了阶段名称
- 虽然是测试数据,但可能误导开发者认为这是标准命名
t_activity
中只有 sort_order
字段表示阶段顺序stage_type
或 stage_level
字段来标识阶段类型数据库结构修改sql ALTER TABLE t_activity ADD COLUMN stage_type INT DEFAULT 1 COMMENT '阶段类型:1=初选阶段,2=中级阶段,3=高级阶段';
后端服务修改java // 替换硬编码的字符串匹配 // 原代码:whereClause.append("(stage.name NOT LIKE '%复赛%' AND stage.name NOT LIKE '%决赛%')"); // 新代码: whereClause.append("stage.stage_type = 1"); // 只显示初选阶段
前端界面修改
后端服务修改java // 基于sort_order过滤,只显示第一阶段 whereClause.append("stage.sort_order = 1");
优点: 无需修改数据库结构
创建阶段类型配置表sql CREATE TABLE t_stage_type ( id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL COMMENT '阶段类型名称', code VARCHAR(20) NOT NULL COMMENT '阶段类型代码', level INT NOT NULL COMMENT '阶段级别', is_initial BOOLEAN DEFAULT FALSE COMMENT '是否为初选阶段', description VARCHAR(255) COMMENT '描述' );
修改活动表sql ALTER TABLE t_activity ADD COLUMN stage_type_id BIGINT COMMENT '阶段类型ID';
业务逻辑修改java // 基于阶段类型配置进行过滤 whereClause.append("EXISTS (SELECT 1 FROM t_stage_type st WHERE st.id = stage.stage_type_id AND st.is_initial = true)");
PlayerApplicationService.java
中的硬编码过滤逻辑项目中的硬编码问题主要源于缺乏合理的阶段类型设计。建议采用配置化的方式管理阶段类型,既能解决当前的硬编码问题,又能为未来的功能扩展提供良好的基础。