diff --git a/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/MonitoringSignalResponse.java b/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/MonitoringSignalResponse.java new file mode 100644 index 0000000..4c6cefb --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/MonitoringSignalResponse.java @@ -0,0 +1,21 @@ +package ru.nbch.credit_tracker.entities.response.monitoring_signal_response; + +import jakarta.xml.bind.annotation.*; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "packageName", + "subjects" +}) +@XmlRootElement(name = "MonitoringSignalResponse") +public class MonitoringSignalResponse { + + @XmlElement(name = "PackageName", required = true) + protected String packageName; + @XmlElement(name = "Subjects", required = true) + protected Subjects subjects; +} diff --git a/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Signal.java b/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Signal.java new file mode 100644 index 0000000..42ecc72 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Signal.java @@ -0,0 +1,25 @@ +package ru.nbch.credit_tracker.entities.response.monitoring_signal_response; + +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlType; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "signalType", + "inquiryDate", + "inquiryPurpose" +}) +public class Signal { + @XmlAttribute(name = "SignalType", required = true) + protected Integer signalType; + @XmlAttribute(name = "InquiryDate", required = true) + protected String inquiryDate; + @XmlAttribute(name = "InquiryPurpose", required = true) + protected Integer inquiryPurpose; +} diff --git a/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Signals.java b/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Signals.java new file mode 100644 index 0000000..f1112f7 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Signals.java @@ -0,0 +1,27 @@ +package ru.nbch.credit_tracker.entities.response.monitoring_signal_response; + +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlType; + +import java.util.ArrayList; +import java.util.List; + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "signals" +}) +public class Signals { + + @XmlElement(name = "Signal", required = true) + protected List signals; + + public List getSignals() { + if (signals == null) { + signals = new ArrayList<>(); + } + return this.signals; + } + +} diff --git a/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Subject.java b/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Subject.java new file mode 100644 index 0000000..c147872 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Subject.java @@ -0,0 +1,35 @@ + +package ru.nbch.credit_tracker.entities.response.monitoring_signal_response; + +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlType; +import lombok.Getter; +import lombok.Setter; + + +@Setter +@Getter +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "SubjectType", propOrder = { + "id", + "clientId", + "flagDebt5000", + "flag9012" +}) +public class Subject { + + @XmlElement(name = "Id", required = true) + protected String id; + @XmlElement(name = "ClientId", required = true) + protected String clientId; + @XmlElement(name = "FlagDebt5000", required = true) + protected Integer flagDebt5000; + @XmlElement(name = "Flag90_12", required = true) + protected Integer flag9012; + @XmlElement(name = "Signals", required = true) + protected Signals signals; + + +} diff --git a/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Subjects.java b/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Subjects.java new file mode 100644 index 0000000..23e5b5b --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/response/monitoring_signal_response/Subjects.java @@ -0,0 +1,27 @@ +package ru.nbch.credit_tracker.entities.response.monitoring_signal_response; + +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlType; + +import java.util.ArrayList; +import java.util.List; + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "subject" +}) +public class Subjects { + + @XmlElement(name = "Subject", required = true) + protected List subjects; + + public List getSubjects() { + if (subjects == null) { + subjects = new ArrayList<>(); + } + return this.subjects; + } + +} diff --git a/src/main/java/ru/nbch/credit_tracker/entities/response/online_download/Inquiry.java b/src/main/java/ru/nbch/credit_tracker/entities/response/online_download/Inquiry.java index 2de800b..06b53cf 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/response/online_download/Inquiry.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/response/online_download/Inquiry.java @@ -18,7 +18,7 @@ public class Inquiry { @XmlAttribute(name = "own", required = true) protected String own; @XmlAttribute(name = "inq_p", required = true) - protected String inqP; + protected Integer inqP; @XmlAttribute(name = "currency", required = true) protected String currency; @XmlAttribute(name = "serial_num", required = true) diff --git a/src/main/java/ru/nbch/credit_tracker/entities/response/online_download/Person.java b/src/main/java/ru/nbch/credit_tracker/entities/response/online_download/Person.java index 9b5569f..11c2022 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/response/online_download/Person.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/response/online_download/Person.java @@ -4,11 +4,14 @@ import jakarta.xml.bind.annotation.*; import lombok.Getter; import lombok.Setter; +import java.util.ArrayList; +import java.util.List; + @Setter @Getter @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { - "inquiry" + "inquiries" }) public class Person { @@ -16,6 +19,12 @@ public class Person { protected String uid; @XmlElement(name = "Inquiry", required = true) - protected Inquiry inquiry; + protected List inquiries; + public List getInquiries() { + if (inquiries == null) { + inquiries = new ArrayList<>(); + } + return this.inquiries; + } } diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java index 9eb74c3..dc03aad 100644 --- a/src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java @@ -30,6 +30,8 @@ public interface SignalMapper { List findSubjectsData(@Param("packageId") Integer packageId); + List findFullSubjectsData(@Param("packageId") Integer packageId); + SignalService.PackageData findPackageData(@Param("id") Integer id); List findPackageDataList(@Param("userId") String userId); diff --git a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java index d30e468..d77b672 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java @@ -2,6 +2,8 @@ package ru.nbch.credit_tracker.service; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import ru.nbch.credit_tracker.entities.response.monitoring_signal_response.*; +import ru.nbch.credit_tracker.entities.response.online_download.Inquiry; import ru.nbch.credit_tracker.entities.response.online_download.OnlineDownloadReport; import ru.nbch.credit_tracker.entities.response.online_download.Person; import ru.nbch.credit_tracker.entities.response.online_report.Report; @@ -63,16 +65,45 @@ public class MonitoringService { continue; } - // Отбирает только тех фл, у которых bus_category in (MFO, MKK, MFK) и есть сигналы с кодом 16 - List validPersons = report.getPersons().getPersons().stream().filter(person -> CTUtil.checkBusCategory(person.getInquiry().getBusCategory())) - .filter(person -> person.getInquiry().getSignals().stream().anyMatch(signal -> signal.getN().equals(16))).toList(); + MonitoringSignalResponse response = generateResponse(packageData, report.getPersons().getPersons()); - createRsponse(packageData, validPersons); } } - private void createRsponse(SignalService.PackageData packageData, List validPersons) { + private MonitoringSignalResponse generateResponse(SignalService.PackageData packageData, List persons) { + MonitoringSignalResponse response = new MonitoringSignalResponse(); + response.setPackageName(packageData.getPackageName()); // Имя пакета, переданного при установке + Subjects subjects = new Subjects(); + List subjectDataList = signalService.findFullSubjectsData(packageData.getId()); + for (Person person : persons) { + Signals signals = new Signals(); + for (Inquiry inquiry : person.getInquiries()) { + // Отбираем только тех фл, у которых bus_category in (MFO, MKK, MFK) и есть сигналы с кодом 16 + if (!CTUtil.checkBusCategory(inquiry.getBusCategory()) && inquiry.getSignals().stream().anyMatch(signal -> signal.getN().equals(16))) { + continue; + } + Signal signal = new Signal(); + signal.setSignalType(1); // Код типа сигнала по внутреннему справочнику. В текущей версии: 1 = сигнал 16 от MFO/MKK/MFK + signal.setInquiryDate(inquiry.getDate()); // Дата и время запроса КИ + signal.setInquiryPurpose(inquiry.getInqP()); // Цель запроса КИ + signals.getSignals().add(signal); + } + // Если есть хотя бы один заполненный сигнал, значит заполняем остальные данные + if (!signals.getSignals().isEmpty()) { + subjectDataList.stream().filter(p -> p.getSubjectId().equals(person.getUid())).findFirst().ifPresent(subjectData -> { + Subject subject = new Subject(); + subject.setId(subjectData.getSubjectId()); // Уникальный идентификатор субъекта (равен Id из XML-пакета при установке мониторинга) + subject.setClientId(subjectData.getPhone()); + subject.setFlagDebt5000(subjectData.getFlagDebt5000()); + subject.setFlag9012(subjectData.getFlag90days()); + subject.setSignals(signals); + subjects.getSubjects().add(subject); + }); + } + } + response.setSubjects(subjects); + return response; } private OnlineDownloadReport loadReport(String reportName) { diff --git a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java index 182f4ff..ff858ff 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -200,6 +200,10 @@ public class SignalService { return mapper.findPackagesByStatus(Status.ON_MONITORING.name()); } + public List findFullSubjectsData(Integer packageId) { + return mapper.findFullSubjectsData(packageId); + } + @Getter @Setter public static class PackageData { @@ -215,7 +219,12 @@ public class SignalService { @Setter public static class SubjectData { private Integer id; + private Integer packageId; private String subjectId; private String phone; + private Integer fid; + private Integer flagDebt5000; + private Integer flag90days; + private LocalDateTime calculatedAt; } } diff --git a/src/main/resources/mybatis/mapper/signal/SignalMapper.xml b/src/main/resources/mybatis/mapper/signal/SignalMapper.xml index 38d129e..32b2973 100644 --- a/src/main/resources/mybatis/mapper/signal/SignalMapper.xml +++ b/src/main/resources/mybatis/mapper/signal/SignalMapper.xml @@ -7,8 +7,13 @@ + + + + + @@ -75,6 +80,12 @@ WHERE package_id = #{packageId} + +