This commit is contained in:
etreschenkov 2026-01-15 19:03:04 +03:00
parent e92111273f
commit c135bf8481
16 changed files with 193 additions and 251 deletions

View file

@ -5,6 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ConfigurableApplicationContext;
import ru.nbch.credit_tracker.service.MonitoringService; import ru.nbch.credit_tracker.service.MonitoringService;
import ru.nbch.credit_tracker.service.UpdateProcessingPackagesService; import ru.nbch.credit_tracker.service.UpdateProcessingPackagesService;
import ru.nbch.credit_tracker.service.UpdatingFlagsService;
@SpringBootApplication @SpringBootApplication
public class CreditTrackerApplication { public class CreditTrackerApplication {
@ -13,10 +14,10 @@ public class CreditTrackerApplication {
ConfigurableApplicationContext ctx = SpringApplication.run(CreditTrackerApplication.class, args); ConfigurableApplicationContext ctx = SpringApplication.run(CreditTrackerApplication.class, args);
UpdateProcessingPackagesService updateProcessingPackagesService = ctx.getBean(UpdateProcessingPackagesService.class); UpdateProcessingPackagesService updateProcessingPackagesService = ctx.getBean(UpdateProcessingPackagesService.class);
MonitoringService monitoringService = ctx.getBean(MonitoringService.class); MonitoringService monitoringService = ctx.getBean(MonitoringService.class);
// UpdatingFlagsService updatingFlagsService = ctx.getBean(UpdatingFlagsService.class); UpdatingFlagsService updatingFlagsService = ctx.getBean(UpdatingFlagsService.class);
// updatingFlagsService.update(); updatingFlagsService.update();
updateProcessingPackagesService.run(); // updateProcessingPackagesService.run();
monitoringService.run(); // monitoringService.run();
} }
} }

View file

@ -10,6 +10,7 @@ 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);
Long deleteByPackageId(@Param("packageId") Long id); Long deleteByPackageId(@Param("packageId") Long id);
PackagesRecordsMap findById(Long id); PackagesRecordsMap findById(Long id);

View file

@ -11,7 +11,9 @@ public interface PhonesMapMapper {
List<PhonesMap> searchedAtLessThan(@Param("daysCount") Integer daysCount, @Param("limit") int limit, @Param("offset") int offset); List<PhonesMap> searchedAtLessThan(@Param("daysCount") Integer daysCount, @Param("limit") int limit, @Param("offset") int offset);
PhonesMap findByPhone(@Param("phone") Long phone); PhonesMap findByPhone(@Param("phone") Long phone);
void updateIdCachedData(@Param("json") String json); void updateIdCachedData(@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 registerJson(@Param("json") String json); void registerJson(@Param("json") String json);
void setFidJson(@Param("json") String json); void setFidJson(@Param("json") String json);
} }

View file

