diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/domain/model/ErpAdapterTriggerDataset.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/domain/model/ErpAdapterTriggerDataset.java index f2e9c4a4..694dba93 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/domain/model/ErpAdapterTriggerDataset.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/domain/model/ErpAdapterTriggerDataset.java @@ -29,6 +29,7 @@ import java.io.Serializable; import java.util.Date; +import java.util.Objects; @Entity @IdClass(ErpAdapterTriggerDataset.Key.class) @@ -36,7 +37,6 @@ @Setter @AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode public class ErpAdapterTriggerDataset { @Id @@ -67,6 +67,20 @@ public String toString() { '}'; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ErpAdapterTriggerDataset dataset)) return false; + return Objects.equals(partnerBpnl, dataset.partnerBpnl) && Objects.equals(ownMaterialNumber, + dataset.ownMaterialNumber) && assetType == dataset.assetType && + Objects.equals(directionCharacteristic, dataset.directionCharacteristic); + } + + @Override + public int hashCode() { + return Objects.hash(partnerBpnl, ownMaterialNumber, assetType, directionCharacteristic); + } + @Getter @Setter @AllArgsConstructor diff --git a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterTriggerService.java b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterTriggerService.java index a4aa6729..de80eb3b 100644 --- a/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterTriggerService.java +++ b/backend/src/main/java/org/eclipse/tractusx/puris/backend/erpadapter/logic/service/ErpAdapterTriggerService.java @@ -67,9 +67,22 @@ public class ErpAdapterTriggerService { private final Runnable daemon = () -> { log.info("Daemon thread started"); + ArrayList updatedData = new ArrayList<>(); while (true) { lock.lock(); try { + // keep the most recent information in case of conflict + for (ErpAdapterTriggerDataset dataset : datasets) { + for (ErpAdapterTriggerDataset updatedDataset : updatedData) { + if (dataset.equals(updatedDataset)) { + dataset.setLastPartnerRequest( + Math.max(dataset.getLastPartnerRequest(), updatedDataset.getLastPartnerRequest())); + dataset.setNextErpRequestScheduled( + Math.max(dataset.getNextErpRequestScheduled(), updatedDataset.getNextErpRequestScheduled())); + } + } + } + updatedData.clear(); repository.saveAll(datasets); datasets.clear(); } finally { @@ -103,6 +116,7 @@ public class ErpAdapterTriggerService { // schedule next request dataset.setNextErpRequestScheduled(now + erpAdapterConfiguration.getRefreshInterval()); dataset = repository.save(dataset); + updatedData.add(dataset); log.info("Scheduled next erp adapter request: {}", dataset); } }