Minor refactoring

This commit is contained in:
Mikhail Trofimov 2026-07-09 16:51:21 +03:00
parent 59b074b2da
commit 77f217e0f8
2 changed files with 117 additions and 78 deletions

View file

@ -198,10 +198,6 @@ public class KafkaMonitoringService {
} }
for (PhonesMap phonesMap : phonesMapList) { for (PhonesMap phonesMap : phonesMapList) {
// флаги просрочек
Integer flagDebt5000 = phonesMap.getFlagDebt5000();
Integer flag90days = phonesMap.getFlag90days();
// в userPackagePhoneDataMap только нужные номера, те что не вошли в userPackagePhoneDataList игнорируются // в userPackagePhoneDataMap только нужные номера, те что не вошли в userPackagePhoneDataList игнорируются
List<UserPackagePhoneData> userPackagePhoneDataList = userPackagePhoneDataMap.get(phonesMap.getPhone()); List<UserPackagePhoneData> userPackagePhoneDataList = userPackagePhoneDataMap.get(phonesMap.getPhone());
@ -210,44 +206,30 @@ public class KafkaMonitoringService {
} }
for (UserPackagePhoneData userPackagePhoneData : userPackagePhoneDataList) { for (UserPackagePhoneData userPackagePhoneData : userPackagePhoneDataList) {
String subjectId = userPackagePhoneData.getSubjectId();
String signalTypes = userPackagePhoneData.getSignalTypes(); String signalTypes = userPackagePhoneData.getSignalTypes();
if (signalTypes.contains(Integer.toString(signalType))) { if (signalTypes.contains(Integer.toString(signalType))) {
SignalKafkaEvent event = new SignalKafkaEvent();
event.setEventType(EventType.WRITE);
event.setNatural(true);
event.setUserPackagePhoneData(userPackagePhoneData);
event.setPackageMessage(message);
event.setSubjectId(subjectId);
event.setFlagDebt5000(flagDebt5000);
event.setFlag90days(flag90days);
event.setSignalType(Integer.toString(signalType));
event.setBusCategory(signalType == 3 ? busCategory : null);
Integer segment = segmentMap.get(memberCode.substring(0, 6)); Integer segment = segmentMap.get(memberCode.substring(0, 6));
event.setSegment(segment != null ? segment : -1); SignalKafkaEvent event = buildSignalKafkaEvent(
true, message,
phonesMap, userPackagePhoneData,
null, null, // legal person fields
signalType, busCategory, segment
);
String reportKey = userPackagePhoneData.getUserId().substring(0, 6) String reportKey = userPackagePhoneData.getUserId().substring(0, 6)
+ "_" + userPackagePhoneData.getPackageName(); + "_" + userPackagePhoneData.getPackageName();
String reportFileName = resolveNameAndEnqueue(reportKey, event); String reportFileName = reportNameRegistry.resolveNameAndEnqueue(reportKey, event);
if (reportFileName == null) { if (reportFileName == null) {
continue; // событие не встало в очередь hit не пишем continue; // событие не встало в очередь hit не пишем
} }
Hit hit = Hit.builder() Hit hit = buildHit(
.packageId(userPackagePhoneData.getPackageId()) true, message,
.subjectId(subjectId) userPackagePhoneData,
.signalType(signalType) null,
.reportFileName(reportFileName.replace(".xml", ".zip")) signalType, busCategory,
.inqT(message.getInquiryType()) segment, reportFileName
.busCategory(busCategory) );
.inqDt(message.getInquiryDate())
.inqP(message.getInquiryPurpose())
.inqA(message.getInquiryAmount())
.segment(segment != null ? segment : -1)
.recordedAt(LocalDateTime.now())
.phone(userPackagePhoneData.getPhone())
.build();
hits.add(hit); hits.add(hit);
} }
} }
@ -303,10 +285,6 @@ public class KafkaMonitoringService {
} }
for (LegalsMap legalsMap : legalsMapList) { for (LegalsMap legalsMap : legalsMapList) {
// флаги просрочек
Integer flag90days = legalsMap.getFlag90days();
LocalDateTime lastRejectedDate = legalsMap.getLastRejectedDate();
// в userPackageLegalDataMap только нужные inn, regnum, те что не вошли в userPackageLegalDataList игнорируются // в userPackageLegalDataMap только нужные inn, regnum, те что не вошли в userPackageLegalDataList игнорируются
List<UserPackageLegalData> userPackageLegalDataList = userPackageLegalDataMap.get(Pair.of(legalsMap.getInn(), legalsMap.getRegNum())); List<UserPackageLegalData> userPackageLegalDataList = userPackageLegalDataMap.get(Pair.of(legalsMap.getInn(), legalsMap.getRegNum()));
@ -315,45 +293,32 @@ public class KafkaMonitoringService {
} }
for (UserPackageLegalData userPackageLegalData : userPackageLegalDataList) { for (UserPackageLegalData userPackageLegalData : userPackageLegalDataList) {
String subjectId = userPackageLegalData.getSubjectId();
String signalTypes = userPackageLegalData.getSignalTypes(); String signalTypes = userPackageLegalData.getSignalTypes();
if (signalTypes.contains(Integer.toString(signalType))) { if (signalTypes.contains(Integer.toString(signalType))) {
SignalKafkaEvent event = new SignalKafkaEvent();
event.setEventType(EventType.WRITE);
event.setNatural(false);
event.setUserPackageLegalData(userPackageLegalData);
event.setPackageMessage(message);
event.setSubjectId(subjectId);
event.setFlag90days(flag90days);
event.setSignalType(Integer.toString(signalType));
event.setBusCategory(signalType == 3 ? busCategory : null);
event.setLastRejectedDate(lastRejectedDate);
Integer segment = segmentMap.get(memberCode.substring(0, 6)); Integer segment = segmentMap.get(memberCode.substring(0, 6));
event.setSegment(segment != null ? segment : -1);
SignalKafkaEvent event = buildSignalKafkaEvent(
false, message,
null, null, // np fields
legalsMap,
userPackageLegalData,
signalType, busCategory, segment
);
String reportKey = userPackageLegalData.getUserId().substring(0, 6) String reportKey = userPackageLegalData.getUserId().substring(0, 6)
+ "_" + userPackageLegalData.getPackageName(); + "_" + userPackageLegalData.getPackageName();
String reportFileName = resolveNameAndEnqueue(reportKey, event); String reportFileName = reportNameRegistry.resolveNameAndEnqueue(reportKey, event);
if (reportFileName == null) { if (reportFileName == null) {
continue; // событие не встало в очередь hit не пишем continue; // событие не встало в очередь hit не пишем
} }
Hit hit = Hit.builder() Hit hit = buildHit(
.packageId(userPackageLegalData.getPackageId()) false, message,
.subjectId(subjectId) null,
.signalType(signalType) userPackageLegalData,
.reportFileName(reportFileName.replace(".xml", ".zip")) signalType, busCategory,
.inqT(message.getInquiryType()) segment, reportFileName
.busCategory(busCategory) );
.inqDt(message.getInquiryDate())
.inqP(message.getInquiryPurpose())
.inqA(message.getInquiryAmount())
.segment(segment != null ? segment : -1)
.recordedAt(LocalDateTime.now())
.inn(userPackageLegalData.getInn())
.regNum(userPackageLegalData.getRegNum())
.build();
hits.add(hit); hits.add(hit);
} }
} }
@ -370,18 +335,86 @@ public class KafkaMonitoringService {
(inquiryType == 3 && billingCode.equalsIgnoreCase("CHSP")); (inquiryType == 3 && billingCode.equalsIgnoreCase("CHSP"));
} }
/** private SignalKafkaEvent buildSignalKafkaEvent(boolean isNatural, PackageMessage message,
* Резолвит имя результирующего файла и ставит событие в очередь. PhonesMap phonesMap, UserPackagePhoneData userPackagePhoneData,
* LegalsMap legalsMap, UserPackageLegalData userPackageLegalData,
* @return имя xml-файла или null, если поток был прерван и событие не встало в очередь int signalType, String busCategory, Integer segment) {
*/ if (isNatural) {
private String resolveNameAndEnqueue(String reportKey, SignalKafkaEvent event) { // флаги просрочек
try { Integer flagDebt5000 = phonesMap.getFlagDebt5000();
return reportNameRegistry.resolveNameAndEnqueue(reportKey, event); Integer flag90days = phonesMap.getFlag90days();
} catch (InterruptedException e) {
log.error("Error while putting signal event", e); String subjectId = userPackagePhoneData.getSubjectId();
Thread.currentThread().interrupt();
return null; return SignalKafkaEvent.builder()
.eventType(EventType.WRITE)
.natural(true)
.userPackagePhoneData(userPackagePhoneData)
.packageMessage(message)
.subjectId(subjectId)
.flagDebt5000(flagDebt5000)
.flag90days(flag90days)
.signalType(Integer.toString(signalType))
.busCategory(signalType == 3 ? busCategory : null)
.segment(segment != null ? segment : -1)
.build();
} else {
// флаги просрочек
Integer flag90days = legalsMap.getFlag90days();
LocalDateTime lastRejectedDate = legalsMap.getLastRejectedDate();
String subjectId = userPackageLegalData.getSubjectId();
return SignalKafkaEvent.builder()
.eventType(EventType.WRITE)
.natural(false)
.userPackageLegalData(userPackageLegalData)
.packageMessage(message)
.subjectId(subjectId)
.flag90days(flag90days)
.signalType(Integer.toString(signalType))
.busCategory(signalType == 3 ? busCategory : null)
.lastRejectedDate(lastRejectedDate)
.segment(segment != null ? segment : -1)
.build();
}
}
private Hit buildHit(boolean isNatural, PackageMessage message,
UserPackagePhoneData userPackagePhoneData,
UserPackageLegalData userPackageLegalData,
int signalType, String busCategory,
Integer segment, String reportFileName) {
if (isNatural) {
return Hit.builder()
.packageId(userPackagePhoneData.getPackageId())
.subjectId(userPackagePhoneData.getSubjectId())
.signalType(signalType)
.reportFileName(reportFileName.replace(".xml", ".zip"))
.inqT(message.getInquiryType())
.busCategory(busCategory)
.inqDt(message.getInquiryDate())
.inqP(message.getInquiryPurpose())
.inqA(message.getInquiryAmount())
.segment(segment != null ? segment : -1)
.recordedAt(LocalDateTime.now())
.phone(userPackagePhoneData.getPhone())
.build();
} else {
return Hit.builder()
.packageId(userPackageLegalData.getPackageId())
.subjectId(userPackageLegalData.getSubjectId())
.signalType(signalType)
.reportFileName(reportFileName.replace(".xml", ".zip"))
.inqT(message.getInquiryType())
.busCategory(busCategory)
.inqDt(message.getInquiryDate())
.inqP(message.getInquiryPurpose())
.inqA(message.getInquiryAmount())
.segment(segment != null ? segment : -1)
.recordedAt(LocalDateTime.now())
.inn(userPackageLegalData.getInn())
.regNum(userPackageLegalData.getRegNum())
.build();
} }
} }

