diff --git a/src/main/java/ru/nbch/credit_tracker/service/task/impl/FidNameEnricher.java b/src/main/java/ru/nbch/credit_tracker/service/task/impl/FidNameEnricher.java index 95db312..799c60e 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/task/impl/FidNameEnricher.java +++ b/src/main/java/ru/nbch/credit_tracker/service/task/impl/FidNameEnricher.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Stream; import lombok.extern.slf4j.Slf4j; @@ -71,34 +72,39 @@ public class FidNameEnricher implements Handler AtomicInteger cacheHits = context.get(PackageVariable.cacheHits); AtomicInteger cacheMisses = context.get(PackageVariable.cacheMisses); - List subjectForSave = subjects.stream().flatMap(subject -> { - Long phone = subject.getPhone(); - if (cachedRecords.containsKey(phone)) { - cacheHits.incrementAndGet(); - fillByCache(subject, cachedRecords.get(phone)); - } else { - cacheMisses.incrementAndGet(); - Name name = nameByPhone.get(CTUtil.normalizePhoneNumber(phone)); - if (name == null) { - if (noFidsData.isEmpty()) { - log.warn("Unexpected scenario...all recs are hit to cache, but nameData was trying to found in indic"); + Set seen = java.util.concurrent.ConcurrentHashMap.newKeySet(); + + List subjectForSave = subjects.stream() + .flatMap(subject -> { + Long phone = subject.getPhone(); + if (cachedRecords.containsKey(phone)) { + cacheHits.incrementAndGet(); + fillByCache(subject, cachedRecords.get(phone)); + } else { + cacheMisses.incrementAndGet(); + Name name = nameByPhone.get(CTUtil.normalizePhoneNumber(phone)); + if (name == null) { + if (noFidsData.isEmpty()) { + log.warn("Unexpected scenario...all recs are hit to cache, but nameData was trying to found in indic"); + } + return Stream.of(PhonesMap.builder() + .phone(phone) + .build()); } + fillByName(subject, name); return Stream.of(PhonesMap.builder() + .fid(subject.getFid()) .phone(phone) + .name1(name.getLast()) + .first(name.getFirst()) + .middle(name.getMiddle()) + .birthDt(name.getBirthDate()) .build()); } - fillByName(subject, name); - return Stream.of(PhonesMap.builder() - .fid(subject.getFid()) - .phone(phone) - .name1(name.getLast()) - .first(name.getFirst()) - .middle(name.getMiddle()) - .birthDt(name.getBirthDate()) - .build()); - } - return Stream.empty(); - }).toList(); + return Stream.empty(); + }) + .filter(phonesMap -> seen.add(phonesMap.getPhone())) + .toList(); packageRecordsService.saveToCache(subjectForSave); } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 3c2d7ee..abb93c6 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -63,7 +63,7 @@ - +