flag calc

This commit is contained in:
etreschenkov 2025-11-11 09:43:38 +03:00
parent 83a452fed6
commit 881c31becd
3 changed files with 62 additions and 31 deletions

View file

@ -1,17 +1,18 @@
package ru.nbch.credit_tracker.mapper.indic; 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.time.LocalDate;
import java.util.List; 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 @Mapper
public interface FlagsMapper { public interface FlagsMapper {
List<FlagsService.RuPastDuarearData> findRuPastDuarearData(@Param("fids") List<Integer> fids); List<PaymentsFlag> findFlagsDebt5000(@Param("fids") List<Integer> fids);
List<FlagsService.RuPaymtData> findRuPaymtData(@Param("fids") List<Integer> fids, @Param("reportedDate") LocalDate reportedDate); List<PaymentsFlag> findFlag90ByPastDueArrear(@Param("fids") List<Integer> fids, @Param("reportedDate") LocalDate reportedDate);
List<PaymentsFlag> findFlag90ByRuPaymt(@Param("fids") List<Integer> fids, @Param("reportedDate") LocalDate reportedDate);
} }

View file

@ -1,31 +1,37 @@
package ru.nbch.credit_tracker.service.indic; 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.LocalDate;
import java.time.LocalDateTime; import java.util.List;
import java.util.*; import java.util.Map;
import ru.nbch.credit_tracker.model.SubjectProfile; 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 @Slf4j
@Service @Service
public class FlagsService2 { public class FlagsService2 {
private final FlagsMapper flagsMapper;
public FlagsService2() { public FlagsService2(FlagsMapper flagsMapper) {
this.flagsMapper = flagsMapper;
} }
// TODO optimize public Map<Integer, Integer> findFlagsDebt5000(List<Integer> fids) {
return flagsMapper.findFlagsDebt5000(fids).stream()
.collect(Collectors.toMap(PaymentsFlag::getFid, PaymentsFlag::getFlag));
}
public Map<Integer, Integer> findFlag90ByPastDueArrear(List<Integer> fids, LocalDate date) {
return flagsMapper.findFlag90ByPastDueArrear(fids, date).stream()
.collect(Collectors.toMap(PaymentsFlag::getFid, PaymentsFlag::getFlag));
}
public Map<Integer, Integer> findFlag90ByRuPaymt(List<Integer> fids, LocalDate date) {
return flagsMapper.findFlag90ByRuPaymt(fids, date).stream()
.collect(Collectors.toMap(PaymentsFlag::getFid, PaymentsFlag::getFlag));
}
} }

View file

@ -1,7 +1,10 @@
package ru.nbch.credit_tracker.service.task.impl; package ru.nbch.credit_tracker.service.task.impl;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.BlockingQueue; import java.util.concurrent.BlockingQueue;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@ -72,16 +75,37 @@ public class FlagsEnricher implements Runnable {
public void process(SubjectPayload subjectPayload) { public void process(SubjectPayload subjectPayload) {
List<SubjectProfile> subjects = subjectPayload.getSubjects(); List<SubjectProfile> subjects = subjectPayload.getSubjects();
log.debug("FlagsEnricher handle by packageId: {}, size: {}", subjectPayload.getPackageId(), subjects.size()); log.debug("FlagsEnricher handle by packageId: {}, size: {}", subjectPayload.getPackageId(), subjects.size());
// flagsService.fillFlagsData(subjects);
List<Integer> fids = subjects.stream()
.map(SubjectProfile::getFid)
.filter(Objects::nonNull)
.toList();
LocalDate yearAgo = LocalDate.now().minusYears(1);
Map<Integer, Integer> flagsDebt5000 = flagsService.findFlagsDebt5000(fids);
Map<Integer, Integer> flag90ByPastDueArrear = flagsService.findFlag90ByPastDueArrear(fids, yearAgo);
Map<Integer, Integer> flag90ByRuPaymt = flagsService.findFlag90ByRuPaymt(fids, yearAgo);
List<PhoneFidMap> phoneFidMaps = subjects.stream().map(subject -> { List<PhoneFidMap> phoneFidMaps = subjects.stream().map(subject -> {
return PhoneFidMap.builder() Integer debt500 = null;
.phone(subject.getPhone()) Integer pastDue90 = null;
.subjectId(subject.getIdentifier()) Integer paymt90 = null;
.packageId(subjectPayload.getPackageId())
.fid(subject.getFid()) if (subject.getFid() != null) {
.build(); debt500 = flagsDebt5000.getOrDefault(subject.getFid(), 0);
}).toList(); 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); phoneFidMapMapper.register(phoneFidMaps);
} }