This commit is contained in:
parent
18c87beafe
commit
cdaac1f22e
5 changed files with 59 additions and 24 deletions
|
|
@ -10,6 +10,7 @@ import ru.nbch.credit_tracker.entities.indic.Name;
|
|||
public interface PersonMapper {
|
||||
|
||||
List<Name> findNameData(@Param("phones") List<String> phones);
|
||||
List<Name> findNameDataByFids(@Param("fids") List<Integer> fids);
|
||||
|
||||
List<Id> findPassportData(@Param("fids") List<Integer> fids);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,6 +84,33 @@ public class PersonServiceV2 {
|
|||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Поиск данных по таблицам PHONE_NORM и NAME по списку номеров телефонов
|
||||
*
|
||||
* @param subjects
|
||||
* @return - отображение NAME к номеру телефону, отфильтрованному по логике
|
||||
* FID с максимальным значением FILE_SINCE_DT. Если FILE_SINCE_DT оказался одинаковый, берется максимальный FID
|
||||
*/
|
||||
public Map<String, Name> findNameByFids(List<SubjectProfile> subjects) {
|
||||
List<Integer> fids = subjects.stream()
|
||||
.map(SubjectProfile::getFid)
|
||||
.toList();
|
||||
|
||||
List<Name> names = mapper.findNameDataByFids(fids);
|
||||
|
||||
return names.stream()
|
||||
.filter(name ->
|
||||
StringUtils.isNotEmpty(name.getFirst()) &&
|
||||
StringUtils.isNotEmpty(name.getLast()) &&
|
||||
name.getBirthDate() != null && !LocalDate.of(1, 1, 1).equals(name.getBirthDate())
|
||||
)
|
||||
.collect(Collectors.toMap(
|
||||
Name::getNumber,
|
||||
Function.identity(),
|
||||
BinaryOperator.maxBy(byDateThenIdNullSafe)
|
||||
));
|
||||
}
|
||||
|
||||
private boolean isDUL(Id p) {
|
||||
Integer idType;
|
||||
Double idType2;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package ru.nbch.credit_tracker.service.task.impl;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
||||
|
|
@ -36,41 +35,29 @@ public class FidNameUpdaterMigration implements Handler<SubjectPayload, SubjectP
|
|||
List<SubjectProfile> subjects = taskPayload.getSubjects();
|
||||
var ctx = obtainContext(PackageVariable.class, taskPayload);
|
||||
log.debug("NameUpdaterStage handle, size of bucket for save: {}", subjects.size());
|
||||
Map<String, Name> nameByPhone = personService.findNameByNumber(subjects);
|
||||
Map<String, Name> nameByPhone = personService.findNameByFids(subjects);
|
||||
|
||||
List<SubjectProfile> changingFidPhones = new ArrayList<>();
|
||||
List<Long> notFoundFidPhones = new ArrayList<>();
|
||||
List<Long> notChangedPhones = subjects.stream().flatMap(subjectProfile -> {
|
||||
subjects.forEach(subjectProfile -> {
|
||||
Name name = nameByPhone.get(CTUtil.normalizePhoneNumber(subjectProfile.getPhone()));
|
||||
if (name != null) {
|
||||
if (subjectProfile.getFid() == null || !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);
|
||||
return Stream.empty();
|
||||
}
|
||||
} else if (subjectProfile.getFid() != null) {
|
||||
} else {
|
||||
notFoundFidPhones.add(subjectProfile.getPhone());
|
||||
return Stream.empty();
|
||||
}
|
||||
return Stream.of(subjectProfile.getPhone());
|
||||
}).toList();
|
||||
List<Long> changingFids = new ArrayList<>();
|
||||
});
|
||||
|
||||
if (!notFoundFidPhones.isEmpty()) {
|
||||
phonesMapService.resetFidAndPDByPhones(notFoundFidPhones);
|
||||
changingFids.addAll(notFoundFidPhones);
|
||||
}
|
||||
|
||||
if (!changingFidPhones.isEmpty()) {
|
||||
phonesMapService.updateNameCachedData(changingFidPhones);
|
||||
changingFids.addAll(changingFidPhones.stream().map(SubjectProfile::getPhone).toList());
|
||||
}
|
||||
|
||||
if (!notChangedPhones.isEmpty()) {
|
||||
phonesMapService.updateSearchedAt(notChangedPhones);
|
||||
}
|
||||
return new SubjectPayload(null, null, null, changingFidPhones);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,6 +46,26 @@
|
|||
WITH UR
|
||||
</select>
|
||||
|
||||
<select id="findNameDataByFids" resultMap="nameDataResultMap">
|
||||
SELECT
|
||||
pn.number as number,
|
||||
pn.fid as fid,
|
||||
pn.FILE_SINCE_DT as file_since_dt_pn,
|
||||
nf.first as first,
|
||||
nf.middle as middle,
|
||||
nf.name_1 as name_1,
|
||||
nf.birth_dt as birth_dt,
|
||||
nf.file_since_dt as file_since_dt_name
|
||||
FROM PHONE_NORM pn
|
||||
JOIN NAME nf
|
||||
ON nf.fid = pn.fid
|
||||
WHERE pn.fid in
|
||||
<foreach item="fid" collection="fids" open="(" separator="," close=")">
|
||||
#{fid}
|
||||
</foreach>
|
||||
WITH UR
|
||||
</select>
|
||||
|
||||
<select id="findPassportData" resultMap="passportDataResultMap" resultType="java.util.List">
|
||||
SELECT FID, SER_NUM, ID_NUM, ISS_DTE, FILE_SINCE_DT, ID_TYPE, ID_TYPE2
|
||||
FROM ID
|
||||
|
|
|
|||
|
|
@ -52,6 +52,6 @@ SELECT distinct on (phone_l) fid::int,
|
|||
calculated_at,
|
||||
'2025-01-01'
|
||||
FROM signals_phone_fid_map where fid is not null
|
||||
order by phone, calculated_at desc;
|
||||
order by phone_l, calculated_at desc;
|
||||
|
||||
insert into app_version values ('2.0')
|
||||
Loading…
Add table
Reference in a new issue