Moved phone jdbc calls to repository; Added RepositoryTimingAspect
This commit is contained in:
parent
f95b547a81
commit
c31d515c84
9 changed files with 158 additions and 170 deletions
|
|
@ -0,0 +1,28 @@
|
|||
package ru.nbch.credit_tracker.component;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Aspect
|
||||
@Slf4j
|
||||
@Component
|
||||
public class RepositoryTimingAspect {
|
||||
@Around("within(@org.springframework.stereotype.Repository *)")
|
||||
public Object timeMapper(ProceedingJoinPoint pjp) throws Throwable {
|
||||
long start = System.nanoTime();
|
||||
try {
|
||||
return pjp.proceed();
|
||||
} finally {
|
||||
long tookMs = (System.nanoTime() - start) / 1_000_000;
|
||||
String method = pjp.getSignature().toShortString();
|
||||
if (tookMs > 1000) {
|
||||
log.warn("Slow jdbc template call {} took {} ms", method, tookMs);
|
||||
} else {
|
||||
log.debug("Jdbc template call {} took {} ms", method, tookMs);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
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.PhoneService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface PhoneMapper {
|
||||
List<PhoneService.FidsData> findFids(@Param("phones") List<String> phones);
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
package ru.nbch.credit_tracker.repository;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
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.Repository;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public class PhoneRepository {
|
||||
|
||||
private static final String SELCT_FIDS = """
|
||||
SELECT
|
||||
pn.number,
|
||||
pn.fid,
|
||||
pn.file_since_dt
|
||||
FROM PHONE_NORM pn
|
||||
JOIN (SELECT DISTINCT fid FROM NAME) nf
|
||||
ON nf.fid = pn.fid
|
||||
WHERE number in (:phones)
|
||||
ORDER BY
|
||||
pn.number ASC,
|
||||
pn.file_since_dt DESC,
|
||||
pn.fid DESC
|
||||
WITH UR
|
||||
""";
|
||||
|
||||
private final NamedParameterJdbcTemplate jdbcTemplate;
|
||||
|
||||
public PhoneRepository(@Qualifier("jdbcTemplateIndic") NamedParameterJdbcTemplate jdbcTemplate) {
|
||||
this.jdbcTemplate = jdbcTemplate;
|
||||
}
|
||||
|
||||
|
||||
public List<FidsData> findFids(List<String> phones) {
|
||||
MapSqlParameterSource params = new MapSqlParameterSource();
|
||||
params.addValue("phones", phones);
|
||||
|
||||
return jdbcTemplate.query(SELCT_FIDS, params, (rs, rowNum) ->
|
||||
new PhoneRepository.FidsData(rs.getInt("fid"), rs.getString("number"), rs.getObject("file_since_dt", LocalDate.class))
|
||||
);
|
||||
}
|
||||
|
||||
public List<FidsDataLong> findFidsLong(List<String> phones) {
|
||||
MapSqlParameterSource params = new MapSqlParameterSource();
|
||||
params.addValue("phones", phones);
|
||||
|
||||
return jdbcTemplate.query(SELCT_FIDS, params, (rs, rowNum) ->
|
||||
new PhoneRepository.FidsDataLong(rs.getInt("fid"), Long.parseLong(rs.getString("number")), rs.getObject("file_since_dt", LocalDate.class))
|
||||
);
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public static class FidsData {
|
||||
private Integer fid;
|
||||
private String phone;
|
||||
private LocalDate fileSinceDate;
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public static class FidsDataLong {
|
||||
private Integer fid;
|
||||
private Long phone;
|
||||
private LocalDate fileSinceDate;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,17 +1,10 @@
|
|||
package ru.nbch.credit_tracker.service.indic;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
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.dto.PhoneFidMap;
|
||||
import ru.nbch.credit_tracker.repository.PhoneRepository;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
|
@ -21,26 +14,10 @@ import java.util.Map;
|
|||
@Service
|
||||
public class PhoneService {
|
||||
|
||||
private static final String SELCT_FIDS = """
|
||||
SELECT
|
||||
pn.number,
|
||||
pn.fid,
|
||||
pn.file_since_dt
|
||||
FROM PHONE_NORM pn
|
||||
JOIN (SELECT DISTINCT fid FROM NAME) nf
|
||||
ON nf.fid = pn.fid
|
||||
WHERE number in (:phones)
|
||||
ORDER BY
|
||||
pn.number ASC,
|
||||
pn.file_since_dt DESC,
|
||||
pn.fid DESC
|
||||
WITH UR
|
||||
""";
|
||||
private final PhoneRepository phoneRepository;
|
||||
|
||||
private final NamedParameterJdbcTemplate jdbcTemplate;
|
||||
|
||||
public PhoneService(@Qualifier("jdbcTemplateIndic") NamedParameterJdbcTemplate jdbcTemplate) {
|
||||
this.jdbcTemplate = jdbcTemplate;
|
||||
public PhoneService(PhoneRepository phoneRepository) {
|
||||
this.phoneRepository = phoneRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -60,12 +37,7 @@ public class PhoneService {
|
|||
)
|
||||
);
|
||||
|
||||
MapSqlParameterSource params = new MapSqlParameterSource();
|
||||
params.addValue("phones", phones);
|
||||
|
||||
List<FidsData> phonesByFid = jdbcTemplate.query(SELCT_FIDS, params, (rs, rowNum) ->
|
||||
new FidsData(rs.getInt("fid"), Long.parseLong(rs.getString("number")), rs.getObject("file_since_dt", LocalDate.class))
|
||||
);
|
||||
List<PhoneRepository.FidsDataLong> phonesByFid = phoneRepository.findFidsLong(phones);
|
||||
|
||||
log.debug("Start merging fids");
|
||||
Map<Integer, PhoneFidMap> phoneFidMap = merger(subjects, phonesByFid);
|
||||
|
|
@ -74,7 +46,7 @@ public class PhoneService {
|
|||
return phoneFidMap;
|
||||
}
|
||||
|
||||
private Map<Integer, PhoneFidMap> merger(List<PhoneFidMap> subjects, List<FidsData> phonesByFid) {
|
||||
private Map<Integer, PhoneFidMap> merger(List<PhoneFidMap> subjects, List<PhoneRepository.FidsDataLong> phonesByFid) {
|
||||
Map<Integer, PhoneFidMap> phoneFidMap = new HashMap<>();
|
||||
|
||||
if (phonesByFid.isEmpty()) {
|
||||
|
|
@ -86,7 +58,7 @@ public class PhoneService {
|
|||
Long normalizedPhone = Long.parseLong("9" + subject.getPhone());
|
||||
|
||||
while (index < phonesByFid.size()) {
|
||||
FidsData currentFidData = phonesByFid.get(index);
|
||||
PhoneRepository.FidsDataLong currentFidData = phonesByFid.get(index);
|
||||
|
||||
if (currentFidData.getPhone() < normalizedPhone) {
|
||||
index++;
|
||||
|
|
@ -109,13 +81,4 @@ public class PhoneService {
|
|||
return phoneFidMap;
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public static class FidsData {
|
||||
private Integer fid;
|
||||
private Long phone;
|
||||
private LocalDate fileSinceDate;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,44 +1,21 @@
|
|||
package ru.nbch.credit_tracker.service.indic;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
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.dto.PhoneFidMap;
|
||||
import ru.nbch.credit_tracker.repository.PhoneRepository;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class PhoneService2 {
|
||||
|
||||
private static final String SELCT_FIDS = """
|
||||
SELECT
|
||||
pn.number,
|
||||
pn.fid,
|
||||
pn.file_since_dt
|
||||
FROM PHONE_NORM pn
|
||||
JOIN (SELECT DISTINCT fid FROM NAME) nf
|
||||
ON nf.fid = pn.fid
|
||||
WHERE number in (:phones)
|
||||
ORDER BY
|
||||
pn.number ASC,
|
||||
pn.file_since_dt DESC,
|
||||
pn.fid DESC
|
||||
WITH UR
|
||||
""";
|
||||
private final PhoneRepository phoneRepository;
|
||||
|
||||
private final NamedParameterJdbcTemplate jdbcTemplate;
|
||||
|
||||
public PhoneService2(@Qualifier("jdbcTemplateIndic") NamedParameterJdbcTemplate jdbcTemplate) {
|
||||
this.jdbcTemplate = jdbcTemplate;
|
||||
public PhoneService2(PhoneRepository phoneRepository) {
|
||||
this.phoneRepository = phoneRepository;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -60,15 +37,10 @@ public class PhoneService2 {
|
|||
)
|
||||
);
|
||||
|
||||
MapSqlParameterSource params = new MapSqlParameterSource();
|
||||
params.addValue("phones", phones);
|
||||
|
||||
List<FidsData> phonesByFid = jdbcTemplate.query(SELCT_FIDS, params, (rs, rowNum) ->
|
||||
new FidsData(rs.getInt("fid"), rs.getString("number"), rs.getObject("file_since_dt", LocalDate.class))
|
||||
);
|
||||
List<PhoneRepository.FidsData> phonesByFid = phoneRepository.findFids(phones);
|
||||
|
||||
Map<String, Integer> phoneToFidsMap = new HashMap<>();
|
||||
for (FidsData fidsData : phonesByFid) {
|
||||
for (PhoneRepository.FidsData fidsData : phonesByFid) {
|
||||
if (!phoneToFidsMap.containsKey(fidsData.getPhone())) {
|
||||
phoneToFidsMap.put(fidsData.getPhone(), fidsData.getFid());
|
||||
}
|
||||
|
|
@ -88,11 +60,11 @@ public class PhoneService2 {
|
|||
return phoneFidMap;
|
||||
}
|
||||
|
||||
private Map<Integer, PhoneFidMap> merger(List<PhoneFidMap> subjects, List<FidsData> phonesByFid) {
|
||||
private Map<Integer, PhoneFidMap> merger(List<PhoneFidMap> subjects, List<PhoneRepository.FidsData> phonesByFid) {
|
||||
Map<Integer, PhoneFidMap> phoneFidMap = new HashMap<>();
|
||||
Iterator<FidsData> iterator = phonesByFid.iterator();
|
||||
Iterator<PhoneRepository.FidsData> iterator = phonesByFid.iterator();
|
||||
String lastUniquePhone = null;
|
||||
FidsData fidsData = null;
|
||||
PhoneRepository.FidsData fidsData = null;
|
||||
for (PhoneFidMap phoneFid : subjects) {
|
||||
String normalizedPhone = 9 + phoneFid.getPhone();
|
||||
while (iterator.hasNext()) {
|
||||
|
|
@ -116,13 +88,4 @@ public class PhoneService2 {
|
|||
return phoneFidMap;
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public static class FidsData {
|
||||
private Integer fid;
|
||||
private String phone;
|
||||
private LocalDate fileSinceDate;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,6 +68,12 @@
|
|||
<appender-ref ref="FILE-JSON"/>
|
||||
</logger>
|
||||
|
||||
<logger name="ru.nbch.credit_tracker.component" level="DEBUG" additivity="false">
|
||||
<appender-ref ref="FILE"/>
|
||||
<appender-ref ref="FILE-JSON"/>
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
</logger>
|
||||
|
||||
<logger name="ru.nbch.credit_tracker.service" level="TRACE" additivity="false">
|
||||
<appender-ref ref="FILE"/>
|
||||
<appender-ref ref="FILE-JSON"/>
|
||||
|
|
|
|||
|
|
@ -1,32 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
|
||||
<mapper namespace="ru.nbch.credit_tracker.mapper.indic.PhoneMapper">
|
||||
|
||||
<resultMap id="fidsDataResultMap" type="ru.nbch.credit_tracker.service.indic.PhoneService$FidsData">
|
||||
<result property="phone" column="number" />
|
||||
<result property="fid" column="fid" />
|
||||
<result property="fileSinceDate" column="fileSinceDate" />
|
||||
</resultMap>
|
||||
|
||||
<select id="findFids" resultMap="fidsDataResultMap">
|
||||
SELECT
|
||||
pn.number,
|
||||
pn.fid,
|
||||
pn.file_since_dt
|
||||
FROM indic.PHONE_NORM pn
|
||||
JOIN (SELECT DISTINCT fid FROM indic.NAME) nf
|
||||
ON nf.fid = pn.fid
|
||||
WHERE number in
|
||||
<foreach item="phone" collection="phones" open="(" separator="," close=")">
|
||||
#{phone}
|
||||
</foreach>
|
||||
ORDER BY
|
||||
pn.number ASC,
|
||||
pn.file_since_dt DESC,
|
||||
pn.fid DESC
|
||||
WITH UR
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -5,10 +5,8 @@ import org.junit.jupiter.api.Test;
|
|||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
|
||||
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||
import ru.nbch.credit_tracker.entities.dto.PhoneFidMap;
|
||||
import ru.nbch.credit_tracker.repository.PhoneRepository;
|
||||
import ru.nbch.credit_tracker.service.indic.PhoneService2;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
|
@ -18,21 +16,20 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
public class PhoneService2Test {
|
||||
|
||||
@Mock
|
||||
NamedParameterJdbcTemplate jdbcTemplate;
|
||||
PhoneRepository phoneRepository;
|
||||
|
||||
@Test
|
||||
public void defineFidByPhoneTest() {
|
||||
PhoneService2 phoneService = new PhoneService2(jdbcTemplate);
|
||||
PhoneService2 phoneService = new PhoneService2(phoneRepository);
|
||||
|
||||
fidsDataWithEqualSinceDt.sort(byDbOrder);
|
||||
when(jdbcTemplate.query(anyString(), any(MapSqlParameterSource.class), any(RowMapper.class))).thenReturn(fidsDataWithEqualSinceDt);
|
||||
when(phoneRepository.findFids(any())).thenReturn(fidsDataWithEqualSinceDt);
|
||||
|
||||
List<PhoneFidMap> phoneFidMap = new ArrayList<>();
|
||||
phoneFidMap.add(PhoneFidMap.builder().phone("1111").build());
|
||||
|
|
@ -49,19 +46,19 @@ public class PhoneService2Test {
|
|||
Assertions.assertEquals("1115", res.get(127).getPhone());
|
||||
}
|
||||
|
||||
private final List<PhoneService2.FidsData> fidsDataWithEqualSinceDt = new ArrayList<>(
|
||||
private final List<PhoneRepository.FidsData> fidsDataWithEqualSinceDt = new ArrayList<>(
|
||||
List.of(
|
||||
new PhoneService2.FidsData(123, "91111", LocalDate.of(2025, 9, 10)),
|
||||
new PhoneService2.FidsData(124, "91111", LocalDate.of(2025, 9, 10)),
|
||||
new PhoneService2.FidsData(125, "91112", LocalDate.of(2024, 10, 10)),
|
||||
new PhoneService2.FidsData(126, "91114", LocalDate.of(2024, 10, 11)),
|
||||
new PhoneService2.FidsData(127, "91115", LocalDate.of(2025, 9, 11)),
|
||||
new PhoneService2.FidsData(128, "91115", LocalDate.of(2025, 9, 10))
|
||||
new PhoneRepository.FidsData(123, "91111", LocalDate.of(2025, 9, 10)),
|
||||
new PhoneRepository.FidsData(124, "91111", LocalDate.of(2025, 9, 10)),
|
||||
new PhoneRepository.FidsData(125, "91112", LocalDate.of(2024, 10, 10)),
|
||||
new PhoneRepository.FidsData(126, "91114", LocalDate.of(2024, 10, 11)),
|
||||
new PhoneRepository.FidsData(127, "91115", LocalDate.of(2025, 9, 11)),
|
||||
new PhoneRepository.FidsData(128, "91115", LocalDate.of(2025, 9, 10))
|
||||
)
|
||||
);
|
||||
|
||||
Comparator<PhoneService2.FidsData> byDbOrder =
|
||||
Comparator.comparing(PhoneService2.FidsData::getPhone, Comparator.nullsFirst(Comparator.naturalOrder())) // pn.number ASC
|
||||
.thenComparing(PhoneService2.FidsData::getFileSinceDate, Comparator.nullsLast(Comparator.reverseOrder())) // file_since_dt DESC
|
||||
.thenComparing(PhoneService2.FidsData::getFid, Comparator.reverseOrder());
|
||||
Comparator<PhoneRepository.FidsData> byDbOrder =
|
||||
Comparator.comparing(PhoneRepository.FidsData::getPhone, Comparator.nullsFirst(Comparator.naturalOrder())) // pn.number ASC
|
||||
.thenComparing(PhoneRepository.FidsData::getFileSinceDate, Comparator.nullsLast(Comparator.reverseOrder())) // file_since_dt DESC
|
||||
.thenComparing(PhoneRepository.FidsData::getFid, Comparator.reverseOrder());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,10 +5,8 @@ import org.junit.jupiter.api.Test;
|
|||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
|
||||
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||
import ru.nbch.credit_tracker.entities.dto.PhoneFidMap;
|
||||
import ru.nbch.credit_tracker.repository.PhoneRepository;
|
||||
import ru.nbch.credit_tracker.service.indic.PhoneService;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
|
@ -18,21 +16,20 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
public class PhoneServiceTest {
|
||||
|
||||
@Mock
|
||||
NamedParameterJdbcTemplate jdbcTemplate;
|
||||
PhoneRepository phoneRepository;
|
||||
|
||||
@Test
|
||||
public void defineFidByPhoneTest() {
|
||||
PhoneService phoneService = new PhoneService(jdbcTemplate);
|
||||
PhoneService phoneService = new PhoneService(phoneRepository);
|
||||
|
||||
fidsDataWithEqualSinceDt.sort(byDbOrder);
|
||||
when(jdbcTemplate.query(anyString(), any(MapSqlParameterSource.class), any(RowMapper.class))).thenReturn(fidsDataWithEqualSinceDt);
|
||||
when(phoneRepository.findFidsLong(any())).thenReturn(fidsDataWithEqualSinceDt);
|
||||
|
||||
List<PhoneFidMap> phoneFidMap = new ArrayList<>();
|
||||
phoneFidMap.add(PhoneFidMap.builder().phone("1111").build());
|
||||
|
|
@ -49,19 +46,19 @@ public class PhoneServiceTest {
|
|||
Assertions.assertEquals("1115", res.get(127).getPhone());
|
||||
}
|
||||
|
||||
private final List<PhoneService.FidsData> fidsDataWithEqualSinceDt = new ArrayList<>(
|
||||
private final List<PhoneRepository.FidsDataLong> fidsDataWithEqualSinceDt = new ArrayList<>(
|
||||
List.of(
|
||||
new PhoneService.FidsData(123, 91111L, LocalDate.of(2025, 9, 10)),
|
||||
new PhoneService.FidsData(124, 91111L, LocalDate.of(2025, 9, 10)),
|
||||
new PhoneService.FidsData(125, 91112L, LocalDate.of(2024, 10, 10)),
|
||||
new PhoneService.FidsData(126, 91114L, LocalDate.of(2024, 10, 11)),
|
||||
new PhoneService.FidsData(127, 91115L, LocalDate.of(2025, 9, 11)),
|
||||
new PhoneService.FidsData(128, 91115L, LocalDate.of(2025, 9, 10))
|
||||
new PhoneRepository.FidsDataLong(123, 91111L, LocalDate.of(2025, 9, 10)),
|
||||
new PhoneRepository.FidsDataLong(124, 91111L, LocalDate.of(2025, 9, 10)),
|
||||
new PhoneRepository.FidsDataLong(125, 91112L, LocalDate.of(2024, 10, 10)),
|
||||
new PhoneRepository.FidsDataLong(126, 91114L, LocalDate.of(2024, 10, 11)),
|
||||
new PhoneRepository.FidsDataLong(127, 91115L, LocalDate.of(2025, 9, 11)),
|
||||
new PhoneRepository.FidsDataLong(128, 91115L, LocalDate.of(2025, 9, 10))
|
||||
)
|
||||
);
|
||||
|
||||
Comparator<PhoneService.FidsData> byDbOrder =
|
||||
Comparator.comparing(PhoneService.FidsData::getPhone, Comparator.nullsFirst(Comparator.naturalOrder())) // pn.number ASC
|
||||
.thenComparing(PhoneService.FidsData::getFileSinceDate, Comparator.nullsLast(Comparator.reverseOrder())) // file_since_dt DESC
|
||||
.thenComparing(PhoneService.FidsData::getFid, Comparator.reverseOrder());
|
||||
Comparator<PhoneRepository.FidsDataLong> byDbOrder =
|
||||
Comparator.comparing(PhoneRepository.FidsDataLong::getPhone, Comparator.nullsFirst(Comparator.naturalOrder())) // pn.number ASC
|
||||
.thenComparing(PhoneRepository.FidsDataLong::getFileSinceDate, Comparator.nullsLast(Comparator.reverseOrder())) // file_since_dt DESC
|
||||
.thenComparing(PhoneRepository.FidsDataLong::getFid, Comparator.reverseOrder());
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue