Files
hzdyjs/docs/设计文档/database/code-adjust-record-2025-01-07-wuzhen.md
T
2025-08-10 00:28:48 +08:00

5.4 KiB

代码调整记录 - 2025-01-07 - wuzhen

📋 变更概览

变更日期: 2025-01-07
变更人员: wuzhen
变更类型: 新功能开发
变更范围: 奖学金名额统计功能


🎯 变更目标

为奖学金名额管理系统增加实时统计功能,包括:

  • 总名额统计
  • 已用名额统计
  • 可用名额统计
  • 使用率计算

🔧 技术实现

后端开发

1. Controller层新增API接口

文件: backend/hzdyjs-api/hzdyjs-jcbt/src/main/java/com/hzdyjs/jcbt/controller/ScholarshipQuotaController.java

新增接口:

@GetMapping("/statistics/{batchId}")
@SaCheckPermission("jcbt:scholarshipQuota:statistics")
public R<Map<String, Object>> getStatistics(@PathVariable Long batchId)

功能: 获取指定批次的名额统计数据

2. Service层统计业务逻辑

文件: backend/hzdyjs-api/hzdyjs-jcbt/src/main/java/com/hzdyjs/jcbt/service/impl/ScholarshipQuotaServiceImpl.java

新增方法:

@Override
public Map<String, Object> getStatistics(Long batchId)

统计逻辑:

  • 查询指定批次的所有名额配置
  • 计算总名额、已用名额、可用名额
  • 计算使用率百分比
  • 返回统计结果

3. 权限配置

权限标识: jcbt:scholarshipQuota:statistics
权限名称: 奖学金名额统计查看

前端开发

1. 统计卡片组件

文件: web/src/views/jcbt/scholarship/quota/index.vue

新增功能:

  • 统计数据展示卡片(总名额、已用名额、可用名额、使用率)
  • 响应式数据绑定
  • 实时数据更新

2. 统计数据集成

集成点:

  • 页面加载时获取统计数据
  • 批次切换时更新统计数据
  • 名额操作后自动刷新统计数据

更新时机:

  • getList() 方法中同步获取统计数据
  • 新增、修改、删除、调整名额后自动更新
  • 批次切换时重置并重新获取统计数据

3. 错误处理和数据重置

  • 批次未选择时重置统计数据为0
  • API请求失败时重置统计数据
  • 数据验证和容错处理

📊 核心代码片段

后端统计方法

@Override
public Map<String, Object> getStatistics(Long batchId) {
    // 查询指定批次的所有名额配置
    LambdaQueryWrapper<ScholarshipQuota> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(ScholarshipQuota::getBatchId, batchId)
           .eq(ScholarshipQuota::getDeleted, 0);
    
    List<ScholarshipQuota> quotas = this.list(wrapper);
    
    // 计算统计数据
    int totalQuota = quotas.stream().mapToInt(ScholarshipQuota::getTotalQuota).sum();
    int usedQuota = quotas.stream().mapToInt(ScholarshipQuota::getUsedQuota).sum();
    int availableQuota = totalQuota - usedQuota;
    double usageRate = totalQuota > 0 ? (double) usedQuota / totalQuota : 0.0;
    
    // 构建返回结果
    Map<String, Object> result = new HashMap<>();
    result.put("totalQuota", totalQuota);
    result.put("usedQuota", usedQuota);
    result.put("availableQuota", availableQuota);
    result.put("usageRate", usageRate);
    
    return result;
}

前端统计展示

<el-row :gutter="20" class="mb-4">
  <el-col :span="6">
    <el-card class="statistics-card">
      <div class="statistics-content">
        <div class="statistics-number">{{ totalQuota }}</div>
        <div class="statistics-label">总名额</div>
      </div>
    </el-card>
  </el-col>
  <!-- 其他统计卡片... -->
</el-row>

🧪 测试验证

自动化测试脚本

文件: scholarship_quota_statistics_test.py

测试覆盖:

  • 登录认证测试
  • 统计API接口测试
  • 数据准确性验证
  • 多批次统计测试

测试方法:

python scholarship_quota_statistics_test.py

测试结果验证

  • 手动计算与API返回数据对比
  • 多批次数据一致性检查
  • 边界条件测试(无数据批次)

📝 文档更新

API文档更新

文件: docs/开发文档/API/奖学金名额管理API.md

新增内容:

  • 统计API接口文档
  • 请求参数说明
  • 响应数据格式
  • 使用示例

变更记录

文件: docs/变更管理/code-adjust-record-2025-01-07-wuzhen.md

记录内容:

  • 详细的变更说明
  • 技术实现方案
  • 代码片段示例
  • 测试验证结果

⚠️ 注意事项

权限配置要求

  1. 需要在系统菜单管理中添加统计权限
  2. 为相关角色分配统计查看权限
  3. 确保权限标识与代码中一致

性能考虑

  1. 统计查询基于批次过滤,性能良好
  2. 统计数据实时计算,避免缓存一致性问题
  3. 大数据量场景可考虑添加缓存优化

数据一致性

  1. 统计数据基于实时查询保证准确性
  2. 名额操作后立即更新统计显示
  3. 并发操作不会影响统计准确性

🎉 变更效果

  1. 用户体验提升: 管理员可以直观查看名额使用情况
  2. 数据透明化: 实时展示各类统计数据
  3. 操作便捷性: 名额操作后统计数据自动更新
  4. 决策支持: 为名额分配提供数据参考

📋 后续优化建议

  1. 图表展示: 可添加饼状图或柱状图展示统计数据
  2. 历史趋势: 可增加时间维度的统计趋势分析
  3. 导出功能: 可添加统计数据导出Excel功能
  4. 实时推送: 可考虑WebSocket实时推送统计更新

记录时间: 2025-01-07 19:30:00
代码状态: 开发完成,功能验证通过
部署状态: 待部署测试环境