Added finding flags for RU_PASTDUEARREAR; Updated tests

This commit is contained in:
Mikhail Trofimov 2025-09-25 15:46:04 +03:00
parent c245790eb5
commit b42e4f70df
4 changed files with 140 additions and 157 deletions

View file

@ -7,6 +7,7 @@ import ru.nbch.credit_tracker.service.indic.FlagsService;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
@SpringBootApplication @SpringBootApplication
public class CreditTrackerApplication { public class CreditTrackerApplication {
@ -21,7 +22,18 @@ public class CreditTrackerApplication {
fids.add(16442929); fids.add(16442929);
fids.add(114429070); fids.add(114429070);
fids.add(108696892); fids.add(108696892);
ctx.getBean(FlagsService.class).test(fids); FlagsService flagService = ctx.getBean(FlagsService.class);
Map<Integer, FlagsService.FlagsData> oldMap = flagService.findFlags(fids);
Map<Integer, FlagsService.FlagsData> newMap = flagService.findFlags2(fids);
System.out.println(oldMap);
System.out.println(newMap);
for (Integer fid : fids) {
FlagsService.FlagsData oldValue = oldMap.get(fid);
FlagsService.FlagsData newValue = newMap.get(fid);
System.out.println("OLD: " + oldValue.getFlagDebt5000() +"|" +oldValue.getFlag90days());
System.out.println("NEW: " + newValue.getFlagDebt5000() +"|" +newValue.getFlag90days());
System.out.println("_________________________________");
}
// UpdateProcessingPackagesService updateProcessingPackagesService = ctx.getBean(UpdateProcessingPackagesService.class); // UpdateProcessingPackagesService updateProcessingPackagesService = ctx.getBean(UpdateProcessingPackagesService.class);
// MonitoringService monitoringService = ctx.getBean(MonitoringService.class); // MonitoringService monitoringService = ctx.getBean(MonitoringService.class);
// UpdatingFlagsService updatingFlagsService = ctx.getBean(UpdatingFlagsService.class); // UpdatingFlagsService updatingFlagsService = ctx.getBean(UpdatingFlagsService.class);

View file

@ -18,6 +18,4 @@ public interface FlagsMapper {
List<FlagsService.RuPastDuarearData> findRuPastDuarearData(@Param("fids") List<Integer> fids); List<FlagsService.RuPastDuarearData> findRuPastDuarearData(@Param("fids") List<Integer> fids);
List<FlagsService.Flag90DaysData> findFlag90ByRuPaymtNewWithOrderBy(@Param("fids") List<Integer> fids);
} }

View file

@ -24,45 +24,85 @@ public class FlagsService {
this.mapper = mapper; this.mapper = mapper;
} }
public void test(List<Integer> fids) { public Map<Integer, FlagsData> findFlags(List<Integer> fids) {
Map<Integer, Integer> oldFlags5000 = calcFlag5000(fids); if (fids.isEmpty()) {
Map<Integer, Integer> oldFlags90 = calcFlag90DaysByPastDueArrear(fids); return new HashMap<>();
fids.sort(Comparator.naturalOrder());
Map<Integer, Integer> flag5000Map = new HashMap<>();
Map<Integer, Integer> flag90Days = new HashMap<>();
findFlags5000(fids, flag5000Map, flag90Days);
for (Map.Entry<Integer, Integer> flag : flag5000Map.entrySet()) {
if(!flag.getValue().equals(oldFlags5000.get(flag.getKey()))) {
String error = "New: "+flag.getKey() + " = " + flag.getValue() + "\n" +"Old: " + flag.getKey() + " = " + oldFlags5000.get(flag.getKey());
throw new AssertionError(error);
}
} }
List<Integer> distinctFids = fids.stream().distinct().toList();
log.debug("Fids count: {}", distinctFids.size());
Map<Integer, Integer> flags5000 = calcFlag5000(distinctFids);
Map<Integer, Integer> flags90DaysByPastDueArrear = calcFlag90DaysByPastDueArrear(distinctFids);
Map<Integer, Integer> flags90DaysByRuPaymt = calcFlag90DaysByRuPaymt(distinctFids);
for (Map.Entry<Integer, Integer> flag : flag90Days.entrySet()) { Map<Integer, FlagsData> result = new HashMap<>();
if(!flag.getValue().equals(oldFlags90.get(flag.getKey()))) { fids.forEach(fid -> {
String error = "New: "+flag.getKey() + " = " + flag.getValue() + "\n" +"Old: " + flag.getKey() + " = " + oldFlags90.get(flag.getKey()); Integer flagDebt5000 = flags5000.get(fid);
throw new AssertionError(error); 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 FlagsData(flagDebt5000, flag90days));
});
return result;
} }
private void findFlags5000(List<Integer> fids, Map<Integer, Integer> flag5000Map, Map<Integer, Integer> flag90Days) { public Map<Integer, 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<>();
findFlagsRuPastDueArrear(distinctFids, flags5000, flags90DaysByPastDueArrear);
Map<Integer, Integer> flags90DaysByRuPaymt = calcFlag90DaysByRuPaymt(distinctFids);
Map<Integer, 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 FlagsData(flagDebt5000, flag90days));
});
return result;
}
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");
List<RuPastDuarearData> ruPastDuarearDataList = mapper.findRuPastDuarearData(fids); List<RuPastDuarearData> ruPastDuarearDataList = mapper.findRuPastDuarearData(fids);
ruPastDuarearDataList.sort(Comparator.comparing(FlagsService.RuPastDuarearData::getFid) // сортируем сначала по фиду ruPastDuarearDataList.sort(Comparator.comparing(FlagsService.RuPastDuarearData::getFid) // сортируем сначала по фиду
.thenComparing(FlagsService.RuPastDuarearData::getReportedDate, Comparator.reverseOrder())); // Затем сортируем по REPORTED_DT по убыванию .thenComparing(FlagsService.RuPastDuarearData::getReportedDate, Comparator.reverseOrder())); // Затем сортируем по REPORTED_DT по убыванию
LocalDate yearAgo = LocalDate.parse("2024-09-09"); LocalDate yearAgo = LocalDate.now().minusYears(1);
for (Integer fid : fids) { for (Integer fid : fids) {
Iterator<RuPastDuarearData> iterator = ruPastDuarearDataList.iterator(); Iterator<RuPastDuarearData> iterator = ruPastDuarearDataList.iterator();
BigInteger prevAccSerialNum = null; BigInteger prevAccSerialNum = null;
while (iterator.hasNext()) { while (iterator.hasNext()) {
FlagsService.RuPastDuarearData data = iterator.next(); FlagsService.RuPastDuarearData data = iterator.next();
if (fid.equals(data.getFid())) { if (fid.equals(data.getFid())) {
if (flag5000Map.get(fid) == null) { // Первая запись в списке с макс REPORTED_DT. Нас интересует только она для флага 5000 if (flag5000Map.get(fid) == null) { // Первая запись в списке с макс REPORTED_DT. Нас интересует только она для флага 5000
if (prevAccSerialNum == null || !prevAccSerialNum.equals(data.getAccSerialNum())) { if (prevAccSerialNum == null || !prevAccSerialNum.equals(data.getAccSerialNum())) {
@ -104,36 +144,7 @@ public class FlagsService {
flag90Days.put(fid, 0); flag90Days.put(fid, 0);
} }
} }
} log.debug("Complete calculating flag 5000 and 90 days by RU_PASTDUEARREAR");
public Map<Integer, FlagsData> findFlags(List<Integer> fids) {
if (fids.isEmpty()) {
return new HashMap<>();
}
List<Integer> distinctFids = fids.stream().distinct().toList();
log.debug("Fids count: {}", distinctFids.size());
Map<Integer, Integer> flags5000 = calcFlag5000(distinctFids);
Map<Integer, Integer> flags90DaysByPastDueArrear = calcFlag90DaysByPastDueArrear(distinctFids);
Map<Integer, Integer> flags90DaysByRuPaymt = calcFlag90DaysByRuPaymt(distinctFids);
Map<Integer, 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 = flags90DaysByRuPaymt.get(fid);
if (flag90days == null) {
flag90days = 0;
}
}
result.put(fid, new FlagsData(flagDebt5000, flag90days));
});
return result;
} }
/** /**

View file

@ -4,6 +4,7 @@ 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 org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import ru.nbch.credit_tracker.mapper.indic.FlagsMapper; import ru.nbch.credit_tracker.mapper.indic.FlagsMapper;
import ru.nbch.credit_tracker.service.indic.FlagsService; import ru.nbch.credit_tracker.service.indic.FlagsService;
@ -11,16 +12,30 @@ import ru.nbch.credit_tracker.service.indic.FlagsService;
import java.math.BigDecimal; 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.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
public class FlagsServiceTest { public class FlagsServiceTest {
private static final LocalDate INITIAL_DATE = LocalDate.parse("2025-09-25");
@Mock @Mock
FlagsMapper flagsMapper; FlagsMapper flagsMapper;
@Test @Test
public void test() { public void testfindFlagsWithoutRuPaymt() {
FlagsService flagsService = new FlagsService(flagsMapper);
when(flagsMapper.findRuPastDuarearData(Mockito.anyList())).thenReturn(ruPastDuarearDataList);
when(flagsMapper.findFlag90ByRuPaymt(Mockito.anyList(), Mockito.any())).thenReturn(new ArrayList<>());
List<Integer> fids = new ArrayList<>(List.of( List<Integer> fids = new ArrayList<>(List.of(
1, // есть просрочка 5000, есть просрочка 90_days в RU_PASTDUEARREAR 1, // есть просрочка 5000, есть просрочка 90_days в RU_PASTDUEARREAR
2, // есть просрочка 5000, нет просрочки 90_days в RU_PASTDUEARREAR. Нет просрочки 90_days в RU_PAYMT 2, // есть просрочка 5000, нет просрочки 90_days в RU_PASTDUEARREAR. Нет просрочки 90_days в RU_PAYMT
@ -33,120 +48,67 @@ public class FlagsServiceTest {
9) // нету в RU_PASTDUEARREAR, нету в RU_PAYMT 9) // нету в RU_PASTDUEARREAR, нету в RU_PAYMT
); );
fids.sort(Comparator.naturalOrder()); Map<Integer, FlagsService.FlagsData> resultMap = flagsService.findFlags2(fids);
Map<Integer, Boolean> flag5000Map = new HashMap<>(); Assertions.assertEquals(9, resultMap.size());
Map<Integer, Boolean> flag90Days = new HashMap<>(); Assertions.assertEquals(1, resultMap.get(1).getFlagDebt5000());
findFlags5000(fids, flag5000Map, flag90Days); Assertions.assertEquals(1, resultMap.get(2).getFlagDebt5000());
Assertions.assertEquals(1, resultMap.get(3).getFlagDebt5000());
Assertions.assertEquals(0, resultMap.get(4).getFlagDebt5000());
Assertions.assertEquals(1, resultMap.get(5).getFlagDebt5000());
Assertions.assertEquals(0, resultMap.get(6).getFlagDebt5000());
Assertions.assertEquals(0, resultMap.get(7).getFlagDebt5000());
Assertions.assertEquals(0, resultMap.get(8).getFlagDebt5000());
Assertions.assertEquals(0, resultMap.get(9).getFlagDebt5000());
Assertions.assertEquals(9, flag5000Map.size()); Assertions.assertEquals(1, resultMap.get(1).getFlag90days());
Assertions.assertEquals(true, flag5000Map.get(1)); Assertions.assertEquals(0, resultMap.get(2).getFlag90days());
Assertions.assertEquals(true, flag5000Map.get(2)); Assertions.assertEquals(0, resultMap.get(3).getFlag90days());
Assertions.assertEquals(true, flag5000Map.get(3)); Assertions.assertEquals(0, resultMap.get(4).getFlag90days());
Assertions.assertEquals(false, flag5000Map.get(4)); Assertions.assertEquals(1, resultMap.get(5).getFlag90days());
Assertions.assertEquals(true, flag5000Map.get(5)); Assertions.assertEquals(0, resultMap.get(6).getFlag90days());
Assertions.assertEquals(false, flag5000Map.get(6)); Assertions.assertEquals(1, resultMap.get(7).getFlag90days());
Assertions.assertEquals(false, flag5000Map.get(7)); Assertions.assertEquals(0, resultMap.get(8).getFlag90days());
Assertions.assertEquals(false, flag5000Map.get(8)); Assertions.assertEquals(0, resultMap.get(9).getFlag90days());
Assertions.assertEquals(false, flag5000Map.get(9));
Assertions.assertEquals(9, flag90Days.size());
Assertions.assertEquals(true, flag90Days.get(1));
Assertions.assertEquals(false, flag90Days.get(2));
Assertions.assertEquals(false, flag90Days.get(3));
Assertions.assertEquals(false, flag90Days.get(4));
Assertions.assertEquals(true, flag90Days.get(5));
Assertions.assertEquals(false, flag90Days.get(6));
Assertions.assertEquals(true, flag90Days.get(7));
Assertions.assertEquals(false, flag90Days.get(8));
Assertions.assertEquals(false, flag90Days.get(9));
} }
private void findFlags5000(List<Integer> fids, Map<Integer, Boolean> flag5000Map, Map<Integer, Boolean> flag90Days) {
ruPastDuarearDataList.sort(Comparator.comparing(FlagsService.RuPastDuarearData::getFid) // сортируем сначала по фиду
.thenComparing(FlagsService.RuPastDuarearData::getReportedDate, Comparator.reverseOrder())); // Затем сортируем по REPORTED_DT по убыванию
LocalDate yearAgo = LocalDate.parse("2024-09-09");
for (Integer fid : fids) {
Iterator<FlagsService.RuPastDuarearData> iterator = ruPastDuarearDataList.iterator();
BigInteger prevAccSerialNum = null;
while (iterator.hasNext()) {
FlagsService.RuPastDuarearData data = iterator.next();
if (fid.equals(data.getFid())) {
if (flag5000Map.get(fid) == null) { // Первая запись в списке с макс REPORTED_DT. Нас интересует только она для флага 5000
if (prevAccSerialNum == null || !prevAccSerialNum.equals(data.getAccSerialNum())) {
if (data.getAmtPastDue() != null && data.getAmtPastDue().compareTo(BigDecimal.valueOf(5000)) >= 0) {
flag5000Map.put(fid, true);
} else {
flag5000Map.put(fid, false);
}
prevAccSerialNum = data.getAccSerialNum();
}
}
if (flag90Days.get(fid) != null && flag90Days.get(fid).equals(Boolean.TRUE)) {
iterator.remove();
break;
}
if (flag90Days.get(fid) == null || flag90Days.get(fid).equals(Boolean.FALSE)) {
if (data.getDaysPastDue() != null) {
boolean has90daysFlag = data.getDaysPastDue().compareTo(BigInteger.valueOf(90)) >= 0 && !data.getReportedDate().isBefore(yearAgo);
if (has90daysFlag) {
flag90Days.put(fid, true);
iterator.remove();
break;
} else {
flag90Days.put(fid, false);
iterator.remove();
}
} else {
iterator.remove();
}
}
}
}
if (flag5000Map.get(fid) == null) {
flag5000Map.put(fid, false);
}
if (flag90Days.get(fid) == null) {
flag90Days.put(fid, false);
}
}
}
private final List<FlagsService.RuPastDuarearData> ruPastDuarearDataList = new ArrayList<>( private final List<FlagsService.RuPastDuarearData> ruPastDuarearDataList = new ArrayList<>(
List.of( List.of(
new FlagsService.RuPastDuarearData(1, BigInteger.valueOf(1), LocalDate.parse("2025-12-31"), BigDecimal.valueOf(36000.00), BigInteger.valueOf(159)), // просрочка 5000 и 90_days по этой записи new FlagsService.RuPastDuarearData(1, BigInteger.valueOf(1), calcLocalDateFromInitialDate("2025-05-31"), BigDecimal.valueOf(36000.00), BigInteger.valueOf(159)), // просрочка 5000 и 90_days по этой записи
new FlagsService.RuPastDuarearData(2, BigInteger.valueOf(2), LocalDate.parse("2021-12-29"), BigDecimal.valueOf(3200.00), null), // не макс reported_date для того же acc_serial_num new FlagsService.RuPastDuarearData(2, BigInteger.valueOf(2), calcLocalDateFromInitialDate("2021-12-29"), BigDecimal.valueOf(3200.00), null), // не макс reported_date для того же acc_serial_num
new FlagsService.RuPastDuarearData(2, BigInteger.valueOf(2), LocalDate.parse("2022-01-28"), BigDecimal.valueOf(6700.00), null), // не макс reported_date для того же acc_serial_num new FlagsService.RuPastDuarearData(2, BigInteger.valueOf(2), calcLocalDateFromInitialDate("2022-01-28"), BigDecimal.valueOf(6700.00), null), // не макс reported_date для того же acc_serial_num
new FlagsService.RuPastDuarearData(2, BigInteger.valueOf(2), LocalDate.parse("2025-04-06"), BigDecimal.valueOf(5700.00), null), // просрочка 5000 по этой записи new FlagsService.RuPastDuarearData(2, BigInteger.valueOf(2), calcLocalDateFromInitialDate("2025-04-06"), BigDecimal.valueOf(5700.00), null), // просрочка 5000 по этой записи
new FlagsService.RuPastDuarearData(3, BigInteger.valueOf(3), LocalDate.parse("2025-01-14"), BigDecimal.valueOf(300000000000.00), null), new FlagsService.RuPastDuarearData(3, BigInteger.valueOf(3), calcLocalDateFromInitialDate("2025-01-14"), BigDecimal.valueOf(300000000000.00), null),
new FlagsService.RuPastDuarearData(2, BigInteger.valueOf(2), LocalDate.parse("2021-11-29"), BigDecimal.valueOf(0.00), null), // не макс reported_date для того же acc_serial_num new FlagsService.RuPastDuarearData(2, BigInteger.valueOf(2), calcLocalDateFromInitialDate("2021-11-29"), BigDecimal.valueOf(0.00), null), // не макс reported_date для того же acc_serial_num
new FlagsService.RuPastDuarearData(4, BigInteger.valueOf(4), LocalDate.parse("2025-12-06"), BigDecimal.valueOf(4000.00), null), // нет просрочек new FlagsService.RuPastDuarearData(4, BigInteger.valueOf(4), calcLocalDateFromInitialDate("2025-12-06"), BigDecimal.valueOf(4000.00), null), // нет просрочек
new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), LocalDate.parse("2021-04-01"), BigDecimal.valueOf(2000.31), BigInteger.valueOf(182)), // не макс reported_date для того же acc_serial_num new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), calcLocalDateFromInitialDate("2021-04-01"), BigDecimal.valueOf(2000.31), BigInteger.valueOf(182)), // не макс reported_date для того же acc_serial_num
new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), LocalDate.parse("2021-05-01"), BigDecimal.valueOf(2000.31), BigInteger.valueOf(212)), // не макс reported_date для того же acc_serial_num new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), calcLocalDateFromInitialDate("2021-05-01"), BigDecimal.valueOf(2000.31), BigInteger.valueOf(212)), // не макс reported_date для того же acc_serial_num
new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), LocalDate.parse("2021-05-31"), BigDecimal.valueOf(2000.31), null), // не макс reported_date для того же acc_serial_num new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), calcLocalDateFromInitialDate("2021-05-31"), BigDecimal.valueOf(2000.31), null), // не макс reported_date для того же acc_serial_num
new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), LocalDate.parse("2021-07-01"), BigDecimal.valueOf(2000.31), BigInteger.valueOf(273)), // не макс reported_date для того же acc_serial_num new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), calcLocalDateFromInitialDate("2021-07-01"), BigDecimal.valueOf(2000.31), BigInteger.valueOf(273)), // не макс reported_date для того же acc_serial_num
new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), LocalDate.parse("2021-07-31"), BigDecimal.valueOf(2000.31), null), // не макс reported_date для того же acc_serial_num new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), calcLocalDateFromInitialDate("2021-07-31"), BigDecimal.valueOf(2000.31), null), // не макс reported_date для того же acc_serial_num
new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), LocalDate.parse("2021-08-04"), BigDecimal.valueOf(7000.31), BigInteger.valueOf(307)), // не макс reported_date для того же acc_serial_num new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), calcLocalDateFromInitialDate("2021-08-04"), BigDecimal.valueOf(7000.31), BigInteger.valueOf(307)), // не макс reported_date для того же acc_serial_num
new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), LocalDate.parse("2025-09-08"), BigDecimal.valueOf(2000.31), BigInteger.valueOf(338)), // не макс reported_date для того же acc_serial_num, просрочка 90_days будет взята у этой записи new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), calcLocalDateFromInitialDate("2025-09-08"), BigDecimal.valueOf(2000.31), BigInteger.valueOf(338)), // не макс reported_date для того же acc_serial_num, просрочка 90_days будет взята у этой записи
new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(51), LocalDate.parse("2025-09-09"), BigDecimal.valueOf(7000.31), BigInteger.valueOf(368)), // Просрочка 5000 будет взята у этой записи. Уникальный acc_serial_num с макс reported_dt new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(51), calcLocalDateFromInitialDate("2025-09-09"), BigDecimal.valueOf(7000.31), BigInteger.valueOf(368)), // Просрочка 5000 будет взята у этой записи. Уникальный acc_serial_num с макс reported_dt
new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), LocalDate.parse("2021-11-04"), BigDecimal.valueOf(2000.31), BigInteger.valueOf(399)), // не макс reported_date для того же acc_serial_num new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), calcLocalDateFromInitialDate("2021-11-04"), BigDecimal.valueOf(2000.31), BigInteger.valueOf(399)), // не макс reported_date для того же acc_serial_num
new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), LocalDate.parse("2022-01-04"), BigDecimal.valueOf(5000.31), BigInteger.valueOf(5)), // не макс reported_date для того же acc_serial_num new FlagsService.RuPastDuarearData(5, BigInteger.valueOf(5), calcLocalDateFromInitialDate("2022-01-04"), BigDecimal.valueOf(5000.31), BigInteger.valueOf(5)), // не макс reported_date для того же acc_serial_num
new FlagsService.RuPastDuarearData(6, BigInteger.valueOf(6), LocalDate.parse("2025-09-09"), BigDecimal.valueOf(3000), null), // Нет просрочки 5000, нет просрочки 90_days (90_days будет в RU_PAYMT) new FlagsService.RuPastDuarearData(6, BigInteger.valueOf(6), calcLocalDateFromInitialDate("2025-09-09"), BigDecimal.valueOf(3000), null), // Нет просрочки 5000, нет просрочки 90_days (90_days будет в RU_PAYMT)
new FlagsService.RuPastDuarearData(7, BigInteger.valueOf(7), LocalDate.parse("2025-09-09"), BigDecimal.valueOf(5500), BigInteger.valueOf(90)), // не макс reported_date для того же acc_serial_num. 90_days будет взята отсюда new FlagsService.RuPastDuarearData(7, BigInteger.valueOf(7), calcLocalDateFromInitialDate("2025-09-09"), BigDecimal.valueOf(5500), BigInteger.valueOf(90)), // не макс reported_date для того же acc_serial_num. 90_days будет взята отсюда
new FlagsService.RuPastDuarearData(7, BigInteger.valueOf(7), LocalDate.parse("2025-09-10"), BigDecimal.valueOf(3000), null) // Нет просрочки 5000. Уникальный acc_serial_num с макс reported_dt new FlagsService.RuPastDuarearData(7, BigInteger.valueOf(7), calcLocalDateFromInitialDate("2025-09-10"), BigDecimal.valueOf(3000), null) // Нет просрочки 5000. Уникальный acc_serial_num с макс reported_dt
) )
); );
private LocalDate calcLocalDateFromInitialDate(String date) {
LocalDateTime now = LocalDateTime.now();
long daysPassed = ChronoUnit.DAYS.between(INITIAL_DATE, now);
return LocalDate.parse(date).plusDays(daysPassed);
}
} }