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<PackagesRecordsMap> findFullPhoneFidMap(@Param("packageId") Long packageId, @Param("limit") int limit, @Param("offset") int offset);
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.stereotype.Service;
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.PackagesRecordsMap;
import ru.nbch.credit_tracker.entities.app.PhonesMap;
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.Person;
@ -198,7 +199,7 @@ public class MonitoringService {
try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(loadedReportPath), 8 * 1024 * 1024)) {
staxXmlProcessor.read(in, Persons.class,
personsData -> { // как только считали пачку Persons сразу записали ее в результирующий файл
List<Subject> subjectsBatch = processPersons(personsData.getPersons());
List<Subject> subjectsBatch = processPersons(personsData.getPersons(), userPackage);
if (!subjectsBatch.isEmpty()) {
generateResponse.compareAndSet(false, true);
}
@ -220,17 +221,19 @@ public class MonitoringService {
return responsePath.get();
}
private List<Subject> processPersons(List<Person> persons) {
private List<Subject> processPersons(List<Person> persons, UserPackage userPackage) {
List<Subject> subjects = new ArrayList<>();
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().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;
}
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.setInquiryPurpose(inquiry.getInqP()); // Цель запроса КИ
signals.getSignals().add(signal);
@ -238,13 +241,14 @@ public class MonitoringService {
// Если есть хотя бы один заполненный сигнал, значит заполняем остальные данные
if (!signals.getSignals().isEmpty()) {
FlagDetail flagDetail = flagDetailMapper.getByMapId(person.getUid());
if (flagDetail != null) {
PackagesRecordsMap packagesRecord = packageRecordsService.findPackageRecordsById(person.getUid());
PhonesMap cacheByPhone = packageRecordsService.findCachedByPhone(Long.valueOf(packagesRecord.getPhone()));
if (cacheByPhone != null) {
Subject subject = new Subject();
subject.setId(flagDetail.getSubjectId()); // Уникальный идентификатор субъекта (равен Id из XML-пакета при установке мониторинга)
subject.setClientId(flagDetail.getPhone());
subject.setFlagDebt5000(flagDetail.getFlagDebt5000());
subject.setFlag9012(flagDetail.getFlag90days());
subject.setId(packagesRecord.getSubjectId()); // Уникальный идентификатор субъекта (равен Id из XML-пакета при установке мониторинга)
subject.setClientId(packagesRecord.getPhone());
subject.setFlagDebt5000(cacheByPhone.getFlagDebt5000());
subject.setFlag9012(cacheByPhone.getFlag90days());
subject.setSignals(signals);
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);
}
public PackagesRecordsMap findPackageRecordsById(Long id) {
return packagesRecordsMapper.findById(id);
}
}

View file

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

View file

@ -13,6 +13,15 @@
<result property="errorText" column="error_text"/>
</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">
WITH src AS (SELECT row_number() OVER () AS rn,
subject_id,