http://jira.mfd.msk:8088/browse/BKI-3186 Added changes for empty fids processing in monitoring setup step; Update version to 1.3

This commit is contained in:
Mikhail Trofimov 2025-09-01 12:33:33 +03:00
parent a29fe1e0f8
commit ac82f57e23
9 changed files with 58 additions and 13 deletions

View file

@ -10,7 +10,7 @@
</parent>
<groupId>ru.nbch</groupId>
<artifactId>credit-tracker</artifactId>
<version>1.2</version>
<version>1.3</version>
<name>credit_tracker</name>
<description>Credit Tracker Application</description>

View file

@ -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);

View file

@ -17,4 +17,6 @@ public interface PhoneFidMapMapper {
void updatePhoneFidMaps(@Param("subjects") List<PhoneFidMap> subjects);
PhoneFidMap findPhoneFidMapById(@Param("id") Integer packageId);
boolean hasNonNullFids(@Param("packageId") Integer packageId);
}

View file

@ -66,6 +66,10 @@ public class MonitoringService {
List<UserPackage> 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) {

View file

@ -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<PhoneFidMap> filter) {
public UpdateResult updateSubjects(Integer packageId, Predicate<PhoneFidMap> filter) {
boolean updated = false;
boolean noFidsFound = true;
int offset = 0;
List<PhoneFidMap> 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<PhoneFidMap> subjects, Integer packageId) {
if (subjects.isEmpty()) {
return;
}
public boolean updateFlags(List<PhoneFidMap> subjects, Integer packageId) {
log.info("Start calculating fids and flags for subjects batch. PackageId: {}", packageId);
Map<String, Integer> fidsMap = phoneService.findFidsPhoneData(subjects);
LocalDateTime calculatedAt = LocalDateTime.now();
boolean fidsFound = fidsMap.values().stream().anyMatch(Objects::nonNull);
Map<Integer, FlagsService.FlagsData> flagsDataMap = flagsService.findFlags(fidsMap.values().stream().filter(Objects::nonNull).toList());
List<PhoneFidMap> 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;
}
}

View file

@ -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);

View file

@ -58,8 +58,8 @@ public class UpdatingFlagsService {
try {
signalService.updatePackageStatus(packageId, Status.PROCESSING);
Predicate<PhoneFidMap> 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);

View file

@ -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);
}
}

View file

@ -69,5 +69,11 @@
LIMIT 1
</select>
<select id="hasNonNullFids" resultType="java.lang.Boolean">
select count(*) > 0
from signals_phone_fid_map
where package_id = #{packageId} AND fid is not null
</select>
</mapper>