177 lines
6.0 KiB
Markdown
177 lines
6.0 KiB
Markdown
# 代码调整记录 - 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`
|
|
```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方法
|
|
```java
|
|
// 修复前
|
|
@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查询:
|
|
```xml
|
|
<!-- 统计学生总数 -->
|
|
<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接口验证
|
|
- [x] `/xg/statisticsAnalysis/overview` - 获取统计概览
|
|
- [x] `/xg/statisticsAnalysis/dimensionOptions` - 获取维度选项
|
|
- [x] `/xg/statisticsAnalysis/collegeOptions` - 获取学院选项
|
|
- [x] `/xg/statisticsAnalysis/majorOptions` - 获取专业选项
|
|
- [x] `/xg/statisticsAnalysis/classOptions` - 获取班级选项
|
|
- [x] `/xg/statisticsAnalysis/chartTypeOptions` - 获取图表类型选项
|
|
|
|
### 功能验证
|
|
- [x] 统计概览数据正确返回
|
|
- [x] 维度选项包含13个统计维度
|
|
- [x] 学院选项从数据库正确查询
|
|
- [x] 专业选项支持按学院筛选
|
|
- [x] 班级选项支持按学院和专业筛选
|
|
- [x] 图表类型选项包含4种类型
|
|
|
|
## 📊 影响评估
|
|
|
|
### 正面影响
|
|
- ✅ 解决前端页面404错误
|
|
- ✅ 完善统计分析API体系
|
|
- ✅ 提供完整的选项数据支持
|
|
- ✅ 支持统计概览展示
|
|
|
|
### 风险评估
|
|
- ⚠️ **低风险**: 新增接口,不影响现有功能
|
|
- ⚠️ **兼容性**: 修改路径可能影响其他调用方(需验证)
|
|
|
|
## 🔍 技术细节
|
|
|
|
### 新增接口权限配置
|
|
所有新增接口都配置了相应的权限注解:
|
|
```java
|
|
@SaCheckPermission("xg:statistics:analysis:overview")
|
|
@SaCheckPermission("xg:statistics:analysis:dimension")
|
|
@SaCheckPermission("xg:statistics:analysis:college")
|
|
```
|
|
|
|
### 数据库查询优化
|
|
```sql
|
|
-- 使用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>
|
|
```
|
|
|
|
### 选项数据格式统一
|
|
所有选项接口返回统一格式:
|
|
```json
|
|
{
|
|
"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
|
|
**接口状态**: ✅ 正常
|
|
**功能状态**: ✅ 可用 |