etreschenkov 2025-12-23 20:09:05 +03:00
parent 6ad9d5606d
commit 09d7f53143
5 changed files with 38 additions and 16 deletions

View file

@ -11,4 +11,6 @@ public interface PackagesRecordsMapper {
List<Long> registerJson(@Param("json") String json); List<Long> registerJson(@Param("json") String json);
List<PackagesRecordsMap> findFullPhoneFidMap(@Param("packageId") Long packageId, @Param("limit") int limit, @Param("offset") int offset); List<PackagesRecordsMap> findFullPhoneFidMap(@Param("packageId") Long packageId, @Param("limit") int limit, @Param("offset") int offset);
Long deleteByPackageId(@Param("packageId") Long id); Long deleteByPackageId(@Param("packageId") Long id);
PackagesRecordsMap findById(Long id);
} }

View file

@ -20,8 +20,9 @@ import org.slf4j.MDC;
import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.entities.app.FlagDetail;
import ru.nbch.credit_tracker.entities.app.Hit; import ru.nbch.credit_tracker.entities.app.Hit;
import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap;
import ru.nbch.credit_tracker.entities.app.PhonesMap;
import ru.nbch.credit_tracker.entities.app.UserPackage; import ru.nbch.credit_tracker.entities.app.UserPackage;
import ru.nbch.credit_tracker.entities.external_response.online_download.Inquiry; import ru.nbch.credit_tracker.entities.external_response.online_download.Inquiry;
import ru.nbch.credit_tracker.entities.external_response.online_download.Person; import ru.nbch.credit_tracker.entities.external_response.online_download.Person;
@ -198,7 +199,7 @@ public class MonitoringService {
try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(loadedReportPath), 8 * 1024 * 1024)) { try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(loadedReportPath), 8 * 1024 * 1024)) {
staxXmlProcessor.read(in, Persons.class, staxXmlProcessor.read(in, Persons.class,
personsData -> { // как только считали пачку Persons сразу записали ее в результирующий файл personsData -> { // как только считали пачку Persons сразу записали ее в результирующий файл
List<Subject> subjectsBatch = processPersons(personsData.getPersons()); List<Subject> subjectsBatch = processPersons(personsData.getPersons(), userPackage);
if (!subjectsBatch.isEmpty()) { if (!subjectsBatch.isEmpty()) {
generateResponse.compareAndSet(false, true); generateResponse.compareAndSet(false, true);
} }
@ -220,17 +221,19 @@ public class MonitoringService {
return responsePath.get(); return responsePath.get();
} }
private List<Subject> processPersons(List<Person> persons) { private List<Subject> processPersons(List<Person> persons, UserPackage userPackage) {
List<Subject> subjects = new ArrayList<>(); List<Subject> subjects = new ArrayList<>();
for (Person person : persons) { for (Person person : persons) {
Signals signals = new Signals(); Signals signals = new Signals();
for (Inquiry inquiry : person.getInquiries()) { for (Inquiry inquiry : person.getInquiries()) {
// Отбираем только тех фл, у которых bus_category in (MFO, MKK, MFK) и есть сигналы с кодом 16 // Отбираем только тех фл, у которых bus_category in (MFO, MKK, MFK) и есть сигналы с кодом 16
if (!CTUtil.checkBusCategory(inquiry.getBusCategory()) || inquiry.getSignals().stream().noneMatch(signal -> signal.getN().equals(16))) { Integer signalType = CTUtil.checkBusCategory(inquiry.getBusCategory());
if (signalType == -1 || inquiry.getSignals().stream().noneMatch(signal -> signal.getN().equals(16)) ||
!userPackage.getSignalTypes().contains(signalType.toString())) {
continue; continue;
} }
Signal signal = new Signal(); Signal signal = new Signal();
signal.setSignalType(1); // Код типа сигнала по внутреннему справочнику. В текущей версии: 1 = сигнал 16 от MFO/MKK/MFK signal.setSignalType(signalType); // Код типа сигнала по внутреннему справочнику. В текущей версии: 1 = сигнал 16 от MFO/MKK/MFK
signal.setInquiryDate(inquiry.getDate()); // Дата и время запроса КИ signal.setInquiryDate(inquiry.getDate()); // Дата и время запроса КИ
signal.setInquiryPurpose(inquiry.getInqP()); // Цель запроса КИ signal.setInquiryPurpose(inquiry.getInqP()); // Цель запроса КИ
signals.getSignals().add(signal); signals.getSignals().add(signal);
@ -238,13 +241,14 @@ public class MonitoringService {
// Если есть хотя бы один заполненный сигнал, значит заполняем остальные данные // Если есть хотя бы один заполненный сигнал, значит заполняем остальные данные
if (!signals.getSignals().isEmpty()) { if (!signals.getSignals().isEmpty()) {
FlagDetail flagDetail = flagDetailMapper.getByMapId(person.getUid()); PackagesRecordsMap packagesRecord = packageRecordsService.findPackageRecordsById(person.getUid());
if (flagDetail != null) { PhonesMap cacheByPhone = packageRecordsService.findCachedByPhone(Long.valueOf(packagesRecord.getPhone()));
if (cacheByPhone != null) {
Subject subject = new Subject(); Subject subject = new Subject();
subject.setId(flagDetail.getSubjectId()); // Уникальный идентификатор субъекта (равен Id из XML-пакета при установке мониторинга) subject.setId(packagesRecord.getSubjectId()); // Уникальный идентификатор субъекта (равен Id из XML-пакета при установке мониторинга)
subject.setClientId(flagDetail.getPhone()); subject.setClientId(packagesRecord.getPhone());
subject.setFlagDebt5000(flagDetail.getFlagDebt5000()); subject.setFlagDebt5000(cacheByPhone.getFlagDebt5000());
subject.setFlag9012(flagDetail.getFlag90days()); subject.setFlag9012(cacheByPhone.getFlag90days());
subject.setSignals(signals); subject.setSignals(signals);
subjects.add(subject); subjects.add(subject);
} }

View file

@ -128,7 +128,11 @@ public class PackageRecordsService {
} }
} }
public PhonesMap findByPhone(Long phone) { public PhonesMap findCachedByPhone(Long phone) {
return phonesMapMapper.findByPhone(phone); return phonesMapMapper.findByPhone(phone);
} }
public PackagesRecordsMap findPackageRecordsById(Long id) {
return packagesRecordsMapper.findById(id);
}
} }

View file

@ -39,16 +39,19 @@ public class CTUtil {
return null; return null;
} }
public static boolean checkBusCategory(String busCategory) { public static Integer checkBusCategory(String busCategory) {
if (StringUtils.isBlank(busCategory)) { if (StringUtils.isBlank(busCategory)) {
return false; return -1;
} }
switch (busCategory) { switch (busCategory) {
case "MFO", "MKK", "MFK" -> { case "MFO", "MKK", "MFK" -> {
return true; return 1;
}
case "BANK" -> {
return 2;
} }
default -> { default -> {
return false; return -1;
} }
} }
} }

View file

@ -13,6 +13,15 @@
<result property="errorText" column="error_text"/> <result property="errorText" column="error_text"/>
</resultMap> </resultMap>
<select id="findById" parameterType="long" resultMap="PhoneFidMapResultMap">
SELECT id,
package_id,
subject_id,
phone,
error_text
FROM signals_packages_records
WHERE id = #{id}
</select>
<select id="registerJson" parameterType="string" resultType="long"> <select id="registerJson" parameterType="string" resultType="long">
WITH src AS (SELECT row_number() OVER () AS rn, WITH src AS (SELECT row_number() OVER () AS rn,
subject_id, subject_id,