TW

// case · dev

企业 ERP 系统二次开发与性能优化

对存量 ERP 系统做模块扩展与慢查询治理,核心报表加载时间从 18s 降至 2s 以内。

软件开发2026.04.08·5 tech stack

项目背景

客户使用的 ERP 系统已运行五年,业务在增长但架构未变:报表越查越慢,新增模块只能靠堆代码。目标是既解决性能问题,又保持系统稳定运行。

第一步:代码盘点

接手二开项目,先盘点再动手。梳理出:

  • 核心业务链路与调用关系
  • 依赖版本与潜在升级风险
  • 高频慢查询清单及其执行计划
  • 原有代码中的状态耦合点

第二步:慢查询治理

定位到的问题集中在两类:缺少合适索引、以及在循环中查询数据库。

典型问题(报表接口逐条查询明细):

// 改造前:N+1 查询,1000 条订单触发 1001 次数据库访问
for (Order order : orders) {
    List<OrderItem> items = itemMapper.selectByOrderId(order.getId());
    order.setItems(items);
}

改为一次批量查询后在内存分组:

// 改造后:1 + 1 次查询,内存中按订单号分组
List<Long> orderIds = orders.stream().map(Order::getId).toList();
Map<Long, List<OrderItem>> grouped = itemMapper.selectByOrderIds(orderIds)
        .stream()
        .collect(Collectors.groupingBy(OrderItem::getOrderId));

orders.forEach(o -> o.setItems(grouped.getOrDefault(o.getId(), List.of())));

配合索引补充,核心报表从 18 秒降到 2 秒以内。

第三步:模块扩展

新增模块通过新表 + 独立 Service 实现,不改动原有表结构与历史逻辑,降低上线风险。改动范围在交付文档中逐条记录。

交付内容

改造方案文档、变更清单、源码、部署协助与技术支持期。

// contact

有需求?先聊聊你的项目

不管是一次技术支持、一个完整项目,还是想补一段工程能力,都可以先沟通。我们会先了解需求并给出判断,再谈方案与报价。

wechat
Trdfyl
qq
2356245930
探微编程 微信二维码

扫码添加微信