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