Files
hzdyjs/docs/变更管理/code-adjust-record-2025-01-18-wuzhen-statistics-api-404-fix.md
T

6.0 KiB

代码调整记录 - 2025-01-18 - wuzhen - 统计分析API 404错误修复

📋 变更概述

变更时间: 2025-01-18 10:00:00
变更人员: wuzhen
变更类型: API接口修复
影响范围: 后端 - 统计分析模块

🔧 修复内容

问题描述

前端统计分析页面出现多处404错误:

  1. 获取学院选项失败: Error: 404
  2. 获取概览失败: Error: 404
  3. 获取维度选项失败: Error: 404

根本原因

  1. API路径不匹配: 前端调用/xg/statisticsAnalysis/,后端控制器路径为/xg/statistics/analysis/
  2. 缺失接口: 前端需要的辅助接口(概览、选项等)在后端未实现
  3. HTTP方法不匹配: 前端使用GET请求,后端部分接口定义为POST

修复方案

1. 修复控制器路径

文件: XgStatisticsAnalysisController.java

// 修复前
@RequestMapping("/xg/statistics/analysis")

// 修复后
@RequestMapping("/xg/statisticsAnalysis")

2. 新增缺失的API接口

在XgStatisticsAnalysisController.java中新增6个接口:

新增接口列表:

  • GET /overview - 获取统计概览
  • GET /dimensionOptions - 获取统计维度选项
  • GET /collegeOptions - 获取学院选项
  • GET /majorOptions - 获取专业选项
  • GET /classOptions - 获取班级选项
  • GET /chartTypeOptions - 获取图表类型选项

3. 修复HTTP方法

// 修复前
@PostMapping("/college")
public R<XgStatisticsResultVo> statisticsByCollege(@RequestBody XgStatisticsQueryBo queryBo)

// 修复后
@GetMapping("/college")
public R<XgStatisticsResultVo> statisticsByCollege(XgStatisticsQueryBo queryBo)

4. 新增Service方法

在IXgStatisticsAnalysisService.java中新增6个方法:

  • getStatisticsOverview() - 获取统计概览
  • getStatisticsDimensionOptions() - 获取统计维度选项
  • getCollegeOptions() - 获取学院选项
  • getMajorOptions() - 获取专业选项
  • getClassOptions() - 获取班级选项
  • getChartTypeOptions() - 获取图表类型选项

5. 实现Service方法

在XgStatisticsAnalysisServiceImpl.java中实现所有新增方法:

  • 统计概览: 查询学生、学院、专业、班级总数
  • 维度选项: 返回13个统计维度选项
  • 学院选项: 从数据库查询学院列表
  • 专业选项: 根据学院查询专业列表
  • 班级选项: 根据学院和专业查询班级列表
  • 图表类型: 返回4种图表类型选项

6. 新增Mapper方法

在XgStatisticsAnalysisMapper.java中新增7个方法:

  • countTotalStudents() - 统计学生总数
  • countTotalColleges() - 统计学院总数
  • countTotalMajors() - 统计专业总数
  • countTotalClasses() - 统计班级总数
  • getCollegeOptions() - 获取学院选项
  • getMajorOptions() - 获取专业选项
  • getClassOptions() - 获取班级选项

7. 新增SQL查询

在XgStatisticsAnalysisMapper.xml中新增7个SQL查询:

<!-- 统计学生总数 -->
<select id="countTotalStudents" resultType="java.lang.Long">
    SELECT COUNT(1) FROM xg_student_info WHERE deleted = 0
</select>

<!-- 获取学院选项 -->
<select id="getCollegeOptions" resultType="java.util.Map">
    SELECT college_id as value, college_name as label
    FROM xg_college_info WHERE deleted = 0 ORDER BY college_name
</select>

✅ 验证结果

API接口验证

  • /xg/statisticsAnalysis/overview - 获取统计概览
  • /xg/statisticsAnalysis/dimensionOptions - 获取维度选项
  • /xg/statisticsAnalysis/collegeOptions - 获取学院选项
  • /xg/statisticsAnalysis/majorOptions - 获取专业选项
  • /xg/statisticsAnalysis/classOptions - 获取班级选项
  • /xg/statisticsAnalysis/chartTypeOptions - 获取图表类型选项

功能验证

  • 统计概览数据正确返回
  • 维度选项包含13个统计维度
  • 学院选项从数据库正确查询
  • 专业选项支持按学院筛选
  • 班级选项支持按学院和专业筛选
  • 图表类型选项包含4种类型

📊 影响评估

正面影响

  • ✅ 解决前端页面404错误
  • ✅ 完善统计分析API体系
  • ✅ 提供完整的选项数据支持
  • ✅ 支持统计概览展示

风险评估

  • ⚠️ 低风险: 新增接口,不影响现有功能
  • ⚠️ 兼容性: 修改路径可能影响其他调用方(需验证)

🔍 技术细节

新增接口权限配置

所有新增接口都配置了相应的权限注解:

@SaCheckPermission("xg:statistics:analysis:overview")
@SaCheckPermission("xg:statistics:analysis:dimension")
@SaCheckPermission("xg:statistics:analysis:college")

数据库查询优化

-- 使用COUNT(DISTINCT)避免重复计算
SELECT COUNT(DISTINCT college_id) FROM xg_class_info WHERE deleted = 0

-- 支持条件查询
SELECT major_id as value, major_name as label
FROM xg_major_info WHERE deleted = 0
<if test="collegeCode != null and collegeCode != ''">
    AND college_id = #{collegeCode}
</if>

选项数据格式统一

所有选项接口返回统一格式:

{
  "value": "选项值",
  "label": "选项标签"
}

📚 相关文档

  • 前端API文件: web/src/api/xg-xx/statistics.ts
  • 后端控制器: backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgStatisticsAnalysisController.java
  • Service实现: backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/service/impl/XgStatisticsAnalysisServiceImpl.java
  • Mapper接口: backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/mapper/XgStatisticsAnalysisMapper.java
  • SQL查询: backend/ruoyi-modules/ruoyi-xg-xx/src/main/resources/mapper/xg/XgStatisticsAnalysisMapper.xml

🎯 后续建议

  1. 权限配置: 在系统菜单中配置对应的按钮权限
  2. 单元测试: 为新增接口编写单元测试
  3. 性能优化: 对频繁查询的选项数据添加缓存
  4. API文档: 更新API文档,包含新增接口说明

修复完成时间: 2025-01-18 10:00:00
接口状态: ✅ 正常
功能状态: ✅ 可用