etreschenkov 2025-12-16 16:30:35 +03:00
parent 3bdb16f8ef
commit a9f9588258
8 changed files with 45 additions and 28 deletions

View file

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

View file

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

View file

@ -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,9 +9,6 @@ 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
@ -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);

View file

@ -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<Name> names = phoneRepository.findNameByPhones(phones);
return names.stream()
.filter(name ->
StringUtils.isNotEmpty(name.getFirst()) &&
StringUtils.isNotEmpty(name.getLast())
)
.collect(Collectors.toMap(
Name::getNumber,
Function.identity(),

View file

@ -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 путь к разархивированному файлу. Пример: <loadDir>/tmp_folder/<package_id>/0001XX_MY_BATCH_204.1.online.2025-07-08T20-00-46.xml.gz.xml
*/
public Optional<Path> downloadReport(UserPackage userPackage, String reportName) {
public Optional<Path> 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);

View file

@ -30,17 +30,20 @@
<insert id="updateCalcFlags" parameterType="string">
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;

View file

@ -6,10 +6,10 @@
<mapper namespace="ru.nbch.credit_tracker.mapper.signal.HitsMapper">
<insert id="insertHits" parameterType="java.util.List">
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
<foreach collection="hits" item="hit" separator=",">
(#{hit.packageId}, #{hit.subjectId}, #{hit.signalType}, #{hit.responseSentAt}, #{hit.reportFileName})
(#{hit.packageId}, #{hit.subjectId}, #{hit.phone}, #{hit.signalType}, #{hit.responseSentAt}, #{hit.reportFileName})
</foreach>
</insert>

View file

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