delete deprecated classes

This commit is contained in:
etreschenkov 2025-12-02 19:08:42 +03:00
parent f88af385c3
commit e331ff403f
12 changed files with 135 additions and 828 deletions

View file

@ -142,11 +142,11 @@ public class SignalFacadeV3 {
throw clientExcp(authResult.getError(), XmlErrorFormat.MonitoringError); throw clientExcp(authResult.getError(), XmlErrorFormat.MonitoringError);
} }
// // проверка на уникальность пакета // проверка на уникальность пакета
// if (userPackageService.isPackageNotUnique(userId, packageName)) { if (userPackageService.isPackageNotUnique(userId, packageName)) {
// userPackageService.rejectPackage(userId, packageName); userPackageService.rejectPackage(userId, packageName);
// throw clientExcp(SignalError.ERROR_007, XmlErrorFormat.MonitoringError); throw clientExcp(SignalError.ERROR_007, XmlErrorFormat.MonitoringError);
// } }
Long packageId = userPackageService.registerPackage(userId, packageName); Long packageId = userPackageService.registerPackage(userId, packageName);
LogUtil.addMdcLogKey("%s %d".formatted(packageName, packageId)); LogUtil.addMdcLogKey("%s %d".formatted(packageName, packageId));

View file

@ -77,24 +77,6 @@ public class PhoneRepository {
); );
} }
@Deprecated
public List<FidsDataWithName> findFidsWithName(List<String> phones) {
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("phones", phones);
return jdbcTemplate.query(SELECT_FIDS_WITH_NAME, params, (rs, rowNum) ->
new PhoneRepository.FidsDataWithName(
rs.getInt("FID"),
rs.getString("NUMBER"),
getLocalDate(rs, "FILE_SINCE_DT"),
rs.getString("FIRST"),
rs.getString("NAME_1"),
rs.getString("MIDDLE"),
getLocalDate(rs, "BIRTH_DT"),
getLocalDate(rs, "FILE_SINCE_DT_NAME")
));
}
public List<Name> findNameByPhones(List<String> phones) { public List<Name> findNameByPhones(List<String> phones) {
MapSqlParameterSource params = new MapSqlParameterSource(); MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("phones", phones); params.addValue("phones", phones);

View file

@ -1,16 +1,25 @@
package ru.nbch.credit_tracker.service; package ru.nbch.credit_tracker.service;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.aop.framework.AopContext; import org.springframework.aop.framework.AopContext;
import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.entities.app.PhoneFidMap;
import ru.nbch.credit_tracker.entities.app.UserPackage; import ru.nbch.credit_tracker.entities.app.UserPackage;
import ru.nbch.credit_tracker.entities.external_response.monitoring_report_error.MonitoringReportErrors;
import ru.nbch.credit_tracker.enums.RejectedStatus; import ru.nbch.credit_tracker.enums.RejectedStatus;
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper; import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
import ru.nbch.credit_tracker.service.indic.PhoneService2;
import ru.nbch.credit_tracker.service.signal.SignalRestService; import ru.nbch.credit_tracker.service.signal.SignalRestService;
import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
import ru.nbch.credit_tracker.utils.CtFileUtils; import ru.nbch.credit_tracker.utils.CtFileUtils;
@Slf4j @Slf4j
@ -19,21 +28,26 @@ import ru.nbch.credit_tracker.utils.CtFileUtils;
public class MonitoringErrorProcesingService { public class MonitoringErrorProcesingService {
private MonitoringErrorProcesingService self; private MonitoringErrorProcesingService self;
private final SignalService signalService;
private final UserPackageMapper userPackageMapper; private final UserPackageMapper userPackageMapper;
private final SignalRestService signalRestService; private final SignalRestService signalRestService;
private final StaxXmlProcessor staxXmlProcessor;
private final PhoneService2 phoneService2;
private final Integer batchSize;
public MonitoringErrorProcesingService(SignalService signalService, public MonitoringErrorProcesingService(UserPackageMapper userPackageMapper,
UserPackageMapper userPackageMapper, SignalRestService signalRestService,
SignalRestService signalRestService) { StaxXmlProcessor staxXmlProcessor,
this.signalService = signalService; PhoneService2 phoneService2,
CreditTrackerSettings config) {
this.userPackageMapper = userPackageMapper; this.userPackageMapper = userPackageMapper;
this.signalRestService = signalRestService; this.signalRestService = signalRestService;
this.staxXmlProcessor = staxXmlProcessor;
this.phoneService2 = phoneService2;
this.batchSize = config.getPipeline().subjectBatchSize();
} }
public void findErrors(Long packageId) { public void findErrors(Long packageId) {
UserPackage userPackage = signalService.findPackage(packageId); UserPackage userPackage = userPackageMapper.findPackage(packageId);
String packCode = userPackage.getUserId().substring(0, 6) + "_" + userPackage.getPackageName(); String packCode = userPackage.getUserId().substring(0, 6) + "_" + userPackage.getPackageName();
log.info("Проверка на ошибки при постановке на мониторинг. packCode={}, packageId={}", packCode, packageId); log.info("Проверка на ошибки при постановке на мониторинг. packCode={}, packageId={}", packCode, packageId);
String fileName = signalRestService.getErrorFileName(packageId, packCode); String fileName = signalRestService.getErrorFileName(packageId, packCode);
@ -45,7 +59,7 @@ public class MonitoringErrorProcesingService {
Optional<Path> filePath = signalRestService.loadErrorFile(fileName, userPackage); Optional<Path> filePath = signalRestService.loadErrorFile(fileName, userPackage);
if (filePath.isPresent()) { if (filePath.isPresent()) {
try { try {
signalService.updateSubjectsErrors(filePath.get(), packageId); updateSubjectsErrors(filePath.get(), packageId);
} catch (Exception e) { } catch (Exception e) {
log.error("Ошибка при записи сообщений об ошибках в сформированных субъектах для мониторинга. Package_id = {}", packageId, e); log.error("Ошибка при записи сообщений об ошибках в сформированных субъектах для мониторинга. Package_id = {}", packageId, e);
} }
@ -55,6 +69,32 @@ public class MonitoringErrorProcesingService {
} }
private void updateSubjectsErrors(Path filePath, Long packageId) {
log.info("Start updating subjects errors. PackageId: {}", packageId);
try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(filePath), 8 * 1024 * 1024)) {
staxXmlProcessor.read(in, MonitoringReportErrors.class,
request -> {
if (!request.getPersons().isEmpty()) {
List<PhoneFidMap> subjects = request.getPersons().stream().map(p -> {
log.warn("Ошибка при формировании субъекта. package_id = {}, id = {}. Описание: {}", packageId, p.getUid(), p.getValue());
return PhoneFidMap.builder()
.id(p.getUid())
.errorText(p.getValue())
.build();
}).toList();
phoneService2.updateOnError(subjects);
log.trace("Updated subject's batch. Total count: {}. PackageId: {}", request.getPersons().size(), packageId);
request.getPersons().clear();
}
},
request -> request.getPersons().isEmpty(),
batchSize, "/Errors/p");
} catch (IOException e) {
throw new RuntimeException("Error while parsing MonitoringReportErrors", e);
}
log.info("Subject's errors were updated. PackageId: {}", packageId);
}
private MonitoringErrorProcesingService getCurrentProxy() { private MonitoringErrorProcesingService getCurrentProxy() {
if (self == null) { if (self == null) {
self = (MonitoringErrorProcesingService) AopContext.currentProxy(); self = (MonitoringErrorProcesingService) AopContext.currentProxy();

View file

@ -34,7 +34,9 @@ import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.
import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.Subject; import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.Subject;
import ru.nbch.credit_tracker.enums.Status; import ru.nbch.credit_tracker.enums.Status;
import ru.nbch.credit_tracker.mapper.signal.FlagDetailMapper; import ru.nbch.credit_tracker.mapper.signal.FlagDetailMapper;
import ru.nbch.credit_tracker.mapper.signal.PhoneFidMapMapper;
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper; import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
import ru.nbch.credit_tracker.service.signal.HitsService;
import ru.nbch.credit_tracker.service.signal.SignalRestService; import ru.nbch.credit_tracker.service.signal.SignalRestService;
import ru.nbch.credit_tracker.service.xml.stax.MonitoringSignalResponseStaxXmlWriter; import ru.nbch.credit_tracker.service.xml.stax.MonitoringSignalResponseStaxXmlWriter;
import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor; import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
@ -51,23 +53,26 @@ import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
public class MonitoringService { public class MonitoringService {
private final SignalRestService signalRestService; private final SignalRestService signalRestService;
private final SignalService signalService;
private final FlagDetailMapper flagDetailMapper; private final FlagDetailMapper flagDetailMapper;
private final UserPackageMapper userPackageMapper; private final UserPackageMapper userPackageMapper;
private final StaxXmlProcessor staxXmlProcessor; private final StaxXmlProcessor staxXmlProcessor;
private final HitsService hitsService;
private final PhoneFidMapMapper phoneFidMapMapper;
private final CreditTrackerSettings config; private final CreditTrackerSettings config;
public MonitoringService(SignalRestService signalRestService, public MonitoringService(SignalRestService signalRestService,
SignalService signalService,
FlagDetailMapper flagDetailMapper, FlagDetailMapper flagDetailMapper,
UserPackageMapper userPackageMapper, UserPackageMapper userPackageMapper,
StaxXmlProcessor staxXmlProcessor, StaxXmlProcessor staxXmlProcessor,
HitsService hitsService,
PhoneFidMapMapper phoneFidMapMapper,
CreditTrackerSettings config) { CreditTrackerSettings config) {
this.signalRestService = signalRestService; this.signalRestService = signalRestService;
this.signalService = signalService;
this.flagDetailMapper = flagDetailMapper; this.flagDetailMapper = flagDetailMapper;
this.userPackageMapper = userPackageMapper; this.userPackageMapper = userPackageMapper;
this.staxXmlProcessor = staxXmlProcessor; this.staxXmlProcessor = staxXmlProcessor;
this.hitsService = hitsService;
this.phoneFidMapMapper = phoneFidMapMapper;
this.config = config; this.config = config;
} }
@ -94,7 +99,7 @@ public class MonitoringService {
private void processPackage(UserPackage userPackage) { private void processPackage(UserPackage userPackage) {
log.info("Processing package"); log.info("Processing package");
if (!signalService.hasNonNullfids(userPackage.getId())) { if (!phoneFidMapMapper.hasNonNullFids(userPackage.getId())) {
log.info("Package has no fids. Package will be skipped."); log.info("Package has no fids. Package will be skipped.");
return; return;
} }
@ -266,7 +271,7 @@ public class MonitoringService {
hits.add(hit); hits.add(hit);
}); });
if (!hits.isEmpty()) { if (!hits.isEmpty()) {
signalService.insertHits(hits); hitsService.insertHits(hits);
} }
}); });
response.getSubjects().getSubjects().clear(); // чистим список для экономии памяти response.getSubjects().getSubjects().clear(); // чистим список для экономии памяти

View file

@ -1,101 +0,0 @@
package ru.nbch.credit_tracker.service;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.entities.app.Hit;
import ru.nbch.credit_tracker.entities.app.PhoneFidMap;
import ru.nbch.credit_tracker.entities.app.UserPackage;
import ru.nbch.credit_tracker.entities.external_response.monitoring_report_error.MonitoringReportErrors;
import ru.nbch.credit_tracker.enums.Status;
import ru.nbch.credit_tracker.service.indic.PhoneService2;
import ru.nbch.credit_tracker.service.signal.HitsService;
import ru.nbch.credit_tracker.service.signal.PhoneFidMapService;
import ru.nbch.credit_tracker.service.signal.UserPackageDao;
import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
@Slf4j
@Service
@Deprecated
//todo оставил для временного подсмотреть на старую логику
public class SignalService {
private final CreditTrackerSettings config;
private final HitsService hitsService;
private final UserPackageDao userPackageService;
private final PhoneFidMapService phoneFidMapService;
private final PhoneService2 phoneService2;
private final StaxXmlProcessor staxXmlProcessor;
private final int batchSize;
public SignalService(CreditTrackerSettings config,
HitsService hitsService,
UserPackageDao userPackageService,
PhoneFidMapService phoneFidMapService,
PhoneService2 phoneService2,
StaxXmlProcessor staxXmlProcessor) {
this.config = config;
this.hitsService = hitsService;
this.userPackageService = userPackageService;
this.phoneFidMapService = phoneFidMapService;
this.phoneService2 = phoneService2;
this.staxXmlProcessor = staxXmlProcessor;
this.batchSize = config.getPipeline().subjectBatchSize();
}
public void updatePackageStatus(Long packageId, Status status) {
userPackageService.updatePackageStatus(packageId, status);
}
public void updateSubjectsErrors(Path filePath, Long packageId) {
log.info("Start updating subjects errors. PackageId: {}", packageId);
try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(filePath), 8 * 1024 * 1024)) {
staxXmlProcessor.read(in, MonitoringReportErrors.class,
request -> {
if (!request.getPersons().isEmpty()) {
List<PhoneFidMap> subjects = request.getPersons().stream().map(p -> {
log.warn("Ошибка при формировании субъекта. package_id = {}, id = {}. Описание: {}", packageId, p.getUid(), p.getValue());
return PhoneFidMap.builder()
.id(p.getUid())
.errorText(p.getValue())
.build();
}).toList();
phoneService2.updateOnError(subjects);
log.trace("Updated subject's batch. Total count: {}. PackageId: {}", request.getPersons().size(), packageId);
request.getPersons().clear();
}
},
request -> request.getPersons().isEmpty(),
batchSize, "/Errors/p");
} catch (IOException e) {
throw new RuntimeException("Error while parsing MonitoringReportErrors", e);
}
log.info("Subject's errors were updated. PackageId: {}", packageId);
}
public void insertHits(List<Hit> hits) {
hitsService.insertHits(hits);
}
public boolean hasNonNullfids(Long packageId) {
return phoneFidMapService.hasNonNullfids(packageId);
}
public UserPackage findPackage(Long packageId) {
return userPackageService.findPackage(packageId);
}
@Getter
@AllArgsConstructor
public static class UpdateResult {
private boolean updated;
private boolean noFidsFound;
}
}

View file

@ -1,7 +1,6 @@
package ru.nbch.credit_tracker.service; package ru.nbch.credit_tracker.service;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutorService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC; import org.slf4j.MDC;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
@ -10,9 +9,7 @@ import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.entities.app.UserPackage; import ru.nbch.credit_tracker.entities.app.UserPackage;
import ru.nbch.credit_tracker.enums.Status; import ru.nbch.credit_tracker.enums.Status;
import ru.nbch.credit_tracker.mapper.signal.PhoneFidMapMapper;
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper; import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
import ru.nbch.credit_tracker.service.signal.SignalRestService;
import ru.nbch.credit_tracker.service.task.Pipeline; import ru.nbch.credit_tracker.service.task.Pipeline;
import ru.nbch.credit_tracker.service.task.PipelinePackageFabric; import ru.nbch.credit_tracker.service.task.PipelinePackageFabric;
import ru.nbch.credit_tracker.service.task.PipelinePackageOrchestrator; import ru.nbch.credit_tracker.service.task.PipelinePackageOrchestrator;
@ -27,33 +24,17 @@ import ru.nbch.credit_tracker.service.task.impl.PipelineMode;
@Service @Service
@EnableScheduling @EnableScheduling
public class UpdatingFlagsService { public class UpdatingFlagsService {
private final SignalService signalService;
private final SignalRestService signalRestService;
private final MonitoringErrorProcesingService monitoringErrorProcesingService;
private final Long daysToUpdateFlags; private final Long daysToUpdateFlags;
private final PhoneFidMapMapper phoneFidMapMapper;
private final UserPackageMapper userPackageMapper; private final UserPackageMapper userPackageMapper;
private final PipelinePackageFabric pipelinePackageManager; private final PipelinePackageFabric pipelinePackageManager;
private final PipelinePackageOrchestrator pipelineOrchestrator; private final PipelinePackageOrchestrator pipelineOrchestrator;
private final ExecutorService pipelineExecutorService;
public UpdatingFlagsService(SignalService signalService, public UpdatingFlagsService(CreditTrackerSettings config, UserPackageMapper userPackageMapper,
SignalRestService signalRestService, PipelinePackageFabric pipelinePackageManager, PipelinePackageOrchestrator pipelineOrchestrator) {
MonitoringErrorProcesingService monitoringErrorProcesingService,
CreditTrackerSettings config,
PhoneFidMapMapper phoneFidMapMapper, UserPackageMapper userPackageMapper,
PipelinePackageFabric pipelinePackageManager, PipelinePackageOrchestrator pipelineOrchestrator,
ExecutorService pipelineExecutorService) {
this.signalService = signalService;
this.signalRestService = signalRestService;
this.monitoringErrorProcesingService = monitoringErrorProcesingService;
this.daysToUpdateFlags = config.getDaysToUpdateFlags() != null ? config.getDaysToUpdateFlags() : 1; this.daysToUpdateFlags = config.getDaysToUpdateFlags() != null ? config.getDaysToUpdateFlags() : 1;
this.phoneFidMapMapper = phoneFidMapMapper;
this.userPackageMapper = userPackageMapper; this.userPackageMapper = userPackageMapper;
this.pipelinePackageManager = pipelinePackageManager; this.pipelinePackageManager = pipelinePackageManager;
this.pipelineOrchestrator = pipelineOrchestrator; this.pipelineOrchestrator = pipelineOrchestrator;
this.pipelineExecutorService = pipelineExecutorService;
} }
@Scheduled(cron = "${ct.update-flags-cron-expression}") @Scheduled(cron = "${ct.update-flags-cron-expression}")

View file

@ -1,7 +1,13 @@
package ru.nbch.credit_tracker.service.indic; package ru.nbch.credit_tracker.service.indic;
import java.sql.ResultSet; import java.math.BigDecimal;
import java.sql.SQLException; import java.math.BigInteger;
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 lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -9,17 +15,10 @@ import lombok.Setter;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.mapper.indic.IndicFlagsMapper; import ru.nbch.credit_tracker.mapper.indic.IndicFlagsMapper;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.LocalDate;
import java.util.*;
import ru.nbch.credit_tracker.model.SubjectProfile;
@Service @Service
public class FlagsService { public class FlagsService {
@ -84,25 +83,6 @@ public class FlagsService {
return result; return result;
} }
// TODO optimize
public void fillFlagsData(List<SubjectProfile> subjects) {
List<Integer> fids = subjects.stream().map(SubjectProfile::getFid).filter(Objects::nonNull).toList();
Map<Integer, FlagsService.FlagsData> fidsflagsDataMap = findFlags2(fids);
fidsflagsDataMap.forEach((fid, data) -> {
subjects.stream().filter(s-> s.getFid() != null && s.getFid().equals(fid)).forEach(phoneFidMap -> {
// phoneFidMap.setFlagDebt5000(data.getFlagDebt5000());
// phoneFidMap.setFlag90days(data.getFlag90days());
// phoneFidMap.setCalculatedAt(LocalDateTime.now());
});
});
subjects.stream().filter(s-> s.getFid() == null).forEach(phoneFidMap -> {
// phoneFidMap.setCalculatedAt(LocalDateTime.now());
});
}
/** /**
* Выбирает данные из RU_PASTDUEARREAR и ищет по ним флаги просрочек * Выбирает данные из RU_PASTDUEARREAR и ищет по ним флаги просрочек
* По FID из RU_PASTDUEARREAR выбираются все уникальные ACC_SERIAL_NUM с максимальной датой REPORTED_DT. * По FID из RU_PASTDUEARREAR выбираются все уникальные ACC_SERIAL_NUM с максимальной датой REPORTED_DT.
@ -218,219 +198,6 @@ public class FlagsService {
log.debug("Complete calculating flag 90 days by RU_PAPAYMT"); log.debug("Complete calculating flag 90 days by RU_PAPAYMT");
} }
public Map<Integer, FlagsService.FlagsData> findFlags2(List<Integer> fids) {
if (fids.isEmpty()) {
return new HashMap<>();
}
List<Integer> distinctFids = fids.stream()
.distinct()
.sorted(Comparator.naturalOrder())
.toList();
log.debug("Fids count: {}", distinctFids.size());
Map<Integer, Integer> flags5000 = new HashMap<>();
Map<Integer, Integer> flags90DaysByPastDueArrear = new HashMap<>();
Map<Integer, Integer> flags90DaysByRuPaymt = new HashMap<>();
findFlagsRuPastDueArrear2(distinctFids, flags5000, flags90DaysByPastDueArrear);
findFlagsRuPaymt2(distinctFids, flags90DaysByRuPaymt);
Map<Integer, FlagsService.FlagsData> result = new HashMap<>();
fids.forEach(fid -> {
Integer flagDebt5000 = flags5000.get(fid);
if (flagDebt5000 == null) {
flagDebt5000 = 0;
}
Integer flag90days = flags90DaysByPastDueArrear.get(fid);
if (flag90days == null || flag90days == 0) {
flag90days = flags90DaysByRuPaymt.get(fid);
if (flag90days == null) {
flag90days = 0;
}
}
result.put(fid, new FlagsService.FlagsData(flagDebt5000, flag90days));
});
return result;
}
/**
* Выбирает данные из RU_PASTDUEARREAR и ищет по ним флаги просрочек
* По FID из RU_PASTDUEARREAR выбираются все уникальные ACC_SERIAL_NUM с максимальной датой REPORTED_DT.
* Если по хотя бы одной такой записи AMT_PAST_DUE > 5000, то flag500 устанавливается в 1.
* Если ни по одному счёту условие не выполняется или счетов вообще не найдено, флаг = 0.
* <p>
* flag90Days = 1, если выполняется хотя бы одно из условий:
* В INDIC.RU_PASTDUEARREAR у данного FID есть запись с DAYS_PAST_DUE 90 и REPORTED_DT >= текущая дата 12 месяцев.
* Если ни по одной записи условия не выполняются или записей вообще не найдено, флаг = 0.
*
* @param fids - отсортирован по возрастанию фидов
* @param flag5000Map - рещультирующая мапа флагов просрочек debt5000
* @param flag90Days - рещультирующая мапа флагов просрочек 90_days
*/
private void findFlagsRuPastDueArrear2(List<Integer> fids, Map<Integer, Integer> flag5000Map, Map<Integer, Integer> flag90Days) {
log.debug("Start calculating flag 5000 and 90 days by RU_PASTDUEARREAR");
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("fids", fids);
jdbcTemplate.query(SELECT_RU_PASDUEARREAR_DATA, params, (ResultSet rs) -> {
Integer currentFid = null;
BigInteger prevAccSerialNum = null;
boolean processed5000ForCurrentId = false;
boolean processed90DaysForCurrentId = false;
LocalDate yearAgo = LocalDate.now().minusYears(1);
while (rs.next()) {
Integer fid = rs.getInt("FID");
// Переход к новому fid. Сброс состояния
if (!fid.equals(currentFid)) {
currentFid = fid;
prevAccSerialNum = null;
processed5000ForCurrentId = false;
processed90DaysForCurrentId = false;
// Инициализируем значения по умолчанию
flag5000Map.putIfAbsent(fid, 0);
flag90Days.putIfAbsent(fid, 0);
}
// Если для текущего FID уже обработали оба флага, пропускаем остальные записи
if (processed5000ForCurrentId && processed90DaysForCurrentId) {
continue;
}
// Обработка флага 5000
if (!processed5000ForCurrentId && flag5000Map.get(fid) == 0) {
BigInteger currentAccSerialNum = getBigInteger(rs, "ACC_SERIAL_NUM");
BigDecimal amtPastDue = getBigDecimal(rs, "AMT_PAST_DUE");
if (prevAccSerialNum == null || !prevAccSerialNum.equals(currentAccSerialNum)) {
if (amtPastDue != null && amtPastDue.compareTo(BigDecimal.valueOf(5000)) >= 0) {
flag5000Map.put(fid, 1);
processed5000ForCurrentId = true;
}
prevAccSerialNum = currentAccSerialNum;
}
}
// Обработка флага 90 дней
if (!processed90DaysForCurrentId) {
Integer currentFlag90 = flag90Days.get(fid);
if (currentFlag90 != null && currentFlag90 == 1) {
processed90DaysForCurrentId = true;
continue;
}
if (currentFlag90 == null || currentFlag90 == 0) {
BigInteger days = getBigInteger(rs, "DAYS_PAST_DUE");
LocalDate reportedDate = rs.getObject("REPORTED_DT", LocalDate.class);
if (days != null) {
boolean has90daysFlag = days.compareTo(BigInteger.valueOf(90)) >= 0
&& reportedDate != null && !reportedDate.isBefore(yearAgo);
if (has90daysFlag) {
flag90Days.put(fid, 1);
processed90DaysForCurrentId = true;
} else {
flag90Days.put(fid, 0);
}
} else {
flag90Days.put(fid, 0);
}
}
}
}
return null;
});
log.debug("Complete calculating flag 5000 and 90 days by RU_PASTDUEARREAR");
}
/**
* Выбирает данные из RU_PAYMT и ищет по ним флаги просрочек 90Days
* <p>
* flag90Days = 1, если выполняется хотя бы одно из условий:
* В INDIC.RU_PAYMT у данного FID есть запись с DAYS_PAST_DUE 90 и REPORTED_DT >= текущая дата 12 месяцев.
* Если ни по одной записи условия не выполняются или записей вообще не найдено, флаг = 0.
*
* @param fids - отсортирован по возрастанию фидов
* @param flag90Days - рещультирующая мапа флагов просрочек 90_days
*/
private void findFlagsRuPaymt2(List<Integer> fids, Map<Integer, Integer> flag90Days) {
log.debug("Start calculating flag 90 days by RU_PAPAYMT");
LocalDate yearAgo = LocalDate.now().minusYears(1);
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("fids", fids);
params.addValue("reportedDate", yearAgo);
jdbcTemplate.query(SELECT_RU_PAYMT_DATA, params, rs -> {
Integer currentFid = null;
boolean processed90DaysForCurrentId = false;
while (rs.next()) {
Integer fid = rs.getInt("FID");
// Переход к новому fid. Сброс состояния
if (!fid.equals(currentFid)) {
currentFid = fid;
processed90DaysForCurrentId = false;
// Инициализируем значения по умолчанию
flag90Days.putIfAbsent(fid, 0);
}
// Обработка флага 90 дней
if (!processed90DaysForCurrentId) {
Integer currentFlag90 = flag90Days.get(fid);
if (currentFlag90 != null && currentFlag90 == 1) {
processed90DaysForCurrentId = true;
continue;
}
if (currentFlag90 == null || currentFlag90 == 0) {
BigInteger days = getBigInteger(rs, "DAYS_PAST_DUE");
LocalDate date = rs.getObject("REPORTED_DT", LocalDate.class);
if (days != null) {
boolean has90daysFlag = days.compareTo(BigInteger.valueOf(90)) >= 0
&& date != null && !date.isBefore(yearAgo);
if (has90daysFlag) {
flag90Days.put(fid, 1);
processed90DaysForCurrentId = true;
} else {
flag90Days.put(fid, 0);
}
} else {
flag90Days.put(fid, 0);
}
}
}
}
return null;
});
log.debug("Complete calculating flag 90 days by RU_PAPAYMT");
}
private BigInteger getBigInteger(ResultSet rs, String columnName) {
try {
String value = rs.getString(columnName);
return value != null ? new BigInteger(value) : null;
} catch (SQLException e) {
return null;
}
}
private BigDecimal getBigDecimal(ResultSet rs, String columnName) {
try {
return rs.getBigDecimal(columnName);
} catch (SQLException e) {
return null;
}
}
@Getter @Getter
@Setter @Setter

View file

@ -1,269 +0,0 @@
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.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.entities.app.PhoneFidMap;
import ru.nbch.credit_tracker.entities.indic.Name;
import ru.nbch.credit_tracker.repository.PhoneRepository;
@Slf4j
@Service
@Deprecated
//todo оставил для временного подсмотреть на старую логику
public class PhoneService {
private final PhoneRepository phoneRepository;
public PhoneService(PhoneRepository phoneRepository) {
this.phoneRepository = phoneRepository;
}
/**
* Ищет фиды по номерам телефона
*
* @return Map: key - fid; value - {@link PhoneFidMap}
*/
public Map<Integer, PhoneFidMap> defineFidByPhone(List<PhoneFidMap> subjects) {
List<String> phones = subjects.stream().
map(subject -> "9" + subject.getPhone())
.toList();
subjects.sort(
Comparator.comparing(
PhoneFidMap::getPhone,
Comparator.naturalOrder()
)
);
List<PhoneRepository.FidsDataLong> phonesByFid = phoneRepository.findFidsLong(phones);
log.debug("Start merging fids");
Map<Integer, PhoneFidMap> phoneFidMap = merger(subjects, phonesByFid);
log.debug("End merging fids");
return phoneFidMap;
}
private Map<Integer, PhoneFidMap> merger(List<PhoneFidMap> subjects, List<PhoneRepository.FidsDataLong> phonesByFid) {
Map<Integer, PhoneFidMap> phoneFidMap = new HashMap<>();
if (phonesByFid.isEmpty()) {
return phoneFidMap;
}
int index = 0;
for (PhoneFidMap subject : subjects) {
Long normalizedPhone = Long.parseLong("9" + subject.getPhone());
while (index < phonesByFid.size()) {
PhoneRepository.FidsDataLong currentFidData = phonesByFid.get(index);
if (currentFidData.getPhone() < normalizedPhone) {
index++;
continue;
}
if (currentFidData.getPhone().equals(normalizedPhone)) {
phoneFidMap.put(currentFidData.getFid(), subject);
index++;
break;
}
break;
}
if (index >= phonesByFid.size()) {
break;
}
}
return phoneFidMap;
}
public void defineFidsAndNameByPhone2(List<PhoneFidMap> subjects) {
List<String> phones = subjects.stream().
map(subject -> "9" + subject.getPhone())
.toList();
subjects.sort(
Comparator.comparing(
PhoneFidMap::getPhone,
Comparator.naturalOrder()
)
);
List<PhoneRepository.FidsDataWithName> phonesByFid = phoneRepository.findFidsWithName(phones);
log.debug("Start merging fids and names");
Map<Integer, List<PhoneRepository.FidsDataWithName>> fidFidsDataMap = phonesByFid.stream()
.collect(Collectors.groupingBy(PhoneRepository.FidsDataWithName::getFid));
Map<String, Integer> phoneToFidsMap = new HashMap<>();
for (PhoneRepository.FidsDataWithName fidsData : phonesByFid) {
if (!phoneToFidsMap.containsKey(fidsData.getPhone())) {
phoneToFidsMap.put(fidsData.getPhone(), fidsData.getFid());
}
}
for (PhoneFidMap phoneFid : subjects) {
String phone = "9" + phoneFid.getPhone();
Integer fid = phoneToFidsMap.get(phone);
if (fid != null) {
phoneFid.setFid(fid);
List<PhoneRepository.FidsDataWithName> fidsDataWithNames = fidFidsDataMap.get(fid);
if (fidsDataWithNames != null) {
PhoneRepository.FidsDataWithName nameData = defineNameData(fidsDataWithNames);
if (nameData != null) {
phoneFid.setFirstName(nameData.getFirstName());
phoneFid.setMiddleName(nameData.getMiddleName());
phoneFid.setLastName(nameData.getLastName());
phoneFid.setBirthDate(nameData.getBirthDate());
phoneFid.setFileSinceDate(nameData.getFileSinceDateName());
}
}
phoneToFidsMap.remove(phone);
}
}
log.debug("End merging fids and names");
}
@Deprecated
private PhoneRepository.FidsDataWithName defineNameData(List<PhoneRepository.FidsDataWithName> dataList) {
PhoneRepository.FidsDataWithName currentData = null;
for (PhoneRepository.FidsDataWithName fidsData : dataList) {
if (currentData == null) {
currentData = fidsData;
continue;
}
LocalDate currentDate = currentData.getFileSinceDateName();
LocalDate newDate = fidsData.getFileSinceDateName();
if (currentDate != null && newDate != null) {
if (currentDate.isBefore(newDate)) {
currentData = fidsData;
}
} else if (currentDate == null) {
currentData = fidsData;
}
}
return currentData;
}
private Name defineNameDataV2(List<Name> dataList) {
Name currentData = null;
for (Name fidsData : dataList) {
if (currentData == null) {
currentData = fidsData;
continue;
}
LocalDate currentDate = currentData.getFileSinceDate();
LocalDate newDate = fidsData.getFileSinceDate();
if (currentDate != null && newDate != null) {
if (currentDate.isBefore(newDate)) {
currentData = fidsData;
}
} else if (currentDate == null) {
currentData = fidsData;
}
}
return currentData;
}
private Map<Integer, PhoneFidMap> merger2(List<PhoneFidMap> subjects, List<PhoneRepository.FidsData> phonesByFid) {
Map<Integer, PhoneFidMap> phoneFidMap = new HashMap<>();
Iterator<PhoneRepository.FidsData> iterator = phonesByFid.iterator();
String lastUniquePhone = null;
PhoneRepository.FidsData fidsData = null;
for (PhoneFidMap phoneFid : subjects) {
String normalizedPhone = 9 + phoneFid.getPhone();
while (iterator.hasNext()) {
fidsData = iterator.next();
if (StringUtils.isNotEmpty(lastUniquePhone) && lastUniquePhone.equals(fidsData.getPhone())) {
iterator.remove();
continue;
}
if (fidsData.getPhone().equals(normalizedPhone) || normalizedPhone.equals(lastUniquePhone)) {
lastUniquePhone = fidsData.getPhone();
iterator.remove();
break;
}
lastUniquePhone = fidsData.getPhone();
break;
}
if (fidsData != null && normalizedPhone.equals(lastUniquePhone)) {
phoneFidMap.put(fidsData.getFid(), phoneFid);
}
}
return phoneFidMap;
}
/**
* Ищет фиды по номерам телефона. Обогащает {@link PhoneFidMap} для найденных фидов данными из Name и фидом.
* @return Map: key - FID, value - {@link PhoneFidMap}
*/
public Map<Integer, PhoneFidMap> defineFidsAndNameByPhone(List<PhoneFidMap> subjects) {
Map<Integer, PhoneFidMap> phoneFidMap = new HashMap<>();
List<String> phones = subjects.stream().
map(subject -> "9" + subject.getPhone())
.toList();
subjects.sort(
Comparator.comparing(
PhoneFidMap::getPhone,
Comparator.naturalOrder()
)
);
List<PhoneRepository.FidsDataWithName> phonesByFid = phoneRepository.findFidsWithName(phones);
log.debug("Start merging fids and names");
Map<Integer, List<PhoneRepository.FidsDataWithName>> fidFidsDataMap = phonesByFid.stream()
.collect(Collectors.groupingBy(PhoneRepository.FidsDataWithName::getFid));
Map<String, Integer> phoneToFidsMap = new HashMap<>();
for (PhoneRepository.FidsDataWithName fidsData : phonesByFid) {
if (!phoneToFidsMap.containsKey(fidsData.getPhone())) {
phoneToFidsMap.put(fidsData.getPhone(), fidsData.getFid());
}
}
for (PhoneFidMap phoneFid : subjects) {
String phone = "9" + phoneFid.getPhone();
Integer fid = phoneToFidsMap.get(phone);
if (fid != null) {
phoneFid.setFid(fid);
List<PhoneRepository.FidsDataWithName> fidsDataWithNames = fidFidsDataMap.get(fid);
if (fidsDataWithNames != null) {
PhoneRepository.FidsDataWithName nameData = defineNameData(fidsDataWithNames);
if (nameData != null) {
phoneFid.setFirstName(nameData.getFirstName());
phoneFid.setMiddleName(nameData.getMiddleName());
phoneFid.setLastName(nameData.getLastName());
phoneFid.setBirthDate(nameData.getBirthDate());
phoneFid.setFileSinceDate(nameData.getFileSinceDateName());
}
fidFidsDataMap.remove(fid);
}
phoneFidMap.put(fid, phoneFid); // TODO можно перезатереть запись если у разных phone нашлись одинаковые фиды
phoneToFidsMap.remove(phone);
}
}
log.debug("End merging fids and names");
return phoneFidMap;
}
}

View file

@ -1,93 +0,0 @@
package ru.nbch.credit_tracker.service.signal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.entities.app.PhoneFidMap;
import ru.nbch.credit_tracker.entities.indic.Name;
import ru.nbch.credit_tracker.entities.user_request.monitoring_request.Subject;
import ru.nbch.credit_tracker.mapper.signal.PhoneFidMapMapper;
import ru.nbch.credit_tracker.model.SubjectProfile;
import ru.nbch.credit_tracker.utils.CTUtil;
@Service
public class PhoneFidMapService {
private final PhoneFidMapMapper mapper;
private final SqlSessionFactory sqlSessionFactory;
public PhoneFidMapService(PhoneFidMapMapper mapper,
@Qualifier("sqlSessionSignal") SqlSessionFactory sqlSessionFactory) {
this.mapper = mapper;
this.sqlSessionFactory = sqlSessionFactory;
}
@Deprecated
public void registerSubjects(List<Subject> subjects, Long packageId) {
mapper.registerSubjects(subjects, packageId);
}
/**
* Регистрирует в базе список субъектов переданных в запросе
*
* @param subjects - список субъектов
* @param packageId - уникальный идентификатор пакета
*/
public void register(List<SubjectProfile> subjects, Map<String, Name> nameByPhone, Long packageId) {
List<PhoneFidMap> phoneFidMaps = subjects.stream().map(subjectProfile -> {
Integer fid = Optional
.ofNullable(nameByPhone.get(CTUtil.normalizePhoneNumber(subjectProfile.getPhone())))
.map(Name::getFid)
.orElse(null);
return PhoneFidMap.builder()
.phone(subjectProfile.getPhone())
.subjectId(subjectProfile.getIdentifier())
.packageId(packageId)
.fid(fid)
.build();
}
).toList();
mapper.register(phoneFidMaps);
}
public List<PhoneFidMap> findFullPhoneFidMap(Long packageId, int offset, int limit) {
return mapper.findFullPhoneFidMap(packageId, offset, limit);
}
public void updatePhoneFidMaps(Collection<PhoneFidMap> subjects) {
mapper.updatePhoneFidMaps(subjects);
}
public void updatePhoneFidMaps2(Collection<PhoneFidMap> subjects) {
final int batchSize = 1000;
try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
PhoneFidMapMapper mapper = session.getMapper(PhoneFidMapMapper.class);
int i = 0;
for (PhoneFidMap s : subjects) {
mapper.updateOne(s);
if (++i % batchSize == 0) session.flushStatements();
}
session.flushStatements();
session.commit();
}
}
public void updatePhoneFidMapsErrors(List<PhoneFidMap> subjects) {
mapper.updatePhoneFidMapsErrors(subjects);
}
public PhoneFidMap findPhoneFidMapById(Long id) {
return mapper.findPhoneFidMapById(id);
}
public boolean hasNonNullfids(Long packageId) {
return mapper.hasNonNullFids(packageId);
}
}

View file

@ -28,7 +28,6 @@ import ru.nbch.credit_tracker.entities.external_response.errors.SgnlReport;
import ru.nbch.credit_tracker.entities.external_response.list_package.SgnlReportDeleted; import ru.nbch.credit_tracker.entities.external_response.list_package.SgnlReportDeleted;
import ru.nbch.credit_tracker.entities.external_response.monitoring_report_file.SgnlReportMonitorigSetupError; import ru.nbch.credit_tracker.entities.external_response.monitoring_report_file.SgnlReportMonitorigSetupError;
import ru.nbch.credit_tracker.entities.external_response.online_report.SgnlOnlineReport; import ru.nbch.credit_tracker.entities.external_response.online_report.SgnlOnlineReport;
import ru.nbch.credit_tracker.service.SignalService;
import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor; import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor;
import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor; import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
import ru.nbch.credit_tracker.utils.ZipUtils; import ru.nbch.credit_tracker.utils.ZipUtils;
@ -47,7 +46,6 @@ public class SignalRestService {
private final RestTemplate restTemplate; private final RestTemplate restTemplate;
private final IXmlProcessor xmlProcessor; private final IXmlProcessor xmlProcessor;
private final StaxXmlProcessor staxProcessor; private final StaxXmlProcessor staxProcessor;
private final SignalService signalService;
private final String authToken; private final String authToken;
private final CreditTrackerSettings config; private final CreditTrackerSettings config;
@ -56,12 +54,10 @@ public class SignalRestService {
public SignalRestService(@Qualifier(value = "restTemplate") RestTemplate restTemplate, public SignalRestService(@Qualifier(value = "restTemplate") RestTemplate restTemplate,
IXmlProcessor xmlProcessor, IXmlProcessor xmlProcessor,
StaxXmlProcessor staxProcessor, StaxXmlProcessor staxProcessor,
SignalService signalService,
CreditTrackerSettings config) throws Exception { CreditTrackerSettings config) throws Exception {
this.restTemplate = restTemplate; this.restTemplate = restTemplate;
this.xmlProcessor = xmlProcessor; this.xmlProcessor = xmlProcessor;
this.staxProcessor = staxProcessor; this.staxProcessor = staxProcessor;
this.signalService = signalService;
this.config = config; this.config = config;
this.authToken = buildToken(config.getSignalsToken(), config.getSignalsuser()); this.authToken = buildToken(config.getSignalsToken(), config.getSignalsuser());
} }

View file

@ -4,8 +4,6 @@ import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
@ -14,7 +12,6 @@ import static org.mockito.Mockito.when;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import ru.nbch.credit_tracker.entities.app.PhoneFidMap; import ru.nbch.credit_tracker.entities.app.PhoneFidMap;
import ru.nbch.credit_tracker.repository.PhoneRepository; import ru.nbch.credit_tracker.repository.PhoneRepository;
import ru.nbch.credit_tracker.service.indic.PhoneService;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
public class PhoneService2Test { public class PhoneService2Test {
@ -24,7 +21,7 @@ public class PhoneService2Test {
@Test @Test
public void defineFidByPhoneTest() { public void defineFidByPhoneTest() {
PhoneService phoneService = new PhoneService(phoneRepository); // PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder); fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFids(any())).thenReturn(fidsDataWithEqualSinceDt); when(phoneRepository.findFids(any())).thenReturn(fidsDataWithEqualSinceDt);
@ -36,17 +33,18 @@ public class PhoneService2Test {
phoneFidMap.add(PhoneFidMap.builder().phone("1114").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1114").build());
phoneFidMap.add(PhoneFidMap.builder().phone("1115").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1115").build());
Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap); //todo
Assertions.assertEquals(4, res.size()); // Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap);
Assertions.assertEquals("1111", res.get(124).getPhone()); // Assertions.assertEquals(4, res.size());
Assertions.assertEquals("1112", res.get(125).getPhone()); // Assertions.assertEquals("1111", res.get(124).getPhone());
Assertions.assertEquals("1114", res.get(126).getPhone()); // Assertions.assertEquals("1112", res.get(125).getPhone());
Assertions.assertEquals("1115", res.get(127).getPhone()); // Assertions.assertEquals("1114", res.get(126).getPhone());
// Assertions.assertEquals("1115", res.get(127).getPhone());
} }
@Test @Test
public void defineFidByPhoneTest2() { public void defineFidByPhoneTest2() {
PhoneService phoneService = new PhoneService(phoneRepository); // PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder); fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFids(any())).thenReturn(fidsDataWithEqualSinceDt2); when(phoneRepository.findFids(any())).thenReturn(fidsDataWithEqualSinceDt2);
@ -58,16 +56,17 @@ public class PhoneService2Test {
phoneFidMap.add(PhoneFidMap.builder().phone("1114").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1114").build());
phoneFidMap.add(PhoneFidMap.builder().phone("1115").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1115").build());
Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap); //todo
Assertions.assertEquals(3, res.size()); // Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap);
Assertions.assertEquals("1112", res.get(125).getPhone()); // Assertions.assertEquals(3, res.size());
Assertions.assertEquals("1114", res.get(126).getPhone()); // Assertions.assertEquals("1112", res.get(125).getPhone());
Assertions.assertEquals("1115", res.get(127).getPhone()); // Assertions.assertEquals("1114", res.get(126).getPhone());
// Assertions.assertEquals("1115", res.get(127).getPhone());
} }
@Test @Test
public void defineFidByPhoneTest3() { public void defineFidByPhoneTest3() {
PhoneService phoneService = new PhoneService(phoneRepository); // PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder); fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFids(any())).thenReturn(fidsDataWithEqualSinceDt3); when(phoneRepository.findFids(any())).thenReturn(fidsDataWithEqualSinceDt3);
@ -79,10 +78,11 @@ public class PhoneService2Test {
phoneFidMap.add(PhoneFidMap.builder().phone("1114").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1114").build());
phoneFidMap.add(PhoneFidMap.builder().phone("1115").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1115").build());
Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap); //todo
Assertions.assertEquals(2, res.size()); // Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap);
Assertions.assertEquals("1114", res.get(126).getPhone()); // Assertions.assertEquals(2, res.size());
Assertions.assertEquals("1115", res.get(127).getPhone()); // Assertions.assertEquals("1114", res.get(126).getPhone());
// Assertions.assertEquals("1115", res.get(127).getPhone());
} }
private final List<PhoneRepository.FidsData> fidsDataWithEqualSinceDt = new ArrayList<>( private final List<PhoneRepository.FidsData> fidsDataWithEqualSinceDt = new ArrayList<>(
@ -120,10 +120,10 @@ public class PhoneService2Test {
@Test @Test
void defineFidsAndNameByPhoneTest() { void defineFidsAndNameByPhoneTest() {
PhoneService phoneService = new PhoneService(phoneRepository); // PhoneService phoneService = new PhoneService(phoneRepository);
// fidsDataWithNameEqualSinceDt.sort(byDbOrderWithName); // fidsDataWithNameEqualSinceDt.sort(byDbOrderWithName);
when(phoneRepository.findFidsWithName(any())).thenReturn(fidsDataWithNameEqualSinceDt); // when(phoneRepository.findFidsWithName(any())).thenReturn(fidsDataWithNameEqualSinceDt);
List<PhoneFidMap> phoneFidMap = new ArrayList<>(); List<PhoneFidMap> phoneFidMap = new ArrayList<>();
phoneFidMap.add(PhoneFidMap.builder().phone("1111").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1111").build());
@ -132,17 +132,18 @@ public class PhoneService2Test {
phoneFidMap.add(PhoneFidMap.builder().phone("1114").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1114").build());
phoneFidMap.add(PhoneFidMap.builder().phone("1115").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1115").build());
Map<Integer, PhoneFidMap> res = phoneService.defineFidsAndNameByPhone(phoneFidMap); //todo
Assertions.assertEquals(4, res.size()); // Map<Integer, PhoneFidMap> res = phoneService.defineFidsAndNameByPhone(phoneFidMap);
Assertions.assertEquals("1111", res.get(124).getPhone()); // Assertions.assertEquals(4, res.size());
Assertions.assertEquals("1112", res.get(125).getPhone()); // Assertions.assertEquals("1111", res.get(124).getPhone());
Assertions.assertEquals("1114", res.get(126).getPhone()); // Assertions.assertEquals("1112", res.get(125).getPhone());
Assertions.assertEquals("1115", res.get(127).getPhone()); // Assertions.assertEquals("1114", res.get(126).getPhone());
// Assertions.assertEquals("1115", res.get(127).getPhone());
Assertions.assertEquals("found124", res.get(124).getFirstName()); //
Assertions.assertNull(res.get(125).getFirstName()); // Assertions.assertEquals("found124", res.get(124).getFirstName());
Assertions.assertEquals("found126", res.get(126).getFirstName()); // Assertions.assertNull(res.get(125).getFirstName());
Assertions.assertNull(res.get(128)); // Assertions.assertEquals("found126", res.get(126).getFirstName());
// Assertions.assertNull(res.get(128));
} }
private final List<PhoneRepository.FidsDataWithName> fidsDataWithNameEqualSinceDt = new ArrayList<>( private final List<PhoneRepository.FidsDataWithName> fidsDataWithNameEqualSinceDt = new ArrayList<>(

View file

@ -1,22 +1,17 @@
package ru.nbch.credit_tracker.service; package ru.nbch.credit_tracker.service;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import ru.nbch.credit_tracker.entities.app.PhoneFidMap;
import ru.nbch.credit_tracker.repository.PhoneRepository;
import ru.nbch.credit_tracker.service.indic.PhoneService;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Map; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import org.mockito.Mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import org.mockito.junit.jupiter.MockitoExtension;
import ru.nbch.credit_tracker.entities.app.PhoneFidMap;
import ru.nbch.credit_tracker.repository.PhoneRepository;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
public class PhoneServiceTest { public class PhoneServiceTest {
@ -26,7 +21,7 @@ public class PhoneServiceTest {
@Test @Test
public void defineFidByPhoneTest() { public void defineFidByPhoneTest() {
PhoneService phoneService = new PhoneService(phoneRepository); // PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder); fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFidsLong(any())).thenReturn(fidsDataWithEqualSinceDt); when(phoneRepository.findFidsLong(any())).thenReturn(fidsDataWithEqualSinceDt);
@ -38,17 +33,18 @@ public class PhoneServiceTest {
phoneFidMap.add(PhoneFidMap.builder().phone("1114").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1114").build());
phoneFidMap.add(PhoneFidMap.builder().phone("1115").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1115").build());
Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap); //todo
Assertions.assertEquals(4, res.size()); // Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap);
Assertions.assertEquals("1111", res.get(124).getPhone()); // Assertions.assertEquals(4, res.size());
Assertions.assertEquals("1112", res.get(125).getPhone()); // Assertions.assertEquals("1111", res.get(124).getPhone());
Assertions.assertEquals("1114", res.get(126).getPhone()); // Assertions.assertEquals("1112", res.get(125).getPhone());
Assertions.assertEquals("1115", res.get(127).getPhone()); // Assertions.assertEquals("1114", res.get(126).getPhone());
// Assertions.assertEquals("1115", res.get(127).getPhone());
} }
@Test @Test
public void defineFidByPhoneTest2() { public void defineFidByPhoneTest2() {
PhoneService phoneService = new PhoneService(phoneRepository); // PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder); fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFidsLong(any())).thenReturn(fidsDataWithEqualSinceDt2); when(phoneRepository.findFidsLong(any())).thenReturn(fidsDataWithEqualSinceDt2);
@ -60,16 +56,17 @@ public class PhoneServiceTest {
phoneFidMap.add(PhoneFidMap.builder().phone("1114").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1114").build());
phoneFidMap.add(PhoneFidMap.builder().phone("1115").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1115").build());
Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap); //todo
Assertions.assertEquals(3, res.size()); // Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap);
Assertions.assertEquals("1112", res.get(125).getPhone()); // Assertions.assertEquals(3, res.size());
Assertions.assertEquals("1114", res.get(126).getPhone()); // Assertions.assertEquals("1112", res.get(125).getPhone());
Assertions.assertEquals("1115", res.get(127).getPhone()); // Assertions.assertEquals("1114", res.get(126).getPhone());
// Assertions.assertEquals("1115", res.get(127).getPhone());
} }
@Test @Test
public void defineFidByPhoneTest3() { public void defineFidByPhoneTest3() {
PhoneService phoneService = new PhoneService(phoneRepository); // PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder); fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFidsLong(any())).thenReturn(fidsDataWithEqualSinceDt3); when(phoneRepository.findFidsLong(any())).thenReturn(fidsDataWithEqualSinceDt3);
@ -81,10 +78,11 @@ public class PhoneServiceTest {
phoneFidMap.add(PhoneFidMap.builder().phone("1114").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1114").build());
phoneFidMap.add(PhoneFidMap.builder().phone("1115").build()); phoneFidMap.add(PhoneFidMap.builder().phone("1115").build());
Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap); //todo
Assertions.assertEquals(2, res.size()); // Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap);
Assertions.assertEquals("1114", res.get(126).getPhone()); // Assertions.assertEquals(2, res.size());
Assertions.assertEquals("1115", res.get(127).getPhone()); // Assertions.assertEquals("1114", res.get(126).getPhone());
// Assertions.assertEquals("1115", res.get(127).getPhone());
} }
private final List<PhoneRepository.FidsDataLong> fidsDataWithEqualSinceDt = new ArrayList<>( private final List<PhoneRepository.FidsDataLong> fidsDataWithEqualSinceDt = new ArrayList<>(