@ -27,6 +27,7 @@ public interface UserPackageMapper {
void updatePackageOnMonitoringSuccess(@Param("id") Long id, @Param("monitoringAt") LocalDateTime monitoringAt); void updatePackageOnMonitoringSuccess(@Param("id") Long id, @Param("monitoringAt") LocalDateTime monitoringAt);
void setLastSearchedDt(@Param("id") Long id); void setLastSearchedDt(@Param("id") Long id);
void setFidChanged(@Param("packageIds") List<Long> id);
UserPackage findPackage(@Param("id") Long id); UserPackage findPackage(@Param("id") Long id);

View file

@ -1,34 +1,29 @@
package ru.nbch.credit_tracker.service; package ru.nbch.credit_tracker.service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
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.UserPackage; import ru.nbch.credit_tracker.entities.app.UserPackage;
import ru.nbch.credit_tracker.entities.user_request.monitoring_request.MonitoringRequest;
import ru.nbch.credit_tracker.enums.Status; import ru.nbch.credit_tracker.enums.Status;
import ru.nbch.credit_tracker.service.signal.UserPackageDao; import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
@Slf4j @Slf4j
@Service @Service
public class UserPackageService { public class UserPackageService {
private final UserPackageDao userPackageService; private final UserPackageMapper userPackageMapper;
public UserPackageService(UserPackageDao userPackageService) { public UserPackageService(UserPackageMapper userPackageMapper) {
this.userPackageService = userPackageService; this.userPackageMapper = userPackageMapper;
}
public boolean isPackageNotUnique(MonitoringRequest request) {
return userPackageService.isPackageNotUnique(request.getUserId(), request.getPackageName());
} }
public boolean isPackageNotUnique(String userId, String packageName) { public boolean isPackageNotUnique(String userId, String packageName) {
return userPackageService.isPackageNotUnique(userId, packageName); return userPackageMapper.isPackageNotUnique(userId, packageName);
} }
public Long registerPackage(String userId, String packageName, List<Integer> signalTypes) { public Long registerPackage(String userId, String packageName, List<Integer> signalTypes) {
signalTypes.sort(Comparator.naturalOrder()); signalTypes.sort(Comparator.naturalOrder());
String types = "1,2"; String types = "1,2";
@ -42,7 +37,7 @@ public class UserPackageService {
.createdAt(LocalDateTime.now()) .createdAt(LocalDateTime.now())
.status(Status.ACCEPTED.name()) .status(Status.ACCEPTED.name())
.build(); .build();
return userPackageService.insertPackage(userPackage); return userPackageMapper.insertPackage(userPackage);
} }
public void rejectPackage(String userId, String packageName, List<Integer> signalTypes) { public void rejectPackage(String userId, String packageName, List<Integer> signalTypes) {
@ -57,35 +52,25 @@ public class UserPackageService {
.createdAt(LocalDateTime.now()) .createdAt(LocalDateTime.now())
.status(Status.REJECTED.name()) .status(Status.REJECTED.name())
.build(); .build();
userPackageService.insertPackage(userPackage); userPackageMapper.insertPackage(userPackage);
} }
public List<UserPackage> findActivePackages(String userId) { public List<UserPackage> findActivePackages(String userId) {
return userPackageService.findUserPackages(userId, Status.ON_MONITORING); return userPackageMapper.findUserPackages(userId, Arrays.asList(Status.ON_MONITORING.name()));
} }
public void setFidChanged(List<Long> id) {
userPackageMapper.setFidChanged(id);
}
public List<UserPackage> findAllPackages(String userId) { public List<UserPackage> findAllPackages(String userId) {
return userPackageService.findAllPackagesByUserId(userId); return userPackageMapper.findAllPackagesByUserId(userId);
}
public boolean isPackageExists(String username, String packageName) {
return userPackageService.isPackageExists(username, packageName, Status.ON_MONITORING);
} }
public List<UserPackage> findByMemberCodeAndPackageName(String memberCode, String packageName) { public List<UserPackage> findByMemberCodeAndPackageName(String memberCode, String packageName) {
return userPackageService.findByMemberCodeAndPackageName(memberCode, packageName); return userPackageMapper.findByMemberCodeAndPackageName(memberCode, packageName);
}
public boolean isPackagesByStatusExist(String username, String packageName, Status status) {
return userPackageService.hasActivePackages(username, packageName, status);
}
public void deletePackage(String username, String packageName, LocalDateTime deactivatedAt) {
userPackageService.deletePackage(username, packageName, Status.DELETED, Status.ON_MONITORING, deactivatedAt);
} }
public void deletePackageById(Long id, LocalDateTime deactivatedAt) { public void deletePackageById(Long id, LocalDateTime deactivatedAt) {
userPackageService.deletePackageById(id, deactivatedAt); userPackageMapper.deletePackageById(id, Status.DELETED.name(), deactivatedAt);
} }
} }

View file

@ -79,6 +79,19 @@ public class PackageRecordsService {
} }
} }
public List<Long> selectUniquePackageIds(List<Long> phones) {
try {
String json = entityToJsonMapper.writeValueAsString(phones.stream()
.filter(Objects::nonNull)
.map(phone -> new HashMap<String, Object>() {{
put("phone", phone);
}}).toList());
return packagesRecordsMapper.uniquePackageIdByPhones(json);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public void updateNameCache(List<PhonesMap> phonesMaps) { public void updateNameCache(List<PhonesMap> phonesMaps) {
try { try {
String json = entityToJsonMapper.writeValueAsString(phonesMaps.stream() String json = entityToJsonMapper.writeValueAsString(phonesMaps.stream()

View file

@ -0,0 +1,53 @@
package ru.nbch.credit_tracker.service.signal;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.mapper.signal.PhonesMapMapper;
import ru.nbch.credit_tracker.model.SubjectProfile;
@Service
public class PhonesMapService {
private final PhonesMapMapper phonesMapMapper;
private final ObjectMapper entityToJsonMapper;
public PhonesMapService(PhonesMapMapper phonesMapMapper,
ObjectMapper entityToJsonMapper) {
this.phonesMapMapper = phonesMapMapper;
this.entityToJsonMapper = entityToJsonMapper;
}
public void resetFidAndPDByPhones(List<Long> phones) {
try {
String json = entityToJsonMapper.writeValueAsString(phones.stream()
.filter(Objects::nonNull)
.map(phone -> new HashMap<String, Object>() {{
put("phone", phone);
}}).toList());
phonesMapMapper.resetFidAndPD(json);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public void updateNameCachedData(List<SubjectProfile> subjectProfiles) {
try {
String json = entityToJsonMapper.writeValueAsString(subjectProfiles.stream()
.filter(Objects::nonNull)
.map(subjectProfile -> new HashMap<String, Object>() {{
put("fid", subjectProfile.getFid());
put("name_1", subjectProfile.getNameData().getLastName());
put("first", subjectProfile.getNameData().getFirstName());
put("middle", subjectProfile.getNameData().getMiddleName());
put("birth_dt", subjectProfile.getNameData().getBirthDate());
put("phone", subjectProfile.getPhone());
}}).toList());
phonesMapMapper.updateNameCachedData(json);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
}

View file

@ -1,75 +0,0 @@
package ru.nbch.credit_tracker.service.signal;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.entities.app.UserPackage;
import ru.nbch.credit_tracker.enums.Status;
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
@Service
public class UserPackageDao {
private final UserPackageMapper mapper;
public UserPackageDao(UserPackageMapper mapper) {
this.mapper = mapper;
}
public boolean isPackageNotUnique(String userId, String packageName) {
return mapper.isPackageNotUnique(userId.substring(0, 6), packageName);
}
public boolean isPackageExists(String userId, String packageName, Status status) {
return mapper.isPackageExists(userId.substring(0, 6), packageName, status.name());
}
public boolean hasActivePackages(String userId, String packageName, Status... status) {
return mapper.hasActivePackages(userId.substring(0, 6), packageName, Arrays.stream(status).map(Enum::name).toList());
}
public void deletePackage(String userId, String packageName, Status newStatus, Status previousStatus, LocalDateTime deactivatedAt) {
mapper.deletePackage(userId.substring(0, 6), packageName, newStatus.name(), previousStatus.name(), deactivatedAt);
}
public void deletePackageById(Long id, LocalDateTime deactivatedAt) {
mapper.deletePackageById(id, Status.DELETED.name(), deactivatedAt);
}
public Long insertPackage(UserPackage userPackage) {
return mapper.insertPackage(userPackage);
}
public void updatePackageStatus(Long packageId, Status status) {
mapper.updatePackageStatus(packageId, status.name());
}
public void updatePackageLastDownloadedReport(Long id, String fileName) {
mapper.updatePackageLastDownloadedReport(id, fileName);
}
public void updatePackageOnMonitoringSuccess(Long id, LocalDateTime monitoringAt) {
mapper.updatePackageOnMonitoringSuccess(id, monitoringAt);
}
public UserPackage findPackage(Long id) {
return mapper.findPackage(id);
}
public List<UserPackage> findUserPackages(String userId, Status... status) {
return mapper.findUserPackages(userId.substring(0, 6), Arrays.stream(status).map(Enum::name).toList());
}
public List<UserPackage> findAllPackagesByUserId(String userId) {
return mapper.findAllPackagesByUserId(userId.substring(0, 6));
}
public List<UserPackage> findByMemberCodeAndPackageName(String memberCode, String packageName) {
return mapper.findByMemberCodeAndPackageName(memberCode.substring(0, 6), packageName);
}
public List<UserPackage> findAllPackagesByStatus(Status status) {
return mapper.findAllPackagesByStatus(status.name());
}
}

View file

@ -8,6 +8,7 @@ import java.nio.file.Paths;
import java.nio.file.StandardCopyOption; import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption; import java.nio.file.StandardOpenOption;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@ -53,7 +54,13 @@ public class FidIdEnricher implements Handler<SubjectPayload, PartFilePayload> {
.filter(subjectProfile -> subjectProfile.getIdData() == null) .filter(subjectProfile -> subjectProfile.getIdData() == null)
.map(SubjectProfile::getFid) .map(SubjectProfile::getFid)
.toList(); .toList();
Map<Integer, Id> idByFid = personService.filledPassportsData(noIdDataFids);
Map<Integer, Id> idByFid;
if (!noIdDataFids.isEmpty()) {
idByFid = personService.filledPassportsData(noIdDataFids);
} else {
idByFid = new HashMap<>();
}
List<IdData> idCacheOnUpdate = new ArrayList<>(); List<IdData> idCacheOnUpdate = new ArrayList<>();
List<Person> personOnProcessing = subjectsProfile.stream() List<Person> personOnProcessing = subjectsProfile.stream()

View file

@ -1,5 +1,6 @@
package ru.nbch.credit_tracker.service.task.impl; package ru.nbch.credit_tracker.service.task.impl;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
@ -61,7 +62,12 @@ public class FidNameEnricher implements Handler<SubjectPayload, SubjectPayload>
.filter(subjectProfile -> !cachedRecords.containsKey(subjectProfile.getPhone())) .filter(subjectProfile -> !cachedRecords.containsKey(subjectProfile.getPhone()))
.toList(); .toList();
Map<String, Name> nameByPhone = personService.findNameByNumber(noFidsData); Map<String, Name> nameByPhone;
if (!noFidsData.isEmpty()) {
nameByPhone = personService.findNameByNumber(noFidsData);
} else {
nameByPhone = new HashMap<>();
}
AtomicInteger cacheHits = context.get(PackageVariable.cacheHits); AtomicInteger cacheHits = context.get(PackageVariable.cacheHits);
AtomicInteger cacheMisses = context.get(PackageVariable.cacheMisses); AtomicInteger cacheMisses = context.get(PackageVariable.cacheMisses);
@ -74,6 +80,9 @@ public class FidNameEnricher implements Handler<SubjectPayload, SubjectPayload>
cacheMisses.incrementAndGet(); cacheMisses.incrementAndGet();
Name name = nameByPhone.get(CTUtil.normalizePhoneNumber(phone)); Name name = nameByPhone.get(CTUtil.normalizePhoneNumber(phone));
if (name == null) { if (name == null) {
if (noFidsData.isEmpty()) {
log.warn("Unexpected scenario...all recs are hit to cache, but nameData was trying to found in indic");
}
return Stream.of(PhonesMap.builder() return Stream.of(PhonesMap.builder()
.phone(phone) .phone(phone)
.build()); .build());

View file

@ -10,8 +10,10 @@ import ru.nbch.credit_tracker.entities.indic.Name;
import ru.nbch.credit_tracker.model.SubjectProfile; import ru.nbch.credit_tracker.model.SubjectProfile;
import ru.nbch.credit_tracker.model.impl.PackageVariable; import ru.nbch.credit_tracker.model.impl.PackageVariable;
import ru.nbch.credit_tracker.model.impl.SubjectPayload; import ru.nbch.credit_tracker.model.impl.SubjectPayload;
import ru.nbch.credit_tracker.service.UserPackageService;
import ru.nbch.credit_tracker.service.indic.PersonServiceV2; import ru.nbch.credit_tracker.service.indic.PersonServiceV2;
import ru.nbch.credit_tracker.service.signal.PackageRecordsService; import ru.nbch.credit_tracker.service.signal.PackageRecordsService;
import ru.nbch.credit_tracker.service.signal.PhonesMapService;
import ru.nbch.credit_tracker.service.task.Handler; import ru.nbch.credit_tracker.service.task.Handler;
import ru.nbch.credit_tracker.utils.CTUtil; import ru.nbch.credit_tracker.utils.CTUtil;
@ -21,13 +23,19 @@ public class FidNameUpdater implements Handler<SubjectPayload, SubjectPayload> {
private final PersonServiceV2 personService; private final PersonServiceV2 personService;
private final CreditTrackerSettings creditTrackerSettings; private final CreditTrackerSettings creditTrackerSettings;
private final PackageRecordsService packageRecordsService; private final PackageRecordsService packageRecordsService;
private final PhonesMapService phonesMapService;
private final UserPackageService userPackageService;
public FidNameUpdater(PersonServiceV2 personService, public FidNameUpdater(PersonServiceV2 personService,
CreditTrackerSettings creditTrackerSettings, CreditTrackerSettings creditTrackerSettings,
PackageRecordsService packageRecordsService) { PackageRecordsService packageRecordsService,
PhonesMapService phonesMapService,
UserPackageService userPackageService) {
this.personService = personService; this.personService = personService;
this.creditTrackerSettings = creditTrackerSettings; this.creditTrackerSettings = creditTrackerSettings;
this.packageRecordsService = packageRecordsService; this.packageRecordsService = packageRecordsService;
this.phonesMapService = phonesMapService;
this.userPackageService = userPackageService;
} }
@Override @Override
@ -44,12 +52,29 @@ public class FidNameUpdater implements Handler<SubjectPayload, SubjectPayload> {
if (name == null) { if (name == null) {
notFoundFidPhones.add(subjectProfile.getPhone()); notFoundFidPhones.add(subjectProfile.getPhone());
} else if (!subjectProfile.getFid().equals(name.getFid())) { } else if (!subjectProfile.getFid().equals(name.getFid())) {
subjectProfile.setFid(name.getFid());
subjectProfile.getNameData().setFirstName(name.getFirst());
subjectProfile.getNameData().setLastName(name.getLast());
subjectProfile.getNameData().setMiddleName(name.getMiddle());
subjectProfile.getNameData().setBirthDate(name.getBirthDate());
changingFidPhones.add(subjectProfile); changingFidPhones.add(subjectProfile);
} }
}); });
//1.set to null fid name and id data in signals_phones_map List<Long> changingFids = new ArrayList<>();
//1.2 set FID_CHANGED = 1 for this package(select by phone) if (!notFoundFidPhones.isEmpty()) {
phonesMapService.resetFidAndPDByPhones(notFoundFidPhones);
changingFids.addAll(notFoundFidPhones);
}
if (!changingFidPhones.isEmpty()) {
phonesMapService.updateNameCachedData(changingFidPhones);
changingFids.addAll(changingFidPhones.stream().map(SubjectProfile::getPhone).toList());
}
if (!changingFids.isEmpty()) {
List<Long> packageIds = packageRecordsService.selectUniquePackageIds(changingFids);
userPackageService.setFidChanged(packageIds);
}
//2.set new fid name and id data in signals_phones_map //2.set new fid name and id data in signals_phones_map
//2.2 set FID_CHANGED = 1 for this package(select by phone) //2.2 set FID_CHANGED = 1 for this package(select by phone)
return new SubjectPayload(null, null, null, changingFidPhones); return new SubjectPayload(null, null, null, changingFidPhones);

View file

@ -1,136 +0,0 @@
package ru.nbch.credit_tracker.service.task.impl;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.entities.app.PhonesMap;
import ru.nbch.credit_tracker.entities.indic.Name;
import ru.nbch.credit_tracker.model.FlagData;
import ru.nbch.credit_tracker.model.IdData;
import ru.nbch.credit_tracker.model.NameData;
import ru.nbch.credit_tracker.model.SubjectProfile;
import ru.nbch.credit_tracker.model.impl.PackageVariable;
import ru.nbch.credit_tracker.model.impl.SubjectPayload;
import ru.nbch.credit_tracker.service.indic.PersonServiceV2;
import ru.nbch.credit_tracker.service.signal.PackageRecordsService;
import ru.nbch.credit_tracker.service.task.Handler;
import ru.nbch.credit_tracker.utils.CTUtil;
/**
* Стадия для сопоставления FID к номеру телефона и регистрации пакета в базе данных.
* Так же выполняется поиск и обогащение перс.данными из NAME для дальнейшей обработки.
* Имеет функуию при режиме RESTORE у Pipeline, когда фиды были установлены, но данные нужно подтянуть снова
*/
@Service
@Slf4j
public class FidUpdateNameEnricher implements Handler<SubjectPayload, SubjectPayload> {
private final PersonServiceV2 personService;
private final CreditTrackerSettings creditTrackerSettings;
private final PackageRecordsService packageRecordsService;
public FidUpdateNameEnricher(PersonServiceV2 personService,
CreditTrackerSettings creditTrackerSettings,
PackageRecordsService packageRecordsService) {
this.personService = personService;
this.creditTrackerSettings = creditTrackerSettings;
this.packageRecordsService = packageRecordsService;
}
@Override
public SubjectPayload handle(SubjectPayload taskPayload) {
List<SubjectProfile> subjects = taskPayload.getSubjects();
var ctx = obtainContext(PackageVariable.class, taskPayload);
Long packageId = ctx.get(PackageVariable.packageId);
log.debug("NameEnricherStage handle by packageId: {}, size of bucket for save: {}", packageId, subjects.size());
//найдем телефоны в табличном кэше
processByNumber(subjects);
return taskPayload;
}
private void processByNumber(List<SubjectProfile> subjects) {
Map<String, Name> nameByPhone = personService.findNameByNumber(subjects);
List<PhonesMap> subjectForSave = subjects.stream().flatMap(subject -> {
Name name = nameByPhone.get(CTUtil.normalizePhoneNumber(subject.getPhone()));
if (name == null) {
//todo set fid to null
return Stream.of(PhonesMap.builder()
.fid(null)
.phone(subject.getPhone())
.name1(null)
.first(null)
.middle(null)
.birthDt(null)
.build());
}
return Stream.of(PhonesMap.builder()
.fid(subject.getFid())
.phone(subject.getPhone())
.name1(name.getLast())
.first(name.getFirst())
.middle(name.getMiddle())
.birthDt(name.getBirthDate())
.build());
}).toList();
packageRecordsService.updateNameCache(subjectForSave);
}
private void fillByCache(SubjectProfile subjectProfile, PhonesMap cachedRecord) {
NameData nameData = NameData.builder()
.middleName(cachedRecord.getMiddle())
.firstName(cachedRecord.getFirst())
.lastName(cachedRecord.getName1())
.birthDate(cachedRecord.getBirthDt())
.build();
subjectProfile.setNameData(nameData);
Optional.of(cachedRecord)
.filter(cr -> cachedRecord.getSerNum() != null && cachedRecord.getIdType() != null)
.map(cr -> Optional.of(
(IdData.builder()
.idNum(cr.getSerNum())
.idType(cr.getIdType())
.build()
)))
.ifPresent(idData -> subjectProfile.setIdData(idData.get()));
Optional.of(cachedRecord)
.filter(cr -> cachedRecord.getFlagDebt5000() != null && cachedRecord.getFlag90days() != null)
.map(cr -> Optional.of(
(FlagData.builder()
.flag_debt5000(cr.getFlagDebt5000())
.flag_90_12(cr.getFlag90days())
.build()
)))
.ifPresent(flagData -> subjectProfile.setFlagData(flagData.get()));
}
private void fillByName(SubjectProfile subjectProfile, Name name) {
NameData nameData = NameData.builder()
.middleName(name.getMiddle())
.firstName(name.getFirst())
.lastName(name.getLast())
.fileSinceDate(name.getFileSinceDate())
.birthDate(name.getBirthDate())
.build();
subjectProfile.setFid(name.getFid());
subjectProfile.setNameData(nameData);
}
@Override
public int preferredConcurrency() {
return creditTrackerSettings.getPipeline().nameEnricherStageConcurrency();
}
@Override
public SubjectPayload cookPoison() {
return SubjectPayload.POISON;
}
}

View file

@ -22,6 +22,15 @@
FROM signals_packages_records FROM signals_packages_records
WHERE id = #{id} WHERE id = #{id}
</select> </select>
<select id="uniquePackageIdByPhones" resultType="java.util.List">
WITH src AS (SELECT phone
FROM json_to_recordset(#{json}::json) AS t(
phone bigint
))
select distinct (package_id) from signals_packages_records where phone_l in (select * from src)
</select>
<select id="registerJson" parameterType="string" resultType="long"> <select id="registerJson" parameterType="string" resultType="long">
WITH src AS (SELECT row_number() OVER () AS rn, WITH src AS (SELECT row_number() OVER () AS rn,
subject_id, subject_id,

View file

@ -128,6 +128,25 @@
where dst.phone = src.phone; where dst.phone = src.phone;
</update> </update>
<update id="updateNameCachedData" parameterType="string">
update signals_phones_map dst
set
fid = src.fid,
name_1 = src.name_1,
first = src.first,
middle = src.middle,
birth_dt = src.birth_dt
FROM json_to_recordset(#{json}::json) AS src(
fid int,
phone bigint,
name_1 varchar(255),
first varchar(255),
middle varchar(255),
birth_dt timestamp
)
where dst.phone = src.phone;
</update>
<update id="updateFlagCachedData" parameterType="string"> <update id="updateFlagCachedData" parameterType="string">
update signals_phones_map dst update signals_phones_map dst
set flag_debt5000 = src.flag_debt5000, set flag_debt5000 = src.flag_debt5000,
@ -152,6 +171,23 @@
where dst.id = src.id; where dst.id = src.id;
</update> </update>
<update id="resetFidAndPD" parameterType="string">
update signals_phones_map dst
set fid = null,
name_1 = null,
first = null,
middle = null,
birth_dt = null,
ser_num = null,
id_type = null,
flag_debt5000 = null,
flag_90_12 = null
FROM json_to_recordset(#{json}::json) AS src(
phone bigint)
where dst.phone = src.phone
</update>
<!-- <select id="pageByPackageIdAndOlderThanN" resultMap="PhoneFidMapResultMap" resultType="java.util.List">--> <!-- <select id="pageByPackageIdAndOlderThanN" resultMap="PhoneFidMapResultMap" resultType="java.util.List">-->
<!-- SELECT id,--> <!-- SELECT id,-->

View file

@ -74,6 +74,15 @@
WHERE id = #{packageId} WHERE id = #{packageId}
</update> </update>
<update id="setFidChanged">
UPDATE signals_user_packages
SET fid_changed = 1
WHERE id in
<foreach item="packageId" collection="packageIds" open="(" separator="," close=")">
#{packageId}
</foreach>
</update>
<update id="updatePackageLastDownloadedReport"> <update id="updatePackageLastDownloadedReport">
UPDATE signals_user_packages UPDATE signals_user_packages
SET last_downloaded_report = #{fileName} SET last_downloaded_report = #{fileName}

View file

@ -6,11 +6,13 @@ CREATE TABLE app_version
alter table signals_user_packages alter table signals_user_packages
add LAST_SEARCHED_AT timestamp; add LAST_SEARCHED_AT timestamp;
alter table signals_user_packages alter table signals_user_packages
add signal_types varchar(255); add SIGNAL_TYPES varchar(255);
alter table signals_user_packages alter table signals_user_packages
add REJECT_STATUS varchar(255); add REJECT_STATUS varchar(255);
alter table signals_user_packages alter table signals_user_packages
add EXTERNAL_PACKAGE_NAME varchar(255); add EXTERNAL_PACKAGE_NAME varchar(255);
alter table signals_user_packages
add FID_CHANGED smallint;
alter table signals_hits alter table signals_hits