Java 实习日记:从业务表关系到节点价格分析接口改造

今天主要参与了低碳调度结果分析模块中两个需求的开发:一个是补充平均节点价格的计算逻辑,另一个是调整节点价格分析和节点列表查询相关接口。整体感受是,很多后端需求本身并不难写,真正的难点往往在于理解业务数据从哪里来、表和表之间怎么关联,以及不同指标的计算口径是什么。

一、补充平均节点价格计算逻辑

上午到公司后,我先继续写昨天没有完成的需求:补充平均节点价格的计算逻辑。

一开始卡住的原因不是 Java 语法,也不是 MyBatis-Plus 查询怎么写,而是不清楚这个指标应该依赖哪些数据。比如节点价格来自算法结果,平均价格又不能简单地对所有节点价格取平均,而是需要结合对应设备的负荷权重来计算。

后来组长过来把相关表、字段和整体计算链路给我讲了一遍,我才真正理解这个需求的核心:

平均节点价格不是简单平均,而是按负荷进行加权平均。

抽象后的计算逻辑可以理解为:

平均节点价格 = Σ(节点价格 × 修正后负荷) / Σ(修正后负荷)

实现时我主要做了几件事:

  1. 查询指定方案、日期范围下的设备节点价格数据;
  2. 按日期对价格曲线进行分组,方便后续逐日逐点计算;
  3. 查询负荷预测数据,作为加权平均的权重;
  4. 根据设备是否为固定负荷,决定是否应用负荷修正系数;
  5. 对缺失数据、空曲线、除数为 0 等情况做兜底处理;
  6. 最终返回平均节点价格、最高节点价格、最低节点价格,并保证图表数据和顶部指标卡口径一致。

这个需求让我比较有收获的一点是:后端计算类接口不能只关注"查出来再返回",还要非常关注指标口径。尤其是涉及电价、负荷、曲线、时间点这类数据时,一个字段理解错,最后结果就会整体偏掉。

二、调整节点价格分析接口

下午组长又让我改一个节点价格分析接口。

原来的接口会先根据前端传入的设备 ID,再去关联拓扑映射关系,查询出对应的节点 ID 列表。现在前端传参已经调整,参数里直接传的就是节点 ID 列表,所以后端不再需要走原来的映射逻辑。

这个改动相对比较清晰,我主要做的是:

  • 删除原来不再需要的拓扑映射查询;
  • 直接使用请求参数中的节点 ID 列表;
  • 保留原来的节点价格、阻塞价格、能量价格曲线计算逻辑;
  • 对节点列表为空的情况返回固定长度的空曲线,避免前端展示异常。

这个需求提醒我,接口逻辑不是越复杂越好。当上下游约定变化后,后端要及时收敛不必要的查询链路,让接口更直接、更稳定。

三、重写节点列表查询接口

另一个接口是节点列表查询接口。这个接口的需求看起来很简单:返回设备类型为指定类型的节点 ID 和节点名称,并且支持前端传入名称进行模糊搜索。

但我一开始还是不知道怎么下手,因为我不确定节点 ID 和节点名称分别在哪些数据里,以及设备和拓扑节点之间的关系应该怎么走。后来又让组长帮我梳理了一遍,明确数据来源之后,我就把接口重新实现了一版。

整体思路是:

  1. 先根据设备类型查询设备与拓扑节点的映射关系;
  2. 提取有效的节点 ID,并做去重;
  3. 再根据节点 ID 去查询节点基础信息;
  4. 如果前端传了名称关键字,则增加模糊查询条件;
  5. 最后封装成只包含节点 ID 和节点名称的 DTO 返回给前端。

这里我也做了一点细节处理,比如节点 ID 去重、空数据直接返回空集合、接口返回对象只暴露前端真正需要的字段。这样既减少了无用数据传输,也降低了接口暴露内部数据结构的风险。

四、今天的技术收获

今天最大的收获不是某一个 API 的用法,而是对后端业务开发流程有了更清晰的认识。

以前我会觉得"需求不会写"就是代码能力不够,但今天发现,很多时候是业务上下文没有打通。只要明确了数据来源、关联关系和计算规则,代码实现反而是比较自然的事情。

这次开发中我主要练习到了:

  • 使用 MyBatis-Plus 构造条件查询;
  • 使用 Stream 对数据进行分组、去重和 DTO 转换;
  • 处理多日期、多时间点的曲线类数据;
  • 使用 BigDecimal 做金额/价格类计算;
  • 对空集合、空曲线、缺失数据进行防御式处理;
  • 根据前后端参数变化,简化接口实现;
  • 将业务计算逻辑拆成多个 helper 方法,提高可读性。

五、AI 工作流分享会

下午还参加了一个 AI 工作流技巧分享会。一个前端同事分享了如何通过公司内部 MCP,把 Codex 和项目管理平台连接起来,用来辅助生成需求分析文档,也介绍了一些 Claude Code 和 Codex 的使用方式。

这部分内容和我今天手上的后端需求关联不算特别强,但也让我意识到,AI 工具不只是写代码,也可以参与需求理解、文档整理和任务拆解。对实习生来说,如果能把 AI 用在"辅助理解业务"和"提高开发效率"上,应该会比单纯让它生成代码更有价值。

六、总结

今天这两个提交分别对应了平均节点价格计算逻辑的补充,以及节点列表、节点价格相关接口的调整。对我来说,这是一次比较典型的后端业务开发经历:先理解业务口径,再定位数据来源,最后用代码把计算和接口串起来。

也更加意识到,Java 后端开发不只是写 Controller、Service、DAO,更重要的是能把业务规则翻译成稳定、清晰、可维护的代码。尤其是在实习阶段,遇到不懂的表关系和字段含义时,及时向组长确认,比自己盲猜更重要。业务理解到位之后,代码才有方向。

相关推荐
qq_452396231 小时前
第十四篇:《JMeter插件扩展:自定义函数与第三方插件》
开发语言·python·jmeter
敲代码的嘎仔1 小时前
力扣高频SQL基础50题详解
开发语言·数据库·笔记·sql·算法·leetcode·后端开发
码农-阿杰1 小时前
Java 线程等待唤醒机制深度解析:synchronized、ReentrantLock、LockSupport 底层实现对比
java·开发语言·c++
赤水无泪1 小时前
Qt 全模块汇总列表
开发语言·qt
yong99901 小时前
MATLAB仿真计算电磁波回波信号的技术路径与实现指南
开发语言·matlab
数字化顾问1 小时前
(122页PPT)企业数字化IT架构蓝图规划设计方案(附下载方式)
java·运维·架构
不是光头 强1 小时前
Spring Boot 多线程场景下 i18n 国际化失效问题排查与解决
java·开发语言·springboot
jieyucx1 小时前
Go 语言核心关键字:defer 深度解析与实战避坑
开发语言·后端·golang·defer
星恒随风1 小时前
四天学完前端基础三件套(JavaScript篇)
开发语言·前端·javascript·笔记