From a9f958825881eb52820b21e6cf8127be65d03354 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 16 Dec 2025 16:30:35 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/BKI-3308 --- .../entities/app/FlagDetail.java | 4 +++ .../nbch/credit_tracker/entities/app/Hit.java | 5 ++-- .../service/ValidationService.java | 16 ++++++------ .../service/indic/PhoneService2.java | 25 +++++++++++-------- .../service/signal/SignalRestService.java | 9 ++++--- .../mapper/signal/FlagDetailMapper.xml | 7 ++++-- .../mybatis/mapper/signal/HitsMapper.xml | 4 +-- src/main/resources/sql/v2.21.ddl | 3 +++ 8 files changed, 45 insertions(+), 28 deletions(-) diff --git a/src/main/java/ru/nbch/credit_tracker/entities/app/FlagDetail.java b/src/main/java/ru/nbch/credit_tracker/entities/app/FlagDetail.java index 9c61b94..6c585a8 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/app/FlagDetail.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/app/FlagDetail.java @@ -1,12 +1,16 @@ package ru.nbch.credit_tracker.entities.app; import java.time.LocalDateTime; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; @Getter @Setter +@NoArgsConstructor +@AllArgsConstructor @Builder public class FlagDetail { private Long id; diff --git a/src/main/java/ru/nbch/credit_tracker/entities/app/Hit.java b/src/main/java/ru/nbch/credit_tracker/entities/app/Hit.java index 9dd566c..9a7630b 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/app/Hit.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/app/Hit.java @@ -1,14 +1,15 @@ package ru.nbch.credit_tracker.entities.app; +import java.time.LocalDateTime; import lombok.Getter; import lombok.Setter; -import java.time.LocalDateTime; - @Getter @Setter +//@Builder public class Hit { private Long id; + private Long phone; private Long packageId; private String subjectId; private Integer signalType; diff --git a/src/main/java/ru/nbch/credit_tracker/service/ValidationService.java b/src/main/java/ru/nbch/credit_tracker/service/ValidationService.java index edeb6c4..f21e7f1 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/ValidationService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/ValidationService.java @@ -1,5 +1,6 @@ package ru.nbch.credit_tracker.service; +import java.util.regex.Pattern; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import ru.nbch.credit_tracker.config.mdc.SetAndClearMdc; @@ -8,18 +9,15 @@ import ru.nbch.credit_tracker.entities.user_request.monitoring_request.Subject; import ru.nbch.credit_tracker.enums.SignalError; import ru.nbch.credit_tracker.enums.XmlErrorFormat; import ru.nbch.credit_tracker.exceptions.SignalClientException; - -import java.util.regex.Pattern; - import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.clientExcp; @Slf4j @Service public class ValidationService { - private static final String phoneRegex = "^\\d{9}$"; - private static final String packageNameRegex = "^[A-Z0-9_]{1,22}$"; - private static final String npIdRegex = "^\\S{1,36}$"; + private static final String phoneRegex = "^\\d{9}$"; + private static final String packageNameRegex = "^[A-Z0-9_]{1,22}$"; + private static final String npIdRegex = "^\\S{1,36}$"; @SetAndClearMdc public void validateMonitoringRequest(MonitoringRequest request) throws SignalClientException { @@ -64,21 +62,21 @@ public class ValidationService { } private static boolean validatePhone(String input) { - if(input == null) { + if (input == null) { return false; } return Pattern.matches(phoneRegex, input); } private static boolean validatePackageName(String input) { - if(input == null) { + if (input == null) { return false; } return Pattern.matches(packageNameRegex, input); } private static boolean validateNPId(String input) { - if(input == null) { + if (input == null) { return false; } return Pattern.matches(npIdRegex, input); diff --git a/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService2.java b/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService2.java index 17d22eb..7feeb2b 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService2.java +++ b/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService2.java @@ -10,6 +10,7 @@ import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import ru.nbch.credit_tracker.entities.app.PhoneFidMap; import ru.nbch.credit_tracker.entities.indic.Name; @@ -56,6 +57,10 @@ public class PhoneService2 { List names = phoneRepository.findNameByPhones(phones); return names.stream() + .filter(name -> + StringUtils.isNotEmpty(name.getFirst()) && + StringUtils.isNotEmpty(name.getLast()) + ) .collect(Collectors.toMap( Name::getNumber, Function.identity(), @@ -121,16 +126,16 @@ public class PhoneService2 { public void registerSignals(List subjects) { try { - //регистрация в signals_flags - апдейтим при FlagsEnricher - String jsonFlagDetail = entityToJsonMapper.writeValueAsString(subjects.stream() - .filter(phoneFidMap -> phoneFidMap.getFid() != null) - .map(subject -> new HashMap() {{ - put("subject_id", subject.getSubjectId()); - put("fid", subject.getFid()); - put("phone", subject.getPhone()); - put("map_id", subject.getId()); - }}).toList()); - flagDetailMapper.updateCalcFlags(jsonFlagDetail); + //регистрация в signals_flags - апдейтим при FlagsEnricher + String jsonFlagDetail = entityToJsonMapper.writeValueAsString(subjects.stream() + .filter(phoneFidMap -> phoneFidMap.getFid() != null) + .map(subject -> new HashMap() {{ + put("subject_id", subject.getSubjectId()); + put("fid", subject.getFid()); + put("phone", subject.getPhone()); + put("map_id", subject.getId()); + }}).toList()); + flagDetailMapper.updateCalcFlags(jsonFlagDetail); } catch (JsonProcessingException e) { throw new RuntimeException(e); } 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 36e1c60..c81fadf 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 @@ -1,6 +1,7 @@ package ru.nbch.credit_tracker.service.signal; import jakarta.xml.bind.DatatypeConverter; +import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; @@ -274,7 +275,7 @@ public class SignalRestService { * * @return путь к разархивированному файлу. Пример: /tmp_folder//0001XX_MY_BATCH_204.1.online.2025-07-08T20-00-46.xml.gz.xml */ - public Optional downloadReport(UserPackage userPackage, String reportName) { + public Optional downloadReport(UserPackage userPackage, String reportName) throws IOException { String url = DOWNLOAD_ONLINE_REPORT_URI + "?fNameReport=" + reportName; HttpHeaders headers = new HttpHeaders(); @@ -290,8 +291,10 @@ public class SignalRestService { ); Path targetFilePathWithExt = null; if (response.getHeaders().getContentType().equals(MEDIA_TYPE_GZIP)) { - targetFilePathWithExt = Path.of(config.getLoadDir(), - "tmp", userPackage.getUserId().substring(0, 6), userPackage.getPackageName(), reportName + ".xml"); + Path folder = Path.of(config.getLoadDir(), + "tmp", userPackage.getUserId(), userPackage.getPackageName()); + Files.createDirectories(folder); + targetFilePathWithExt = folder.resolve(reportName + ".xml"); ZipUtils.unpackGzip(targetFilePathWithExt, response.getBody()); } else if (isXmlError(response.getBody())){ SgnlReport error = staxProcessor.read(response.getBody(), SgnlReport.class); diff --git a/src/main/resources/mybatis/mapper/signal/FlagDetailMapper.xml b/src/main/resources/mybatis/mapper/signal/FlagDetailMapper.xml index d9277a7..f08d22e 100644 --- a/src/main/resources/mybatis/mapper/signal/FlagDetailMapper.xml +++ b/src/main/resources/mybatis/mapper/signal/FlagDetailMapper.xml @@ -30,17 +30,20 @@ INSERT INTO signals_flags - (map_id, fid, flag_debt5000, flag_90_12, calculated_at) + (map_id, subject_id, fid, phone, flag_debt5000, flag_90_12, calculated_at) SELECT map_id, fid, flag_debt5000, flag_90_12, calculated_at FROM json_to_recordset(#{json}::json) AS t( map_id bigint, + subject_id varchar(255), fid int, + phone text, flag_debt5000 smallint, flag_90_12 smallint, calculated_at timestamp) ON CONFLICT (map_id) DO UPDATE - SET + SET subject_id = EXCLUDED.subject_id, fid = EXCLUDED.fid, + phone = EXCLUDED.phone, flag_debt5000 = EXCLUDED.flag_debt5000, flag_90_12 = EXCLUDED.flag_90_12, calculated_at = EXCLUDED.calculated_at; diff --git a/src/main/resources/mybatis/mapper/signal/HitsMapper.xml b/src/main/resources/mybatis/mapper/signal/HitsMapper.xml index 2a64fdb..479586f 100644 --- a/src/main/resources/mybatis/mapper/signal/HitsMapper.xml +++ b/src/main/resources/mybatis/mapper/signal/HitsMapper.xml @@ -6,10 +6,10 @@ - INSERT INTO signals_hits (package_id, subject_id, signal_type, response_sent_at, report_file_name) + INSERT INTO signals_hits (package_id, subject_id, phone, signal_type, response_sent_at, report_file_name) values - (#{hit.packageId}, #{hit.subjectId}, #{hit.signalType}, #{hit.responseSentAt}, #{hit.reportFileName}) + (#{hit.packageId}, #{hit.subjectId}, #{hit.phone}, #{hit.signalType}, #{hit.responseSentAt}, #{hit.reportFileName}) diff --git a/src/main/resources/sql/v2.21.ddl b/src/main/resources/sql/v2.21.ddl index bd33f6e..1e8bffc 100644 --- a/src/main/resources/sql/v2.21.ddl +++ b/src/main/resources/sql/v2.21.ddl @@ -11,6 +11,9 @@ alter table signals_user_packages alter table signals_phone_fid_map add SEARCHED_AT timestamp; +alter table signals_hits + add PHONE bigint; + CREATE TABLE signals_flags ( ID SERIAL PRIMARY KEY,