View file

@ -1,5 +1,6 @@
package ru.nbch.credit_tracker.service.mode.monitoring; package ru.nbch.credit_tracker.service.mode.monitoring;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import ru.nbch.credit_tracker.enums.EventType; import ru.nbch.credit_tracker.enums.EventType;
@ -21,6 +22,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
* закрывающий эпоху N. Поэтому WRITE-события кладутся в очередь только через * закрывающий эпоху N. Поэтому WRITE-события кладутся в очередь только через
* {@link #resolveNameAndEnqueue}, а ROTATE только через {@link #enqueueRotate}. * {@link #resolveNameAndEnqueue}, а ROTATE только через {@link #enqueueRotate}.
*/ */
@Slf4j
@Component @Component
public class ReportNameRegistry { public class ReportNameRegistry {
@ -40,7 +42,7 @@ public class ReportNameRegistry {
* @param key membercode_packageName * @param key membercode_packageName
* @return имя xml-файла, в который попадёт сигнал * @return имя xml-файла, в который попадёт сигнал
*/ */
public String resolveNameAndEnqueue(String key, SignalKafkaEvent event) throws InterruptedException { public String resolveNameAndEnqueue(String key, SignalKafkaEvent event) {
lock.readLock().lock(); lock.readLock().lock();
try { try {
String name = names.computeIfAbsent(key, k -> String name = names.computeIfAbsent(key, k ->
@ -48,6 +50,10 @@ public class ReportNameRegistry {
LocalDateTime.now().format(CTUtil.responseReportDateTimeFormatter))); LocalDateTime.now().format(CTUtil.responseReportDateTimeFormatter)));
signalEventsQueue.put(event); signalEventsQueue.put(event);
return name; return name;
} catch (InterruptedException e) {
log.error("Error while putting signal event", e);
Thread.currentThread().interrupt();
return null;
} finally { } finally {
lock.readLock().unlock(); lock.readLock().unlock();
} }