From 3921087946eedc645c03811e3b9390e860dd8488 Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Tue, 30 Jun 2026 14:06:52 +0300 Subject: [PATCH] LP: added subject registration --- .../entities/app/SignalLegalFidMap.java | 16 +++++ .../credit_tracker/facade/SignalFacade.java | 19 ++++-- .../mapper/signal/LegalsFidMapMapper.java | 13 ++++ .../service/indic/LegalsMapService.java | 40 +++++++++++ .../mode/common/StartupRestoreService.java | 2 +- .../service/task/impl/Saver.java | 67 ++++++++++++++----- .../mapper/signal/LegalsFidMapMapper.xml | 32 +++++++++ 7 files changed, 166 insertions(+), 23 deletions(-) create mode 100644 src/main/java/ru/nbch/credit_tracker/entities/app/SignalLegalFidMap.java create mode 100644 src/main/java/ru/nbch/credit_tracker/mapper/signal/LegalsFidMapMapper.java create mode 100644 src/main/java/ru/nbch/credit_tracker/service/indic/LegalsMapService.java create mode 100644 src/main/resources/mybatis/mapper/signal/LegalsFidMapMapper.xml diff --git a/src/main/java/ru/nbch/credit_tracker/entities/app/SignalLegalFidMap.java b/src/main/java/ru/nbch/credit_tracker/entities/app/SignalLegalFidMap.java new file mode 100644 index 0000000..e386b3d --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/app/SignalLegalFidMap.java @@ -0,0 +1,16 @@ +package ru.nbch.credit_tracker.entities.app; + +import lombok.*; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SignalLegalFidMap { + private Long id; + private Long packageId; + private String subjectId; + private Long inn; + private Long regNum; +} diff --git a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java index 99d2614..d80b551 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -151,11 +151,20 @@ public class SignalFacade { Long packageId = userPackageService.registerPackage(userId, packageName, subjectType, signalTypes); LogUtil.addMdcLogKey("%s %d".formatted(packageName, packageId)); log.info("Package registered. PackageId {}. Status: {}", packageId, Status.ACCEPTED.name()); - Pipeline pipeline = pipelinePackageManager.build(new SetupParam(packageId, parsedFilePath, PipelineMode.DEFAULT)); - pipelineOrchestrator.startOrDelay(() -> { - saver.readAndSave(packageId, parsedFilePath); - CtFileUtils.deleteQuietly(parsedFilePath); - }, pipeline, packageId); + + if (subjectType == 1) { + Pipeline pipeline = pipelinePackageManager.build(new SetupParam(packageId, parsedFilePath, PipelineMode.DEFAULT)); + pipelineOrchestrator.startOrDelay(() -> { + saver.readAndSaveNpPackage(packageId, parsedFilePath); + CtFileUtils.deleteQuietly(parsedFilePath); + }, pipeline, packageId); + } else { + Pipeline pipeline = pipelinePackageManager.build(new SetupParam(packageId, parsedFilePath, PipelineMode.DEFAULT)); + pipelineOrchestrator.startOrDelay(() -> { + saver.readAndSaveLpPackage(packageId, parsedFilePath); + CtFileUtils.deleteQuietly(parsedFilePath); + }, pipeline, packageId); + } } catch (Exception e) { try { Files.delete(parsedFilePath); diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/LegalsFidMapMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/LegalsFidMapMapper.java new file mode 100644 index 0000000..6b952d1 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/LegalsFidMapMapper.java @@ -0,0 +1,13 @@ +package ru.nbch.credit_tracker.mapper.signal; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface LegalsFidMapMapper { + + List registerJson(@Param("json") String json); + +} diff --git a/src/main/java/ru/nbch/credit_tracker/service/indic/LegalsMapService.java b/src/main/java/ru/nbch/credit_tracker/service/indic/LegalsMapService.java new file mode 100644 index 0000000..dd3a4f2 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/service/indic/LegalsMapService.java @@ -0,0 +1,40 @@ +package ru.nbch.credit_tracker.service.indic; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import ru.nbch.credit_tracker.entities.app.SignalLegalFidMap; +import ru.nbch.credit_tracker.mapper.signal.LegalsFidMapMapper; + +import java.util.HashMap; +import java.util.List; + +@Slf4j +@Service +public class LegalsMapService { + + private final LegalsFidMapMapper legalsFidMapMapper; + private final ObjectMapper entityToJsonMapper; + + public LegalsMapService(LegalsFidMapMapper legalsFidMapMapper, + ObjectMapper entityToJsonMapper) { + this.legalsFidMapMapper = legalsFidMapMapper; + this.entityToJsonMapper = entityToJsonMapper; + } + + public List registerSubjects(List subjects) { + try { + String json = entityToJsonMapper.writeValueAsString(subjects.stream() + .map(phoneFidMap -> new HashMap() {{ + put("subject_id", phoneFidMap.getSubjectId()); + put("inn", phoneFidMap.getInn()); + put("reg_num", phoneFidMap.getRegNum()); + put("package_id", phoneFidMap.getPackageId()); + }}).toList()); + return legalsFidMapMapper.registerJson(json); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/ru/nbch/credit_tracker/service/mode/common/StartupRestoreService.java b/src/main/java/ru/nbch/credit_tracker/service/mode/common/StartupRestoreService.java index eb223e8..7a51ecd 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/mode/common/StartupRestoreService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/mode/common/StartupRestoreService.java @@ -78,7 +78,7 @@ public class StartupRestoreService { log.debug("Try to read and build pipeline for packageId {}; req xml path: {}", userPackage.getId(), xmlReqPath); Pipeline pipeline = pipelinePackageManager.build(new SetupParam(userPackage.getId(), xmlReqPath, PipelineMode.DEFAULT)); pipelineOrchestrator.startOrDelay( - () -> saver.readAndSave(userPackage.getId(), xmlReqPath), + () -> saver.readAndSaveNpPackage(userPackage.getId(), xmlReqPath), pipeline, userPackage.getId() ); } catch (Exception e) { diff --git a/src/main/java/ru/nbch/credit_tracker/service/task/impl/Saver.java b/src/main/java/ru/nbch/credit_tracker/service/task/impl/Saver.java index 018f964..7735054 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/task/impl/Saver.java +++ b/src/main/java/ru/nbch/credit_tracker/service/task/impl/Saver.java @@ -5,9 +5,11 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap; +import ru.nbch.credit_tracker.entities.app.SignalLegalFidMap; import ru.nbch.credit_tracker.entities.user_request.monitoring_request.MonitoringRequest; import ru.nbch.credit_tracker.enums.Status; import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper; +import ru.nbch.credit_tracker.service.indic.LegalsMapService; import ru.nbch.credit_tracker.service.indic.PhoneService; import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor; import ru.nbch.credit_tracker.utils.error.ExceptionUtils; @@ -23,43 +25,74 @@ public class Saver { private final Logger log = LoggerFactory.getLogger(getClass()); private final StaxXmlProcessor xmlProcessor; private final PhoneService phoneService; + private final LegalsMapService legalsMapService; private final UserPackageMapper userPackageMapper; private final int BATCH_SIZE; public Saver(StaxXmlProcessor xmlProcessor, PhoneService phoneService, + LegalsMapService legalsMapService, UserPackageMapper userPackageMapper, CreditTrackerSettings creditTrackerSettings) { this.xmlProcessor = xmlProcessor; this.phoneService = phoneService; + this.legalsMapService = legalsMapService; this.userPackageMapper = userPackageMapper; this.BATCH_SIZE = creditTrackerSettings.getSaverSubjectBatchSize(); } - public void readAndSave(Long packageId, Path pkgPath) { - log.info("Start registering subjects. PackageId: {}; pkg path: {}", packageId, pkgPath); + public void readAndSaveNpPackage(Long packageId, Path pkgPath) { + log.info("Start registering np subjects. PackageId: {}; pkg path: {}", packageId, pkgPath); try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(pkgPath), 8 * 1024 * 1024)) { xmlProcessor.read(in, MonitoringRequest.class, - request -> { - if (!request.getSubjects().getSubject().isEmpty()) { - log.trace("Reading subject's {} batch. PackageId: {}", request.getSubjects().getSubject().size(), packageId); - List subjectForSave = request.getSubjects().getSubject().stream().map(subject -> PackagesRecordsMap.builder() - .subjectId(subject.getId()) - .packageId(packageId) - .phone_l(Long.valueOf(subject.getClientId())) // validated ru.nbch.credit_tracker.service.ValidationService.validateMonitoringRequest - .build()).toList(); - phoneService.registerSubjects(subjectForSave); - request.getSubjects().getSubject().clear(); - } - }, - request -> request.getSubjects().getSubject().isEmpty(), - BATCH_SIZE, "/MonitoringRequest/Subjects/Subject" + request -> { + if (!request.getSubjects().getSubject().isEmpty()) { + log.trace("Reading np subject's {} batch. PackageId: {}", request.getSubjects().getSubject().size(), packageId); + List subjectForSave = request.getSubjects().getSubject().stream().map(subject -> PackagesRecordsMap.builder() + .subjectId(subject.getId()) + .packageId(packageId) + .phone_l(Long.valueOf(subject.getClientId())) // validated ru.nbch.credit_tracker.service.ValidationService.validateMonitoringRequest + .build()).toList(); + phoneService.registerSubjects(subjectForSave); + request.getSubjects().getSubject().clear(); + } + }, + request -> request.getSubjects().getSubject().isEmpty(), + BATCH_SIZE, "/MonitoringRequest/Subjects/Subject" ); } catch (IOException e) { log.error("{}", ExceptionUtils.getStackTrace(e)); } userPackageMapper.updatePackageStatus(packageId, Status.PROCESSING.name()); - log.info("Complete registering subjects. PackageId: {}; pkg path: {}", packageId, pkgPath); + log.info("Complete registering np subjects. PackageId: {}; pkg path: {}", packageId, pkgPath); + } + + public void readAndSaveLpPackage(Long packageId, Path pkgPath) { + log.info("Start registering lp subjects. PackageId: {}; pkg path: {}", packageId, pkgPath); + try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(pkgPath), 8 * 1024 * 1024)) { + xmlProcessor.read(in, MonitoringRequest.class, + request -> { + if (!request.getSubjects().getSubject().isEmpty()) { + log.trace("Reading lp subject's {} batch. PackageId: {}", request.getSubjects().getSubject().size(), packageId); + List subjectForSave = request.getSubjects().getSubject().stream().map(subject -> SignalLegalFidMap.builder() + .subjectId(subject.getId()) + .packageId(packageId) + .inn(Long.valueOf(subject.getInn())) // validated ru.nbch.credit_tracker.service.ValidationService.validateMonitoringRequest + .regNum(Long.valueOf(subject.getRegNum())) // validated ru.nbch.credit_tracker.service.ValidationService.validateMonitoringRequest + .build()).toList(); + + legalsMapService.registerSubjects(subjectForSave); + request.getSubjects().getSubject().clear(); + } + }, + request -> request.getSubjects().getSubject().isEmpty(), + BATCH_SIZE, "/MonitoringRequest/Subjects/Subject" + ); + } catch (IOException e) { + log.error("{}", ExceptionUtils.getStackTrace(e)); + } + userPackageMapper.updatePackageStatus(packageId, Status.PROCESSING.name()); + log.info("Complete registering lp subjects. PackageId: {}; pkg path: {}", packageId, pkgPath); } } diff --git a/src/main/resources/mybatis/mapper/signal/LegalsFidMapMapper.xml b/src/main/resources/mybatis/mapper/signal/LegalsFidMapMapper.xml new file mode 100644 index 0000000..b0b09b6 --- /dev/null +++ b/src/main/resources/mybatis/mapper/signal/LegalsFidMapMapper.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file