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