Merge branch 'master' into dev

# Conflicts:
#	pom.xml
#	src/main/java/ru/nbch/credit_tracker/entities/dto/PhoneFidMap.java
#	src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java
#	src/main/java/ru/nbch/credit_tracker/service/SignalService.java
#	src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java
This commit is contained in:
Mikhail Trofimov 2025-10-16 16:33:01 +03:00
commit 438956f8b5
32 changed files with 449 additions and 341 deletions

View file

@ -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"]

33
ca_nbki.cer Normal file
View file

@ -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-----

View file

@ -1,5 +1,5 @@
#commons
APP_VERSION=1.17
APP_VERSION=1.20
REGISTRY_URL=rh8-vm3.nbki.msk:5000
JMX_PORT=
JMX_HOSTNAME=

29
pom.xml
View file

@ -10,15 +10,15 @@
</parent>
<groupId>ru.nbch</groupId>
<artifactId>credit-tracker</artifactId>
<version>2.0</version>
<version>1.20</version>
<name>credit_tracker</name>
<description>Credit Tracker Application</description>
<properties>
<java.version>21</java.version>
<java.version>17</java.version>
<git.info.prefix>git_info</git.info.prefix>
<git.info.filename>git.properties</git.info.filename>
<registry.url>rh8-vm3.nbki.msk:5000</registry.url>
<registry.url>10.230.238.56:5000</registry.url>
<!-- <registry.url>rh8-vm3.nbki.msk:5000</registry.url>-->
</properties>
@ -126,11 +126,6 @@
<version>3.0.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
@ -142,7 +137,6 @@
<profile>
<id>docker-push-dev</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
@ -153,7 +147,7 @@
<id>Build and deploy docker container</id>
<phase>install</phase>
<goals>
<!--<goal>build</goal>-->
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
@ -169,11 +163,15 @@
<inline>
<files>
<file>
<source>${project.build.directory}/${project.build.finalName}.jar</source>
<source>
${project.build.directory}/${project.build.finalName}.jar
</source>
<outputDirectory>.</outputDirectory>
</file>
<file>
<source>${project.basedir}/apm-agent/elastic-apm-agent-1.45.0.jar</source>
<source>
${project.basedir}/apm-agent/elastic-apm-agent-1.45.0.jar
</source>
<outputDirectory>.</outputDirectory>
</file>
<file>
@ -192,6 +190,12 @@
<source>${project.basedir}/signal-package.xsd</source>
<outputDirectory>.</outputDirectory>
</file>
<file>
<source>
${project.basedir}/ca_nbki.cer
</source>
<outputDirectory>.</outputDirectory>
</file>
</files>
</inline>
</assembly>
@ -204,7 +208,6 @@
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
</profiles>

View file

@ -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;
}

View file

@ -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();

View file

@ -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;

View file

@ -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;

View file

@ -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;
}

View file

@ -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)

View file

@ -63,7 +63,7 @@ public class MonitoringReportErrors {
public static class P {
@XmlAttribute(name = "uid")
protected Integer uid;
protected Long uid;
@XmlValue
protected String value;

View file

@ -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<Inquiry> inquiries;

View file

@ -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;
}

View file

@ -2,6 +2,7 @@ package ru.nbch.credit_tracker.enums;
public enum XmlErrorFormat {
MonitoringActivePackagesError,
MonitoringAllPackagesError,
MonitoringDownloadError,
MonitoringError,
MonitoringPackageDeleteError,

View file

@ -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<String, String> 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<UserPackage> 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);
}
}

View file

@ -11,11 +11,11 @@ import java.util.List;
@Mapper
public interface PhoneFidMapMapper {
void registerSubjects(@Param("subjects") List<Subject> subjects, @Param("packageId") Integer packageId);
void register(@Param("phoneFidMap") List<PhoneFidMap> phoneFidMap, @Param("packageId") Integer packageId);
void registerSubjects(@Param("subjects") List<Subject> subjects, @Param("packageId") Long packageId);
void register(@Param("phoneFidMap") List<PhoneFidMap> phoneFidMap, @Param("packageId") Long packageId);
void registerWithId(@Param("phoneFidMap") List<PhoneFidMap> phoneFidMap);
List<PhoneFidMap> findFullPhoneFidMap(@Param("packageId") Integer packageId, @Param("offset") int offset, @Param("limit") int limit);
List<PhoneFidMap> findFullPhoneFidMap(@Param("packageId") Long packageId, @Param("offset") int offset, @Param("limit") int limit);
void updatePhoneFidMaps(@Param("subjects") Collection<PhoneFidMap> subjects);
void updateOne(@Param("subject") PhoneFidMap subject);
@ -23,7 +23,7 @@ public interface PhoneFidMapMapper {
void updatePhoneFidMapsErrors(@Param("subjects") List<PhoneFidMap> 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);
}

View file

@ -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<UserPackage> findUserPackages(@Param("userId") String userId, @Param("statuses") List<String> status);

View file

@ -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);

