diff --git a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java index d5c80dc..f468fd1 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -114,6 +114,7 @@ public class SignalService { boolean noFidsFound = true; int offset = 0; List batch; + Map phonesByFidToProcessing = new HashMap<>(); do { batch = phoneFidMapService.findFullPhoneFidMap(packageId, offset, batchSize); @@ -129,15 +130,28 @@ public class SignalService { } if (!filteredItems.isEmpty()) { - boolean fidsFound = updateFlags(filteredItems, packageId); - if (noFidsFound) { - noFidsFound = !fidsFound; + Map fidsMapByBatch = phoneService.defineFidByPhone(filteredItems); + if (fidsMapByBatch.size() + phonesByFidToProcessing.size() < batchSize) { + phonesByFidToProcessing.putAll(fidsMapByBatch); + } else { + boolean fidsFound = updateFlags(phonesByFidToProcessing, packageId); + if (noFidsFound) { + noFidsFound = !fidsFound; + } + phonesByFidToProcessing = new HashMap<>(fidsMapByBatch); } } offset += batchSize; } while (!batch.isEmpty()); + if (!phonesByFidToProcessing.isEmpty()) { + boolean fidsFound = updateFlags(phonesByFidToProcessing, packageId); + if (noFidsFound) { + noFidsFound = !fidsFound; + } + } + return new UpdateResult(updated, noFidsFound); } @@ -146,9 +160,8 @@ public class SignalService { * @return fidsFound true - если хотя бы по одному номеру был найден фид, false - в противном случае */ // TODO Добавить отдельный метод. Если не нашелся фид, надо обновить в базе fid = null и флаги = null calculated_at=now() - public boolean updateFlags(List subjects, Integer packageId) { + public boolean updateFlags(Map fidsMap, Integer packageId) { log.info("Start calculating fids and flags for subjects batch. PackageId: {}", packageId); - Map fidsMap = phoneService.defineFidByPhone(subjects); Map flagsDataMap = flagsService.findFlags(fidsMap.keySet().stream().toList()); for (Map.Entry entry : flagsDataMap.entrySet()) { Integer fid = entry.getKey(); @@ -162,7 +175,7 @@ public class SignalService { phoneFidMapMapper.updatePhoneFid(phoneFidMap); } - log.info("Finish calculating fids and flags for subjects. PackageId: {}. Batch size: {}", packageId, subjects.size()); + log.info("Finish calculating fids and flags for subjects. PackageId: {}. Batch size: {}", packageId, fidsMap.size()); return !fidsMap.isEmpty(); }