Refactored PhoneService and SignalService

This commit is contained in:
Mikhail Trofimov 2025-07-24 15:54:59 +03:00
parent 997bcc6c4a
commit aa106350b5
2 changed files with 23 additions and 42 deletions

View file

@ -119,32 +119,32 @@ public class SignalService {
return; return;
} }
log.info("Start calculating fids and flags for subjects batch. PackageId: {}", packageId); log.info("Start calculating fids and flags for subjects batch. PackageId: {}", packageId);
List<PhoneService.FidsPhoneData> fidsPhoneDataList = phoneService.findFidsPhoneData(subjects); Map<String, Integer> fidsMap = phoneService.findFidsPhoneData(subjects);
LocalDateTime calculatedAt = LocalDateTime.now(); LocalDateTime calculatedAt = LocalDateTime.now();
Map<Integer, FlagsService.FlagsData> flagsDataMap = flagsService.findFlags(fidsPhoneDataList.stream().map(PhoneService.FidsPhoneData::getFid).filter(Objects::nonNull).toList()); Map<Integer, FlagsService.FlagsData> flagsDataMap = flagsService.findFlags(fidsMap.values().stream().filter(Objects::nonNull).toList());
List<PhoneFidMap> subjectToUpdate = new ArrayList<>(); List<PhoneFidMap> subjectToUpdate = new ArrayList<>();
fidsPhoneDataList.forEach(data -> { subjects.forEach(subject -> {
PhoneFidMap subject; Integer fid = fidsMap.get("9" + subject.getPhone());
if (data.getFid() != null) { if (fid != null) {
FlagsService.FlagsData flagsData = flagsDataMap.get(data.getFid()); FlagsService.FlagsData flagsData = flagsDataMap.get(fid);
subject = PhoneFidMap.builder() subject = PhoneFidMap.builder()
.id(data.getId()) .id(subject.getId())
.packageId(packageId) .packageId(packageId)
.subjectId(data.getSubjectId()) .subjectId(subject.getSubjectId())
.phone(data.getPhone()) .phone(subject.getPhone())
.fid(data.getFid()) .fid(fid)
.flagDebt5000(flagsData.getFlagDebt5000()) .flagDebt5000(flagsData.getFlagDebt5000())
.flag90days(flagsData.getFlag90days()) .flag90days(flagsData.getFlag90days())
.calculatedAt(calculatedAt) .calculatedAt(calculatedAt)
.build(); .build();
} else { } else {
subject = PhoneFidMap.builder() subject = PhoneFidMap.builder()
.id(data.getId()) .id(subject.getId())
.packageId(packageId) .packageId(packageId)
.subjectId(data.getSubjectId()) .subjectId(subject.getSubjectId())
.phone(data.getPhone()) .phone(subject.getPhone())
.calculatedAt(calculatedAt) .calculatedAt(calculatedAt)
.build(); .build();
} }

View file

@ -1,6 +1,5 @@
package ru.nbch.credit_tracker.service.indic; package ru.nbch.credit_tracker.service.indic;
import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -8,7 +7,10 @@ import ru.nbch.credit_tracker.entities.dto.PhoneFidMap;
import ru.nbch.credit_tracker.mapper.indic.PhoneMapper; import ru.nbch.credit_tracker.mapper.indic.PhoneMapper;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.*; import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@ -20,24 +22,13 @@ public class PhoneService {
this.mapper = mapper; this.mapper = mapper;
} }
public List<FidsPhoneData> findFidsPhoneData(List<PhoneFidMap> subjects) { /**
List<FidsPhoneData> fidsPhoneDataList = new ArrayList<>(); * Ищет фиды по номерам телефона
* @return Map: key - номер телефона; value - fid
*/
public Map<String, Integer> findFidsPhoneData(List<PhoneFidMap> subjects) {
List<String> phones = subjects.stream().map(subject -> "9" + subject.getPhone()).toList(); List<String> phones = subjects.stream().map(subject -> "9" + subject.getPhone()).toList();
List<FidsData> fidsData = mapper.findFids(phones); return convertFidsDataToMap(mapper.findFids(phones));
Map<String, Integer> fidsMap = convertFidsDataToMap(fidsData);
subjects.forEach(subject -> {
String phone = "9" + subject.getPhone();
Integer fid = fidsMap.get(phone);
if (fid != null) {
fidsPhoneDataList.add(new FidsPhoneData(subject.getId(), fid, subject.getPhone(), subject.getSubjectId()));
} else {
fidsPhoneDataList.add(new FidsPhoneData(subject.getId(), null, subject.getPhone(), subject.getSubjectId()));
}
});
return fidsPhoneDataList;
} }
private Map<String, Integer> convertFidsDataToMap(List<FidsData> fidsData) { private Map<String, Integer> convertFidsDataToMap(List<FidsData> fidsData) {
@ -57,16 +48,6 @@ public class PhoneService {
)); ));
} }
@Getter
@Setter
@AllArgsConstructor
public static class FidsPhoneData {
private Integer id;
private Integer fid;
private String phone;
private String subjectId;
}
@Getter @Getter
@Setter @Setter
public static class FidsData { public static class FidsData {