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); } } +