diff --git a/pom.xml b/pom.xml index 90a0117..69e98a9 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ ru.nbch credit-tracker - 2.1 + 2.2 credit_tracker Credit Tracker Application diff --git a/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/MonitoringService.java b/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/MonitoringService.java index d55b028..a32edc2 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/MonitoringService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/MonitoringService.java @@ -7,7 +7,9 @@ import java.nio.file.Path; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -227,6 +229,7 @@ public class MonitoringService { private List processPersons(List persons, UserPackage userPackage) { List subjects = new ArrayList<>(); + Map subjectRepInfoMap = new HashMap<>(); for (Person person : persons) { Signals signals = new Signals(); for (Inquiry inquiry : person.getInquiries()) { @@ -245,8 +248,17 @@ public class MonitoringService { // Если есть хотя бы один заполненный сигнал, значит заполняем остальные данные if (!signals.getSignals().isEmpty()) { - PackagesRecordsMap packagesRecord = packageRecordsService.findPackageRecordsById(person.getUid()); - PhonesMap cacheByPhone = packageRecordsService.findCachedByPhone(Long.valueOf(packagesRecord.getPhone())); + PackagesRecordsMap packagesRecord; + PhonesMap cacheByPhone; + if (subjectRepInfoMap.containsKey(person.getUid())) { + SubjectRepInfo subjectRepInfo = subjectRepInfoMap.get(person.getUid()); + packagesRecord = subjectRepInfo.packagesRecord; + cacheByPhone = subjectRepInfo.cacheByPhone; + } else { + packagesRecord = packageRecordsService.findPackageRecordsById(person.getUid()); + cacheByPhone = packageRecordsService.findCachedByPhone(Long.valueOf(packagesRecord.getPhone())); + subjectRepInfoMap.put(person.getUid(), new SubjectRepInfo(packagesRecord, cacheByPhone)); + } if (cacheByPhone != null) { Subject subject = new Subject(); subject.setId(packagesRecord.getSubjectId()); // Уникальный идентификатор субъекта (равен Id из XML-пакета при установке мониторинга) @@ -299,4 +311,13 @@ public class MonitoringService { log.info("Signal hits updated for package {}", userPackage.getPackageName()); } + private class SubjectRepInfo { + private final PackagesRecordsMap packagesRecord; + private final PhonesMap cacheByPhone; + + private SubjectRepInfo(PackagesRecordsMap packagesRecord, PhonesMap cacheByPhone) { + this.packagesRecord = packagesRecord; + this.cacheByPhone = cacheByPhone; + } + } }