# Bug修复:前端量级显示依赖双业务数据 ## 问题描述 在使用【网易大神实时审核数据监控系统】时发现一个 Bug:当前系统要求必须同时输入清风审核和大神 CMS 的 Cookie 才能登录。然而,当用户实际只负责其中一项业务(例如,只做清风审核,不做大神 CMS 的内容处理),并且在统计周期内(如当前小时)只有该项业务产生数据量时,系统前端的【当前小时量级】和【全天量级】等指标会一直显示"加载中",无法正常展示数据。 ## 问题原因 通过代码分析,我们发现以下几个关键问题: 1. **前端数据处理逻辑中的强依赖**: - 在`updateDashboard`和`updateStats`函数中,使用了类似`if (data.breeze && data.breeze.hourly)`和`if (data.cms && data.cms.hourly)`的条件判断 - 这导致当某个业务系统无数据时,整个数据更新逻辑会跳过,而不是用默认值(如0)处理 - 结果是只要有一个业务系统无数据,前端就无法正确显示总量级 2. **后端总量级计算逻辑中的安全性不足**: - 后端在计算总量级时没有充分处理数据为空或格式不一致的情况 - 没有使用`try-except`捕获可能的异常,如类型转换错误 - 没有考虑所有可能的数据结构情况,如某个数据源完全缺失 ## 解决方案 我们进行了以下修改来解决这些问题: 1. **优化前端数据处理逻辑**: - 修改`updateDashboard`和`updateStats`函数,使用默认值处理潜在的空数据 - 使用析构与默认值模式:`const breezeHourly = data.breeze && data.breeze.hourly ? data.breeze.hourly : { total: 0, weighted_total: 0, categories: {} };` - 确保即使某个业务数据不存在,也会使用默认值(0)而不是跳过显示 2. **增强后端总量级计算的健壮性**: - 添加类型检查:`isinstance(breeze_hourly['stats'], dict)`确保数据为正确类型 - 添加空值处理:`float(breeze_hourly['stats']['weighted_total'] or 0)`确保数值可以转换 - 添加异常处理:用`try-except`包裹整个计算逻辑,确保即使计算出错也不会中断API响应 ## 测试方法 修复后,以下场景均应正常工作: 1. 用户同时使用清风审核和大神CMS(原先也正常) 2. 用户只使用清风审核,大神CMS无数据(修复后可正常显示) 3. 用户只使用大神CMS,清风审核无数据(修复后可正常显示) 4. 某业务暂无量级,另一业务有量级(修复后可正常显示) ## 改进总结 这些更改大大提高了系统的健壮性和用户体验,特别是对于那些只负责单一业务线的审核人员。系统现在可以在各种数据场景下正确显示量级信息,无论数据源是否完整。