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; package ru.nbch.credit_tracker.entities.app;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder @Builder
public class FlagDetail { public class FlagDetail {
private Long id; private Long id;

View file

@ -1,14 +1,15 @@
package ru.nbch.credit_tracker.entities.app; package ru.nbch.credit_tracker.entities.app;
import java.time.LocalDateTime;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.time.LocalDateTime;
@Getter @Getter
@Setter @Setter
//@Builder
public class Hit { public class Hit {
private Long id; private Long id;
private Long phone;
private Long packageId; private Long packageId;
private String subjectId; private String subjectId;
private Integer signalType; private Integer signalType;

View file

@ -1,5 +1,6 @@
package ru.nbch.credit_tracker.service; package ru.nbch.credit_tracker.service;
import java.util.regex.Pattern;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.mdc.SetAndClearMdc; 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.SignalError;
import ru.nbch.credit_tracker.enums.XmlErrorFormat; import ru.nbch.credit_tracker.enums.XmlErrorFormat;
import ru.nbch.credit_tracker.exceptions.SignalClientException; import ru.nbch.credit_tracker.exceptions.SignalClientException;
import java.util.regex.Pattern;
import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.clientExcp; import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.clientExcp;
@Slf4j @Slf4j

View file

@ -10,6 +10,7 @@ import java.util.function.BinaryOperator;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.entities.app.PhoneFidMap; import ru.nbch.credit_tracker.entities.app.PhoneFidMap;
import ru.nbch.credit_tracker.entities.indic.Name; import ru.nbch.credit_tracker.entities.indic.Name;
@ -56,6 +57,10 @@ public class PhoneService2 {
List<Name> names = phoneRepository.findNameByPhones(phones); List<Name> names = phoneRepository.findNameByPhones(phones);
return names.stream() return names.stream()
.filter(name ->
StringUtils.isNotEmpty(name.getFirst()) &&
StringUtils.isNotEmpty(name.getLast())
)
.collect(Collectors.toMap( .collect(Collectors.toMap(
Name::getNumber, Name::getNumber,
Function.identity(), Function.identity(),

View file

@ -1,6 +1,7 @@
package ru.nbch.credit_tracker.service.signal; package ru.nbch.credit_tracker.service.signal;
import jakarta.xml.bind.DatatypeConverter; import jakarta.xml.bind.DatatypeConverter;
import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; 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 * @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; String url = DOWNLOAD_ONLINE_REPORT_URI + "?fNameReport=" + reportName;
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
@ -290,8 +291,10 @@ public class SignalRestService {
); );
Path targetFilePathWithExt = null; Path targetFilePathWithExt = null;
if (response.getHeaders().getContentType().equals(MEDIA_TYPE_GZIP)) { if (response.getHeaders().getContentType().equals(MEDIA_TYPE_GZIP)) {
targetFilePathWithExt = Path.of(config.getLoadDir(), Path folder = Path.of(config.getLoadDir(),
"tmp", userPackage.getUserId().substring(0, 6), userPackage.getPackageName(), reportName + ".xml"); "tmp", userPackage.getUserId(), userPackage.getPackageName());
Files.createDirectories(folder);
targetFilePathWithExt = folder.resolve(reportName + ".xml");
ZipUtils.unpackGzip(targetFilePathWithExt, response.getBody()); ZipUtils.unpackGzip(targetFilePathWithExt, response.getBody());
} else if (isXmlError(response.getBody())){ } else if (isXmlError(response.getBody())){
SgnlReport error = staxProcessor.read(response.getBody(), SgnlReport.class); SgnlReport error = staxProcessor.read(response.getBody(), SgnlReport.class);

View file

@ -30,17 +30,20 @@
<insert id="updateCalcFlags" parameterType="string"> <insert id="updateCalcFlags" parameterType="string">
INSERT INTO signals_flags 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 SELECT map_id, fid, flag_debt5000, flag_90_12, calculated_at
FROM json_to_recordset(#{json}::json) AS t( FROM json_to_recordset(#{json}::json) AS t(
map_id bigint, map_id bigint,
subject_id varchar(255),
fid int, fid int,
phone text,
flag_debt5000 smallint, flag_debt5000 smallint,
flag_90_12 smallint, flag_90_12 smallint,
calculated_at timestamp) calculated_at timestamp)
ON CONFLICT (map_id) DO UPDATE ON CONFLICT (map_id) DO UPDATE
SET SET subject_id = EXCLUDED.subject_id,
fid = EXCLUDED.fid, fid = EXCLUDED.fid,
phone = EXCLUDED.phone,
flag_debt5000 = EXCLUDED.flag_debt5000, flag_debt5000 = EXCLUDED.flag_debt5000,
flag_90_12 = EXCLUDED.flag_90_12, flag_90_12 = EXCLUDED.flag_90_12,
calculated_at = EXCLUDED.calculated_at; calculated_at = EXCLUDED.calculated_at;

View file

@ -6,10 +6,10 @@
<mapper namespace="ru.nbch.credit_tracker.mapper.signal.HitsMapper"> <mapper namespace="ru.nbch.credit_tracker.mapper.signal.HitsMapper">
<insert id="insertHits" parameterType="java.util.List"> <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 values
<foreach collection="hits" item="hit" separator=","> <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> </foreach>
</insert> </insert>

View file

@ -11,6 +11,9 @@ alter table signals_user_packages
alter table signals_phone_fid_map alter table signals_phone_fid_map
add SEARCHED_AT timestamp; add SEARCHED_AT timestamp;
alter table signals_hits
add PHONE bigint;
CREATE TABLE signals_flags ( CREATE TABLE signals_flags (
ID SERIAL PRIMARY KEY, ID SERIAL PRIMARY KEY,