Minor fix
This commit is contained in:
parent
bddc5bb1fa
commit
29b017c51c
5 changed files with 16 additions and 66 deletions
|
|
@ -18,7 +18,7 @@ public class MapperTimingAspect {
|
||||||
} finally {
|
} finally {
|
||||||
long tookMs = (System.nanoTime() - start) / 1_000_000;
|
long tookMs = (System.nanoTime() - start) / 1_000_000;
|
||||||
String method = pjp.getSignature().toShortString();
|
String method = pjp.getSignature().toShortString();
|
||||||
if (tookMs > 200) {
|
if (tookMs > 500) {
|
||||||
log.warn("Slow mapper call {} took {} ms", method, tookMs);
|
log.warn("Slow mapper call {} took {} ms", method, tookMs);
|
||||||
} else {
|
} else {
|
||||||
log.debug("Mapper call {} took {} ms", method, tookMs);
|
log.debug("Mapper call {} took {} ms", method, tookMs);
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,7 @@ public class SignalService {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!filteredItems.isEmpty()) {
|
if (!filteredItems.isEmpty()) {
|
||||||
boolean fidsFound = updateFlags2(filteredItems, packageId);
|
boolean fidsFound = updateFlags(filteredItems, packageId);
|
||||||
if (noFidsFound) {
|
if (noFidsFound) {
|
||||||
noFidsFound = !fidsFound;
|
noFidsFound = !fidsFound;
|
||||||
}
|
}
|
||||||
|
|
@ -145,53 +145,8 @@ public class SignalService {
|
||||||
* Обрабатывает пачку PhoneFidMap: обновляет фиды и флаги просрочек
|
* Обрабатывает пачку PhoneFidMap: обновляет фиды и флаги просрочек
|
||||||
* @return fidsFound true - если хотя бы по одному номеру был найден фид, false - в противном случае
|
* @return fidsFound true - если хотя бы по одному номеру был найден фид, false - в противном случае
|
||||||
*/
|
*/
|
||||||
|
// TODO Добавить отдельный метод. Если не нашелся фид, надо обновить в базе fid = null и флаги = null calculated_at=now()
|
||||||
public boolean updateFlags(List<PhoneFidMap> subjects, Integer packageId) {
|
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<>();
|
|
||||||
|
|
||||||
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<PhoneFidMap> subjects, Integer packageId) {
|
|
||||||
log.info("Start calculating fids and flags for subjects batch. PackageId: {}", packageId);
|
log.info("Start calculating fids and flags for subjects batch. PackageId: {}", packageId);
|
||||||
Map<Integer, PhoneFidMap> fidsMap = phoneService.defineFidByPhone(subjects);
|
Map<Integer, PhoneFidMap> fidsMap = phoneService.defineFidByPhone(subjects);
|
||||||
Map<Integer, FlagsService.FlagsData> flagsDataMap = flagsService.findFlags(fidsMap.keySet().stream().toList());
|
Map<Integer, FlagsService.FlagsData> flagsDataMap = flagsService.findFlags(fidsMap.keySet().stream().toList());
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,9 @@ package ru.nbch.credit_tracker.service;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
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.enums.Status;
|
||||||
import ru.nbch.credit_tracker.service.signal.SignalRestService;
|
import ru.nbch.credit_tracker.service.signal.SignalRestService;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Сервис для завершения обработки пакетов находящихся в статусе PROCESSING
|
* Сервис для завершения обработки пакетов находящихся в статусе PROCESSING
|
||||||
* Запускается при старте приложения и отрабатывает 1 раз
|
* Запускается при старте приложения и отрабатывает 1 раз
|
||||||
|
|
@ -29,13 +26,13 @@ public class UpdateProcessingPackagesService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
log.info("Start updating processing packages");
|
// log.info("Start updating processing packages");
|
||||||
List<UserPackage> packages = signalService.findPackagesOnProcessing();
|
// List<UserPackage> packages = signalService.findPackagesOnProcessing();
|
||||||
for (UserPackage userPackage : packages) {
|
// for (UserPackage userPackage : packages) {
|
||||||
log.info("Updating flags for Package {}", userPackage.getPackageName());
|
// log.info("Updating flags for Package {}", userPackage.getPackageName());
|
||||||
process(userPackage.getId(), userPackage.getPackageName());
|
// process(userPackage.getId(), userPackage.getPackageName());
|
||||||
}
|
// }
|
||||||
log.info("Finish updating processing packages");
|
// log.info("Finish updating processing packages");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void process(Integer packageId, String packageName) {
|
private void process(Integer packageId, String packageName) {
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,5 @@
|
||||||
package ru.nbch.credit_tracker.service.indic;
|
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.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
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.entities.dto.PhoneFidMap;
|
||||||
import ru.nbch.credit_tracker.mapper.indic.PhoneMapper;
|
import ru.nbch.credit_tracker.mapper.indic.PhoneMapper;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class PhoneService {
|
public class PhoneService {
|
||||||
|
|
||||||
|
|
@ -52,7 +49,7 @@ public class PhoneService {
|
||||||
for (PhoneFidMap phoneFid : subjects) {
|
for (PhoneFidMap phoneFid : subjects) {
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
FidsData fidsData = iterator.next();
|
FidsData fidsData = iterator.next();
|
||||||
if (fidsData.getPhone().equals(phoneFid.getPhone())) {
|
if (fidsData.getPhone().equals(9 + phoneFid.getPhone())) {
|
||||||
//fixme доступ по ссылке, страшно, придумать что-то еще
|
//fixme доступ по ссылке, страшно, придумать что-то еще
|
||||||
phoneFidMap.put(fidsData.getFid(), phoneFid);
|
phoneFidMap.put(fidsData.getFid(), phoneFid);
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@
|
||||||
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
#{fid}
|
#{fid}
|
||||||
</foreach>
|
</foreach>
|
||||||
|
)
|
||||||
SELECT
|
SELECT
|
||||||
fid,
|
fid,
|
||||||
CASE WHEN SUM(CASE WHEN amt_past_due > 5000 THEN 1 ELSE 0 END) > 0
|
CASE WHEN SUM(CASE WHEN amt_past_due > 5000 THEN 1 ELSE 0 END) > 0
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue