From 881c31becddcb86772a4776fb79f8b395aba6d7b Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 11 Nov 2025 09:43:38 +0300 Subject: [PATCH] flag calc --- .../mapper/indic/FlagsMapper.java | 13 +++--- .../service/indic/FlagsService2.java | 40 +++++++++++-------- .../service/task/impl/FlagsEnricher.java | 40 +++++++++++++++---- 3 files changed, 62 insertions(+), 31 deletions(-) diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/indic/FlagsMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/indic/FlagsMapper.java index a8c768b..df988b7 100644 --- a/src/main/java/ru/nbch/credit_tracker/mapper/indic/FlagsMapper.java +++ b/src/main/java/ru/nbch/credit_tracker/mapper/indic/FlagsMapper.java @@ -1,17 +1,18 @@ package ru.nbch.credit_tracker.mapper.indic; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import ru.nbch.credit_tracker.service.indic.FlagsService; - import java.time.LocalDate; import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import ru.nbch.credit_tracker.entities.indic.PaymentsFlag; @Mapper public interface FlagsMapper { - List findRuPastDuarearData(@Param("fids") List fids); + List findFlagsDebt5000(@Param("fids") List fids); - List findRuPaymtData(@Param("fids") List fids, @Param("reportedDate") LocalDate reportedDate); + List findFlag90ByPastDueArrear(@Param("fids") List fids, @Param("reportedDate") LocalDate reportedDate); + + List findFlag90ByRuPaymt(@Param("fids") List fids, @Param("reportedDate") LocalDate reportedDate); } diff --git a/src/main/java/ru/nbch/credit_tracker/service/indic/FlagsService2.java b/src/main/java/ru/nbch/credit_tracker/service/indic/FlagsService2.java index ee04459..b31367a 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/indic/FlagsService2.java +++ b/src/main/java/ru/nbch/credit_tracker/service/indic/FlagsService2.java @@ -1,31 +1,37 @@ package ru.nbch.credit_tracker.service.indic; -import lombok.extern.slf4j.Slf4j; -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 ru.nbch.credit_tracker.entities.app.PhoneFidMap; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.sql.ResultSet; -import java.sql.SQLException; import java.time.LocalDate; -import java.time.LocalDateTime; -import java.util.*; -import ru.nbch.credit_tracker.model.SubjectProfile; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import ru.nbch.credit_tracker.entities.indic.PaymentsFlag; +import ru.nbch.credit_tracker.mapper.indic.FlagsMapper; @Slf4j @Service public class FlagsService2 { + private final FlagsMapper flagsMapper; - public FlagsService2() { - + public FlagsService2(FlagsMapper flagsMapper) { + this.flagsMapper = flagsMapper; } - // TODO optimize + public Map findFlagsDebt5000(List fids) { + return flagsMapper.findFlagsDebt5000(fids).stream() + .collect(Collectors.toMap(PaymentsFlag::getFid, PaymentsFlag::getFlag)); + } + public Map findFlag90ByPastDueArrear(List fids, LocalDate date) { + return flagsMapper.findFlag90ByPastDueArrear(fids, date).stream() + .collect(Collectors.toMap(PaymentsFlag::getFid, PaymentsFlag::getFlag)); + } + + public Map findFlag90ByRuPaymt(List fids, LocalDate date) { + return flagsMapper.findFlag90ByRuPaymt(fids, date).stream() + .collect(Collectors.toMap(PaymentsFlag::getFid, PaymentsFlag::getFlag)); + } } diff --git a/src/main/java/ru/nbch/credit_tracker/service/task/impl/FlagsEnricher.java b/src/main/java/ru/nbch/credit_tracker/service/task/impl/FlagsEnricher.java index da941d8..f7239ef 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/task/impl/FlagsEnricher.java +++ b/src/main/java/ru/nbch/credit_tracker/service/task/impl/FlagsEnricher.java @@ -1,7 +1,10 @@ package ru.nbch.credit_tracker.service.task.impl; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.concurrent.BlockingQueue; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; @@ -72,16 +75,37 @@ public class FlagsEnricher implements Runnable { public void process(SubjectPayload subjectPayload) { List subjects = subjectPayload.getSubjects(); log.debug("FlagsEnricher handle by packageId: {}, size: {}", subjectPayload.getPackageId(), subjects.size()); -// flagsService.fillFlagsData(subjects); + + List fids = subjects.stream() + .map(SubjectProfile::getFid) + .filter(Objects::nonNull) + .toList(); + LocalDate yearAgo = LocalDate.now().minusYears(1); + + Map flagsDebt5000 = flagsService.findFlagsDebt5000(fids); + Map flag90ByPastDueArrear = flagsService.findFlag90ByPastDueArrear(fids, yearAgo); + Map flag90ByRuPaymt = flagsService.findFlag90ByRuPaymt(fids, yearAgo); List phoneFidMaps = subjects.stream().map(subject -> { - return PhoneFidMap.builder() - .phone(subject.getPhone()) - .subjectId(subject.getIdentifier()) - .packageId(subjectPayload.getPackageId()) - .fid(subject.getFid()) - .build(); - }).toList(); + Integer debt500 = null; + Integer pastDue90 = null; + Integer paymt90 = null; + + if (subject.getFid() != null) { + debt500 = flagsDebt5000.getOrDefault(subject.getFid(), 0); + pastDue90 = flag90ByPastDueArrear.getOrDefault(subject.getFid(), 0); + paymt90 = flag90ByRuPaymt.getOrDefault(subject.getFid(), 0); + } + + return PhoneFidMap.builder() + .phone(subject.getPhone()) + .subjectId(subject.getIdentifier()) + .packageId(subjectPayload.getPackageId()) + .fid(subject.getFid()) + .flagDebt5000(debt500) + .flag90days(paymt90) + .build(); + }).toList(); phoneFidMapMapper.register(phoneFidMaps); }