collect fids for procession flag calc

This commit is contained in:
etreschenkov 2025-09-23 14:14:49 +03:00
parent 29b017c51c
commit d136c30739

View file

@ -114,6 +114,7 @@ public class SignalService {
boolean noFidsFound = true;
int offset = 0;
List<PhoneFidMap> batch;
Map<Integer, PhoneFidMap> 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);
Map<Integer, PhoneFidMap> 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<PhoneFidMap> subjects, Integer packageId) {
public boolean updateFlags(Map<Integer, PhoneFidMap> fidsMap, Integer packageId) {
log.info("Start calculating fids and flags for subjects batch. PackageId: {}", packageId);
Map<Integer, PhoneFidMap> fidsMap = phoneService.defineFidByPhone(subjects);
Map<Integer, FlagsService.FlagsData> flagsDataMap = flagsService.findFlags(fidsMap.keySet().stream().toList());
for (Map.Entry<Integer, FlagsService.FlagsData> 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();
}