Added writing to xml for lp

This commit is contained in:
Mikhail Trofimov 2026-06-25 15:16:35 +03:00
parent a7a59c0c10
commit 61f2420ca4
6 changed files with 92 additions and 11 deletions

View file

@ -0,0 +1,13 @@
package ru.nbch.credit_tracker.model;
public interface IUserPackageData {
Long getPackageId();
String getUserId();
String getSignalTypes();
String getSubjectId();
String getPackageName();
}

View file

@ -4,6 +4,8 @@ import lombok.*;
import ru.nbch.credit_tracker.entities.external_request.kafka.PackageMessage; import ru.nbch.credit_tracker.entities.external_request.kafka.PackageMessage;
import ru.nbch.credit_tracker.enums.EventType; import ru.nbch.credit_tracker.enums.EventType;
import java.time.LocalDateTime;
@Getter @Getter
@Setter @Setter
@Builder @Builder
@ -22,6 +24,7 @@ public class SignalKafkaEvent {
private String signalType; private String signalType;
private String busCategory; private String busCategory;
private Integer segment; private Integer segment;
private LocalDateTime lastRejectedDate;
private boolean natural; private boolean natural;
} }

View file

@ -7,10 +7,11 @@ import lombok.*;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class UserPackageLegalData { public class UserPackageLegalData implements IUserPackageData {
private Long packageId; private Long packageId;
private String signalTypes; private String signalTypes;
private String subjectId; private String subjectId;
private String userId;
private String packageName; private String packageName;
private Long inn; private Long inn;

View file

@ -7,7 +7,7 @@ import lombok.*;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class UserPackagePhoneData { public class UserPackagePhoneData implements IUserPackageData {
private Long packageId; private Long packageId;
private String signalTypes; private String signalTypes;
private Long phone; private Long phone;

View file

@ -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.service.signal.SegmentMapService;
import ru.nbch.credit_tracker.utils.CTUtil; import ru.nbch.credit_tracker.utils.CTUtil;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -235,6 +236,7 @@ public class KafkaMonitoringService {
for (LegalsMap legalsMap : legalsMapList) { for (LegalsMap legalsMap : legalsMapList) {
// флаги просрочек // флаги просрочек
Integer flag90days = legalsMap.getFlag90days(); 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()));
@ -257,6 +259,7 @@ public class KafkaMonitoringService {
event.setFlag90days(flag90days); event.setFlag90days(flag90days);
event.setSignalType(Integer.toString(signalType)); event.setSignalType(Integer.toString(signalType));
event.setBusCategory(signalType == 3 ? busCategory : null); 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); event.setSegment(segment != null ? segment : -1);

View file

@ -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.EventType;
import ru.nbch.credit_tracker.enums.Status; import ru.nbch.credit_tracker.enums.Status;
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper; 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.SignalKafkaEvent;
import ru.nbch.credit_tracker.model.UserPackageLegalData;
import ru.nbch.credit_tracker.model.UserPackagePhoneData; import ru.nbch.credit_tracker.model.UserPackagePhoneData;
import ru.nbch.credit_tracker.utils.error.ExceptionUtils; import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
@ -80,23 +82,35 @@ public class SignalKafkaEventWriterService {
* Записывает сигнал в xml для конкретного пакета * Записывает сигнал в xml для конкретного пакета
*/ */
private void writeSignal(SignalKafkaEvent event) { private void writeSignal(SignalKafkaEvent event) {
UserPackagePhoneData packagePhoneData = event.getUserPackagePhoneData(); IUserPackageData userPackageData;
if (event.isNatural()) {
userPackageData = event.getUserPackagePhoneData();
} else {
userPackageData = event.getUserPackageLegalData();
}
try { try {
Path folder = Path.of(config.getLoadDir(), Path folder = Path.of(config.getLoadDir(),
"tmp", packagePhoneData.getUserId(), packagePhoneData.getPackageName()); "tmp", userPackageData.getUserId(), userPackageData.getPackageName());
Files.createDirectories(folder); 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(); boolean exists = tmpFilePathWithExt.toFile().exists();
if (!exists) { if (!exists) {
Files.createFile(tmpFilePathWithExt); 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) { } 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 // TODO update signals_user_packages
} }
private void writeStart(Path filePath, SignalKafkaEvent event) { private void writeStart(Path filePath, IUserPackageData userPackageData) {
UserPackagePhoneData packagePhoneData = event.getUserPackagePhoneData(); String packageName = userPackageData.getPackageName();
String packageName = packagePhoneData.getPackageName();
try (BufferedWriter writer = Files.newBufferedWriter(filePath, encoding, try (BufferedWriter writer = Files.newBufferedWriter(filePath, encoding,
StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
@ -148,6 +161,7 @@ public class SignalKafkaEventWriterService {
String busCategory = event.getBusCategory(); String busCategory = event.getBusCategory();
LocalDateTime inquiryDate = message.getInquiryDate(); LocalDateTime inquiryDate = message.getInquiryDate();
String inquiryPurpose = message.getInquiryPurpose(); String inquiryPurpose = message.getInquiryPurpose();
Long inquiryAmount = message.getInquiryAmount();
Integer segment = event.getSegment(); Integer segment = event.getSegment();
try (BufferedWriter writer = Files.newBufferedWriter(filePath, encoding, StandardOpenOption.APPEND)) { try (BufferedWriter writer = Files.newBufferedWriter(filePath, encoding, StandardOpenOption.APPEND)) {
@ -166,6 +180,7 @@ public class SignalKafkaEventWriterService {
writer.write(" <InquiryDate>" + formatter.format(inquiryDate) + "</InquiryDate>\n"); writer.write(" <InquiryDate>" + formatter.format(inquiryDate) + "</InquiryDate>\n");
writer.write(" <InquiryPurpose>" + escapeXml(inquiryPurpose) + "</InquiryPurpose>\n"); writer.write(" <InquiryPurpose>" + escapeXml(inquiryPurpose) + "</InquiryPurpose>\n");
writer.write(" <InquiryAmount>" + inquiryAmount + "</InquiryAmount>\n");
writer.write(" <Segment>" + segment + "</Segment>\n"); writer.write(" <Segment>" + segment + "</Segment>\n");
writer.write(" </Signal>\n"); writer.write(" </Signal>\n");
writer.write(" </Signals>\n"); writer.write(" </Signals>\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(" <Subject>\n");
writer.write(" <Id>" + escapeXml(id) + "</Id>\n");
writer.write(" <Inn>" + inn + "</Inn>\n");
writer.write(" <RegNum>" + regNum + "</RegNum>\n");
writer.write(" <Flag90_12>" + flag90days + "</Flag90_12>\n");
writer.write(" <LastRejectedDate>" + formatter.format(lastRejectedDate) + "</LastRejectedDate>\n");
writer.write(" <Signals>\n");
writer.write(" <Signal>\n");
writer.write(" <SignalType>" + escapeXml(signalType) + "</SignalType>\n");
if (busCategory != null) {
writer.write(" <BusCategory>" + escapeXml(busCategory) + "</BusCategory>\n");
}
writer.write(" <InquiryDate>" + formatter.format(inquiryDate) + "</InquiryDate>\n");
writer.write(" <InquiryType>" + inquiryType + "</InquiryType>\n");
writer.write(" <InquiryPurpose>" + escapeXml(inquiryPurpose) + "</InquiryPurpose>\n");
writer.write(" <InquiryAmount>" + inquiryAmount + "</InquiryAmount>\n");
writer.write(" <Segment>" + segment + "</Segment>\n");
writer.write(" </Signal>\n");
writer.write(" </Signals>\n");
writer.write(" </Subject>\n");
} catch (Exception e) {
log.error("Unable to write lp part of file {}", filePath, e);
}
}
private void writeEnd(Path filePath) { private void writeEnd(Path filePath) {
try (BufferedWriter writer = Files.newBufferedWriter(filePath, encoding, StandardOpenOption.APPEND)) { try (BufferedWriter writer = Files.newBufferedWriter(filePath, encoding, StandardOpenOption.APPEND)) {
writer.write(" </Subjects>\n"); writer.write(" </Subjects>\n");