diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java index e15502b2..28cf855c 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java @@ -298,6 +298,7 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { Long customerId = add.getOneCustomerId(); for (ErpContractMaterial erpContractMaterial : contractMaterialList) { erpContractMaterial.setContractId(add.getContractId()); + erpContractMaterial.setContractMaterialId(null); // 处理关联物料信息 processRelationMaterial(erpContractMaterial, customerId); contractMaterialMapper.insert(erpContractMaterial); @@ -392,25 +393,37 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { MPJLambdaWrapper lqwRecord = JoinWrappers.lambda(ErpContractMaterial.class); lqwRecord.eq(ErpContractMaterial::getContractId, bo.getContractId()); List contractMaterialOldList = contractMaterialMapper.selectList(lqwRecord); + Set oldMaterialIds = contractMaterialOldList.stream() + .map(ErpContractMaterial::getContractMaterialId) + .collect(Collectors.toSet()); if (contractMaterialList != null && !contractMaterialList.isEmpty()) { Long customerId = bo.getOneCustomerId(); + Set newMaterialIds = new HashSet<>(); for (ErpContractMaterial contractMaterial : contractMaterialList) { + contractMaterial.setContractId(bo.getContractId()); processRelationMaterial(contractMaterial, customerId); - contractMaterialMapper.insertOrUpdate(contractMaterial); + Long contractMaterialId = contractMaterial.getContractMaterialId(); + if (contractMaterialId != null && oldMaterialIds.contains(contractMaterialId)) { + contractMaterialMapper.updateById(contractMaterial); + newMaterialIds.add(contractMaterialId); + } else { + contractMaterial.setContractMaterialId(null); + contractMaterialMapper.insert(contractMaterial); + newMaterialIds.add(contractMaterial.getContractMaterialId()); + } } - Set existingContractMaterialIds = contractMaterialList.stream() + List toDelete = contractMaterialOldList.stream() .map(ErpContractMaterial::getContractMaterialId) - .collect(Collectors.toSet()); - List filterContractMaterialIds = contractMaterialOldList.stream() - .filter(material -> !existingContractMaterialIds.contains(material.getContractMaterialId())) + .filter(id -> !newMaterialIds.contains(id)) .toList(); - for (ErpContractMaterial filterContractMaterialId : filterContractMaterialIds) { - contractMaterialMapper.deleteById(filterContractMaterialId.getContractMaterialId()); + if (!toDelete.isEmpty()) { + contractMaterialMapper.deleteByIds(toDelete); } } else if (contractMaterialList != null && !contractMaterialOldList.isEmpty()) { - for (ErpContractMaterial contractMaterial : contractMaterialOldList) { - contractMaterialMapper.deleteById(contractMaterial.getContractMaterialId()); - } + List toDelete = contractMaterialOldList.stream() + .map(ErpContractMaterial::getContractMaterialId) + .toList(); + contractMaterialMapper.deleteByIds(toDelete); } } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractMaterialServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractMaterialServiceImpl.java index 74452560..163ac094 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractMaterialServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractMaterialServiceImpl.java @@ -101,6 +101,7 @@ public class ErpContractMaterialServiceImpl implements IErpContractMaterialServi @Override public Boolean insertByBo(ErpContractMaterialBo bo) { ErpContractMaterial add = MapstructUtils.convert(bo, ErpContractMaterial.class); + add.setContractMaterialId(null); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) {