all queries
This commit is contained in:
parent
f083716071
commit
4114576a78
3 changed files with 230 additions and 4 deletions
|
|
@ -16,4 +16,21 @@ public interface FlagsMapper {
|
||||||
|
|
||||||
List<FlagsService.FlagFidData> findFlag90ByRuPaymt(@Param("fids") List<Integer> fids, @Param("reportedDate") LocalDate reportedDate);
|
List<FlagsService.FlagFidData> findFlag90ByRuPaymt(@Param("fids") List<Integer> fids, @Param("reportedDate") LocalDate reportedDate);
|
||||||
|
|
||||||
|
List<FlagsService.FlagFidData> findFlagsDebt5000Old(@Param("fids") List<Integer> fids);
|
||||||
|
|
||||||
|
List<FlagsService.FlagFidData> findFlag90ByPastDueArrearOld(@Param("fids") List<Integer> fids, @Param("reportedDate") LocalDate reportedDate);
|
||||||
|
|
||||||
|
List<FlagsService.FlagFidData> findFlag90ByRuPaymtOld(@Param("fids") List<Integer> fids, @Param("reportedDate") LocalDate reportedDate);
|
||||||
|
|
||||||
|
List<FlagsService.Debt5000Data> findFlagsDebt5000New(@Param("fids") List<Integer> fids);
|
||||||
|
|
||||||
|
List<FlagsService.Debt5000Data> findFlagsDebt5000NewWithOrderBy(@Param("fids") List<Integer> fids);
|
||||||
|
|
||||||
|
List<FlagsService.Flag90DaysData> findFlag90ByPastDueArrearNew(@Param("fids") List<Integer> fids, @Param("reportedDate") LocalDate reportedDate);
|
||||||
|
|
||||||
|
List<FlagsService.Flag90DaysData> findFlag90ByPastDueArrearNewWithOrderBy(@Param("fids") List<Integer> fids);
|
||||||
|
|
||||||
|
List<FlagsService.Flag90DaysData> findFlag90ByRuPaymtNew(@Param("fids") List<Integer> fids, @Param("reportedDate") LocalDate reportedDate);
|
||||||
|
|
||||||
|
List<FlagsService.Flag90DaysData> findFlag90ByRuPaymtNewWithOrderBy(@Param("fids") List<Integer> fids);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,5 @@
|
||||||
package ru.nbch.credit_tracker.service.indic;
|
package ru.nbch.credit_tracker.service.indic;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
@ -12,6 +8,13 @@ import org.slf4j.LoggerFactory;
|
||||||
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;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class FlagsService {
|
public class FlagsService {
|
||||||
|
|
||||||
|
|
@ -29,8 +32,11 @@ public class FlagsService {
|
||||||
List<Integer> distinctFids = fids.stream().distinct().toList();
|
List<Integer> distinctFids = fids.stream().distinct().toList();
|
||||||
log.debug("Fids count: {}", distinctFids.size());
|
log.debug("Fids count: {}", distinctFids.size());
|
||||||
Map<Integer, Integer> flags5000 = calcFlag5000(distinctFids);
|
Map<Integer, Integer> flags5000 = calcFlag5000(distinctFids);
|
||||||
|
calcFlag500Test(distinctFids);
|
||||||
Map<Integer, Integer> flags90DaysByPastDueArrear = calcFlag90DaysByPastDueArrear(distinctFids);
|
Map<Integer, Integer> flags90DaysByPastDueArrear = calcFlag90DaysByPastDueArrear(distinctFids);
|
||||||
|
calcFlag90DaysByPastDueArrearTest(distinctFids);
|
||||||
Map<Integer, Integer> flags90DaysByRuPaymt = calcFlag90DaysByRuPaymt(distinctFids);
|
Map<Integer, Integer> flags90DaysByRuPaymt = calcFlag90DaysByRuPaymt(distinctFids);
|
||||||
|
calcFlag90DaysByRuPaymtTest(distinctFids);
|
||||||
|
|
||||||
Map<Integer, FlagsData> result = new HashMap<>();
|
Map<Integer, FlagsData> result = new HashMap<>();
|
||||||
fids.forEach(fid -> {
|
fids.forEach(fid -> {
|
||||||
|
|
@ -65,6 +71,18 @@ public class FlagsService {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void calcFlag500Test(List<Integer> fids) {
|
||||||
|
log.debug("Start findFlagsDebt5000Old");
|
||||||
|
mapper.findFlagsDebt5000Old(fids);
|
||||||
|
log.debug("Complete findFlagsDebt5000Old");
|
||||||
|
log.debug("Start findFlagsDebt5000New");
|
||||||
|
mapper.findFlagsDebt5000New(fids);
|
||||||
|
log.debug("Complete findFlagsDebt5000New");
|
||||||
|
log.debug("Start findFlagsDebt5000NewWithOrderBy");
|
||||||
|
mapper.findFlagsDebt5000NewWithOrderBy(fids);
|
||||||
|
log.debug("Complete findFlagsDebt5000NewWithOrderBy");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Флаг = 1, если выполняется хотя бы одно из условий:
|
* Флаг = 1, если выполняется хотя бы одно из условий:
|
||||||
* В INDIC.RU_PASTDUEARREAR или RU_PAYMT у данного FID есть запись с DAYS_PAST_DUE ≥ 90 и REPORTED_DT >= текущая дата – 12 месяцев.
|
* В INDIC.RU_PASTDUEARREAR или RU_PAYMT у данного FID есть запись с DAYS_PAST_DUE ≥ 90 и REPORTED_DT >= текущая дата – 12 месяцев.
|
||||||
|
|
@ -79,6 +97,19 @@ public class FlagsService {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void calcFlag90DaysByPastDueArrearTest(List<Integer> fids) {
|
||||||
|
LocalDate yearAgo = LocalDate.now().minusYears(1);
|
||||||
|
log.debug("Start findFlag90ByPastDueArrearOld");
|
||||||
|
mapper.findFlag90ByPastDueArrearOld(fids, yearAgo);
|
||||||
|
log.debug("Complete findFlag90ByPastDueArrearOld");
|
||||||
|
log.debug("Start findFlag90ByPastDueArrearNew");
|
||||||
|
mapper.findFlag90ByPastDueArrearNew(fids, yearAgo);
|
||||||
|
log.debug("Complete findFlag90ByPastDueArrearNew");
|
||||||
|
log.debug("Start findFlag90ByPastDueArrearNewWithOrderBy");
|
||||||
|
mapper.findFlag90ByPastDueArrearNewWithOrderBy(fids);
|
||||||
|
log.debug("Complete findFlag90ByPastDueArrearNewWithOrderBy");
|
||||||
|
}
|
||||||
|
|
||||||
private Map<Integer, Integer> calcFlag90DaysByRuPaymt(List<Integer> fids) {
|
private Map<Integer, Integer> calcFlag90DaysByRuPaymt(List<Integer> fids) {
|
||||||
log.debug("Start calculating flag 90 by ruPaymt");
|
log.debug("Start calculating flag 90 by ruPaymt");
|
||||||
LocalDate yearAgo = LocalDate.now().minusYears(1);
|
LocalDate yearAgo = LocalDate.now().minusYears(1);
|
||||||
|
|
@ -88,6 +119,19 @@ public class FlagsService {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void calcFlag90DaysByRuPaymtTest(List<Integer> fids) {
|
||||||
|
LocalDate yearAgo = LocalDate.now().minusYears(1);
|
||||||
|
log.debug("Start findFlag90ByRuPaymtOld");
|
||||||
|
mapper.findFlag90ByRuPaymtOld(fids,yearAgo);
|
||||||
|
log.debug("Complete findFlag90ByRuPaymtOld");
|
||||||
|
log.debug("Start findFlag90ByRuPaymtNew");
|
||||||
|
mapper.findFlag90ByRuPaymtNew(fids, yearAgo);
|
||||||
|
log.debug("Complete findFlag90ByRuPaymtNew");
|
||||||
|
log.debug("Start findFlag90ByRuPaymtNewWithOrderBy");
|
||||||
|
mapper.findFlag90ByRuPaymtNewWithOrderBy(fids);
|
||||||
|
log.debug("Complete findFlag90ByRuPaymtNewWithOrderBy");
|
||||||
|
}
|
||||||
|
|
||||||
private Map<Integer, Integer> makeFidFlagMapByRs(List<Integer> fids, List<FlagFidData> rows) {
|
private Map<Integer, Integer> makeFidFlagMapByRs(List<Integer> fids, List<FlagFidData> rows) {
|
||||||
Map<Integer, Integer> result = new HashMap<>();
|
Map<Integer, Integer> result = new HashMap<>();
|
||||||
for (Integer fid : fids) {
|
for (Integer fid : fids) {
|
||||||
|
|
@ -98,6 +142,7 @@ public class FlagsService {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
|
@ -112,4 +157,21 @@ public class FlagsService {
|
||||||
private Integer fid;
|
private Integer fid;
|
||||||
private Integer flag;
|
private Integer flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public static class Debt5000Data {
|
||||||
|
private Integer fid;
|
||||||
|
private BigInteger accSerialNum;
|
||||||
|
private LocalDate reportedDate;
|
||||||
|
private BigDecimal amtPastDue;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public static class Flag90DaysData {
|
||||||
|
private Integer fid;
|
||||||
|
private BigInteger daysPastDue;
|
||||||
|
private LocalDate reportedDate;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,4 +78,151 @@
|
||||||
GROUP BY fid
|
GROUP BY fid
|
||||||
WITH UR
|
WITH UR
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="findFlagsDebt5000Old" resultMap="FlagsFidDataResultMap">
|
||||||
|
SELECT rp.FID as fid,
|
||||||
|
CASE
|
||||||
|
WHEN EXISTS (SELECT 1
|
||||||
|
FROM RU_PASTDUEARREAR rp2
|
||||||
|
WHERE rp2.FID = rp.FID
|
||||||
|
AND rp2.ACC_SERIAL_NUM = rp.ACC_SERIAL_NUM
|
||||||
|
AND rp2.REPORTED_DT = rp.MAX_REP_DATE
|
||||||
|
AND rp2.AMT_PAST_DUE > 5000) THEN 1
|
||||||
|
ELSE 0
|
||||||
|
END as flag
|
||||||
|
FROM (SELECT FID,
|
||||||
|
ACC_SERIAL_NUM,
|
||||||
|
MAX(REPORTED_DT) as MAX_REP_DATE
|
||||||
|
FROM RU_PASTDUEARREAR
|
||||||
|
WHERE FID IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
GROUP BY FID, ACC_SERIAL_NUM) rp
|
||||||
|
GROUP BY rp.FID, rp.ACC_SERIAL_NUM, rp.MAX_REP_DATE
|
||||||
|
WITH UR
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findFlag90ByPastDueArrearOld" resultMap="FlagsFidDataResultMap">
|
||||||
|
SELECT rp.FID as fid,
|
||||||
|
CASE
|
||||||
|
WHEN EXISTS (SELECT 1
|
||||||
|
FROM RU_PASTDUEARREAR rp2
|
||||||
|
WHERE rp2.FID = rp.FID
|
||||||
|
AND rp2.REPORTED_DT >= #{reportedDate}
|
||||||
|
AND rp2.DAYS_PAST_DUE > 90) THEN 1
|
||||||
|
ELSE 0
|
||||||
|
END as flag
|
||||||
|
FROM (SELECT FID,
|
||||||
|
DAYS_PAST_DUE
|
||||||
|
FROM RU_PASTDUEARREAR
|
||||||
|
WHERE FID IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
GROUP BY FID, DAYS_PAST_DUE) rp
|
||||||
|
GROUP BY rp.FID, rp.DAYS_PAST_DUE
|
||||||
|
WITH UR
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findFlag90ByRuPaymtOld" resultMap="FlagsFidDataResultMap">
|
||||||
|
SELECT rp.FID as fid,
|
||||||
|
CASE
|
||||||
|
WHEN EXISTS (SELECT 1
|
||||||
|
FROM RU_PAYMT rp2
|
||||||
|
WHERE rp2.FID = rp.FID
|
||||||
|
AND rp2.REPORTED_DT >= #{reportedDate}
|
||||||
|
AND rp2.DAYS_PAST_DUE > 90) THEN 1
|
||||||
|
ELSE 0
|
||||||
|
END as flag
|
||||||
|
FROM (SELECT FID,
|
||||||
|
DAYS_PAST_DUE
|
||||||
|
FROM RU_PAYMT
|
||||||
|
WHERE FID IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
GROUP BY FID, DAYS_PAST_DUE) rp
|
||||||
|
GROUP BY rp.FID, rp.DAYS_PAST_DUE
|
||||||
|
WITH UR
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<resultMap id="Debt500ResultMap" type="ru.nbch.credit_tracker.service.indic.FlagsService$Debt5000Data">
|
||||||
|
<result property="fid" column="fid" />
|
||||||
|
<result property="accSerialNum" column="ACC_SERIAL_NUM" />
|
||||||
|
<result property="reportedDate" column="REPORTED_DT" />
|
||||||
|
<result property="amtPastDue" column="AMT_PAST_DUE" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="findFlagsDebt5000New" resultMap="Debt500ResultMap">
|
||||||
|
SELECT FID, ACC_SERIAL_NUM, REPORTED_DT, AMT_PAST_DUE
|
||||||
|
FROM RU_PASTDUEARREAR
|
||||||
|
WHERE FID IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
with UR
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findFlagsDebt5000NewWithOrderBy" resultMap="Debt500ResultMap">
|
||||||
|
SELECT FID, ACC_SERIAL_NUM, REPORTED_DT, AMT_PAST_DUE
|
||||||
|
FROM RU_PASTDUEARREAR
|
||||||
|
WHERE fid IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
ORDER BY FID, ACC_SERIAL_NUM, REPORTED_DT DESC
|
||||||
|
with UR
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<resultMap id="Flag90ByPastDueArrearResultMap" type="ru.nbch.credit_tracker.service.indic.FlagsService$Flag90DaysData">
|
||||||
|
<result property="fid" column="fid" />
|
||||||
|
<result property="daysPastDue" column="DAYS_PAST_DUE" />
|
||||||
|
<result property="daysPastDue" column="REPORTED_DT" />
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<select id="findFlag90ByPastDueArrearNew" resultMap="Flag90ByPastDueArrearResultMap">
|
||||||
|
SELECT FID, DAYS_PAST_DUE
|
||||||
|
FROM RU_PASTDUEARREAR
|
||||||
|
WHERE FID IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
AND REPORTED_DT >= #{reportedDate}
|
||||||
|
WITH UR
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findFlag90ByPastDueArrearNewWithOrderBy">
|
||||||
|
SELECT FID, DAYS_PAST_DUE, REPORTED_DT
|
||||||
|
FROM RU_PASTDUEARREAR
|
||||||
|
WHERE FID IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
ORDER BY FID, REPORTED_DT DESC
|
||||||
|
WITH UR
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findFlag90ByRuPaymtNew">
|
||||||
|
SELECT FID, DAYS_PAST_DUE
|
||||||
|
FROM RU_PAYMT
|
||||||
|
WHERE FID IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
AND REPORTED_DT >= #{reportedDate}
|
||||||
|
WITH UR
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="findFlag90ByRuPaymtNewWithOrderBy">
|
||||||
|
SELECT FID, DAYS_PAST_DUE, REPORTED_DT
|
||||||
|
FROM RU_PAYMT
|
||||||
|
WHERE FID IN
|
||||||
|
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||||
|
#{fid}
|
||||||
|
</foreach>
|
||||||
|
ORDER BY FID, REPORTED_DT DESC
|
||||||
|
WITH UR
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
Loading…
Add table
Reference in a new issue