Get rid of unused mappers and mapper's methods

This commit is contained in:
Mikhail Trofimov 2026-04-23 15:49:36 +03:00
parent e9092e63db
commit b05b48f800
16 changed files with 189 additions and 636 deletions

View file

@ -1,15 +1,17 @@
package ru.nbch.credit_tracker.mapper.indic; package ru.nbch.credit_tracker.mapper.indic;
import java.util.List;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import ru.nbch.credit_tracker.entities.indic.Id; import ru.nbch.credit_tracker.entities.indic.Id;
import ru.nbch.credit_tracker.entities.indic.Name; import ru.nbch.credit_tracker.entities.indic.Name;
import java.util.List;
@Mapper @Mapper
public interface PersonMapper { public interface PersonMapper {
List<Name> findNameData(@Param("phones") List<String> phones); List<Name> findNameData(@Param("phones") List<String> phones);
List<Name> findNameDataByFids(@Param("fids") List<Integer> fids); List<Name> findNameDataByFids(@Param("fids") List<Integer> fids);
List<Id> findPassportData(@Param("fids") List<Integer> fids); List<Id> findPassportData(@Param("fids") List<Integer> fids);

View file

@ -1,14 +0,0 @@
package ru.nbch.credit_tracker.mapper.signal;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import ru.nbch.credit_tracker.entities.app.FlagDetail;
@Mapper
public interface FlagDetailMapper {
void registerCalcFlags(@Param("json") String json);
void updateCalcFlags(@Param("json") String json);
FlagDetail getByMapId(@Param("mapId") Long mapId);
void deleteFlags(@Param("mapIds") List<Long> mapIds);
}

View file

@ -1,11 +0,0 @@
package ru.nbch.credit_tracker.mapper.signal;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import ru.nbch.credit_tracker.entities.app.PackageRecordWithPhone;
@Mapper
public interface PackagesRecordsJoinMapper {
List<PackageRecordWithPhone> findPackagesRecordsJoinPage(@Param("packageId") Long packageId, @Param("limit") Integer limit, @Param("offset") Integer offset);
}

View file

@ -1,16 +1,23 @@
package ru.nbch.credit_tracker.mapper.signal; package ru.nbch.credit_tracker.mapper.signal;
import java.util.List;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap; import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap;
import java.util.List;
@Mapper @Mapper
public interface PackagesRecordsMapper { public interface PackagesRecordsMapper {
void setErrorJson(@Param("json") String json); void setErrorJson(@Param("json") String json);
List<Long> registerJson(@Param("json") String json); List<Long> registerJson(@Param("json") String json);
List<PackagesRecordsMap> findFullPhoneFidMap(@Param("packageId") Long packageId, @Param("limit") int limit, @Param("offset") int offset);
List<PackagesRecordsMap> findFullPhoneFidMap(@Param("packageId") Long packageId,
@Param("limit") int limit,
@Param("offset") int offset);
List<Long> uniquePackageIdByPhones(@Param("json") String json); List<Long> uniquePackageIdByPhones(@Param("json") String json);
Long deleteByPackageId(@Param("packageId") Long id); Long deleteByPackageId(@Param("packageId") Long id);
PackagesRecordsMap findById(Long id); PackagesRecordsMap findById(Long id);

View file

@ -1,26 +1,40 @@
package ru.nbch.credit_tracker.mapper.signal; package ru.nbch.credit_tracker.mapper.signal;
import java.util.List;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import ru.nbch.credit_tracker.entities.app.PhonesMap; import ru.nbch.credit_tracker.entities.app.PhonesMap;
import java.util.List;
@Mapper @Mapper
public interface PhonesMapMapper { public interface PhonesMapMapper {
List<PhonesMap> getCachedData(@Param("phones") List<Long> phones); List<PhonesMap> getCachedData(@Param("phones") List<Long> phones);
List<PhonesMap> searchedAtLessThan(@Param("daysCount") Integer daysCount, @Param("batchSize") int batchSize, @Param("lastId") Long lastId);
List<PhonesMap> searchedAtLessThan(@Param("daysCount") Integer daysCount,
@Param("batchSize") int batchSize,
@Param("lastId") Long lastId);
PhonesMap findByPhone(@Param("phone") Long phone); PhonesMap findByPhone(@Param("phone") Long phone);
List<PhonesMap> findEligibleForFlagsUpdate(@Param("lastId") Long lastId, List<PhonesMap> findEligibleForFlagsUpdate(@Param("lastId") Long lastId,
@Param("interval") Integer interval, @Param("interval") Integer interval,
@Param("batchSize") Integer batchSize); @Param("batchSize") Integer batchSize);
List<PhonesMap> findEligibleForFlagsInsert(@Param("lastId") Long lastId, List<PhonesMap> findEligibleForFlagsInsert(@Param("lastId") Long lastId,
@Param("batchSize") Integer batchSize); @Param("batchSize") Integer batchSize);
void updateIdCachedData(@Param("json") String json); void updateIdCachedData(@Param("json") String json);
void updateNameCachedData(@Param("json") String json); void updateNameCachedData(@Param("json") String json);
void updateFlagCachedData(@Param("json") String json); void updateFlagCachedData(@Param("json") String json);
void resetFidAndPD(@Param("json") String json); void resetFidAndPD(@Param("json") String json);
void updateSearchedAt(@Param("json") String json); void updateSearchedAt(@Param("json") String json);
void registerJson(@Param("json") String json); void registerJson(@Param("json") String json);
void setFidJson(@Param("json") String json);
void deleteUnusedPhones(); void deleteUnusedPhones();
} }

View file

@ -1,38 +1,52 @@
package ru.nbch.credit_tracker.mapper.signal; package ru.nbch.credit_tracker.mapper.signal;
import java.time.LocalDateTime;
import java.util.List;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import ru.nbch.credit_tracker.entities.app.UserPackage; import ru.nbch.credit_tracker.entities.app.UserPackage;
import java.time.LocalDateTime;
import java.util.List;
@Mapper @Mapper
public interface UserPackageMapper { public interface UserPackageMapper {
boolean isPackageNotUnique(@Param("userId") String userId, @Param("packageName") String packageName); boolean isPackageNotUnique(@Param("userId") String userId,
@Param("packageName") String packageName);
void deletePackageById(@Param("id") Long id, @Param("status") String newStatus, @Param("deactivatedAt") LocalDateTime deactivatedAt); void deletePackageById(@Param("id") Long id,
@Param("status") String newStatus,
@Param("deactivatedAt") LocalDateTime deactivatedAt);
Long insertPackage(@Param("userPackage") UserPackage userPackage); Long insertPackage(@Param("userPackage") UserPackage userPackage);
void updatePackageStatus(@Param("packageId") Long packageId, @Param("status") String status); void updatePackageStatus(@Param("packageId") Long packageId,
@Param("status") String status);
void updatePackageLastDownloadedReport(@Param("id") Long id, @Param("fileName") String fileName); void updatePackageLastDownloadedReport(@Param("id") Long id,
@Param("fileName") String fileName);
void updatePackageOnMonitoringSuccess(@Param("id") Long id,
@Param("monitoringAt") LocalDateTime monitoringAt);
void updatePackageOnMonitoringSuccess(@Param("id") Long id, @Param("monitoringAt") LocalDateTime monitoringAt);
void updateNoFidMonitoring(@Param("id") Long id); void updateNoFidMonitoring(@Param("id") Long id);
void setFidChanged(@Param("packageIds") List<Long> id); void setFidChanged(@Param("packageIds") List<Long> id);
UserPackage findPackage(@Param("id") Long id); UserPackage findPackage(@Param("id") Long id);
List<UserPackage> findForRepeatedPackages(); List<UserPackage> findForRepeatedPackages();
List<UserPackage> findUserPackages(@Param("userId") String userId, @Param("statuses") List<String> status); List<UserPackage> findUserPackages(@Param("userId") String userId,
@Param("statuses") List<String> status);
List<UserPackage> findAllPackagesByStatus(@Param("statuses") String... statuses); List<UserPackage> findAllPackagesByStatus(@Param("statuses") String... statuses);
List<UserPackage> findAllPackagesByUserId(@Param("userId") String userId); List<UserPackage> findAllPackagesByUserId(@Param("userId") String userId);
UserPackage findByPackageName(@Param("packageName") String packageName); UserPackage findByPackageName(@Param("packageName") String packageName);
List<UserPackage> findOnMonitoringPackages(); List<UserPackage> findOnMonitoringPackages();
List<UserPackage> findByMemberCodeAndPackageName(@Param("memberCode") String memberCode, List<UserPackage> findByMemberCodeAndPackageName(@Param("memberCode") String memberCode,
@Param("packageName") String packageName); @Param("packageName") String packageName);

View file

@ -1,159 +0,0 @@
package ru.nbch.credit_tracker.repository;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.List;
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 ru.nbch.credit_tracker.entities.indic.Name;
@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 static final String SELECT_FIDS_WITH_NAME = """
SELECT
pn.number,
pn.fid,
pn.file_since_dt,
nf.first,
nf.middle,
nf.name_1,
nf.birth_dt,
nf.file_since_dt as file_since_dt_name
FROM PHONE_NORM pn
JOIN NAME nf
ON nf.fid = pn.fid
WHERE number in (:phones) WITH UR
""";
private static final String SELECT_NAME_BY_FIDS = """
SELECT
fid,
first,
middle,
name_1,
birth_dt,
file_since_dt as file_since_dt_name
FROM NAME
WHERE fid in (:fids) 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<Name> findNameByPhones(List<String> phones) {
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("phones", phones);
return jdbcTemplate.query(SELECT_FIDS_WITH_NAME, params, (rs, rowNum) ->
Name.builder()
.fid(rs.getInt("FID"))
.number(rs.getString("NUMBER"))
.fileSinceDate(getLocalDate(rs, "FILE_SINCE_DT_NAME"))
.first(rs.getString("FIRST"))
.middle(rs.getString("MIDDLE"))
.last(rs.getString("NAME_1"))
.birthDate(getLocalDate(rs, "BIRTH_DT"))
.build());
}
public List<Name> findNameByFids(List<Integer> fids) {
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("fids", fids);
return jdbcTemplate.query(SELECT_NAME_BY_FIDS, params, (rs, rowNum) ->
Name.builder()
.fid(rs.getInt("FID"))
.fileSinceDate(getLocalDate(rs, "FILE_SINCE_DT_NAME"))
.first(rs.getString("FIRST"))
.middle(rs.getString("MIDDLE"))
.last(rs.getString("NAME_1"))
.birthDate(getLocalDate(rs, "BIRTH_DT"))
.build());
}
private static LocalDate getLocalDate(ResultSet rs, String col) throws SQLException {
java.sql.Date d = rs.getDate(col);
return d != null ? d.toLocalDate() : null;
}
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 FidsDataWithName {
private Integer fid;
private String phone;
private LocalDate fileSinceDate;
private String firstName;
private String lastName;
private String middleName;
private LocalDate birthDate;
private LocalDate fileSinceDateName;
}
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public static class FidsDataLong {
private Integer fid;
private Long phone;
private LocalDate fileSinceDate;
}
}

View file

@ -1,29 +1,22 @@
package ru.nbch.credit_tracker.service.indic; package ru.nbch.credit_tracker.service.indic;
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.IndicFlagsMapper;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; 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;
import ru.nbch.credit_tracker.mapper.indic.IndicFlagsMapper;
import ru.nbch.credit_tracker.mapper.signal.FlagDetailMapper;
@Slf4j @Slf4j
@Service @Service
public class FlagsService2 { public class FlagsService2 {
private final IndicFlagsMapper flagsMapper; private final IndicFlagsMapper flagsMapper;
private final FlagDetailMapper flagDetailMapper;
private final ObjectMapper entityToJsonMapper;
public FlagsService2(IndicFlagsMapper flagsMapper, public FlagsService2(IndicFlagsMapper flagsMapper) {
FlagDetailMapper flagDetailMapper,
ObjectMapper entityToJsonMapper) {
this.flagsMapper = flagsMapper; this.flagsMapper = flagsMapper;
this.flagDetailMapper = flagDetailMapper;
this.entityToJsonMapper = entityToJsonMapper;
} }
public Map<Integer, Integer> findFlagsDebt5000(List<Integer> fids) { public Map<Integer, Integer> findFlagsDebt5000(List<Integer> fids) {

View file

@ -1,42 +1,30 @@
package ru.nbch.credit_tracker.service.indic; package ru.nbch.credit_tracker.service.indic;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap; import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap;
import ru.nbch.credit_tracker.entities.app.PhonesMap;
import ru.nbch.credit_tracker.entities.indic.Name; import ru.nbch.credit_tracker.entities.indic.Name;
import ru.nbch.credit_tracker.mapper.indic.PersonMapper;
import ru.nbch.credit_tracker.mapper.signal.FlagDetailMapper;
import ru.nbch.credit_tracker.mapper.signal.PackagesRecordsMapper; import ru.nbch.credit_tracker.mapper.signal.PackagesRecordsMapper;
import ru.nbch.credit_tracker.repository.PhoneRepository;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
@Slf4j @Slf4j
@Service @Service
public class PhoneService2 { public class PhoneService2 {
private final PhoneRepository phoneRepository;
private final PackagesRecordsMapper phoneFidMapMapper; private final PackagesRecordsMapper phoneFidMapMapper;
private final PersonMapper personMapper;
private final FlagDetailMapper flagDetailMapper;
private final ObjectMapper entityToJsonMapper; private final ObjectMapper entityToJsonMapper;
private final Comparator<Name> byDateThenIdNullSafe = private final Comparator<Name> byDateThenIdNullSafe =
Comparator.comparing(Name::getFileSinceDate, Comparator.nullsFirst(Comparator.naturalOrder())) Comparator.comparing(Name::getFileSinceDate, Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(Name::getFid); .thenComparing(Name::getFid);
public PhoneService2(PhoneRepository phoneRepository, public PhoneService2(PackagesRecordsMapper phoneFidMapMapper,
PackagesRecordsMapper phoneFidMapMapper,
PersonMapper personMapper,
FlagDetailMapper flagDetailMapper,
ObjectMapper entityToJsonMapper) { ObjectMapper entityToJsonMapper) {
this.phoneRepository = phoneRepository;
this.phoneFidMapMapper = phoneFidMapMapper; this.phoneFidMapMapper = phoneFidMapMapper;
this.personMapper = personMapper;
this.flagDetailMapper = flagDetailMapper;
this.entityToJsonMapper = entityToJsonMapper; this.entityToJsonMapper = entityToJsonMapper;
} }
@ -56,23 +44,6 @@ public class PhoneService2 {
} }
} }
public void updateFid(List<PhonesMap> subjects) {
try {
//регистрация в signals_phone_fid_map
String json = entityToJsonMapper.writeValueAsString(subjects.stream()
.map(phoneFidMap -> new HashMap<String, Object>() {{
put("id", phoneFidMap.getId());
put("fid", phoneFidMap.getFid());
put("searched_at", phoneFidMap.getCalculatedAt());
}}).toList());
//fixme теперь апдейтится(insert) signals_phones_map
// phoneFidMapMapper.setFidJson(json);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public void updateOnError(List<PackagesRecordsMap> subjects) { public void updateOnError(List<PackagesRecordsMap> subjects) {
try { try {
String json = entityToJsonMapper.writeValueAsString(subjects.stream() String json = entityToJsonMapper.writeValueAsString(subjects.stream()
@ -86,8 +57,4 @@ public class PhoneService2 {
} }
} }
public List<PackagesRecordsMap> pageByPackageId(Long packageId, Integer limit, Integer offset) {
return phoneFidMapMapper.findFullPhoneFidMap(packageId, limit, offset);
}
} }

View file

@ -1,21 +1,5 @@
package ru.nbch.credit_tracker.service.mode.monitoring; package ru.nbch.credit_tracker.service.mode.monitoring;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC; import org.slf4j.MDC;
@ -36,7 +20,6 @@ import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.
import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.Signals; import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.Signals;
import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.Subject; import ru.nbch.credit_tracker.entities.user_response.monitoring_signal_response.Subject;
import ru.nbch.credit_tracker.enums.Status; import ru.nbch.credit_tracker.enums.Status;
import ru.nbch.credit_tracker.mapper.signal.FlagDetailMapper;
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper; import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
import ru.nbch.credit_tracker.service.signal.HitsService; import ru.nbch.credit_tracker.service.signal.HitsService;
import ru.nbch.credit_tracker.service.signal.PackageRecordsService; import ru.nbch.credit_tracker.service.signal.PackageRecordsService;
@ -48,6 +31,18 @@ import ru.nbch.credit_tracker.utils.CtFileUtils;
import ru.nbch.credit_tracker.utils.ZipUtils; import ru.nbch.credit_tracker.utils.ZipUtils;
import ru.nbch.credit_tracker.utils.error.ExceptionUtils; import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
/** /**
* Сервис периодического опроса официального сервиса сигналов на наличие новых отчетов по пакетам находящимся в статусе ON_MONITORING * Сервис периодического опроса официального сервиса сигналов на наличие новых отчетов по пакетам находящимся в статусе ON_MONITORING
*/ */
@ -56,7 +51,6 @@ import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
public class MonitoringService { public class MonitoringService {
private final SignalRestService signalRestService; private final SignalRestService signalRestService;
private final FlagDetailMapper flagDetailMapper;
private final UserPackageMapper userPackageMapper; private final UserPackageMapper userPackageMapper;
private final StaxXmlProcessor staxXmlProcessor; private final StaxXmlProcessor staxXmlProcessor;
private final HitsService hitsService; private final HitsService hitsService;
@ -64,14 +58,12 @@ public class MonitoringService {
private final CreditTrackerSettings config; private final CreditTrackerSettings config;
public MonitoringService(SignalRestService signalRestService, public MonitoringService(SignalRestService signalRestService,
FlagDetailMapper flagDetailMapper,
UserPackageMapper userPackageMapper, UserPackageMapper userPackageMapper,
StaxXmlProcessor staxXmlProcessor, StaxXmlProcessor staxXmlProcessor,
HitsService hitsService, HitsService hitsService,
PackageRecordsService packageRecordsService, PackageRecordsService packageRecordsService,
CreditTrackerSettings config) { CreditTrackerSettings config) {
this.signalRestService = signalRestService; this.signalRestService = signalRestService;
this.flagDetailMapper = flagDetailMapper;
this.userPackageMapper = userPackageMapper; this.userPackageMapper = userPackageMapper;
this.staxXmlProcessor = staxXmlProcessor; this.staxXmlProcessor = staxXmlProcessor;
this.hitsService = hitsService; this.hitsService = hitsService;

View file

@ -2,23 +2,22 @@ package ru.nbch.credit_tracker.service.signal;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap;
import ru.nbch.credit_tracker.entities.app.PhonesMap;
import ru.nbch.credit_tracker.mapper.signal.PackagesRecordsMapper;
import ru.nbch.credit_tracker.mapper.signal.PhonesMapMapper;
import ru.nbch.credit_tracker.model.FlagData;
import ru.nbch.credit_tracker.model.IdData;
import ru.nbch.credit_tracker.model.SubjectProfile;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.entities.app.PackageRecordWithPhone;
import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap;
import ru.nbch.credit_tracker.entities.app.PhonesMap;
import ru.nbch.credit_tracker.mapper.signal.PackagesRecordsJoinMapper;
import ru.nbch.credit_tracker.mapper.signal.PackagesRecordsMapper;
import ru.nbch.credit_tracker.mapper.signal.PhonesMapMapper;
import ru.nbch.credit_tracker.model.FlagData;
import ru.nbch.credit_tracker.model.IdData;
import ru.nbch.credit_tracker.model.SubjectProfile;
/** /**
* Сервис предназначен для сохранения и поиска субъектов по пакету * Сервис предназначен для сохранения и поиска субъектов по пакету
@ -32,23 +31,16 @@ public class PackageRecordsService {
private final PhonesMapMapper phonesMapMapper; private final PhonesMapMapper phonesMapMapper;
private final PackagesRecordsMapper packagesRecordsMapper; private final PackagesRecordsMapper packagesRecordsMapper;
private final PackagesRecordsJoinMapper packagesRecordsJoinMapper;
private final ObjectMapper entityToJsonMapper; private final ObjectMapper entityToJsonMapper;
public PackageRecordsService(PhonesMapMapper phonesMapMapper, public PackageRecordsService(PhonesMapMapper phonesMapMapper,
PackagesRecordsMapper packagesRecordsMapper, PackagesRecordsMapper packagesRecordsMapper,
PackagesRecordsJoinMapper packagesRecordsJoinMapper,
ObjectMapper entityToJsonMapper) { ObjectMapper entityToJsonMapper) {
this.phonesMapMapper = phonesMapMapper; this.phonesMapMapper = phonesMapMapper;
this.packagesRecordsMapper = packagesRecordsMapper; this.packagesRecordsMapper = packagesRecordsMapper;
this.packagesRecordsJoinMapper = packagesRecordsJoinMapper;
this.entityToJsonMapper = entityToJsonMapper; this.entityToJsonMapper = entityToJsonMapper;
} }
public List<PackageRecordWithPhone> pageCachedPhonesByPackageId(Long packageId, Integer limit, Integer offset) {
return packagesRecordsJoinMapper.findPackagesRecordsJoinPage(packageId, limit, offset);
}
public Map<Long, PhonesMap> findCachedPhones(List<SubjectProfile> subjects) { public Map<Long, PhonesMap> findCachedPhones(List<SubjectProfile> subjects) {
List<Long> phones = subjects.stream() List<Long> phones = subjects.stream()
.map(SubjectProfile::getPhone) .map(SubjectProfile::getPhone)
@ -92,25 +84,6 @@ public class PackageRecordsService {
} }
} }
public void updateNameCache(List<PhonesMap> phonesMaps) {
try {
String json = entityToJsonMapper.writeValueAsString(phonesMaps.stream()
.filter(Objects::nonNull)
.map(phoneMap -> new HashMap<String, Object>() {{
put("fid", phoneMap.getFid());
put("phone", phoneMap.getPhone());
put("name_1", phoneMap.getName1());
put("first", phoneMap.getFirst());
put("middle", phoneMap.getMiddle());
put("birth_dt", phoneMap.getBirthDt());
}}).toList());
//todo update json
// phonesMapMapper.registerJson(json);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public void updateIdCache(List<IdData> idData) { public void updateIdCache(List<IdData> idData) {
try { try {
String json = entityToJsonMapper.writeValueAsString(idData.stream() String json = entityToJsonMapper.writeValueAsString(idData.stream()

View file

@ -1,72 +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.signal.FlagDetailMapper">
<resultMap id="FlagDetail" type="ru.nbch.credit_tracker.entities.app.FlagDetail">
<result property="id" column="id"/>
<result property="mapId" column="map_id"/>
<result property="subjectId" column="subject_id"/>
<result property="phone" column="phone"/>
<result property="fid" column="fid"/>
<result property="flagDebt5000" column="flag_debt5000"/>
<result property="flag90days" column="flag_90_12"/>
</resultMap>
<insert id="registerCalcFlags" parameterType="string">
INSERT INTO signals_flags
(map_id, subject_id, fid, phone, flag_debt5000, flag_90_12, calculated_at)
SELECT map_id, subject_id, fid, phone, flag_debt5000, flag_90_12, calculated_at
FROM json_to_recordset(#{json}::json) AS t(
map_id bigint,
subject_id varchar(255),
fid int,
phone text,
flag_debt5000 smallint,
flag_90_12 smallint,
calculated_at timestamp)
</insert>
<insert id="updateCalcFlags" parameterType="string">
INSERT INTO signals_flags
(map_id, subject_id, fid, phone, flag_debt5000, flag_90_12, calculated_at)
SELECT map_id, fid, flag_debt5000, flag_90_12, calculated_at
FROM json_to_recordset(#{json}::json) AS t(
map_id bigint,
subject_id varchar(255),
fid int,
phone text,
flag_debt5000 smallint,
flag_90_12 smallint,
calculated_at timestamp)
ON CONFLICT (map_id) DO UPDATE
SET subject_id = EXCLUDED.subject_id,
fid = EXCLUDED.fid,
phone = EXCLUDED.phone,
flag_debt5000 = EXCLUDED.flag_debt5000,
flag_90_12 = EXCLUDED.flag_90_12,
calculated_at = EXCLUDED.calculated_at;
</insert>
<delete id="deleteFlags" parameterType="java.util.List">
DELETE FROM signals_flags
WHERE map_id IN
<foreach collection="mapIds" item="mapId" open="(" separator="," close=")">
#{mapId}
</foreach>
</delete>
<select id="getByMapId" resultMap="FlagDetail">
SELECT id,
map_id,
subject_id,
phone,
fid,
flag_debt5000,
flag_90_12
FROM signals_flags
WHERE map_id = #{mapId}
LIMIT 1
</select>
</mapper>

View file

@ -1,48 +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.signal.PackagesRecordsJoinMapper">
<resultMap id="PackageRecordWithPhone" type="ru.nbch.credit_tracker.entities.app.PackageRecordWithPhone">
<result property="packageId" column="package_id"/>
<result property="subjectId" column="subject_id"/>
<result property="phone" column="phone"/>
<result property="fid" column="fid"/>
<result property="name1" column="name_1"/>
<result property="first" column="first"/>
<result property="middle" column="middle"/>
<result property="birthDt" column="birth_dt"/>
<result property="serNum" column="ser_num"/>
<result property="idType" column="id_type"/>
<result property="flagDebt5000" column="flag_debt5000"/>
<result property="flag90days" column="flag_90_12"/>
</resultMap>
<select id="findPackagesRecordsJoinPage" resultMap="PackageRecordWithPhone" resultType="java.util.List">
select spr.id,
spr.package_id,
spr.subject_id,
spr.phone,
sup.fid,
sup.name_1,
sup.first,
sup.middle,
sup.birth_dt,
sup.ser_num,
sup.id_type,
sup.flag_debt5000,
sup.flag_90_12
from signals_phone_fid_map spr
join signals_phones_map sup on cast(spr.phone as bigint) = sup.phone
where spr.package_id = #{packageId}
and sup.fid is not null
ORDER BY spr.id
LIMIT
#{limit}
OFFSET
#{offset}
</select>
</mapper>

View file

@ -234,17 +234,6 @@
AND dst.id in (select id from to_lock); AND dst.id in (select id from to_lock);
</update> </update>
<update id="setFidJson" parameterType="string">
update signals_phones_map dst
set fid = src.fid,
searched_at = now()
FROM json_to_recordset(#{json}::json) AS src(
id bigint,
fid int
)
where dst.id = src.id;
</update>
<update id="resetFidAndPD" parameterType="string"> <update id="resetFidAndPD" parameterType="string">
update signals_phones_map dst update signals_phones_map dst

View file

@ -1,30 +1,31 @@
package ru.nbch.credit_tracker.service; package ru.nbch.credit_tracker.service;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import static org.mockito.ArgumentMatchers.any;
import org.mockito.Mock;
import static org.mockito.Mockito.when;
import org.mockito.junit.jupiter.MockitoExtension;
import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap;
import ru.nbch.credit_tracker.repository.PhoneRepository;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
public class PhoneService2Test { public class PhoneService2Test {
@Mock // @Mock
PhoneRepository phoneRepository; // PhoneRepository phoneRepository;
@Test @Test
public void defineFidByPhoneTest() { public void defineFidByPhoneTest() {
// PhoneService phoneService = new PhoneService(phoneRepository); // PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder); fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFids(any())).thenReturn(fidsDataWithEqualSinceDt); // when(findFids(any())).thenReturn(fidsDataWithEqualSinceDt);
List<PackagesRecordsMap> phoneFidMap = new ArrayList<>(); List<PackagesRecordsMap> phoneFidMap = new ArrayList<>();
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1111L).build()); phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1111L).build());
@ -47,7 +48,7 @@ public class PhoneService2Test {
// PhoneService phoneService = new PhoneService(phoneRepository); // PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder); fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFids(any())).thenReturn(fidsDataWithEqualSinceDt2); // when(findFids(any())).thenReturn(fidsDataWithEqualSinceDt2);
List<PackagesRecordsMap> phoneFidMap = new ArrayList<>(); List<PackagesRecordsMap> phoneFidMap = new ArrayList<>();
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1111L).build()); phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1111L).build());
@ -69,7 +70,7 @@ public class PhoneService2Test {
// PhoneService phoneService = new PhoneService(phoneRepository); // PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder); fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFids(any())).thenReturn(fidsDataWithEqualSinceDt3); // when(findFids(any())).thenReturn(fidsDataWithEqualSinceDt3);
List<PackagesRecordsMap> phoneFidMap = new ArrayList<>(); List<PackagesRecordsMap> phoneFidMap = new ArrayList<>();
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1111L).build()); phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1111L).build());
@ -85,45 +86,45 @@ public class PhoneService2Test {
// Assertions.assertEquals("1115", res.get(127).getPhone()); // Assertions.assertEquals("1115", res.get(127).getPhone());
} }
private final List<PhoneRepository.FidsData> fidsDataWithEqualSinceDt = new ArrayList<>( private final List<FidsData> fidsDataWithEqualSinceDt = new ArrayList<>(
List.of( List.of(
new PhoneRepository.FidsData(123, "91111", LocalDate.of(2025, 9, 10)), new FidsData(123, "91111", LocalDate.of(2025, 9, 10)),
new PhoneRepository.FidsData(124, "91111", LocalDate.of(2025, 9, 10)), new FidsData(124, "91111", LocalDate.of(2025, 9, 10)),
new PhoneRepository.FidsData(125, "91112", LocalDate.of(2024, 10, 10)), new FidsData(125, "91112", LocalDate.of(2024, 10, 10)),
new PhoneRepository.FidsData(126, "91114", LocalDate.of(2024, 10, 11)), new FidsData(126, "91114", LocalDate.of(2024, 10, 11)),
new PhoneRepository.FidsData(127, "91115", LocalDate.of(2025, 9, 11)), new FidsData(127, "91115", LocalDate.of(2025, 9, 11)),
new PhoneRepository.FidsData(128, "91115", LocalDate.of(2025, 9, 10)) new FidsData(128, "91115", LocalDate.of(2025, 9, 10))
) )
); );
private final List<PhoneRepository.FidsData> fidsDataWithEqualSinceDt2 = new ArrayList<>( private final List<FidsData> fidsDataWithEqualSinceDt2 = new ArrayList<>(
List.of( List.of(
new PhoneRepository.FidsData(125, "91112", LocalDate.of(2024, 10, 10)), new FidsData(125, "91112", LocalDate.of(2024, 10, 10)),
new PhoneRepository.FidsData(126, "91114", LocalDate.of(2024, 10, 11)), new FidsData(126, "91114", LocalDate.of(2024, 10, 11)),
new PhoneRepository.FidsData(127, "91115", LocalDate.of(2025, 9, 11)), new FidsData(127, "91115", LocalDate.of(2025, 9, 11)),
new PhoneRepository.FidsData(128, "91115", LocalDate.of(2025, 9, 10)) new FidsData(128, "91115", LocalDate.of(2025, 9, 10))
) )
); );
private final List<PhoneRepository.FidsData> fidsDataWithEqualSinceDt3 = new ArrayList<>( private final List<FidsData> fidsDataWithEqualSinceDt3 = new ArrayList<>(
List.of( List.of(
new PhoneRepository.FidsData(126, "91114", LocalDate.of(2024, 10, 11)), new FidsData(126, "91114", LocalDate.of(2024, 10, 11)),
new PhoneRepository.FidsData(127, "91115", LocalDate.of(2025, 9, 11)), new FidsData(127, "91115", LocalDate.of(2025, 9, 11)),
new PhoneRepository.FidsData(128, "91115", LocalDate.of(2025, 9, 10)) new FidsData(128, "91115", LocalDate.of(2025, 9, 10))
) )
); );
Comparator<PhoneRepository.FidsData> byDbOrder = Comparator<FidsData> byDbOrder =
Comparator.comparing(PhoneRepository.FidsData::getPhone, Comparator.nullsFirst(Comparator.naturalOrder())) // pn.number ASC Comparator.comparing(FidsData::getPhone, Comparator.nullsFirst(Comparator.naturalOrder())) // pn.number ASC
.thenComparing(PhoneRepository.FidsData::getFileSinceDate, Comparator.nullsLast(Comparator.reverseOrder())) // file_since_dt DESC .thenComparing(FidsData::getFileSinceDate, Comparator.nullsLast(Comparator.reverseOrder())) // file_since_dt DESC
.thenComparing(PhoneRepository.FidsData::getFid, Comparator.reverseOrder()); .thenComparing(FidsData::getFid, Comparator.reverseOrder());
@Test @Test
void defineFidsAndNameByPhoneTest() { void defineFidsAndNameByPhoneTest() {
// PhoneService phoneService = new PhoneService(phoneRepository); // PhoneService phoneService = new PhoneService(phoneRepository);
// fidsDataWithNameEqualSinceDt.sort(byDbOrderWithName); // fidsDataWithNameEqualSinceDt.sort(byDbOrderWithName);
// when(phoneRepository.findFidsWithName(any())).thenReturn(fidsDataWithNameEqualSinceDt); // when(findFidsWithName(any())).thenReturn(fidsDataWithNameEqualSinceDt);
List<PackagesRecordsMap> phoneFidMap = new ArrayList<>(); List<PackagesRecordsMap> phoneFidMap = new ArrayList<>();
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1111L).build()); phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1111L).build());
@ -146,35 +147,60 @@ public class PhoneService2Test {
// Assertions.assertNull(res.get(128)); // Assertions.assertNull(res.get(128));
} }
private final List<PhoneRepository.FidsDataWithName> fidsDataWithNameEqualSinceDt = new ArrayList<>( private final List<FidsDataWithName> fidsDataWithNameEqualSinceDt = new ArrayList<>(
List.of( List.of(
new PhoneRepository.FidsDataWithName(123, "91111", LocalDate.of(2025, 9, 10), "skip", null, null, null, null), new FidsDataWithName(123, "91111", LocalDate.of(2025, 9, 10), "skip", null, null, null, null),
new PhoneRepository.FidsDataWithName(123, "91111", LocalDate.of(2025, 9, 10), "skip", null, null, null, LocalDate.of(2025, 10, 9)), new FidsDataWithName(123, "91111", LocalDate.of(2025, 9, 10), "skip", null, null, null, LocalDate.of(2025, 10, 9)),
new PhoneRepository.FidsDataWithName(124, "91111", LocalDate.of(2025, 9, 9), "found124", null, null, null, LocalDate.of(2025, 9, 9)), new FidsDataWithName(124, "91111", LocalDate.of(2025, 9, 9), "found124", null, null, null, LocalDate.of(2025, 9, 9)),
new PhoneRepository.FidsDataWithName(124, "91111", LocalDate.of(2025, 9, 10), "skip124", null, null, null, LocalDate.of(2025, 9, 8)), new FidsDataWithName(124, "91111", LocalDate.of(2025, 9, 10), "skip124", null, null, null, LocalDate.of(2025, 9, 8)),
new PhoneRepository.FidsDataWithName(124, "91111", LocalDate.of(2025, 9, 9), "skip124", null, null, null, LocalDate.of(2025, 9, 8)), new FidsDataWithName(124, "91111", LocalDate.of(2025, 9, 9), "skip124", null, null, null, LocalDate.of(2025, 9, 8)),
new PhoneRepository.FidsDataWithName(124, "91111", LocalDate.of(2025, 9, 10), "found124", null, null, null, LocalDate.of(2025, 9, 9)), new FidsDataWithName(124, "91111", LocalDate.of(2025, 9, 10), "found124", null, null, null, LocalDate.of(2025, 9, 9)),
new PhoneRepository.FidsDataWithName(125, "91112", LocalDate.of(2024, 10, 10), null, null, null, null, null), new FidsDataWithName(125, "91112", LocalDate.of(2024, 10, 10), null, null, null, null, null),
new PhoneRepository.FidsDataWithName(126, "91114", LocalDate.of(2024, 10, 11), "skip126", null, null, null, null), new FidsDataWithName(126, "91114", LocalDate.of(2024, 10, 11), "skip126", null, null, null, null),
new PhoneRepository.FidsDataWithName(126, "91114", LocalDate.of(2024, 10, 11), "found126", null, null, null, LocalDate.of(2025, 9, 9)), new FidsDataWithName(126, "91114", LocalDate.of(2024, 10, 11), "found126", null, null, null, LocalDate.of(2025, 9, 9)),
new PhoneRepository.FidsDataWithName(126, "91114", LocalDate.of(2024, 10, 5), "found126", null, null, null, LocalDate.of(2025, 9, 9)), new FidsDataWithName(126, "91114", LocalDate.of(2024, 10, 5), "found126", null, null, null, LocalDate.of(2025, 9, 9)),
new PhoneRepository.FidsDataWithName(126, "91114", LocalDate.of(2024, 10, 5), "skip126", null, null, null, null), new FidsDataWithName(126, "91114", LocalDate.of(2024, 10, 5), "skip126", null, null, null, null),
new PhoneRepository.FidsDataWithName(127, "91115", LocalDate.of(2025, 9, 11), null, null, null, null, null), new FidsDataWithName(127, "91115", LocalDate.of(2025, 9, 11), null, null, null, null, null),
new PhoneRepository.FidsDataWithName(128, "91115", LocalDate.of(2025, 9, 10), "found128", null, null, null, LocalDate.of(2025, 9, 9)) new FidsDataWithName(128, "91115", LocalDate.of(2025, 9, 10), "found128", null, null, null, LocalDate.of(2025, 9, 9))
) )
); );
//todo понять зачем в тесте использовался этот компоратор //todo понять зачем в тесте использовался этот компоратор
// Comparator<PhoneRepository.FidsDataWithName> byDbOrderWithName = // Comparator<FidsDataWithName> byDbOrderWithName =
// Comparator.comparing(PhoneRepository.FidsDataWithName::getPhone, Comparator.nullsFirst(Comparator.naturalOrder())) // pn.number ASC // Comparator.comparing(FidsDataWithName::getPhone, Comparator.nullsFirst(Comparator.naturalOrder())) // pn.number ASC
// .thenComparing(PhoneRepository.FidsDataWithName::getFileSinceDate, Comparator.nullsLast(Comparator.reverseOrder())) // file_since_dt DESC // .thenComparing(FidsDataWithName::getFileSinceDate, Comparator.nullsLast(Comparator.reverseOrder())) // file_since_dt DESC
// .thenComparing(PhoneRepository.FidsDataWithName::getFid, Comparator.reverseOrder()); // .thenComparing(FidsDataWithName::getFid, Comparator.reverseOrder());
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public static class FidsData {
private Integer fid;
private String phone;
private LocalDate fileSinceDate;
}
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public static class FidsDataWithName {
private Integer fid;
private String phone;
private LocalDate fileSinceDate;
private String firstName;
private String lastName;
private String middleName;
private LocalDate birthDate;
private LocalDate fileSinceDateName;
}
} }

View file

@ -1,120 +0,0 @@
package ru.nbch.credit_tracker.service;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import static org.mockito.ArgumentMatchers.any;
import org.mockito.Mock;
import static org.mockito.Mockito.when;
import org.mockito.junit.jupiter.MockitoExtension;
import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap;
import ru.nbch.credit_tracker.repository.PhoneRepository;
@ExtendWith(MockitoExtension.class)
public class PhoneServiceTest {
@Mock
PhoneRepository phoneRepository;
@Test
public void defineFidByPhoneTest() {
// PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFidsLong(any())).thenReturn(fidsDataWithEqualSinceDt);
List<PackagesRecordsMap> phoneFidMap = new ArrayList<>();
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1111L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1112L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1113L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1114L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1115L).build());
//todo
// Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap);
// Assertions.assertEquals(4, res.size());
// Assertions.assertEquals("1111", res.get(124).getPhone());
// Assertions.assertEquals("1112", res.get(125).getPhone());
// Assertions.assertEquals("1114", res.get(126).getPhone());
// Assertions.assertEquals("1115", res.get(127).getPhone());
}
@Test
public void defineFidByPhoneTest2() {
// PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFidsLong(any())).thenReturn(fidsDataWithEqualSinceDt2);
List<PackagesRecordsMap> phoneFidMap = new ArrayList<>();
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1111L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1112L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1113L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1114L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1115L).build());
//todo
// Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap);
// Assertions.assertEquals(3, res.size());
// Assertions.assertEquals("1112", res.get(125).getPhone());
// Assertions.assertEquals("1114", res.get(126).getPhone());
// Assertions.assertEquals("1115", res.get(127).getPhone());
}
@Test
public void defineFidByPhoneTest3() {
// PhoneService phoneService = new PhoneService(phoneRepository);
fidsDataWithEqualSinceDt.sort(byDbOrder);
when(phoneRepository.findFidsLong(any())).thenReturn(fidsDataWithEqualSinceDt3);
List<PackagesRecordsMap> phoneFidMap = new ArrayList<>();
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1111L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1112L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1113L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1114L).build());
phoneFidMap.add(PackagesRecordsMap.builder().phone_l(1115L).build());
//todo
// Map<Integer, PhoneFidMap> res = phoneService.defineFidByPhone(phoneFidMap);
// Assertions.assertEquals(2, res.size());
// Assertions.assertEquals("1114", res.get(126).getPhone());
// Assertions.assertEquals("1115", res.get(127).getPhone());
}
private final List<PhoneRepository.FidsDataLong> fidsDataWithEqualSinceDt = new ArrayList<>(
List.of(
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))
)
);
private final List<PhoneRepository.FidsDataLong> fidsDataWithEqualSinceDt2 = new ArrayList<>(
List.of(
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))
)
);
private final List<PhoneRepository.FidsDataLong> fidsDataWithEqualSinceDt3 = new ArrayList<>(
List.of(
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<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());
}