diff --git a/Dockerfile b/Dockerfile index aefdc2d..9bae098 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,5 @@ FROM eclipse-temurin:17-jre-alpine MAINTAINER ru.nbch -RUN apk add gcompat bash VOLUME /opt/app/logs/app VOLUME /opt/app/logs/json @@ -14,6 +13,11 @@ COPY maven/start-credit-tracker.sh /opt/app/start-credit-tracker.sh COPY maven/credit-tracker.properties /opt/app/credit-tracker.properties COPY maven/monitoring-request.xsd /opt/app/monitoring-request.xsd COPY maven/signal-package.xsd /opt/app/signal-package.xsd +COPY maven/ca_nbki.cer /usr/local/share/ca-certificates/corp.crt + +RUN apk add --no-cache ca-certificates \ + && update-ca-certificates \ +RUN apk add gcompat bash RUN chmod +x /opt/app/start-credit-tracker.sh ENTRYPOINT ["/opt/app/start-credit-tracker.sh"] diff --git a/ca_nbki.cer b/ca_nbki.cer new file mode 100644 index 0000000..2af388c --- /dev/null +++ b/ca_nbki.cer @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFpTCCA42gAwIBAgIQXRfulgQYrrRFEpmSkmctvzANBgkqhkiG9w0BAQsFADBH +MRMwEQYKCZImiZPyLGQBGRYDbXNrMRQwEgYKCZImiZPyLGQBGRYEbmJraTEaMBgG +A1UEAxMRTkJLSS1Sb290LUNBLTIwMzIwHhcNMTQwNTE1MDYxODMzWhcNMzcwMjAx +MTE1OTEyWjBHMRMwEQYKCZImiZPyLGQBGRYDbXNrMRQwEgYKCZImiZPyLGQBGRYE +bmJraTEaMBgGA1UEAxMRTkJLSS1Sb290LUNBLTIwMzIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCjS1l6kx+tjX2PGmQcVw9wg0Q6SCeWbiz7rxAYZPqE +OGckXWWjtfUOc8BhD3+BnC4BQ414X1HP2OWQ97pa2LogTksbpNpJ0+p82IPAYxV+ +zpI0FnW09FpzjtB6l/1kE9gKecjBoFG3xDhhFmpzCeK7tsKt94j84XPV/Zo82gYM +egmqhOfQZ+2HAChBj7gaBJALybFN34wkvN9bWdBPmK/j1jQikEAT8QE9qwcdmCKB +snHw+heYX4uJyZEkXEzW8GxQfTaAL+3d8HdRm1ZT/dN9KScF3Tp13LnQPCcixYoB +dF9Pd3P8JDAQX1KUVceLq6e75Q36EQaHHfEA8iQjaKlEzD049QbfAfCzKkSTnxHk +rOGwhm/h3ipwdAL4eqWkXfRriEvQU2fXGYXS0bhDT0/vBVAhHUMZ15/Oww0QSlc9 +clpau6rYG4m/Fmm8LPyEHROenbNwu35TqLl+CUFES25aE2oZcH6+SyE5dDgpX9e1 +Plt3fT6DuEDuT+rWvm0N8NVPNlQP/1lcbvP1oQrby07LToPatdKF9V5g8MX/19bP +BFsQsUHLlfffWMqqX8W/OPt5da3XL6U7Z8aBdhS7VAqqrvNhAbJBxgyJAzSfSwtZ +K5dZTKrJMZqmosUSIrLVr+9oXlbqJjKGNWQjwCfRQmPPkCpmpy1SRg8NPDoa3OVU +3wIDAQABo4GMMIGJMBMGCSsGAQQBgjcUAgQGHgQAQwBBMAsGA1UdDwQEAwIBhjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSkqLxdQSQ2+UIWrqSnms7lhp5zLjAQ +BgkrBgEEAYI3FQEEAwIBATAjBgkrBgEEAYI3FQIEFgQUvM7jX4RA4XBrZqhNhpl6 +EDcEMZEwDQYJKoZIhvcNAQELBQADggIBAINqzWxlGXFgMwSlWmH4ocDa0A3ip51C +nEaWB58aomzOZYHnNLXj4KiwY59TMDkiRiql4wWCw2AJBVv2//7JwOqrk8rixq02 +95NVX9TNefMKY3oo/g9bSqEsxoHgOoXP0QiY4GrYwAL6Bl0d/V9KUw5+BzBx/DKo +ncWD6KHnwFPBnHhIWiFlRAy2dX55rg6YSpB5/IlTQxGTjeg0OjX5w0ZE3L/0GZBl +O5W2E0RvUSErbjzoisxrhG48Mo5TtoGTmazKHRDqRCuZVnV0uEL9XaUOOV3G+LlP +/ujADUkF4iiIgoynB0W30fpwEqQFBSUxe+KzMw10ojaYaSz2g/HEg9ZKxy1a/bDL +6Va+vUMrypg26+MFrEdUwpPuORV1chtah/t+OxSk1dO82cuhjmRHX79mRwqjmXUs +5I/fNey8JWLCAV+Acf24CepdeYzeBGdh94t9FqTWw7aJaN5vL9ghwyG7JT8ozAfp +wYa1vq3nq+7SiELenQYYEUl792V8OsRV6N9nJkoLC12R9HGHjxMja5O2+Sw9LU4p +TjQcJt+qhT/c5+i6tQMjJUCTpXtOkaEezwrPpbUcoluGsz9vxs84eDtHiwumUCGj +XgaMSjcnY35dgne/x3kXcLYazdUYDoyYOEkgKG7ncSFg0lnIgwtYpqW6tzL3t9KN +Tsm6UcBOJAnv +-----END CERTIFICATE----- diff --git a/docker_compose/credit_tracker_config.env b/docker_compose/credit_tracker_config.env index 7678f1a..ee8f9ad 100644 --- a/docker_compose/credit_tracker_config.env +++ b/docker_compose/credit_tracker_config.env @@ -1,5 +1,5 @@ #commons -APP_VERSION=1.17 +APP_VERSION=1.20 REGISTRY_URL=rh8-vm3.nbki.msk:5000 JMX_PORT= JMX_HOSTNAME= diff --git a/pom.xml b/pom.xml index 1e84518..1599155 100644 --- a/pom.xml +++ b/pom.xml @@ -1,272 +1,275 @@ - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.4.6 - - - ru.nbch - credit-tracker - 2.0 - credit_tracker - Credit Tracker Application + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.4.6 + + + ru.nbch + credit-tracker + 1.20 + credit_tracker + Credit Tracker Application - - 21 - git_info - git.properties - rh8-vm3.nbki.msk:5000 - - + + 17 + git_info + git.properties + 10.230.238.56:5000 + + - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-aop - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 3.0.4 - - - org.postgresql - postgresql - runtime - - - com.ibm.db2 - jcc - 12.1.0.0 - - - org.projectlombok - lombok - true - - - org.slf4j - slf4j-api - 2.0.7 - - - ch.qos.logback - logback-classic - 1.4.12 - - - ch.qos.logback - logback-core - - - - - ch.qos.logback - logback-core - 1.5.12 - - - org.apache.commons - commons-lang3 - 3.17.0 - - - commons-io - commons-io - 2.18.0 - - - - jakarta.xml.bind - jakarta.xml.bind-api - 4.0.2 - - - - org.eclipse.persistence - org.eclipse.persistence.moxy - 4.0.2 - - - - com.sun.activation - jakarta.activation - 2.0.1 - - - co.elastic.apm - apm-agent-api - 1.43.0 - - - com.internetitem - logback-elasticsearch-appender - 1.6 - - - net.logstash.logback - logstash-logback-encoder - 7.4 - - - org.springframework.boot - spring-boot-starter-test - test - - - org.mybatis.spring.boot - mybatis-spring-boot-starter-test - 3.0.4 - test - - - com.h2database - h2 - test - - - org.mockito - mockito-junit-jupiter - test - - + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-aop + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 3.0.4 + + + org.postgresql + postgresql + runtime + + + com.ibm.db2 + jcc + 12.1.0.0 + + + org.projectlombok + lombok + true + + + org.slf4j + slf4j-api + 2.0.7 + + + ch.qos.logback + logback-classic + 1.4.12 + + + ch.qos.logback + logback-core + + + + + ch.qos.logback + logback-core + 1.5.12 + + + org.apache.commons + commons-lang3 + 3.17.0 + + + commons-io + commons-io + 2.18.0 + + + + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.2 + + + + org.eclipse.persistence + org.eclipse.persistence.moxy + 4.0.2 + + + + com.sun.activation + jakarta.activation + 2.0.1 + + + co.elastic.apm + apm-agent-api + 1.43.0 + + + com.internetitem + logback-elasticsearch-appender + 1.6 + + + net.logstash.logback + logstash-logback-encoder + 7.4 + + + org.springframework.boot + spring-boot-starter-test + test + + + org.mybatis.spring.boot + mybatis-spring-boot-starter-test + 3.0.4 + test + + + org.mockito + mockito-junit-jupiter + test + + - - - docker-push-dev - - - - - io.fabric8 - docker-maven-plugin - 0.45.0 - - - Build and deploy docker container - install - - - push - - - - - - - ${project.artifactId}:${project.version} - ${registry.url} - - ${project.basedir}/Dockerfile - - - - - ${project.build.directory}/${project.build.finalName}.jar - . - - - ${project.basedir}/apm-agent/elastic-apm-agent-1.45.0.jar - . - - - ${project.basedir}/start-credit-tracker.sh - . - - - ${project.basedir}/credit-tracker.properties - . - - - ${project.basedir}/monitoring-request.xsd - . - - - ${project.basedir}/signal-package.xsd - . - - - - - - ${project.version} - - - - - - - - - - - - - credit-tracker - - - org.apache.maven.plugins - maven-compiler-plugin - - - - org.projectlombok - lombok - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - org.projectlombok - lombok - - - - - - pl.project13.maven - git-commit-id-plugin - 4.9.10 - - - get-the-git-infos - - revision - - compile - - - - false - ${project.basedir}/${git.info.relative.dir} - true - - ${project.build.outputDirectory}/${git.info.filename} - - ${git.info.prefix} - - ${git.info.prefix}.commit.id - ${git.info.prefix}.branch - ${git.info.prefix}.build.version - ${git.info.prefix}.build.time - ${git.info.prefix}.closest.tag.name - - - + + + docker-push-dev + + + + io.fabric8 + docker-maven-plugin + 0.45.0 + + + Build and deploy docker container + install + + build + push + + + + + + + ${project.artifactId}:${project.version} + ${registry.url} + + ${project.basedir}/Dockerfile + + + + + + ${project.build.directory}/${project.build.finalName}.jar + + . + + + + ${project.basedir}/apm-agent/elastic-apm-agent-1.45.0.jar + + . + + + ${project.basedir}/start-credit-tracker.sh + . + + + ${project.basedir}/credit-tracker.properties + . + + + ${project.basedir}/monitoring-request.xsd + . + + + ${project.basedir}/signal-package.xsd + . + + + + ${project.basedir}/ca_nbki.cer + + . + + + + + + ${project.version} + + + + + + + + + + + + credit-tracker + + + org.apache.maven.plugins + maven-compiler-plugin + + + + org.projectlombok + lombok + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + pl.project13.maven + git-commit-id-plugin + 4.9.10 + + + get-the-git-infos + + revision + + compile + + + + false + ${project.basedir}/${git.info.relative.dir} + true + + ${project.build.outputDirectory}/${git.info.filename} + + ${git.info.prefix} + + ${git.info.prefix}.commit.id + ${git.info.prefix}.branch + ${git.info.prefix}.build.version + ${git.info.prefix}.build.time + ${git.info.prefix}.closest.tag.name + + + - - + + diff --git a/src/main/java/ru/nbch/credit_tracker/builder/PersonFactoryBuilder.java b/src/main/java/ru/nbch/credit_tracker/builder/PersonFactoryBuilder.java index 2bc69dd..55ecaae 100644 --- a/src/main/java/ru/nbch/credit_tracker/builder/PersonFactoryBuilder.java +++ b/src/main/java/ru/nbch/credit_tracker/builder/PersonFactoryBuilder.java @@ -30,7 +30,7 @@ public class PersonFactoryBuilder { private PersonService.PersonData personData; - private Integer uid; + private Long uid; public static PersonFactoryBuilder builder() { return new PersonFactoryBuilder(); @@ -41,7 +41,7 @@ public class PersonFactoryBuilder { return this; } - public PersonFactoryBuilder uid(Integer uid) { + public PersonFactoryBuilder uid(Long uid) { this.uid = uid; return this; } diff --git a/src/main/java/ru/nbch/credit_tracker/config/rest/GlobalExceptionHandler.java b/src/main/java/ru/nbch/credit_tracker/config/rest/GlobalExceptionHandler.java index edbbabb..68968d5 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/rest/GlobalExceptionHandler.java +++ b/src/main/java/ru/nbch/credit_tracker/config/rest/GlobalExceptionHandler.java @@ -74,6 +74,7 @@ public class GlobalExceptionHandler { switch (ex.getErrorFormat()) { case MonitoringError -> commonError = new MonitoringError(); case MonitoringActivePackagesError -> commonError = new MonitoringActivePackagesError(); + case MonitoringAllPackagesError -> commonError = new MonitoringAllPackagesError(); case MonitoringDownloadError -> commonError = new MonitoringDownloadError(); case MonitoringReportListError -> commonError = new MonitoringReportListError(); case MonitoringPackageDeleteError -> commonError = new MonitoringPackageDeleteError(); diff --git a/src/main/java/ru/nbch/credit_tracker/entities/dto/Hit.java b/src/main/java/ru/nbch/credit_tracker/entities/dto/Hit.java index 0b46bb8..e0ed9af 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/dto/Hit.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/dto/Hit.java @@ -8,8 +8,8 @@ import java.time.LocalDateTime; @Getter @Setter public class Hit { - private Integer id; - private Integer packageId; + private Long id; + private Long packageId; private String subjectId; private Integer signalType; private LocalDateTime responseSentAt; diff --git a/src/main/java/ru/nbch/credit_tracker/entities/dto/PhoneFidMap.java b/src/main/java/ru/nbch/credit_tracker/entities/dto/PhoneFidMap.java index 456b6f6..0214be5 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/dto/PhoneFidMap.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/dto/PhoneFidMap.java @@ -12,9 +12,9 @@ import java.time.LocalDateTime; @NoArgsConstructor @Builder public class PhoneFidMap { - private Integer id; + private Long id; + private Long packageId; private UUID recUuid; - private Integer packageId; private String subjectId; private String phone; private Integer fid; diff --git a/src/main/java/ru/nbch/credit_tracker/entities/dto/UserPackage.java b/src/main/java/ru/nbch/credit_tracker/entities/dto/UserPackage.java index f5cb245..9f7db86 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/dto/UserPackage.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/dto/UserPackage.java @@ -10,11 +10,12 @@ import java.time.LocalDateTime; @Setter @Builder public class UserPackage { - private Integer id; + private Long id; private String userId; private String packageName; private LocalDateTime createdAt; private String status; private LocalDateTime deactivatedAt; private String lastDownloadedReport; + private LocalDateTime monitoringAt; } diff --git a/src/main/java/ru/nbch/credit_tracker/entities/external_request/signals/Person.java b/src/main/java/ru/nbch/credit_tracker/entities/external_request/signals/Person.java index e3f09e4..06b6fc5 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/external_request/signals/Person.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/external_request/signals/Person.java @@ -15,7 +15,7 @@ public class Person { @XmlValue protected String value; @XmlAttribute(name = "uid", required = true) - protected Integer uid; + protected Long uid; @XmlAttribute(name = "oksm", required = true) protected String oksm; @XmlAttribute(name = "s", required = true) diff --git a/src/main/java/ru/nbch/credit_tracker/entities/external_response/monitoring_report_error/MonitoringReportErrors.java b/src/main/java/ru/nbch/credit_tracker/entities/external_response/monitoring_report_error/MonitoringReportErrors.java index 690577c..146e42f 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/external_response/monitoring_report_error/MonitoringReportErrors.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/external_response/monitoring_report_error/MonitoringReportErrors.java @@ -63,7 +63,7 @@ public class MonitoringReportErrors { public static class P { @XmlAttribute(name = "uid") - protected Integer uid; + protected Long uid; @XmlValue protected String value; diff --git a/src/main/java/ru/nbch/credit_tracker/entities/external_response/online_download/Person.java b/src/main/java/ru/nbch/credit_tracker/entities/external_response/online_download/Person.java index 7b83f53..7012472 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/external_response/online_download/Person.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/external_response/online_download/Person.java @@ -16,7 +16,7 @@ import java.util.List; public class Person { @XmlAttribute(name = "uid", required = true) - protected Integer uid; + protected Long uid; @XmlElement(name = "Inquiry", required = true) protected List inquiries; diff --git a/src/main/java/ru/nbch/credit_tracker/entities/user_response/errors/MonitoringAllPackagesError.java b/src/main/java/ru/nbch/credit_tracker/entities/user_response/errors/MonitoringAllPackagesError.java new file mode 100644 index 0000000..1a339e6 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/user_response/errors/MonitoringAllPackagesError.java @@ -0,0 +1,25 @@ +package ru.nbch.credit_tracker.entities.user_response.errors; + +import jakarta.xml.bind.annotation.*; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "MonitoringAllPackagesResponse", propOrder = { + "status", + "errorCode", + "errorText" +}) +@XmlRootElement(name = "MonitoringAllPackagesResponse") +public class MonitoringAllPackagesError implements CommonError { + + @XmlElement(name = "Status", required = true) + protected String status; + @XmlElement(name = "Code",required = true) + protected String errorCode; + @XmlElement(name = "Message",required = true) + protected String errorText; + +} diff --git a/src/main/java/ru/nbch/credit_tracker/enums/XmlErrorFormat.java b/src/main/java/ru/nbch/credit_tracker/enums/XmlErrorFormat.java index 45498ea..c6e3783 100644 --- a/src/main/java/ru/nbch/credit_tracker/enums/XmlErrorFormat.java +++ b/src/main/java/ru/nbch/credit_tracker/enums/XmlErrorFormat.java @@ -2,6 +2,7 @@ package ru.nbch.credit_tracker.enums; public enum XmlErrorFormat { MonitoringActivePackagesError, + MonitoringAllPackagesError, MonitoringDownloadError, MonitoringError, MonitoringPackageDeleteError, 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 e904779..b44a1c6 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -103,7 +103,7 @@ public class SignalFacade { // Валидация Архива на количетсво файлов, размер и расширение MonitoringRequest monitoringRequest; - Integer packageId; + Long packageId; ZipInputStream zipInputStream = null; String filePath; try { @@ -224,7 +224,7 @@ public class SignalFacade { } @SetAndClearMdc(argIndex = 1) - public void registerFidsAndDebts(Integer packageId, String packageName, String filePath) { + public void registerFidsAndDebts(Long packageId, String packageName, String filePath) { Map context = MDC.getCopyOfContextMap(); executor.execute(() -> { if (context != null) { @@ -240,8 +240,9 @@ public class SignalFacade { return; } if (signalRestService.setupMonitoring(packageId)) { - log.info("Package was successfully registered in signal service. PackageId: {} PackageName: {}", packageId, packageName); - signalService.updatePackageStatus(packageId, Status.ON_MONITORING); + LocalDateTime monitoringAt = LocalDateTime.now(); + log.info("Package was successfully registered in signal service. PackageId: {} PackageName: {}, MonitoringAt: {}", packageId, packageName, monitoringAt); + signalService.updatePackageOnMonitoringSuccess(packageId, monitoringAt); monitoringErrorProcesingService.findErrors(packageId); } else { log.info("Package registration was rejected by signal service. PackageId: {} PackageName: {}", packageId, packageName); @@ -297,7 +298,7 @@ public class SignalFacade { try { AuthorizationService.AuthResult authResult = authorizationService.findAuthInfo(allPackagesRequest.getUserId(), allPackagesRequest.getPassword()); if (!authResult.isSuccess()) { - throw clientExcp(authResult.getError(), XmlErrorFormat.MonitoringActivePackagesError); + throw clientExcp(authResult.getError(), XmlErrorFormat.MonitoringAllPackagesError); } List activePackages = signalService.findAllPackages(allPackagesRequest.getUserId()); @@ -319,13 +320,13 @@ public class SignalFacade { response.setPackages(packages); return ResponseEntity.ok(response); } else { - throw clientExcp(SignalError.ERROR_019, XmlErrorFormat.MonitoringActivePackagesError); + throw clientExcp(SignalError.ERROR_019, XmlErrorFormat.MonitoringAllPackagesError); } } catch (Exception e) { if (e instanceof SignalClientException) { throw (SignalClientException) e; } - throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringActivePackagesError, e); + throw serverExcp(SignalError.ERROR_013, XmlErrorFormat.MonitoringAllPackagesError, e); } } diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java index 490eb83..f78a0bc 100644 --- a/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java @@ -11,11 +11,11 @@ import java.util.List; @Mapper public interface PhoneFidMapMapper { - void registerSubjects(@Param("subjects") List subjects, @Param("packageId") Integer packageId); - void register(@Param("phoneFidMap") List phoneFidMap, @Param("packageId") Integer packageId); + void registerSubjects(@Param("subjects") List subjects, @Param("packageId") Long packageId); + void register(@Param("phoneFidMap") List phoneFidMap, @Param("packageId") Long packageId); void registerWithId(@Param("phoneFidMap") List phoneFidMap); - List findFullPhoneFidMap(@Param("packageId") Integer packageId, @Param("offset") int offset, @Param("limit") int limit); + List findFullPhoneFidMap(@Param("packageId") Long packageId, @Param("offset") int offset, @Param("limit") int limit); void updatePhoneFidMaps(@Param("subjects") Collection subjects); void updateOne(@Param("subject") PhoneFidMap subject); @@ -23,7 +23,7 @@ public interface PhoneFidMapMapper { void updatePhoneFidMapsErrors(@Param("subjects") List subjects); - PhoneFidMap findPhoneFidMapById(@Param("id") Integer packageId); + PhoneFidMap findPhoneFidMapById(@Param("id") Long packageId); - boolean hasNonNullFids(@Param("packageId") Integer packageId); + boolean hasNonNullFids(@Param("packageId") Long packageId); } diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/UserPackageMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/UserPackageMapper.java index 0540fa1..e2f8b46 100644 --- a/src/main/java/ru/nbch/credit_tracker/mapper/signal/UserPackageMapper.java +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/UserPackageMapper.java @@ -18,13 +18,15 @@ public interface UserPackageMapper { void deletePackage(@Param("userId") String userId, @Param("packageName") String packageName, @Param("status") String newStatus, @Param("previousStatus") String previousStatus, @Param("deactivatedAt") LocalDateTime deactivatedAt); - Integer insertPackage(@Param("userPackage") UserPackage userPackage); + Long insertPackage(@Param("userPackage") UserPackage userPackage); - void updatePackageStatus(@Param("packageId") Integer packageId, @Param("status") String status); + void updatePackageStatus(@Param("packageId") Long packageId, @Param("status") String status); - void updatePackageLastDownloadedReport(@Param("id") Integer id, @Param("fileName") String fileName); + void updatePackageLastDownloadedReport(@Param("id") Long id, @Param("fileName") String fileName); - UserPackage findPackage(@Param("id") Integer id); + void updatePackageOnMonitoringSuccess(@Param("id") Long id, @Param("monitoringAt") LocalDateTime monitoringAt); + + UserPackage findPackage(@Param("id") Long id); List findUserPackages(@Param("userId") String userId, @Param("statuses") List status); diff --git a/src/main/java/ru/nbch/credit_tracker/service/MonitoringErrorProcesingService.java b/src/main/java/ru/nbch/credit_tracker/service/MonitoringErrorProcesingService.java index 74bd9d1..edd41d4 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/MonitoringErrorProcesingService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/MonitoringErrorProcesingService.java @@ -25,13 +25,13 @@ public class MonitoringErrorProcesingService { this.signalRestService = signalRestService; } - public void findErrors(Integer packageId) { + public void findErrors(Long packageId) { UserPackage userPackage = signalService.findPackage(packageId); getCurrentProxy().processPackage(userPackage, packageId); } @SetAndClearMdc - public void processPackage(UserPackage userPackage, Integer packageId) { + public void processPackage(UserPackage userPackage, Long packageId) { if (userPackage != null) { String packCode = userPackage.getUserId().substring(0, 6) + "_" + userPackage.getPackageName(); log.info("Проверка на ошибки при постановке на мониторинг. packCode={}, packageId={}", packCode, packageId); 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 07c5a10..6d17ba4 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java @@ -312,7 +312,7 @@ public class MonitoringService { log.info("Signal hits updated for package {}", userPackage.getPackageName()); } - public String loadReport(Integer packageId, String reportName) { + public String loadReport(Long packageId, String reportName) { return signalRestService.downloadReport(packageId, 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 59e8912..a60fe35 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -77,7 +77,7 @@ public class SignalService { return userPackageService.isPackageNotUnique(userId, packageName); } - public Integer registerPackage(MonitoringRequest request) { + public Long registerPackage(MonitoringRequest request) { UserPackage userPackage = UserPackage.builder() .userId(request.getUserId()) .packageName(request.getPackageName()) @@ -87,7 +87,7 @@ public class SignalService { return userPackageService.insertPackage(userPackage); } - public Integer registerPackage(String userId, String packageName) { + public Long registerPackage(String userId, String packageName) { UserPackage userPackage = UserPackage.builder() .userId(userId) .packageName(packageName) @@ -97,7 +97,7 @@ public class SignalService { return userPackageService.insertPackage(userPackage); } - public void registerSubjects(String filePath, Integer packageId) { + public void registerSubjects(String filePath, Long packageId) { log.info("Start registering subjects. PackageId: {}", packageId); try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(Path.of(filePath)), 8 * 1024 * 1024)) { staxXmlProcessor.read(in, MonitoringRequest.class, @@ -122,7 +122,7 @@ public class SignalService { * на поиск флагов и формирование отчета в оф. сервис сигналов * @param packageId id пакета, по которому идет выборка {@link PhoneFidMap} */ - public void processSubjects(Integer packageId) { + public void processSubjects(Long packageId) { int offset = 0; List batch; do { @@ -139,7 +139,7 @@ public class SignalService { /** * Обрабатывает все PhoneFidMap по packageId, выгружая их пачками и фильтруя по переданному фильтру */ - public UpdateResult updateSubjects(Integer packageId, Predicate filter) { + public UpdateResult updateSubjects(Long packageId, Predicate filter) { boolean updated = false; boolean noFidsFound = true; int offset = 0; @@ -194,7 +194,7 @@ public class SignalService { * @return fidsFound true - если хотя бы по одному номеру был найден фид, false - в противном случае */ // TODO Добавить отдельный метод. Если не нашелся фид, надо обновить в базе fid = null и флаги = null calculated_at=now() - public boolean updateFlags(Map fidsMap, Integer packageId) { + public boolean updateFlags(Map fidsMap, Long packageId) { log.info("Start calculating flags for subjects batch. PackageId: {}", packageId); Map flagsDataMap = flagsService.findFlags(fidsMap.keySet().stream().toList()); List subjectToUpdate = new ArrayList<>(); @@ -238,24 +238,28 @@ public class SignalService { public void rejectPackage(String userId, String packageName) { UserPackage userPackage = UserPackage.builder() - .userId(userId) - .packageName(packageName) - .createdAt(LocalDateTime.now()) - .status(Status.REJECTED.name()) - .build(); + .userId(userId) + .packageName(packageName) + .createdAt(LocalDateTime.now()) + .status(Status.REJECTED.name()) + .build(); userPackageService.insertPackage(userPackage); } - public void updatePackageStatus(Integer packageId, Status status) { + public void updatePackageStatus(Long packageId, Status status) { userPackageService.updatePackageStatus(packageId, status); } + public void updatePackageOnMonitoringSuccess(Long packageId, LocalDateTime monitoringAt) { + userPackageService.updatePackageOnMonitoringSuccess(packageId, monitoringAt); + } + /** * Формирует файл запроса в официальный сервис сигналов, выгружая паспортные данные пачками и сразу записывая их в файл * * @return Путь к файлу запроса к официальному сервису сигналов на постановку на мониторинг */ - public String writeSignals(Integer packageId) { + public String writeSignals(Long packageId) { String folderPath = config.getLoadDir() + File.separator + "tmp_folder" + File.separator; String filePath = folderPath + UUID.randomUUID() + "_output.xml"; CTUtil.createFolder(folderPath); @@ -271,7 +275,7 @@ public class SignalService { return filePath; } - public Signals buildSignals(Integer packageId) { + public Signals buildSignals(Long packageId) { UserPackage userPackage = userPackageService.findPackage(packageId); Signals signals = new Signals(); signals.setOnline("2"); // Всегда=2 (только онлайн-сигналы) @@ -287,7 +291,7 @@ public class SignalService { * Обрабатывает все PhoneFidMap по packageId, выгружая их пачками и фильтруя по переданному фильтру. * writer записывает пачку сразу в файл */ - private void buildPersons(Integer packageId, Consumer> writer) { + private void buildPersons(Long packageId, Consumer> writer) { int offset = 0; List batch; do { @@ -327,7 +331,7 @@ public class SignalService { return persons; } - public void updateSubjectsErrors(String filePath, Integer packageId) { + public void updateSubjectsErrors(String filePath, Long packageId) { log.info("Start updating subjects errors. PackageId: {}", packageId); try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(Path.of(filePath)), 8 * 1024 * 1024)) { staxXmlProcessor.read(in, MonitoringReportErrors.class, @@ -386,19 +390,19 @@ public class SignalService { hitsService.insertHits(hits); } - public void updateLastDownloadedReport(Integer id, String fileName) { + public void updateLastDownloadedReport(Long id, String fileName) { userPackageService.updatePackageLastDownloadedReport(id, fileName); } - public PhoneFidMap findPhoneFidMapById(Integer id) { + public PhoneFidMap findPhoneFidMapById(Long id) { return phoneFidMapService.findPhoneFidMapById(id); } - public boolean hasNonNullfids(Integer packageId) { + public boolean hasNonNullfids(Long packageId) { return phoneFidMapService.hasNonNullfids(packageId); } - public UserPackage findPackage(Integer packageId) { + public UserPackage findPackage(Long packageId) { return userPackageService.findPackage(packageId); } diff --git a/src/main/java/ru/nbch/credit_tracker/service/UpdateProcessingPackagesService.java b/src/main/java/ru/nbch/credit_tracker/service/UpdateProcessingPackagesService.java index 1ca26c7..81506d5 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/UpdateProcessingPackagesService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/UpdateProcessingPackagesService.java @@ -45,7 +45,7 @@ public class UpdateProcessingPackagesService { } @SetAndClearMdc(argIndex = 1) - public void process(Integer packageId, String packageName) { + public void process(Long packageId, String packageName) { try { SignalService.UpdateResult updateResult = signalService.updateSubjects(packageId, null); if (updateResult.isNoFidsFound()) { diff --git a/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java b/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java index 3f05e3f..a62e62e 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java @@ -54,21 +54,24 @@ public class UpdatingFlagsService { for (UserPackage userPackage : packages) { log.info("Updating flags for Package {}", userPackage.getPackageName()); MDC.put("ru.nbch.credit_tracker.log.mdc.key", "[" + userPackage.getPackageName() +"]"); - updateFlags(userPackage.getId(), userPackage.getPackageName()); + updateFlags(userPackage); MDC.remove("ru.nbch.credit_tracker.log.mdc.key"); } log.info("Finish updating flags"); } - private void updateFlags(Integer packageId, String packageName) { + private void updateFlags(UserPackage userPackage) { + Long packageId = userPackage.getId(); + String packageName = userPackage.getPackageName(); try { signalService.updatePackageStatus(packageId, Status.PROCESSING); Predicate filter = subject -> subject.getCalculatedAt() != null && hasDaysPassed(subject.getCalculatedAt()); SignalService.UpdateResult updateResult = signalService.updateSubjects(packageId, filter); if (updateResult.isUpdated()) { if (signalRestService.setupMonitoring(packageId)) { - log.info("Flags were updated successfully. PackageId: {} PackageName: {}. Package status changed to ON_MONITORING", packageId, packageName); - signalService.updatePackageStatus(packageId, Status.ON_MONITORING); + LocalDateTime monitoringAt = userPackage.getMonitoringAt() != null ? userPackage.getMonitoringAt() : LocalDateTime.now(); + log.info("Flags were updated successfully. PackageId: {} PackageName: {} MonitoringAt: {}. Package status changed to ON_MONITORING", packageId, packageName, monitoringAt); + signalService.updatePackageOnMonitoringSuccess(packageId, monitoringAt); monitoringErrorProcesingService.findErrors(packageId); } else { log.info("Updated package registration was rejected by signal service. PackageId: {} PackageName: {}", packageId, packageName); diff --git a/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java b/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java index 8985fe9..3962e5c 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java @@ -22,14 +22,15 @@ public class PhoneFidMapService { this.sqlSessionFactory = sqlSessionFactory; } - public void registerSubjects(List subjects, Integer packageId) { + public void registerSubjects(List subjects, Long packageId) { mapper.registerSubjects(subjects, packageId); } - public void register(List phoneFidMap, Integer packageId) { + public void register(List phoneFidMap, Long packageId) { mapper.register(phoneFidMap, packageId); } - public List findFullPhoneFidMap(Integer packageId, int offset, int limit) { + + public List findFullPhoneFidMap(Long packageId, int offset, int limit) { return mapper.findFullPhoneFidMap(packageId, offset, limit); } @@ -55,11 +56,11 @@ public class PhoneFidMapService { mapper.updatePhoneFidMapsErrors(subjects); } - public PhoneFidMap findPhoneFidMapById(Integer id) { + public PhoneFidMap findPhoneFidMapById(Long id) { return mapper.findPhoneFidMapById(id); } - public boolean hasNonNullfids(Integer packageId) { + public boolean hasNonNullfids(Long packageId) { return mapper.hasNonNullFids(packageId); } } diff --git a/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java b/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java index 2d30db2..ad08a0f 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java @@ -68,7 +68,7 @@ public class SignalRestService { * Ставит пакет на мониторинг в официальный сервис сигналов * @return true - если пакет успешно поставился на мониторинг. false - в противном случае */ - public boolean setupMonitoring(Integer packageId) throws Exception { + public boolean setupMonitoring(Long packageId) throws Exception { String path = signalService.writeSignals(packageId); Resource request = compressFile(path); @@ -105,7 +105,7 @@ public class SignalRestService { /** * @return имя файла с ошибками по поставленному на мониторинг отчету */ - public String getErrorFileName(Integer packageId, String packCode) { + public String getErrorFileName(Long packageId, String packCode) { String url = GET_REPORT_URI + "?packCode=" + packCode; HttpHeaders headers = new HttpHeaders(); @@ -148,7 +148,7 @@ public class SignalRestService { * * @return путь к разархивированному файлу. Пример: /tmp_folder//0001XX_MY_BATCH_223112.1.errors.xml.gz */ - public String loadErrorFile(Integer packageId, String fileName) { + public String loadErrorFile(Long packageId, String fileName) { String url = DOWNLOAD_REPORT_URI + "?fNameRequest=" + fileName; HttpHeaders headers = new HttpHeaders(); @@ -229,7 +229,7 @@ public class SignalRestService { * * @return путь к разархивированному файлу. Пример: /tmp_folder//0001XX_MY_BATCH_204.1.online.2025-07-08T20-00-46.xml.gz.xml */ - public String downloadReport(Integer packageId, String reportName) { + public String downloadReport(Long packageId, String reportName) { String url = DOWNLOAD_ONLINE_REPORT_URI + "?fNameReport=" + reportName; HttpHeaders headers = new HttpHeaders(); @@ -247,7 +247,7 @@ public class SignalRestService { return unzipReport(response,packageId, reportName); } - private String unzipReport(ResponseEntity response, Integer packageId, String reportName) { + private String unzipReport(ResponseEntity response, Long packageId, String reportName) { boolean isGzipped = response.getHeaders().getContentType() != null && response.getHeaders().getContentType().toString().equals("application/x-gzip"); diff --git a/src/main/java/ru/nbch/credit_tracker/service/signal/UserPackageService.java b/src/main/java/ru/nbch/credit_tracker/service/signal/UserPackageService.java index 2699ec6..b38ec4c 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/signal/UserPackageService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/UserPackageService.java @@ -34,19 +34,23 @@ public class UserPackageService { mapper.deletePackage(userId.substring(0, 6), packageName, newStatus.name(), previousStatus.name(), deactivatedAt); } - public Integer insertPackage(UserPackage userPackage) { + public Long insertPackage(UserPackage userPackage) { return mapper.insertPackage(userPackage); } - public void updatePackageStatus(Integer packageId, Status status) { + public void updatePackageStatus(Long packageId, Status status) { mapper.updatePackageStatus(packageId, status.name()); } - public void updatePackageLastDownloadedReport(Integer id, String fileName) { + public void updatePackageLastDownloadedReport(Long id, String fileName) { mapper.updatePackageLastDownloadedReport(id, fileName); } - public UserPackage findPackage(Integer id) { + public void updatePackageOnMonitoringSuccess(Long id, LocalDateTime monitoringAt) { + mapper.updatePackageOnMonitoringSuccess(id, monitoringAt); + } + + public UserPackage findPackage(Long id) { return mapper.findPackage(id); } diff --git a/src/main/java/ru/nbch/credit_tracker/service/xml/stax/MonitoringReportErrorsStaxtReader.java b/src/main/java/ru/nbch/credit_tracker/service/xml/stax/MonitoringReportErrorsStaxtReader.java index eb5a703..18e3c2e 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/xml/stax/MonitoringReportErrorsStaxtReader.java +++ b/src/main/java/ru/nbch/credit_tracker/service/xml/stax/MonitoringReportErrorsStaxtReader.java @@ -55,7 +55,7 @@ public class MonitoringReportErrorsStaxtReader extends BaseStaxReader { try { - int uid = Integer.parseInt(text); + Long uid = Long.parseLong(text); obj.getCurrentPerson().setUid(uid); } catch (NumberFormatException e) { log.error("Couldn't parse uid: {}", text); diff --git a/src/main/java/ru/nbch/credit_tracker/service/xml/stax/OnlineDownloadReportPersonsStaxReader.java b/src/main/java/ru/nbch/credit_tracker/service/xml/stax/OnlineDownloadReportPersonsStaxReader.java index 1126573..8ad34f1 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/xml/stax/OnlineDownloadReportPersonsStaxReader.java +++ b/src/main/java/ru/nbch/credit_tracker/service/xml/stax/OnlineDownloadReportPersonsStaxReader.java @@ -46,7 +46,7 @@ public class OnlineDownloadReportPersonsStaxReader extends BaseStaxReader { try { - int uid = Integer.parseInt(text); + Long uid = Long.parseLong(text); obj.getCurrentPerson().setUid(uid); } catch (NumberFormatException e) { log.error("Couldn't parse uid: {}", text); diff --git a/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml b/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml index 263aa5a..35de117 100644 --- a/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml +++ b/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml @@ -13,6 +13,7 @@ + INSERT INTO signals_user_packages (membercode, package_name, created_at, status) values (#{userPackage.userId}, #{userPackage.packageName}, #{userPackage.createdAt}, #{userPackage.status}) RETURNING id @@ -69,9 +70,15 @@ WHERE id = #{id} + + UPDATE signals_user_packages + SET monitoring_at = #{monitoringAt}, status = 'ON_MONITORING' + WHERE id = #{id} + + - SELECT id, membercode, package_name, created_at, status, deactivated_at, last_downloaded_report + SELECT id, membercode, package_name, created_at, status, deactivated_at, last_downloaded_report, monitoring_at FROM signals_user_packages WHERE membercode IS NOT NULL AND LEFT(membercode, 6) = #{userId} @@ -91,7 +98,7 @@ - SELECT id, membercode, package_name, created_at, status, deactivated_at, last_downloaded_report + SELECT id, membercode, package_name, created_at, status, deactivated_at, last_downloaded_report, monitoring_at FROM signals_user_packages WHERE status = #{status} diff --git a/src/main/resources/credit_tracker_db.ddl b/src/main/resources/sql/credit_tracker_db.ddl similarity index 100% rename from src/main/resources/credit_tracker_db.ddl rename to src/main/resources/sql/credit_tracker_db.ddl diff --git a/src/main/resources/sql/v1.10.ddl b/src/main/resources/sql/v1.10.ddl new file mode 100644 index 0000000..23e2514 --- /dev/null +++ b/src/main/resources/sql/v1.10.ddl @@ -0,0 +1,2 @@ +alter table signals_phone_fid_map + add error_text text; \ No newline at end of file diff --git a/src/main/resources/sql/v1.18.ddl b/src/main/resources/sql/v1.18.ddl new file mode 100644 index 0000000..698e662 --- /dev/null +++ b/src/main/resources/sql/v1.18.ddl @@ -0,0 +1,2 @@ +alter table signals_user_packages + add "monitoring_at" timestamp; \ No newline at end of file diff --git a/src/main/resources/sql/v1.20.ddl b/src/main/resources/sql/v1.20.ddl new file mode 100644 index 0000000..9a040ff --- /dev/null +++ b/src/main/resources/sql/v1.20.ddl @@ -0,0 +1,14 @@ +alter table signals_user_packages + alter column id type bigint using id::bigint; + +alter table signals_phone_fid_map + alter column id type bigint using id::bigint; + +alter table signals_phone_fid_map + alter column package_id type bigint using package_id::bigint; + +alter table signals_hits + alter column id type bigint using id::bigint; + +alter table signals_hits + alter column package_id type bigint using package_id::bigint;