View file

@ -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);
}

View file

@ -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<PhoneFidMap> batch;
do {
@ -139,7 +139,7 @@ public class SignalService {
/**
* Обрабатывает все PhoneFidMap по packageId, выгружая их пачками и фильтруя по переданному фильтру
*/
public UpdateResult updateSubjects(Integer packageId, Predicate<PhoneFidMap> filter) {
public UpdateResult updateSubjects(Long packageId, Predicate<PhoneFidMap> 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<Integer, PhoneFidMap> fidsMap, Integer packageId) {
public boolean updateFlags(Map<Integer, PhoneFidMap> fidsMap, Long packageId) {
log.info("Start calculating flags for subjects batch. PackageId: {}", packageId);
Map<Integer, FlagsService.FlagsData> flagsDataMap = flagsService.findFlags(fidsMap.keySet().stream().toList());
List<PhoneFidMap> subjectToUpdate = new ArrayList<>();
@ -246,16 +246,20 @@ public class SignalService {
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<List<Person>> writer) {
private void buildPersons(Long packageId, Consumer<List<Person>> writer) {
int offset = 0;
List<PhoneFidMap> 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);
}

View file

@ -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()) {

View file

@ -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<PhoneFidMap> 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);

View file

@ -22,14 +22,15 @@ public class PhoneFidMapService {
this.sqlSessionFactory = sqlSessionFactory;
}
public void registerSubjects(List<Subject> subjects, Integer packageId) {
public void registerSubjects(List<Subject> subjects, Long packageId) {
mapper.registerSubjects(subjects, packageId);
}
public void register(List<PhoneFidMap> phoneFidMap, Integer packageId) {
public void register(List<PhoneFidMap> phoneFidMap, Long packageId) {
mapper.register(phoneFidMap, packageId);
}
public List<PhoneFidMap> findFullPhoneFidMap(Integer packageId, int offset, int limit) {
public List<PhoneFidMap> 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);
}
}

View file

@ -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 путь к разархивированному файлу. Пример: <loadDir>/tmp_folder/<package_id>/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 путь к разархивированному файлу. Пример: <loadDir>/tmp_folder/<package_id>/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<byte[]> response, Integer packageId, String reportName) {
private String unzipReport(ResponseEntity<byte[]> response, Long packageId, String reportName) {
boolean isGzipped = response.getHeaders().getContentType() != null
&& response.getHeaders().getContentType().toString().equals("application/x-gzip");

View file

@ -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);
}

View file

@ -55,7 +55,7 @@ public class MonitoringReportErrorsStaxtReader extends BaseStaxReader<Monitoring
switch (reader.getAttributeLocalName(i)) {
case "uid" -> {
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);

View file

@ -46,7 +46,7 @@ public class OnlineDownloadReportPersonsStaxReader extends BaseStaxReader<Person
switch (reader.getAttributeLocalName(i)) {
case "uid" -> {
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);

View file

@ -13,6 +13,7 @@
<result property="status" column="status"/>
<result property="deactivatedAt" column="deactivated_at"/>
<result property="lastDownloadedReport" column="last_downloaded_report"/>
<result property="monitoringAt" column="monitoring_at"/>
</resultMap>
<select id="isPackageNotUnique" resultType="boolean">
@ -51,7 +52,7 @@
#{previousStatus}
</update>
<select id="insertPackage" resultType="java.lang.Integer"
<select id="insertPackage" resultType="java.lang.Long"
parameterType="ru.nbch.credit_tracker.entities.dto.UserPackage">
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>
<update id="updatePackageOnMonitoringSuccess">
UPDATE signals_user_packages
SET monitoring_at = #{monitoringAt}, status = 'ON_MONITORING'
WHERE id = #{id}
</update>
<select id="findPackage" resultMap="packageDataResultMap"
resultType="ru.nbch.credit_tracker.entities.dto.UserPackage">
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 id = #{id}
LIMIT 1
@ -79,7 +86,7 @@
<select id="findUserPackages" resultMap="packageDataResultMap"
resultType="ru.nbch.credit_tracker.entities.dto.UserPackage">
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="findAllPackagesByUserId" resultMap="packageDataResultMap"
resultType="ru.nbch.credit_tracker.entities.dto.UserPackage">
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}
@ -99,7 +106,7 @@
<select id="findAllPackagesByStatus" resultMap="packageDataResultMap"
resultType="ru.nbch.credit_tracker.entities.dto.UserPackage">
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}
</select>

View file

@ -0,0 +1,2 @@
alter table signals_phone_fid_map
add error_text text;

View file

@ -0,0 +1,2 @@
alter table signals_user_packages
add "monitoring_at" timestamp;

View file

@ -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;