diff --git a/pom.xml b/pom.xml index ffe23b2..b2eab3b 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ ru.nbch credit-tracker - 1.2 + 1.3 credit_tracker Credit Tracker Application diff --git a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java index f4d3d4a..6ed3264 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -213,7 +213,12 @@ public class SignalFacade { try { signalService.registerSubjects(filePath, packageId); CTUtil.removeFile(filePath); - signalService.updateSubjects(packageId, null); + SignalService.UpdateResult updateResult = signalService.updateSubjects(packageId, null); + if (updateResult.isNoFidsFound()) { + log.info("No fids found for PackageId: {} PackageName: {}. Package status ON_MONITORING. No registration in signal service.", packageId, packageName); + signalService.updatePackageStatus(packageId, Status.ON_MONITORING); + return; + } if (signalRestService.setupMonitoring(packageId, null)) { log.info("Package was successfully registered in signal service. PackageId: {} PackageName: {}", packageId, packageName); signalService.updatePackageStatus(packageId, Status.ON_MONITORING); diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java index cecb516..9320e5e 100644 --- a/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java @@ -17,4 +17,6 @@ public interface PhoneFidMapMapper { void updatePhoneFidMaps(@Param("subjects") List subjects); PhoneFidMap findPhoneFidMapById(@Param("id") Integer packageId); + + boolean hasNonNullFids(@Param("packageId") Integer packageId); } diff --git a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java index b877dbc..225dc35 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java @@ -66,6 +66,10 @@ public class MonitoringService { List packages = signalService.findPackagesOnMonitoring(); for (UserPackage userPackage : packages) { log.info("Processing package {}", userPackage.getPackageName()); + if (!signalService.hasNonNullfids(userPackage.getId())) { + log.info("Package {} has no fids. Package will be skipped.", userPackage.getPackageName()); + continue; + } SgnlOnlineReport onlineReports = signalRestService.getReports(userPackage.getUserId().substring(0, 6) + "_" + userPackage.getPackageName()); if (onlineReports == null) { 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 86ed695..ca23931 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -1,5 +1,7 @@ package ru.nbch.credit_tracker.service; +import lombok.AllArgsConstructor; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import ru.nbch.credit_tracker.builder.PersonFactoryBuilder; @@ -97,8 +99,9 @@ public class SignalService { /** * Обрабатывает все PhoneFidMap по packageId, выгружая их пачками и фильтруя по переданному фильтру */ - public boolean updateSubjects(Integer packageId, Predicate filter) { + public UpdateResult updateSubjects(Integer packageId, Predicate filter) { boolean updated = false; + boolean noFidsFound = true; int offset = 0; List batch; do { @@ -115,25 +118,28 @@ public class SignalService { updated = true; } - updateFlags(filteredItems, packageId); + if (!filteredItems.isEmpty()) { + boolean fidsFound = updateFlags(filteredItems, packageId); + if (noFidsFound) { + noFidsFound = !fidsFound; + } + } offset += batchSize; } while (!batch.isEmpty()); - return updated; + return new UpdateResult(updated, noFidsFound); } /** * Обрабатывает пачку PhoneFidMap: обновляет фиды и флаги просрочек + * @return fidsFound true - если хотя бы по одному номеру был найден фид, false - в противном случае */ - public void updateFlags(List subjects, Integer packageId) { - if (subjects.isEmpty()) { - return; - } + public boolean updateFlags(List subjects, Integer packageId) { log.info("Start calculating fids and flags for subjects batch. PackageId: {}", packageId); Map fidsMap = phoneService.findFidsPhoneData(subjects); LocalDateTime calculatedAt = LocalDateTime.now(); - + boolean fidsFound = fidsMap.values().stream().anyMatch(Objects::nonNull); Map flagsDataMap = flagsService.findFlags(fidsMap.values().stream().filter(Objects::nonNull).toList()); List subjectToUpdate = new ArrayList<>(); @@ -171,6 +177,8 @@ public class SignalService { } log.info("Finish calculating fids and flags for subjects. PackageId: {}. Batch size: {}", packageId, subjects.size()); + + return fidsFound; } public void rejectPackage(MonitoringRequest request) { @@ -299,4 +307,15 @@ public class SignalService { public PhoneFidMap findPhoneFidMapById(Integer id) { return phoneFidMapService.findPhoneFidMapById(id); } + + public boolean hasNonNullfids(Integer packageId) { + return phoneFidMapService.hasNonNullfids(packageId); + } + + @Getter + @AllArgsConstructor + public static class UpdateResult { + private boolean updated; + private boolean noFidsFound; + } } diff --git a/src/main/java/ru/nbch/credit_tracker/service/UpdateProcessingPackagesService.java b/src/main/java/ru/nbch/credit_tracker/service/UpdateProcessingPackagesService.java index a4581c0..f649e18 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/UpdateProcessingPackagesService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/UpdateProcessingPackagesService.java @@ -36,7 +36,12 @@ public class UpdateProcessingPackagesService { private void process(Integer packageId, String packageName) { try { - signalService.updateSubjects(packageId, null); + SignalService.UpdateResult updateResult = signalService.updateSubjects(packageId, null); + if (updateResult.isNoFidsFound()) { + log.info("No fids found for PackageId: {} PackageName: {}. Package status ON_MONITORING. No registration in signal service.", packageId, packageName); + signalService.updatePackageStatus(packageId, Status.ON_MONITORING); + return; + } if (signalRestService.setupMonitoring(packageId, null)) { log.info("Package was successfully registered in signal service. PackageId: {} PackageName: {}", packageId, packageName); signalService.updatePackageStatus(packageId, Status.ON_MONITORING); diff --git a/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java b/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java index d2cd667..b610771 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java @@ -58,8 +58,8 @@ public class UpdatingFlagsService { try { signalService.updatePackageStatus(packageId, Status.PROCESSING); Predicate filter = subject -> subject.getCalculatedAt() != null && hasDaysPassed(subject.getCalculatedAt()); - boolean updated = signalService.updateSubjects(packageId, filter); - if (updated) { + SignalService.UpdateResult updateResult = signalService.updateSubjects(packageId, filter); + if (updateResult.isUpdated()) { if (signalRestService.setupMonitoring(packageId, filter)) { log.info("Flags were updated successfully. PackageId: {} PackageName: {}. Package status changed to ON_MONITORING", packageId, packageName); signalService.updatePackageStatus(packageId, Status.ON_MONITORING); diff --git a/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java b/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java index 3633409..8b6aa8d 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java @@ -31,4 +31,8 @@ public class PhoneFidMapService { public PhoneFidMap findPhoneFidMapById(Integer id) { return mapper.findPhoneFidMapById(id); } + + public boolean hasNonNullfids(Integer packageId) { + return mapper.hasNonNullFids(packageId); + } } diff --git a/src/main/resources/mybatis/mapper/signal/PhoneFidMapMapper.xml b/src/main/resources/mybatis/mapper/signal/PhoneFidMapMapper.xml index 70e075d..9868f9e 100644 --- a/src/main/resources/mybatis/mapper/signal/PhoneFidMapMapper.xml +++ b/src/main/resources/mybatis/mapper/signal/PhoneFidMapMapper.xml @@ -69,5 +69,11 @@ LIMIT 1 + + \ No newline at end of file