etreschenkov 2026-01-16 15:29:15 +03:00
parent 477a515244
commit 7513cf91b3
8 changed files with 36 additions and 39 deletions

View file

@ -8,7 +8,6 @@ import ru.nbch.credit_tracker.entities.external_request.signals.Person;
import ru.nbch.credit_tracker.model.IdData;
import ru.nbch.credit_tracker.model.NameData;
import ru.nbch.credit_tracker.model.SubjectProfile;
import ru.nbch.credit_tracker.utils.CTUtil;
@Slf4j
public class PersonFactoryBuilderV2 {
@ -85,24 +84,4 @@ public class PersonFactoryBuilderV2 {
person.setInqPurpose(INQ_PURPOSE);
return person;
}
private String getPn(String serNum, String idNum) {
String normSerNum = CTUtil.normalize(serNum);
String normIdNum = CTUtil.normalize(idNum);
return StringUtils.isNotBlank(normSerNum) ? normSerNum + normIdNum : normIdNum;
}
private String getDt(String idType, String idType2) {
if (StringUtils.isNotBlank(idType2)) {
return idType2;
} else {
return switch (idType) {
case "21" -> "21";
default -> {
log.warn("ID_TYPE2 is blank and no matching found for ID_TYPE {}", idType);
yield "";
}
};
}
}
}

View file

@ -36,6 +36,8 @@ public class PipelineStarterConfig {
new KickPipeLineDefaultImpl(setupParam, userPackageMapper, packageRecordsService, creditTrackerSettings);
case REPEATED_RESTORE ->
new KickPipeLineRepeatedRestoreImpl(setupParam, userPackageMapper, packageRecordsService, creditTrackerSettings);
case MAKE_XML_BY_REPEATED ->
new KickPipeLineRepeatedRestoreImpl(setupParam, userPackageMapper, packageRecordsService, creditTrackerSettings);
case RECALC_PERSONAL_DATA ->
new KickRecalcPipeLine(setupParam, userPackageMapper, phonesMapMapper, packageRecordsService, creditTrackerSettings);
};

View file

