今天的实习内容主要围绕"申报报价"相关功能展开。从上午的批量报价生成规则调整,到下午的列表筛选规则精简,再到导入报价的边界校验补充,整体算是比较完整地经历了一次"需求理解、代码定位、实现改动、接口验证、踩坑复盘"的流程。
一、批量报价生成规则适配
上午刚到工位,组长给我分配了一个禅道任务:修改某个批量报价生成页面的后端逻辑。这个页面主要用于展示和生成不同机组的申报报价数据,其中储能和抽蓄两类机组的处理规则发生了变化。
这次调整主要有两个点:
- 储能机组的充放电分段报价从原来的 10 段调整为 5 段。
- 储能和抽蓄在"充电"方向上的出力区间规则,从原来的 0 到额定容量 改成 -额定容量 到 0。
我先顺着页面请求找到了批量生成分段报价的公共逻辑。原来的实现是比较统一的:按照额定容量和起始出力计算区间差值,再默认切成 10 段。这个逻辑对普通机组没有问题,但对储能和抽蓄这种既存在充电又存在放电方向的设备,就需要根据设备类型和报价方向做特殊处理。
我的处理思路是把原来写死的"10 段"和"起止出力"拆成几个独立判断:
- 根据机组类型决定分段数量,储能使用 5 段,其他类型沿用原规则。
- 根据报价方向决定起止区间,充电方向遇到储能或抽蓄时,起点使用负的额定容量,终点为 0。
- 放电方向仍按常规出力区间处理。
- 对储能这类从 10 段变 5 段的场景,先清理旧的分段报价,再重新生成,避免历史的第 6 到第 10 段残留在数据库里。
这个任务让我意识到,业务规则变化时,不能只盯着"新增逻辑",还要考虑旧数据覆盖、历史数据残留、不同设备类型之间的兼容性。尤其是批量生成类功能,一旦只改生成逻辑但不处理旧数据,很容易出现页面上看起来"多出几段"的问题。
二、对比案例筛选列表规则精简
下午我主动找组长要了新的任务。他让我看一个对比案例筛选列表功能。原来这个列表里有三条对比规则,其中两条已经不再需要,需要去掉。
我看了一下代码,发现这块逻辑之前为了满足旧规则,引入了额外的日期过滤、自动生成场景过滤,以及关联表查询。现在需求变成只保留核心规则:根据当前案例的调度模式,筛选相反模式、计算成功、典型场景一致的候选案例。
因此我做了两类改动:
- 删除不再需要的同日限制和自动场景限制。
- 清理随之失效的 DAO、枚举和流式过滤代码。
这个任务本身不复杂,但我觉得它体现了一个很重要的工程习惯:删代码也要认真判断边界。不是所有需求都意味着"加逻辑",有时候去掉过时规则、降低代码耦合,反而能让系统更稳定、更容易维护。
三、修复分段报价新增失败问题
之后又来了一个新的禅道需求。第一个问题是:某个接口新增机组分段报价时失败,提示"第一段开始出力必须等于最低技术出力"。
我刚开始以为是新增接口的校验逻辑有问题,但顺着请求链路排查后发现,新增接口本身并没有明显问题,真正的问题出在查询接口返回的数据上。
前端在新增分段报价时,会依赖查询接口返回的最低技术出力作为校验基础。但原来的查询结果里没有补齐这个字段,导致前端或后端在后续校验时拿不到正确基准值,从而误判新增数据不合法。
我最终把查询和导出时的默认字段填充逻辑抽取成了一个公共方法,统一补齐机组的启动费用、空载费用、机组类型、最低技术出力等模型侧默认信息。这样既修复了新增失败问题,也减少了查询和导出逻辑里的重复代码。
四、导入基础报价时增加边界校验
第二个需求相对复杂一些:导入基础报价时增加边界校验。
规则大致可以抽象成两类:
- 机组报价导入时,每一段的开始出力和结束出力都必须在"最低技术出力"和"额定容量"之间。
- 外送/联络线类报价导入时,每一段的开始出力和结束出力不能高于额定容量。
这块代码原本已经有分段连续性校验,例如结束出力不能小于开始出力,后一段开始出力必须等于前一段结束出力。但新的需求属于"模型边界校验",需要结合设备模型里的额定容量、最低技术出力一起判断。
我的实现思路是:
- 在 Excel 解析后、数据入库前进行校验,避免脏数据进入数据库。
- 在公共导入流程里统一补充设备 ID、额定容量等基础字段。
- 对机组类数据额外补充机组类型和最低技术出力。
- 把 10 段报价的读取结果封装成统一的分段数据对象,避免校验逻辑和构造入库对象时重复通过反射读取字段。
- 根据不同申报类型选择不同校验策略:机组校验上下界,外送/联络线类只校验上界。
这样做以后,导入流程就变成了比较清晰的几步:读取 Excel、匹配模型数据、补充依赖字段、执行边界校验、构造分段报价、删除旧数据并写入新数据。
五、今天踩的坑:接口找错了
这个需求最后验证时,我还踩了一个比较典型的坑:我找错了接口。
当时接口文档里有两个导入接口长得很像,我一开始调错了接口,结果怎么导入都达不到预期效果。我反复检查代码,觉得逻辑没有问题,但测试结果就是不对。后来请组长帮我一起看,他很快发现我调用的不是这次改动对应的接口。
这个问题挺提醒我的:后端开发不能只看代码,也要确认请求链路本身是对的。尤其是接口相似、模块相近的时候,验证前最好先确认 URL、请求参数、文件模板、业务入口是否完全匹配。否则很容易在错误入口上浪费时间。
六、今日收获
今天的几个任务让我对后端业务开发有了更具体的体感:
- 改规则时,要同时考虑新逻辑、旧数据、覆盖更新和边界情况。
- 公共流程里适合沉淀可复用方法,但不能为了抽象而抽象。
- 查询接口返回字段不完整,也可能间接导致新增、编辑等接口失败。
- 导入类功能一定要把校验前置,尽量在入库前拦截问题数据。
- 测试接口前要确认入口正确,不能只凭接口名字相似就开始调。