diff --git a/src/main/java/ru/nbch/credit_tracker/component/MapperTimingAspect.java b/src/main/java/ru/nbch/credit_tracker/component/MapperTimingAspect.java index 7802484..e0f818a 100644 --- a/src/main/java/ru/nbch/credit_tracker/component/MapperTimingAspect.java +++ b/src/main/java/ru/nbch/credit_tracker/component/MapperTimingAspect.java @@ -18,7 +18,7 @@ public class MapperTimingAspect { } finally { long tookMs = (System.nanoTime() - start) / 1_000_000; String method = pjp.getSignature().toShortString(); - if (tookMs > 200) { + if (tookMs > 500) { log.warn("Slow mapper call {} took {} ms", method, tookMs); } else { log.debug("Mapper call {} took {} ms", method, tookMs); 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 eb7db82..d5c80dc 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -129,7 +129,7 @@ public class SignalService { } if (!filteredItems.isEmpty()) { - boolean fidsFound = updateFlags2(filteredItems, packageId); + boolean fidsFound = updateFlags(filteredItems, packageId); if (noFidsFound) { noFidsFound = !fidsFound; } @@ -145,53 +145,8 @@ public class SignalService { * Обрабатывает пачку PhoneFidMap: обновляет фиды и флаги просрочек * @return fidsFound true - если хотя бы по одному номеру был найден фид, false - в противном случае */ + // TODO Добавить отдельный метод. Если не нашелся фид, надо обновить в базе fid = null и флаги = null calculated_at=now() 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<>(); - - subjects.forEach(subject -> { - Integer fid = fidsMap.get("9" + subject.getPhone()); - if (fid != null) { - FlagsService.FlagsData flagsData = flagsDataMap.get(fid); - subject = PhoneFidMap.builder() - .id(subject.getId()) - .packageId(packageId) - .subjectId(subject.getSubjectId()) - .phone(subject.getPhone()) - .fid(fid) - .flagDebt5000(flagsData.getFlagDebt5000()) - .flag90days(flagsData.getFlag90days()) - .calculatedAt(calculatedAt) - .build(); - } else { - subject = PhoneFidMap.builder() - .id(subject.getId()) - .packageId(packageId) - .subjectId(subject.getSubjectId()) - .phone(subject.getPhone()) - .calculatedAt(calculatedAt) - .build(); - } - subjectToUpdate.add(subject); - }); - - int updateBatchSize = batchSize / 9; // 9 параметров на одну запись для обновления. Максимальное количество параметров ~65000 - for (int j = 0; j < subjectToUpdate.size(); j += updateBatchSize) { - int endIndex = Math.min(j + updateBatchSize, subjectToUpdate.size()); - phoneFidMapService.updatePhoneFidMaps(subjectToUpdate.subList(j, endIndex)); - log.trace("Updated fids and flags for subject's batch from: {} to: {}. Total count: {}. PackageId: {}", j, endIndex, subjectToUpdate.size(), packageId); - } - - log.info("Finish calculating fids and flags for subjects. PackageId: {}. Batch size: {}", packageId, subjects.size()); - - return fidsFound; - } - - public boolean updateFlags2(List subjects, 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()); 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 2888c82..5630238 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/UpdateProcessingPackagesService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/UpdateProcessingPackagesService.java @@ -2,12 +2,9 @@ package ru.nbch.credit_tracker.service; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import ru.nbch.credit_tracker.entities.dto.UserPackage; import ru.nbch.credit_tracker.enums.Status; import ru.nbch.credit_tracker.service.signal.SignalRestService; -import java.util.List; - /** * Сервис для завершения обработки пакетов находящихся в статусе PROCESSING * Запускается при старте приложения и отрабатывает 1 раз @@ -29,13 +26,13 @@ public class UpdateProcessingPackagesService { } public void run() { - log.info("Start updating processing packages"); - List packages = signalService.findPackagesOnProcessing(); - for (UserPackage userPackage : packages) { - log.info("Updating flags for Package {}", userPackage.getPackageName()); - process(userPackage.getId(), userPackage.getPackageName()); - } - log.info("Finish updating processing packages"); +// log.info("Start updating processing packages"); +// List packages = signalService.findPackagesOnProcessing(); +// for (UserPackage userPackage : packages) { +// log.info("Updating flags for Package {}", userPackage.getPackageName()); +// process(userPackage.getId(), userPackage.getPackageName()); +// } +// log.info("Finish updating processing packages"); } private void process(Integer packageId, String packageName) { diff --git a/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService.java b/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService.java index 5b8e1a6..829c480 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService.java @@ -1,12 +1,5 @@ package ru.nbch.credit_tracker.service.indic; -import java.time.LocalDate; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -15,6 +8,10 @@ import org.springframework.stereotype.Service; import ru.nbch.credit_tracker.entities.dto.PhoneFidMap; import ru.nbch.credit_tracker.mapper.indic.PhoneMapper; +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; + @Service public class PhoneService { @@ -52,7 +49,7 @@ public class PhoneService { for (PhoneFidMap phoneFid : subjects) { while (iterator.hasNext()) { FidsData fidsData = iterator.next(); - if (fidsData.getPhone().equals(phoneFid.getPhone())) { + if (fidsData.getPhone().equals(9 + phoneFid.getPhone())) { //fixme доступ по ссылке, страшно, придумать что-то еще phoneFidMap.put(fidsData.getFid(), phoneFid); iterator.remove(); diff --git a/src/main/resources/mybatis/mapper/indic/FlagsMapper.xml b/src/main/resources/mybatis/mapper/indic/FlagsMapper.xml index ccdde14..751fc7c 100644 --- a/src/main/resources/mybatis/mapper/indic/FlagsMapper.xml +++ b/src/main/resources/mybatis/mapper/indic/FlagsMapper.xml @@ -22,6 +22,7 @@ #{fid} + ) SELECT fid, CASE WHEN SUM(CASE WHEN amt_past_due > 5000 THEN 1 ELSE 0 END) > 0