@ -7,6 +7,7 @@ import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.service.task.Pipeline;
import ru.nbch.credit_tracker.service.task.PipelinePackageFabric;
import ru.nbch.credit_tracker.service.task.PipelinePackageOrchestrator;
import ru.nbch.credit_tracker.service.task.PipelineRecalcPDOrchestrator;
import ru.nbch.credit_tracker.service.task.SetupParam;
import ru.nbch.credit_tracker.service.task.impl.PipelineMode;
@ -17,12 +18,15 @@ import ru.nbch.credit_tracker.service.task.impl.PipelineMode;
public class UpdatingFidAndPdService {
private final PipelinePackageFabric pipelinePackageManager;
private final PipelineRecalcPDOrchestrator pipelineRecalcPDOrchestrator;
private final PipelinePackageOrchestrator pipelinePackageOrchestrator;
public UpdatingFidAndPdService(CreditTrackerSettings config,
PipelinePackageFabric pipelinePackageManager,
PipelineRecalcPDOrchestrator pipelineRecalcPDOrchestrator) {
PipelineRecalcPDOrchestrator pipelineRecalcPDOrchestrator,
PipelinePackageOrchestrator pipelinePackageOrchestrator) {
this.pipelinePackageManager = pipelinePackageManager;
this.pipelineRecalcPDOrchestrator = pipelineRecalcPDOrchestrator;
this.pipelinePackageOrchestrator = pipelinePackageOrchestrator;
}
@Scheduled(cron = "${ct.update-fid-cron-expression}")
@ -30,7 +34,15 @@ public class UpdatingFidAndPdService {
log.info("Start updating fids and PD");
try {
Pipeline pipeline = pipelinePackageManager.buildRecalculationPD(new SetupParam(null, null, PipelineMode.RECALC_PERSONAL_DATA));
pipelineRecalcPDOrchestrator.startOrReject(pipeline);
pipelineRecalcPDOrchestrator.startOrReject(pipeline, () -> {
SetupParam setupParam = new SetupParam(null, null, PipelineMode.MAKE_XML_BY_REPEATED);
try {
Pipeline makeXmlByCache = pipelinePackageManager.build(setupParam);
pipelinePackageOrchestrator.startOrDelay(makeXmlByCache, null);
} catch (Exception e) {
log.error("Failed to build pipeline", e);
}
});
} catch (Exception e) {
log.error("Failed to build pipeline", e);
}

View file

@ -80,6 +80,7 @@ public class PipelinePackageFabric implements InitializingBean {
public Pipeline build(SetupParam setupParam) throws Exception {
return PipeLineBuilderV2.first(nameEnricherQueueFactory.getObject(), idEnricherQueueFactory.getObject())
.handler(fidNameEnricher)
.handlerResult(flagsEnricherV2)
.andThen()
.stage(sendSignalQueueFactory.getObject())
.handler(fidIdEnricherHandler)

View file

@ -7,7 +7,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.model.impl.EmptyTerminatePayload;
import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
@Service
@ -25,7 +24,7 @@ public class PipelineRecalcPDOrchestrator {
this.semaphore = new Semaphore(1);
}
public void startOrReject(Pipeline pipeline) {
public void startOrReject(Pipeline pipeline, Runnable after) {
synchronized (lock) {
if (!semaphore.tryAcquire()) {
log.debug("couldn't acquire permit from semaphore. task rejected...");
@ -33,13 +32,13 @@ public class PipelineRecalcPDOrchestrator {
}
log.info("throttler permits after acquire: {}", semaphore.availablePermits());
}
innerStart(pipeline);
innerStart(pipeline, after);
}
private void innerStart(Pipeline pipeline) {
private void innerStart(Pipeline pipeline, Runnable after) {
try {
pipeline.start(pipelineExecutorService);
addCallback(pipeline);
addCallback(pipeline, after);
} catch (Exception e) {
log.error(ExceptionUtils.getStackTrace(e));
pipeline.close();
@ -47,7 +46,7 @@ public class PipelineRecalcPDOrchestrator {
}
}
private void addCallback(Pipeline pipeline) {
private void addCallback(Pipeline pipeline, Runnable after) {
pipeline.getTerminator()
.doneFuture()
.orTimeout(creditTrackerSettings.getPipeline().globalTimeout().toMillis(), TimeUnit.MILLISECONDS)
@ -55,7 +54,7 @@ public class PipelineRecalcPDOrchestrator {
try {
long finishTime = System.currentTimeMillis();
log.info("pipeline time passed: {} ms", finishTime - pipeline.getStartTime());
EmptyTerminatePayload res = (EmptyTerminatePayload) v;
after.run();
} catch (Exception ex) {
log.error("pipeline finished with error{}", ExceptionUtils.getStackTrace(ex));
} finally {

View file

@ -9,5 +9,6 @@ public enum PipelineMode {
DEFAULT,
RESTORE,
REPEATED_RESTORE,
RECALC_PERSONAL_DATA
RECALC_PERSONAL_DATA,
MAKE_XML_BY_REPEATED
}

View file

@ -73,16 +73,20 @@ public class CTUtil {
}
}
public static String normalize(String value) {
public static String normalize(String value, String idType, String idType2) {
if (StringUtils.isBlank(value)) {
return null;
}
if (idType.equals("21") || idType2.equals("21")) {
return value.replaceAll("[^0-9]", "");
} else {
return value.replaceAll("[^А-Яа-яA-Za-z0-9]", "");
}
}
public static String normalizePassport(Id id) {
String normSerNum = normalize(id.getSerNum());
String normIdNum = normalize(id.getIdNum());
String normSerNum = normalize(id.getSerNum(), id.getIdType(), id.getIdType2());
String normIdNum = normalize(id.getIdNum(), id.getIdType(), id.getIdType2());
return StringUtils.isNotBlank(normSerNum) ? normSerNum + normIdNum : normIdNum;
}

View file

@ -1,14 +1,13 @@
package ru.nbch.credit_tracker.utils;
import java.time.LocalDateTime;
import java.util.stream.Stream;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDateTime;
import java.util.stream.Stream;
@SpringBootTest
public class CTUtilTest {
@ -155,6 +154,6 @@ public class CTUtilTest {
@ParameterizedTest(name = "[{index}] STR: [ {0} ] EXPECTED: [ {1} ]")
@MethodSource("normalizingTestCases")
void normalizeTest(String str, String expected) {
Assertions.assertEquals(expected, CTUtil.normalize(str));
Assertions.assertEquals(expected, CTUtil.normalize(str, "21", "21"));
}
}