From 61f2420ca43c74b1bd216899e79e3f2a1b993e29 Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Thu, 25 Jun 2026 15:16:35 +0300 Subject: [PATCH] Added writing to xml for lp --- .../model/IUserPackageData.java | 13 +++ .../model/SignalKafkaEvent.java | 3 + .../model/UserPackageLegalData.java | 3 +- .../model/UserPackagePhoneData.java | 2 +- .../monitoring/KafkaMonitoringService.java | 3 + .../SignalKafkaEventWriterService.java | 79 ++++++++++++++++--- 6 files changed, 92 insertions(+), 11 deletions(-) create mode 100644 src/main/java/ru/nbch/credit_tracker/model/IUserPackageData.java diff --git a/src/main/java/ru/nbch/credit_tracker/model/IUserPackageData.java b/src/main/java/ru/nbch/credit_tracker/model/IUserPackageData.java new file mode 100644 index 0000000..2f4c46e --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/model/IUserPackageData.java @@ -0,0 +1,13 @@ +package ru.nbch.credit_tracker.model; + +public interface IUserPackageData { + Long getPackageId(); + + String getUserId(); + + String getSignalTypes(); + + String getSubjectId(); + + String getPackageName(); +} diff --git a/src/main/java/ru/nbch/credit_tracker/model/SignalKafkaEvent.java b/src/main/java/ru/nbch/credit_tracker/model/SignalKafkaEvent.java index 06d5ef6..19c91e5 100644 --- a/src/main/java/ru/nbch/credit_tracker/model/SignalKafkaEvent.java +++ b/src/main/java/ru/nbch/credit_tracker/model/SignalKafkaEvent.java @@ -4,6 +4,8 @@ import lombok.*; import ru.nbch.credit_tracker.entities.external_request.kafka.PackageMessage; import ru.nbch.credit_tracker.enums.EventType; +import java.time.LocalDateTime; + @Getter @Setter @Builder @@ -22,6 +24,7 @@ public class SignalKafkaEvent { private String signalType; private String busCategory; private Integer segment; + private LocalDateTime lastRejectedDate; private boolean natural; } diff --git a/src/main/java/ru/nbch/credit_tracker/model/UserPackageLegalData.java b/src/main/java/ru/nbch/credit_tracker/model/UserPackageLegalData.java index 8452b62..42c7814 100644 --- a/src/main/java/ru/nbch/credit_tracker/model/UserPackageLegalData.java +++ b/src/main/java/ru/nbch/credit_tracker/model/UserPackageLegalData.java @@ -7,10 +7,11 @@ import lombok.*; @Builder @NoArgsConstructor @AllArgsConstructor -public class UserPackageLegalData { +public class UserPackageLegalData implements IUserPackageData { private Long packageId; private String signalTypes; private String subjectId; + private String userId; private String packageName; private Long inn; diff --git a/src/main/java/ru/nbch/credit_tracker/model/UserPackagePhoneData.java b/src/main/java/ru/nbch/credit_tracker/model/UserPackagePhoneData.java index a9970a3..51e1224 100644 --- a/src/main/java/ru/nbch/credit_tracker/model/UserPackagePhoneData.java +++ b/src/main/java/ru/nbch/credit_tracker/model/UserPackagePhoneData.java @@ -7,7 +7,7 @@ import lombok.*; @Builder @NoArgsConstructor @AllArgsConstructor -public class UserPackagePhoneData { +public class UserPackagePhoneData implements IUserPackageData { private Long packageId; private String signalTypes; private Long phone; diff --git a/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/KafkaMonitoringService.java b/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/KafkaMonitoringService.java index df42d9b..1fe2c87 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/KafkaMonitoringService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/KafkaMonitoringService.java @@ -21,6 +21,7 @@ import ru.nbch.credit_tracker.service.signal.PackageRecordsService; import ru.nbch.credit_tracker.service.signal.SegmentMapService; import ru.nbch.credit_tracker.utils.CTUtil; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -235,6 +236,7 @@ public class KafkaMonitoringService { for (LegalsMap legalsMap : legalsMapList) { // флаги просрочек Integer flag90days = legalsMap.getFlag90days(); + LocalDateTime lastRejectedDate = legalsMap.getLastRejectedDate(); // в userPackageLegalDataMap только нужные inn, regnum, те что не вошли в userPackageLegalDataList игнорируются List userPackageLegalDataList = userPackageLegalDataMap.get(Pair.of(legalsMap.getInn(), legalsMap.getRegNUm())); @@ -257,6 +259,7 @@ public class KafkaMonitoringService { 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)); event.setSegment(segment != null ? segment : -1); diff --git a/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/SignalKafkaEventWriterService.java b/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/SignalKafkaEventWriterService.java index b051522..1df1b58 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/SignalKafkaEventWriterService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/SignalKafkaEventWriterService.java @@ -12,7 +12,9 @@ import ru.nbch.credit_tracker.entities.external_request.kafka.PackageMessage; import ru.nbch.credit_tracker.enums.EventType; import ru.nbch.credit_tracker.enums.Status; import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper; +import ru.nbch.credit_tracker.model.IUserPackageData; import ru.nbch.credit_tracker.model.SignalKafkaEvent; +import ru.nbch.credit_tracker.model.UserPackageLegalData; import ru.nbch.credit_tracker.model.UserPackagePhoneData; import ru.nbch.credit_tracker.utils.error.ExceptionUtils; @@ -80,23 +82,35 @@ public class SignalKafkaEventWriterService { * Записывает сигнал в xml для конкретного пакета */ private void writeSignal(SignalKafkaEvent event) { - UserPackagePhoneData packagePhoneData = event.getUserPackagePhoneData(); + IUserPackageData userPackageData; + if (event.isNatural()) { + userPackageData = event.getUserPackagePhoneData(); + } else { + userPackageData = event.getUserPackageLegalData(); + } + try { Path folder = Path.of(config.getLoadDir(), - "tmp", packagePhoneData.getUserId(), packagePhoneData.getPackageName()); + "tmp", userPackageData.getUserId(), userPackageData.getPackageName()); Files.createDirectories(folder); - Path tmpFilePathWithExt = folder.resolve(packagePhoneData.getUserId() + "_" + packagePhoneData.getPackageName() + ".xml"); + Path tmpFilePathWithExt = folder.resolve(userPackageData.getUserId() + "_" + userPackageData.getPackageName() + ".xml"); boolean exists = tmpFilePathWithExt.toFile().exists(); if (!exists) { Files.createFile(tmpFilePathWithExt); - writeStart(tmpFilePathWithExt, event); + writeStart(tmpFilePathWithExt, userPackageData); } - writeNpPart(tmpFilePathWithExt, event); + if (event.isNatural()) { + writeNpPart(tmpFilePathWithExt, event); + } else { + writeLpPart(tmpFilePathWithExt, event); + } } catch (Exception e) { - log.error("Report was not created for PackageId = {}, PackageName = {}. {}", packagePhoneData.getPackageId(), packagePhoneData.getPackageName(), ExceptionUtils.getStackTrace(e)); + log.error("Report was not created for PackageId = {}, PackageName = {}. {}", + userPackageData.getPackageId(), userPackageData.getPackageName(), ExceptionUtils.getStackTrace(e) + ); } } @@ -118,9 +132,8 @@ public class SignalKafkaEventWriterService { // TODO update signals_user_packages } - private void writeStart(Path filePath, SignalKafkaEvent event) { - UserPackagePhoneData packagePhoneData = event.getUserPackagePhoneData(); - String packageName = packagePhoneData.getPackageName(); + private void writeStart(Path filePath, IUserPackageData userPackageData) { + String packageName = userPackageData.getPackageName(); try (BufferedWriter writer = Files.newBufferedWriter(filePath, encoding, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { @@ -148,6 +161,7 @@ public class SignalKafkaEventWriterService { String busCategory = event.getBusCategory(); LocalDateTime inquiryDate = message.getInquiryDate(); String inquiryPurpose = message.getInquiryPurpose(); + Long inquiryAmount = message.getInquiryAmount(); Integer segment = event.getSegment(); try (BufferedWriter writer = Files.newBufferedWriter(filePath, encoding, StandardOpenOption.APPEND)) { @@ -166,6 +180,7 @@ public class SignalKafkaEventWriterService { writer.write(" " + formatter.format(inquiryDate) + "\n"); writer.write(" " + escapeXml(inquiryPurpose) + "\n"); + writer.write(" " + inquiryAmount + "\n"); writer.write(" " + segment + "\n"); writer.write(" \n"); writer.write(" \n"); @@ -175,6 +190,52 @@ public class SignalKafkaEventWriterService { } } + private void writeLpPart(Path filePath, SignalKafkaEvent event) { + UserPackageLegalData packageLegalData = event.getUserPackageLegalData(); + + String id = packageLegalData.getSubjectId(); + Long inn = packageLegalData.getInn(); + Long regNum = packageLegalData.getRegNum(); + Integer flag90days = event.getFlag90days(); + LocalDateTime lastRejectedDate = event.getLastRejectedDate(); + + PackageMessage message = event.getPackageMessage(); + String signalType = event.getSignalType(); + String busCategory = event.getBusCategory(); + LocalDateTime inquiryDate = message.getInquiryDate(); + Integer inquiryType = message.getInquiryType(); + String inquiryPurpose = message.getInquiryPurpose(); + Long inquiryAmount = message.getInquiryAmount(); + Integer segment = event.getSegment(); + + try (BufferedWriter writer = Files.newBufferedWriter(filePath, encoding, StandardOpenOption.APPEND)) { + writer.write(" \n"); + writer.write(" " + escapeXml(id) + "\n"); + writer.write(" " + inn + "\n"); + writer.write(" " + regNum + "\n"); + writer.write(" " + flag90days + "\n"); + writer.write(" " + formatter.format(lastRejectedDate) + "\n"); + writer.write(" \n"); + writer.write(" \n"); + writer.write(" " + escapeXml(signalType) + "\n"); + + if (busCategory != null) { + writer.write(" " + escapeXml(busCategory) + "\n"); + } + + writer.write(" " + formatter.format(inquiryDate) + "\n"); + writer.write(" " + inquiryType + "\n"); + writer.write(" " + escapeXml(inquiryPurpose) + "\n"); + writer.write(" " + inquiryAmount + "\n"); + writer.write(" " + segment + "\n"); + writer.write(" \n"); + writer.write(" \n"); + writer.write(" \n"); + } catch (Exception e) { + log.error("Unable to write lp part of file {}", filePath, e); + } + } + private void writeEnd(Path filePath) { try (BufferedWriter writer = Files.newBufferedWriter(filePath, encoding, StandardOpenOption.APPEND)) { writer.write(" \n");