From 0a3f2010ec05fd045f955de495dbfea051993517 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Thu, 12 Mar 2026 16:14:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(batchUpdateDmsBaseStationProject):=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BF=9D=E5=85=BB=E9=A1=B9=E7=9B=AE=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=9B=B4=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加空列表检查,避免空指针异常 - 将批量插入改为逐条插入,解决 Oracle 933 错误 - 先清空现有关系再重建,避免历史脏数据残留 - 添加事务注解确保数据一致性 - 优化代码结构,提取单独的逐条插入方法 --- .../DmsBaseStationProjectServiceImpl.java | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/aucma-dms/src/main/java/com/aucma/dms/service/impl/DmsBaseStationProjectServiceImpl.java b/aucma-dms/src/main/java/com/aucma/dms/service/impl/DmsBaseStationProjectServiceImpl.java index 77d2ca2..e5e7f9e 100644 --- a/aucma-dms/src/main/java/com/aucma/dms/service/impl/DmsBaseStationProjectServiceImpl.java +++ b/aucma-dms/src/main/java/com/aucma/dms/service/impl/DmsBaseStationProjectServiceImpl.java @@ -106,11 +106,14 @@ public class DmsBaseStationProjectServiceImpl implements IDmsBaseStationProjectS @Override @Transactional public int batchUpdateDmsBaseStationProject(List dmsBaseStationProjectList){ - //复选框,先根据MaintStationId删除表中数据,再批量添加 - for( DmsBaseStationProject dmsBaseStationProject:dmsBaseStationProjectList){ + if (dmsBaseStationProjectList == null || dmsBaseStationProjectList.isEmpty()) { + return 0; + } + // 这里先清空部位已有关系,再按当前勾选结果重建,避免历史脏数据或重复关系残留。 + for (DmsBaseStationProject dmsBaseStationProject : dmsBaseStationProjectList) { dmsBaseStationProjectMapper.deleteDmsBaseStationProjectByMaintStationId(dmsBaseStationProject.getMaintStationId()); } - return dmsBaseStationProjectMapper.batchInsertDmsBaseStationProject(dmsBaseStationProjectList); + return insertStationProjectsOneByOne(dmsBaseStationProjectList); } /** @@ -120,8 +123,26 @@ public class DmsBaseStationProjectServiceImpl implements IDmsBaseStationProjectS * @return 结果 */ @Override + @Transactional public int batchInsertDmsBaseStationProject(List dmsBaseStationProjectList){ - return dmsBaseStationProjectMapper.batchInsertDmsBaseStationProject(dmsBaseStationProjectList); + return insertStationProjectsOneByOne(dmsBaseStationProjectList); + } + + private int insertStationProjectsOneByOne(List dmsBaseStationProjectList) + { + if (dmsBaseStationProjectList == null || dmsBaseStationProjectList.isEmpty()) { + return 0; + } + int rows = 0; + for (DmsBaseStationProject dmsBaseStationProject : dmsBaseStationProjectList) { + if (dmsBaseStationProject == null || dmsBaseStationProject.getMaintStationId() == null + || dmsBaseStationProject.getMaintProjectId() == null) { + continue; + } + // 这里改成事务内逐条插入,是为了规避 Oracle 11/19 在批量 SQL 解析差异下触发 ORA-00933。 + rows += dmsBaseStationProjectMapper.insertDmsBaseStationProject(dmsBaseStationProject); + } + return rows; } /** @@ -134,3 +155,4 @@ public class DmsBaseStationProjectServiceImpl implements IDmsBaseStationProjectS return dmsBaseStationProjectMapper.selectDmsBaseStationProjectBymaintProjectId(maintProjectId); } } +