ialbert 2026-03-16 14:44:45 +03:00
parent 8233617d66
commit 03328d6ffd
4 changed files with 58 additions and 17 deletions

View file

@ -14,4 +14,6 @@ public interface IndicFlagsMapper {
List<PaymentsFlag> findFlag90ByRuPaymt(@Param("fids") List<Integer> fids, @Param("reportedDate") LocalDate reportedDate);
List<PaymentsFlag> findFlag90ByRuAllArrears(@Param("fids") List<Integer> fids, @Param("reportedDate") LocalDate reportedDate);
}

View file

@ -1,10 +1,10 @@
package ru.nbch.credit_tracker.service.indic;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.entities.indic.PaymentsFlag;
@ -41,4 +41,8 @@ public class FlagsService2 {
.collect(Collectors.toMap(PaymentsFlag::getFid, PaymentsFlag::getFlag));
}
public Map<Integer, Integer> findFlag90ByRuAllArrears(List<Integer> fids, LocalDate date) {
return flagsMapper.findFlag90ByRuAllArrears(fids, date).stream()
.collect(Collectors.toMap(PaymentsFlag::getFid, PaymentsFlag::getFlag));
}
}

View file

@ -54,6 +54,7 @@ public class FlagsEnricher {
Map<Integer, Integer> flagsDebt5000 = flagsService.findFlagsDebt5000(noFlagDataFids);
Map<Integer, Integer> flag90ByPastDueArrear = flagsService.findFlag90ByPastDueArrear(noFlagDataFids, yearAgo);
Map<Integer, Integer> flag90ByRuPaymt = flagsService.findFlag90ByRuPaymt(noFlagDataFids, yearAgo);
Map<Integer, Integer> flag90ByRuAllArrear = flagsService.findFlag90ByRuAllArrears(noFlagDataFids, yearAgo);
List<FlagData> flagCacheOnUpdate = phonesMaps.stream()
.flatMap(phonesMap -> {
@ -61,8 +62,8 @@ public class FlagsEnricher {
Integer debt5000 = flagsDebt5000.getOrDefault(fid, 0);
int pastDue90 = flag90ByPastDueArrear.getOrDefault(fid, 0);
int paymt90 = flag90ByRuPaymt.getOrDefault(fid, 0);
Integer flagDays90 = Math.max(pastDue90, paymt90);
int allArrears90 = flag90ByRuAllArrear.getOrDefault(fid, 0);
Integer flagDays90 = Math.max(allArrears90, Math.max(pastDue90, paymt90));
FlagData flagData = FlagData.builder()
.flag_90_12(flagDays90)
.flag_debt5000(debt5000)

View file

@ -46,21 +46,42 @@
</select>
<select id="findFlagsDebt5000" resultMap="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>
AND REPORTED_DT >= (CURRENT DATE - 12 MONTHS)
)
where rn=1
SELECT FID as fid,
(case
when (sum(case when DEBT_AMT > 5000 then 1 else 0 end) = 0) then 0
else 1 end) as flag
FROM (
select FID, DEBT_AMT, rank() over (partition by FID, ACC_SERIAL_NUM order by REPORTED_DT desc) rn
from (SELECT FID,
ACC_SERIAL_NUM,
REPORTED_DT,
AMT_PAST_DUE AS DEBT_AMT
FROM INDIC.RU_PASTDUEARREAR
WHERE REPORTED_DT >= (CURRENT DATE - 12 MONTHS)
AND AMT_PAST_DUE IS NOT NULL
AND FID in
<foreach item="fid" collection="fids" open="(" separator="," close=")">
#{fid}
</foreach>
UNION ALL
SELECT FID,
ACC_SERIAL_NUM,
REPORTED_DT,
PDA_AMT_PASTDUE AS DEBT_AMT
FROM INDIC.RU_ALL_ARREARS
WHERE REPORTED_DT >= (CURRENT DATE - 12 MONTHS)
AND PDA_AMT_PASTDUE IS NOT NULL
AND FID IN
<foreach item="fid" collection="fids" open="(" separator="," close=")">
#{fid}
</foreach>
) as united_data
) as acc_debt
where rn = 1
group by FID
WITH UR
with ur
</select>
<select id="findFlag90ByPastDueArrear" resultMap="PaymentsFlagResult">
@ -76,6 +97,19 @@
WITH UR
</select>
<select id="findFlag90ByRuAllArrears" resultMap="PaymentsFlagResult">
SELECT
FID as fid,
(case when (sum(case when (REPORTED_DT >= #{reportedDate} and PDA_DAYS_PAST_DUE >= 90) then 1 else 0 end) = 0) then 0 else 1 end) as flag
FROM RU_ALL_ARREARS
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,