From 2b5bd8c120572c6459845c01c5c25729d7b1f06f Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Thu, 5 Jun 2025 16:47:11 +0300 Subject: [PATCH] Added database registration for packege and subject --- .../ru/nbch/credit_tracker/enums/Status.java | 9 +++++ .../credit_tracker/facade/SignalFacade.java | 17 +++++++++- .../mapper/signal/SignalMapper.java | 21 ++++++++++++ .../credit_tracker/service/SignalService.java | 31 +++++++++++++++++ .../mybatis/mapper/signal/SignalMapper.xml | 33 +++++++++++++++++++ 5 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/nbch/credit_tracker/enums/Status.java create mode 100644 src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java create mode 100644 src/main/java/ru/nbch/credit_tracker/service/SignalService.java create mode 100644 src/main/resources/mybatis/mapper/signal/SignalMapper.xml diff --git a/src/main/java/ru/nbch/credit_tracker/enums/Status.java b/src/main/java/ru/nbch/credit_tracker/enums/Status.java new file mode 100644 index 0000000..a9b2853 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/enums/Status.java @@ -0,0 +1,9 @@ +package ru.nbch.credit_tracker.enums; + +public enum Status { + ON_MONITORING, // пакет стоит на мониторинге в оф. сервисе + REJECTED, // отклонен на стороне НБКИ + PROCESSING, // идет поиск телефона и расчет флагов по пакету + DELETED, // пакет удален + ERROR; // произошла ошибка при постановке пакета на мониторинг в оф. сервис +} 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 6e5a49d..638cf19 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -11,6 +11,7 @@ import ru.nbch.credit_tracker.entities.monitoring_request.MonitoringRequest; import ru.nbch.credit_tracker.enums.SignalError; import ru.nbch.credit_tracker.exceptions.ValidationException; import ru.nbch.credit_tracker.service.FailureAnswerGenerator; +import ru.nbch.credit_tracker.service.SignalService; import ru.nbch.credit_tracker.service.scoring.AuthorizationService; import ru.nbch.credit_tracker.service.xml.IXmlProcessor; import ru.nbch.credit_tracker.service.xml.XmlUtilService; @@ -25,15 +26,18 @@ public class SignalFacade { private final CreditTrackerSettings config; private final AuthorizationService authorizationService; + private final SignalService signalService; private final FailureAnswerGenerator failureAnswerGenerator; private final XmlUtilService xmlUtilService; public SignalFacade(CreditTrackerSettings config, AuthorizationService authorizationService, + SignalService signalService, FailureAnswerGenerator failureAnswerGenerator, XmlUtilService xmlUtilService) { this.config = config; this.authorizationService = authorizationService; + this.signalService = signalService; this.failureAnswerGenerator = failureAnswerGenerator; this.xmlUtilService = xmlUtilService; } @@ -93,6 +97,7 @@ public class SignalFacade { validateRequestByXsd(zipInputStream); } catch (ValidationException e) { + // записать REJECTED return getBadResponse(SignalError.ERROR_011); // TODO вычленять конкретный элемент } catch (Exception e) { log.error(e.getMessage(), e); @@ -100,17 +105,27 @@ public class SignalFacade { return ResponseEntity.internalServerError().body(new PathResource(errorPath)); } + MonitoringRequest monitoringRequest; // Xml валиден. Производим анмаршаллинг try (ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream())) { zipInputStream.getNextEntry(); IXmlProcessor processor = xmlUtilService.createJaxbProcessor(); - MonitoringRequest monitoringRequest = processor.read(zipInputStream, MonitoringRequest.class); + monitoringRequest = processor.read(zipInputStream, MonitoringRequest.class); if (!authorizationService.hasAuthorization(monitoringRequest.getUserId(), monitoringRequest.getPassword())) { + // записать REJECTED return getBadResponse(SignalError.ERROR_005); } + if (signalService.isPackageNotUnique(monitoringRequest)) { + // записать REJECTED +// signalService.insertPackage(monitoringRequest, Status.REJECTED); + return getBadResponse(SignalError.ERROR_007); + } + + signalService.registerPackage(monitoringRequest); + } catch (Exception e) { log.error(e.getMessage(), e); String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_001); 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 new file mode 100644 index 0000000..cc8b302 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java @@ -0,0 +1,21 @@ +package ru.nbch.credit_tracker.mapper.signal; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import ru.nbch.credit_tracker.entities.monitoring_request.MonitoringRequest; +import ru.nbch.credit_tracker.entities.monitoring_request.Subject; + +import java.time.LocalDateTime; +import java.util.List; + +@Mapper +public interface SignalMapper { + + boolean isPackageNotUnique(@Param("userId") String userId, @Param("packageName") String packageName); + + Integer registerPackage(@Param("request") MonitoringRequest request, @Param("creadedAt") LocalDateTime creadedAt, @Param("status") String status); + + void registerSubjects(@Param("subjects") List subjects, @Param("packageId") Integer packageId); + + void insertPackage(@Param("request") MonitoringRequest request, @Param("creadedAt") LocalDateTime creadedAt, @Param("status") String status); +} diff --git a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java new file mode 100644 index 0000000..f51b1cc --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -0,0 +1,31 @@ +package ru.nbch.credit_tracker.service; + +import org.springframework.stereotype.Service; +import ru.nbch.credit_tracker.entities.monitoring_request.MonitoringRequest; +import ru.nbch.credit_tracker.enums.Status; +import ru.nbch.credit_tracker.mapper.signal.SignalMapper; + +import java.time.LocalDateTime; + +@Service +public class SignalService { + private final SignalMapper mapper; + + public SignalService(SignalMapper mapper) { + this.mapper = mapper; + } + + public boolean isPackageNotUnique(MonitoringRequest request) { + String userId = request.getUserId(); + return mapper.isPackageNotUnique(userId.substring(0, 6),request.getPackageName()); + } + + public void registerPackage(MonitoringRequest request) { + Integer packageId = mapper.registerPackage(request, LocalDateTime.now(), Status.PROCESSING.name()); + mapper.registerSubjects(request.getSubjects().getSubject(), packageId); + } + + public void insertPackage(MonitoringRequest request, Status status) { + mapper.insertPackage(request, LocalDateTime.now(), status.name()); + } +} diff --git a/src/main/resources/mybatis/mapper/signal/SignalMapper.xml b/src/main/resources/mybatis/mapper/signal/SignalMapper.xml new file mode 100644 index 0000000..d086bd3 --- /dev/null +++ b/src/main/resources/mybatis/mapper/signal/SignalMapper.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + INSERT INTO signals_user_packages (membercode, package_name, created_at, status) + values (#{request.userId}, #{request.packageName}, #{creadedAt}, #{status}) + + + + INSERT INTO signals_phone_fid_map (subject_id, phone, fid, package_id) + values + + (#{subject.id}, #{subject.clientId}, NULL, #{packageId}) + + + + \ No newline at end of file