flag calc
This commit is contained in:
parent
00662f9685
commit
83a452fed6
9 changed files with 361 additions and 311 deletions
|
|
@ -0,0 +1,11 @@
|
||||||
|
package ru.nbch.credit_tracker.entities.indic;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class PaymentsFlag {
|
||||||
|
private Integer fid;
|
||||||
|
private Integer flag;
|
||||||
|
}
|
||||||
|
|
@ -45,7 +45,7 @@ public class SignalService {
|
||||||
private final PhoneFidMapService phoneFidMapService;
|
private final PhoneFidMapService phoneFidMapService;
|
||||||
private final PhoneService2 phoneService2;
|
private final PhoneService2 phoneService2;
|
||||||
private final PhoneService phoneService;
|
private final PhoneService phoneService;
|
||||||
private final FlagsService2 flagsService;
|
private final FlagsService flagsService;
|
||||||
private final PersonService personService;
|
private final PersonService personService;
|
||||||
private final StaxXmlProcessor staxXmlProcessor;
|
private final StaxXmlProcessor staxXmlProcessor;
|
||||||
|
|
||||||
|
|
@ -57,7 +57,7 @@ public class SignalService {
|
||||||
PhoneFidMapService phoneFidMapService,
|
PhoneFidMapService phoneFidMapService,
|
||||||
PhoneService2 phoneService2,
|
PhoneService2 phoneService2,
|
||||||
PhoneService phoneService,
|
PhoneService phoneService,
|
||||||
FlagsService2 flagsService,
|
FlagsService flagsService,
|
||||||
PersonService personService,
|
PersonService personService,
|
||||||
StaxXmlProcessor staxXmlProcessor) {
|
StaxXmlProcessor staxXmlProcessor) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,16 @@
|
||||||
package ru.nbch.credit_tracker.service.indic;
|
package ru.nbch.credit_tracker.service.indic;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.Setter;
|
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.jdbc.core.namedparam.MapSqlParameterSource;
|
||||||
|
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.nbch.credit_tracker.mapper.indic.FlagsMapper;
|
import ru.nbch.credit_tracker.mapper.indic.FlagsMapper;
|
||||||
|
|
||||||
|
|
@ -13,6 +18,7 @@ import java.math.BigDecimal;
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import ru.nbch.credit_tracker.model.SubjectProfile;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class FlagsService {
|
public class FlagsService {
|
||||||
|
|
@ -20,8 +26,26 @@ public class FlagsService {
|
||||||
private static final Logger log = LoggerFactory.getLogger(FlagsService.class);
|
private static final Logger log = LoggerFactory.getLogger(FlagsService.class);
|
||||||
private final FlagsMapper mapper;
|
private final FlagsMapper mapper;
|
||||||
|
|
||||||
public FlagsService(FlagsMapper mapper) {
|
private static final String SELECT_RU_PASDUEARREAR_DATA =
|
||||||
|
"SELECT FID, ACC_SERIAL_NUM, REPORTED_DT, AMT_PAST_DUE, DAYS_PAST_DUE " +
|
||||||
|
"FROM RU_PASTDUEARREAR " +
|
||||||
|
"WHERE FID IN (:fids) " +
|
||||||
|
"ORDER BY FID, REPORTED_DT DESC " +
|
||||||
|
"WITH UR";
|
||||||
|
|
||||||
|
private static final String SELECT_RU_PAYMT_DATA =
|
||||||
|
"SELECT FID, DAYS_PAST_DUE, REPORTED_DT " +
|
||||||
|
"FROM RU_PAYMT " +
|
||||||
|
"WHERE FID IN (:fids) " +
|
||||||
|
"AND REPORTED_DT >= :reportedDate " +
|
||||||
|
"WITH UR";
|
||||||
|
|
||||||
|
private final NamedParameterJdbcTemplate jdbcTemplate;
|
||||||
|
|
||||||
|
public FlagsService(FlagsMapper mapper,
|
||||||
|
@Qualifier("jdbcTemplateIndic") NamedParameterJdbcTemplate jdbcTemplate) {
|
||||||
this.mapper = mapper;
|
this.mapper = mapper;
|
||||||
|
this.jdbcTemplate = jdbcTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<Integer, FlagsData> findFlags(List<Integer> fids) {
|
public Map<Integer, FlagsData> findFlags(List<Integer> fids) {
|
||||||
|
|
@ -60,6 +84,25 @@ 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.
|
||||||
|
|
@ -175,6 +218,220 @@ 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
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
|
|
||||||
|
|
@ -20,256 +20,12 @@ import ru.nbch.credit_tracker.model.SubjectProfile;
|
||||||
@Service
|
@Service
|
||||||
public class FlagsService2 {
|
public class FlagsService2 {
|
||||||
|
|
||||||
private static final String SELECT_RU_PASDUEARREAR_DATA =
|
public FlagsService2() {
|
||||||
"SELECT FID, ACC_SERIAL_NUM, REPORTED_DT, AMT_PAST_DUE, DAYS_PAST_DUE " +
|
|
||||||
"FROM RU_PASTDUEARREAR " +
|
|
||||||
"WHERE FID IN (:fids) " +
|
|
||||||
"ORDER BY FID, REPORTED_DT DESC " +
|
|
||||||
"WITH UR";
|
|
||||||
|
|
||||||
private static final String SELECT_RU_PAYMT_DATA =
|
|
||||||
"SELECT FID, DAYS_PAST_DUE, REPORTED_DT " +
|
|
||||||
"FROM RU_PAYMT " +
|
|
||||||
"WHERE FID IN (:fids) " +
|
|
||||||
"AND REPORTED_DT >= :reportedDate " +
|
|
||||||
"WITH UR";
|
|
||||||
|
|
||||||
private final NamedParameterJdbcTemplate jdbcTemplate;
|
|
||||||
|
|
||||||
public FlagsService2(@Qualifier("jdbcTemplateIndic") NamedParameterJdbcTemplate jdbcTemplate) {
|
|
||||||
this.jdbcTemplate = jdbcTemplate;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO optimize
|
// 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 = findFlags(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());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<Integer, FlagsService.FlagsData> findFlags(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<>();
|
|
||||||
findFlagsRuPastDueArrear(distinctFids, flags5000, flags90DaysByPastDueArrear);
|
|
||||||
findFlagsRuPaymt(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 findFlagsRuPastDueArrear(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 findFlagsRuPaymt(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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import java.util.concurrent.ThreadPoolExecutor;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.exception.ExceptionUtils;
|
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||||
|
import ru.nbch.credit_tracker.entities.app.PhoneFidMap;
|
||||||
import ru.nbch.credit_tracker.mapper.signal.PhoneFidMapMapper;
|
import ru.nbch.credit_tracker.mapper.signal.PhoneFidMapMapper;
|
||||||
import ru.nbch.credit_tracker.model.SubjectProfile;
|
import ru.nbch.credit_tracker.model.SubjectProfile;
|
||||||
import ru.nbch.credit_tracker.model.impl.SubjectPayload;
|
import ru.nbch.credit_tracker.model.impl.SubjectPayload;
|
||||||
|
|
@ -20,15 +21,15 @@ import ru.nbch.credit_tracker.service.indic.FlagsService2;
|
||||||
public class FlagsEnricher implements Runnable {
|
public class FlagsEnricher implements Runnable {
|
||||||
|
|
||||||
private final FlagsService2 flagsService;
|
private final FlagsService2 flagsService;
|
||||||
private final PhoneFidMapMapper mapper;
|
private final PhoneFidMapMapper phoneFidMapMapper;
|
||||||
private BlockingQueue<SubjectPayload> in;
|
private BlockingQueue<SubjectPayload> in;
|
||||||
private final CompletableFuture<Void> done = new CompletableFuture<>();
|
private final CompletableFuture<Void> done = new CompletableFuture<>();
|
||||||
private final ExecutorService ioPool;
|
private final ExecutorService ioPool;
|
||||||
|
|
||||||
public FlagsEnricher(FlagsService2 flagsService,
|
public FlagsEnricher(FlagsService2 flagsService,
|
||||||
PhoneFidMapMapper mapper) {
|
PhoneFidMapMapper phoneFidMapMapper) {
|
||||||
this.flagsService = flagsService;
|
this.flagsService = flagsService;
|
||||||
this.mapper = mapper;
|
this.phoneFidMapMapper = phoneFidMapMapper;
|
||||||
this.ioPool = new ThreadPoolExecutor(10,
|
this.ioPool = new ThreadPoolExecutor(10,
|
||||||
10,
|
10,
|
||||||
0L, TimeUnit.MINUTES,
|
0L, TimeUnit.MINUTES,
|
||||||
|
|
@ -69,21 +70,19 @@ public class FlagsEnricher implements Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void process(SubjectPayload subjectPayload) {
|
public void process(SubjectPayload subjectPayload) {
|
||||||
List<SubjectProfile> phoneFidMaps = subjectPayload.getSubjects();
|
List<SubjectProfile> subjects = subjectPayload.getSubjects();
|
||||||
log.debug("FlagsEnricher handle by packageId: {}, size: {}", subjectPayload.getPackageId(), phoneFidMaps.size());
|
log.debug("FlagsEnricher handle by packageId: {}, size: {}", subjectPayload.getPackageId(), subjects.size());
|
||||||
flagsService.fillFlagsData(phoneFidMaps);
|
// flagsService.fillFlagsData(subjects);
|
||||||
|
|
||||||
//todo по какому ключу апдейтить записи, потому что id у нас тут нет, по subject_id? или все же сохранять id при вставке в SaveSubjectHandler
|
List<PhoneFidMap> phoneFidMaps = subjects.stream().map(subject -> {
|
||||||
// log.debug("Start updating subject's batch");
|
return PhoneFidMap.builder()
|
||||||
// if (!phoneFidMaps.isEmpty()) {
|
.phone(subject.getPhone())
|
||||||
// int updateBatchSize = 7000;
|
.subjectId(subject.getIdentifier())
|
||||||
// for (int j = 0; j < phoneFidMaps.size(); j += updateBatchSize) {
|
.packageId(subjectPayload.getPackageId())
|
||||||
// int endIndex = Math.min(j + updateBatchSize, phoneFidMaps.size());
|
.fid(subject.getFid())
|
||||||
// mapper.updatePhoneFidMaps(phoneFidMaps.subList(j, endIndex));
|
.build();
|
||||||
// log.trace("Updated fids and flags for subject's batch from: {} to: {}. Total count: {}. PackageId: {}", j, endIndex, phoneFidMaps.size(), taskPayload.getPackageId());
|
}).toList();
|
||||||
// }
|
phoneFidMapMapper.register(phoneFidMaps);
|
||||||
// }
|
|
||||||
// log.debug("Complete updating subject's batch");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPollingQueue(BlockingQueue<SubjectPayload> queue) {
|
public void setPollingQueue(BlockingQueue<SubjectPayload> queue) {
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,8 @@ package ru.nbch.credit_tracker.service.task.impl;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
|
||||||
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.app.PhoneFidMap;
|
|
||||||
import ru.nbch.credit_tracker.entities.indic.Name;
|
import ru.nbch.credit_tracker.entities.indic.Name;
|
||||||
import ru.nbch.credit_tracker.mapper.signal.PhoneFidMapMapper;
|
import ru.nbch.credit_tracker.mapper.signal.PhoneFidMapMapper;
|
||||||
import ru.nbch.credit_tracker.model.NameData;
|
import ru.nbch.credit_tracker.model.NameData;
|
||||||
|
|
@ -40,12 +38,9 @@ public class SaveSubjectHandler implements Handler<SubjectPayload, SubjectPayloa
|
||||||
|
|
||||||
Map<String, Name> nameByPhone = phoneService2.findNameByNumber(subjects);
|
Map<String, Name> nameByPhone = phoneService2.findNameByNumber(subjects);
|
||||||
//todo сделать один проход для установки FID для вставки в PHONE_FID_MAP и одновременного заполнения инфо из Name для дальнейшей обработки
|
//todo сделать один проход для установки FID для вставки в PHONE_FID_MAP и одновременного заполнения инфо из Name для дальнейшей обработки
|
||||||
List<PhoneFidMap> phoneFidMaps = subjects.stream()
|
subjects.forEach(subject -> {
|
||||||
.filter(subject -> nameByPhone.containsKey(CTUtil.normalizePhoneNumber(subject.getPhone())))
|
|
||||||
.map(subject -> {
|
|
||||||
//заполним инфо из NAME для след. обработчика
|
|
||||||
{
|
|
||||||
Name name = nameByPhone.get(CTUtil.normalizePhoneNumber(subject.getPhone()));
|
Name name = nameByPhone.get(CTUtil.normalizePhoneNumber(subject.getPhone()));
|
||||||
|
if (name != null) {
|
||||||
NameData nameData = NameData.builder()
|
NameData nameData = NameData.builder()
|
||||||
.middleName(name.getMiddle())
|
.middleName(name.getMiddle())
|
||||||
.firstName(name.getFirst())
|
.firstName(name.getFirst())
|
||||||
|
|
@ -57,20 +52,7 @@ public class SaveSubjectHandler implements Handler<SubjectPayload, SubjectPayloa
|
||||||
subject.setFid(name.getFid());
|
subject.setFid(name.getFid());
|
||||||
subject.setNameData(nameData);
|
subject.setNameData(nameData);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
Integer fid = Optional
|
|
||||||
.ofNullable(nameByPhone.get(CTUtil.normalizePhoneNumber(subject.getPhone())))
|
|
||||||
.map(Name::getFid)
|
|
||||||
.orElse(null);
|
|
||||||
|
|
||||||
return PhoneFidMap.builder()
|
|
||||||
.phone(subject.getPhone())
|
|
||||||
.subjectId(subject.getIdentifier())
|
|
||||||
.packageId(packageId)
|
|
||||||
.fid(fid)
|
|
||||||
.build();
|
|
||||||
}).toList();
|
|
||||||
phoneFidMapMapper.register(phoneFidMaps);
|
|
||||||
//todo стоит ли делать имутабл для subject?
|
//todo стоит ли делать имутабл для subject?
|
||||||
return new SubjectPayload(taskPayload.getPackageId(), subjects);
|
return new SubjectPayload(taskPayload.getPackageId(), subjects);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,11 @@
|
||||||
<result property="reportedDate" column="REPORTED_DT" />
|
<result property="reportedDate" column="REPORTED_DT" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="PaymentsFlagResult" type="ru.nbch.credit_tracker.entities.indic.PaymentsFlag">
|
||||||
|
<result property="fid" column="fid" />
|
||||||
|
<result property="flag" column="flag" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
<select id="findRuPastDuarearData" resultMap="RuPastDuarearResultMap">
|
<select id="findRuPastDuarearData" resultMap="RuPastDuarearResultMap">
|
||||||
SELECT FID, ACC_SERIAL_NUM, REPORTED_DT, AMT_PAST_DUE, DAYS_PAST_DUE
|
SELECT FID, ACC_SERIAL_NUM, REPORTED_DT, AMT_PAST_DUE, DAYS_PAST_DUE
|
||||||
FROM RU_PASTDUEARREAR
|
FROM RU_PASTDUEARREAR
|
||||||
|
|
@ -40,4 +45,46 @@
|
||||||
with UR
|
with UR
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="findFlagsDebt5000" resultType="PaymentsFlagResult">
|
||||||
|
SELECT
|
||||||
|
FID as fid,
|
||||||
|
(case when (sum(case when AMT_PAST_DUE > 5000 then 1 else 0 end) = 0) then 0 else 1 end) as flag
|
||||||
|
FROM
|
||||||
|
(select FID, AMT_PAST_DUE, rank() over (partition by FID, ACC_SERIAL_NUM order by REPORTED_DT desc) rn
|
||||||
|
FROM RU_PASTDUEARREAR
|
||||||
|
WHERE FID IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
)
|
||||||
|
where rn=1
|
||||||
|
group by FID
|
||||||
|
WITH UR
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findFlag90ByPastDueArrear" resultMap="PaymentsFlagResult">
|
||||||
|
SELECT
|
||||||
|
FID as fid,
|
||||||
|
(case when (sum(case when (REPORTED_DT >= #{reportedDate} and DAYS_PAST_DUE > 90) then 1 else 0 end) = 0) then 0 else 1 end) as flag
|
||||||
|
FROM RU_PASTDUEARREAR
|
||||||
|
WHERE FID IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
GROUP BY FID
|
||||||
|
WITH UR
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findFlag90ByRuPaymt" resultMap="PaymentsFlagResult">
|
||||||
|
SELECT
|
||||||
|
FID as fid,
|
||||||
|
(case when (sum(case when (REPORTED_DT >= #{reportedDate} and DAYS_PAST_DUE > 90) then 1 else 0 end) = 0) then 0 else 1 end) as flag
|
||||||
|
FROM RU_PAYMT
|
||||||
|
WHERE FID IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
GROUP BY FID
|
||||||
|
WITH UR
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
@ -1,20 +1,18 @@
|
||||||
package ru.nbch.credit_tracker.service;
|
package ru.nbch.credit_tracker.service;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.boot.jdbc.DataSourceBuilder;
|
|
||||||
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
|
||||||
import ru.nbch.credit_tracker.service.indic.FlagsService;
|
|
||||||
import ru.nbch.credit_tracker.service.indic.FlagsService2;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.boot.jdbc.DataSourceBuilder;
|
||||||
|
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||||
|
import ru.nbch.credit_tracker.service.indic.FlagsService;
|
||||||
|
|
||||||
public class FlagsService2Test {
|
public class FlagsService2Test {
|
||||||
|
|
||||||
|
|
@ -127,7 +125,7 @@ public class FlagsService2Test {
|
||||||
|
|
||||||
private DataSource dataSource;
|
private DataSource dataSource;
|
||||||
private NamedParameterJdbcTemplate jdbcTemplate;
|
private NamedParameterJdbcTemplate jdbcTemplate;
|
||||||
private FlagsService2 flagsService;
|
private FlagsService flagsService;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp() {
|
void setUp() {
|
||||||
|
|
@ -146,7 +144,7 @@ public class FlagsService2Test {
|
||||||
jdbcTemplate.getJdbcTemplate().execute(RU_PASTDUEAREAR_CREATE);
|
jdbcTemplate.getJdbcTemplate().execute(RU_PASTDUEAREAR_CREATE);
|
||||||
jdbcTemplate.getJdbcTemplate().execute(RU_PAYMT_CREATE);
|
jdbcTemplate.getJdbcTemplate().execute(RU_PAYMT_CREATE);
|
||||||
|
|
||||||
flagsService = new FlagsService2(jdbcTemplate);
|
flagsService = new FlagsService(null, jdbcTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public class FlagsServiceTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testfindFlags() {
|
public void testfindFlags() {
|
||||||
FlagsService flagsService = new FlagsService(flagsMapper);
|
FlagsService flagsService = new FlagsService(flagsMapper, null);
|
||||||
|
|
||||||
when(flagsMapper.findRuPastDuarearData(Mockito.anyList())).thenReturn(ruPastDuarearDataList);
|
when(flagsMapper.findRuPastDuarearData(Mockito.anyList())).thenReturn(ruPastDuarearDataList);
|
||||||
when(flagsMapper.findRuPaymtData(Mockito.anyList(), Mockito.any())).thenReturn(ruPaymtDataList);
|
when(flagsMapper.findRuPaymtData(Mockito.anyList(), Mockito.any())).thenReturn(ruPaymtDataList);
|
||||||
|
|
@ -73,7 +73,7 @@ public class FlagsServiceTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testfindFlagsWithoutRuPaymt() {
|
public void testfindFlagsWithoutRuPaymt() {
|
||||||
FlagsService flagsService = new FlagsService(flagsMapper);
|
FlagsService flagsService = new FlagsService(flagsMapper, null);
|
||||||
|
|
||||||
when(flagsMapper.findRuPastDuarearData(Mockito.anyList())).thenReturn(ruPastDuarearDataList);
|
when(flagsMapper.findRuPastDuarearData(Mockito.anyList())).thenReturn(ruPastDuarearDataList);
|
||||||
when(flagsMapper.findRuPaymtData(Mockito.anyList(), Mockito.any())).thenReturn(new ArrayList<>());
|
when(flagsMapper.findRuPaymtData(Mockito.anyList(), Mockito.any())).thenReturn(new ArrayList<>());
|
||||||
|
|
@ -117,7 +117,7 @@ public class FlagsServiceTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testfindFlagsWithoutRuPastduearreae() {
|
public void testfindFlagsWithoutRuPastduearreae() {
|
||||||
FlagsService flagsService = new FlagsService(flagsMapper);
|
FlagsService flagsService = new FlagsService(flagsMapper, null);
|
||||||
|
|
||||||
when(flagsMapper.findRuPastDuarearData(Mockito.anyList())).thenReturn(new ArrayList<>());
|
when(flagsMapper.findRuPastDuarearData(Mockito.anyList())).thenReturn(new ArrayList<>());
|
||||||
when(flagsMapper.findRuPaymtData(Mockito.anyList(), Mockito.any())).thenReturn(ruPaymtDataList);
|
when(flagsMapper.findRuPaymtData(Mockito.anyList(), Mockito.any())).thenReturn(ruPaymtDataList);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue