This commit is contained in:
parent
477a515244
commit
7513cf91b3
8 changed files with 36 additions and 39 deletions
|
|
@ -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.IdData;
|
||||||
import ru.nbch.credit_tracker.model.NameData;
|
import ru.nbch.credit_tracker.model.NameData;
|
||||||
import ru.nbch.credit_tracker.model.SubjectProfile;
|
import ru.nbch.credit_tracker.model.SubjectProfile;
|
||||||
import ru.nbch.credit_tracker.utils.CTUtil;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class PersonFactoryBuilderV2 {
|
public class PersonFactoryBuilderV2 {
|
||||||
|
|
@ -85,24 +84,4 @@ public class PersonFactoryBuilderV2 {
|
||||||
person.setInqPurpose(INQ_PURPOSE);
|
person.setInqPurpose(INQ_PURPOSE);
|
||||||
return person;
|
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 "";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,8 @@ public class PipelineStarterConfig {
|
||||||
new KickPipeLineDefaultImpl(setupParam, userPackageMapper, packageRecordsService, creditTrackerSettings);
|
new KickPipeLineDefaultImpl(setupParam, userPackageMapper, packageRecordsService, creditTrackerSettings);
|
||||||
case REPEATED_RESTORE ->
|
case REPEATED_RESTORE ->
|
||||||
new KickPipeLineRepeatedRestoreImpl(setupParam, userPackageMapper, packageRecordsService, creditTrackerSettings);
|
new KickPipeLineRepeatedRestoreImpl(setupParam, userPackageMapper, packageRecordsService, creditTrackerSettings);
|
||||||
|
case MAKE_XML_BY_REPEATED ->
|
||||||
|
new KickPipeLineRepeatedRestoreImpl(setupParam, userPackageMapper, packageRecordsService, creditTrackerSettings);
|
||||||
case RECALC_PERSONAL_DATA ->
|
case RECALC_PERSONAL_DATA ->
|
||||||
new KickRecalcPipeLine(setupParam, userPackageMapper, phonesMapMapper, packageRecordsService, creditTrackerSettings);
|
new KickRecalcPipeLine(setupParam, userPackageMapper, phonesMapMapper, packageRecordsService, creditTrackerSettings);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import org.springframework.stereotype.Service;
|
||||||
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
||||||
import ru.nbch.credit_tracker.service.task.Pipeline;
|
import ru.nbch.credit_tracker.service.task.Pipeline;
|
||||||
import ru.nbch.credit_tracker.service.task.PipelinePackageFabric;
|
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.PipelineRecalcPDOrchestrator;
|
||||||
import ru.nbch.credit_tracker.service.task.SetupParam;
|
import ru.nbch.credit_tracker.service.task.SetupParam;
|
||||||
import ru.nbch.credit_tracker.service.task.impl.PipelineMode;
|
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 {
|
public class UpdatingFidAndPdService {
|
||||||
private final PipelinePackageFabric pipelinePackageManager;
|
private final PipelinePackageFabric pipelinePackageManager;
|
||||||
private final PipelineRecalcPDOrchestrator pipelineRecalcPDOrchestrator;
|
private final PipelineRecalcPDOrchestrator pipelineRecalcPDOrchestrator;
|
||||||
|
private final PipelinePackageOrchestrator pipelinePackageOrchestrator;
|
||||||
|
|
||||||
public UpdatingFidAndPdService(CreditTrackerSettings config,
|
public UpdatingFidAndPdService(CreditTrackerSettings config,
|
||||||
PipelinePackageFabric pipelinePackageManager,
|
PipelinePackageFabric pipelinePackageManager,
|
||||||
PipelineRecalcPDOrchestrator pipelineRecalcPDOrchestrator) {
|
PipelineRecalcPDOrchestrator pipelineRecalcPDOrchestrator,
|
||||||
|
PipelinePackageOrchestrator pipelinePackageOrchestrator) {
|
||||||
this.pipelinePackageManager = pipelinePackageManager;
|
this.pipelinePackageManager = pipelinePackageManager;
|
||||||
this.pipelineRecalcPDOrchestrator = pipelineRecalcPDOrchestrator;
|
this.pipelineRecalcPDOrchestrator = pipelineRecalcPDOrchestrator;
|
||||||
|
this.pipelinePackageOrchestrator = pipelinePackageOrchestrator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Scheduled(cron = "${ct.update-fid-cron-expression}")
|
@Scheduled(cron = "${ct.update-fid-cron-expression}")
|
||||||
|
|
@ -30,7 +34,15 @@ public class UpdatingFidAndPdService {
|
||||||
log.info("Start updating fids and PD");
|
log.info("Start updating fids and PD");
|
||||||
try {
|
try {
|
||||||
Pipeline pipeline = pipelinePackageManager.buildRecalculationPD(new SetupParam(null, null, PipelineMode.RECALC_PERSONAL_DATA));
|
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) {
|
} catch (Exception e) {
|
||||||
log.error("Failed to build pipeline", e);
|
log.error("Failed to build pipeline", e);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@ public class PipelinePackageFabric implements InitializingBean {
|
||||||
public Pipeline build(SetupParam setupParam) throws Exception {
|
public Pipeline build(SetupParam setupParam) throws Exception {
|
||||||
return PipeLineBuilderV2.first(nameEnricherQueueFactory.getObject(), idEnricherQueueFactory.getObject())
|
return PipeLineBuilderV2.first(nameEnricherQueueFactory.getObject(), idEnricherQueueFactory.getObject())
|
||||||
.handler(fidNameEnricher)
|
.handler(fidNameEnricher)
|
||||||
|
.handlerResult(flagsEnricherV2)
|
||||||
.andThen()
|
.andThen()
|
||||||
.stage(sendSignalQueueFactory.getObject())
|
.stage(sendSignalQueueFactory.getObject())
|
||||||
.handler(fidIdEnricherHandler)
|
.handler(fidIdEnricherHandler)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
||||||
import ru.nbch.credit_tracker.model.impl.EmptyTerminatePayload;
|
|
||||||
import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
|
import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
|
@ -25,7 +24,7 @@ public class PipelineRecalcPDOrchestrator {
|
||||||
this.semaphore = new Semaphore(1);
|
this.semaphore = new Semaphore(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startOrReject(Pipeline pipeline) {
|
public void startOrReject(Pipeline pipeline, Runnable after) {
|
||||||
synchronized (lock) {
|
synchronized (lock) {
|
||||||
if (!semaphore.tryAcquire()) {
|
if (!semaphore.tryAcquire()) {
|
||||||
log.debug("couldn't acquire permit from semaphore. task rejected...");
|
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());
|
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 {
|
try {
|
||||||
pipeline.start(pipelineExecutorService);
|
pipeline.start(pipelineExecutorService);
|
||||||
addCallback(pipeline);
|
addCallback(pipeline, after);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(ExceptionUtils.getStackTrace(e));
|
log.error(ExceptionUtils.getStackTrace(e));
|
||||||
pipeline.close();
|
pipeline.close();
|
||||||
|
|
@ -47,7 +46,7 @@ public class PipelineRecalcPDOrchestrator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addCallback(Pipeline pipeline) {
|
private void addCallback(Pipeline pipeline, Runnable after) {
|
||||||
pipeline.getTerminator()
|
pipeline.getTerminator()
|
||||||
.doneFuture()
|
.doneFuture()
|
||||||
.orTimeout(creditTrackerSettings.getPipeline().globalTimeout().toMillis(), TimeUnit.MILLISECONDS)
|
.orTimeout(creditTrackerSettings.getPipeline().globalTimeout().toMillis(), TimeUnit.MILLISECONDS)
|
||||||
|
|
@ -55,7 +54,7 @@ public class PipelineRecalcPDOrchestrator {
|
||||||
try {
|
try {
|
||||||
long finishTime = System.currentTimeMillis();
|
long finishTime = System.currentTimeMillis();
|
||||||
log.info("pipeline time passed: {} ms", finishTime - pipeline.getStartTime());
|
log.info("pipeline time passed: {} ms", finishTime - pipeline.getStartTime());
|
||||||
EmptyTerminatePayload res = (EmptyTerminatePayload) v;
|
after.run();
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
log.error("pipeline finished with error{}", ExceptionUtils.getStackTrace(ex));
|
log.error("pipeline finished with error{}", ExceptionUtils.getStackTrace(ex));
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
||||||
|
|
@ -9,5 +9,6 @@ public enum PipelineMode {
|
||||||
DEFAULT,
|
DEFAULT,
|
||||||
RESTORE,
|
RESTORE,
|
||||||
REPEATED_RESTORE,
|
REPEATED_RESTORE,
|
||||||
RECALC_PERSONAL_DATA
|
RECALC_PERSONAL_DATA,
|
||||||
|
MAKE_XML_BY_REPEATED
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)) {
|
if (StringUtils.isBlank(value)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return value.replaceAll("[^0-9]", "");
|
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) {
|
public static String normalizePassport(Id id) {
|
||||||
String normSerNum = normalize(id.getSerNum());
|
String normSerNum = normalize(id.getSerNum(), id.getIdType(), id.getIdType2());
|
||||||
String normIdNum = normalize(id.getIdNum());
|
String normIdNum = normalize(id.getIdNum(), id.getIdType(), id.getIdType2());
|
||||||
return StringUtils.isNotBlank(normSerNum) ? normSerNum + normIdNum : normIdNum;
|
return StringUtils.isNotBlank(normSerNum) ? normSerNum + normIdNum : normIdNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,13 @@
|
||||||
package ru.nbch.credit_tracker.utils;
|
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.api.Assertions;
|
||||||
import org.junit.jupiter.params.ParameterizedTest;
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
import org.junit.jupiter.params.provider.Arguments;
|
import org.junit.jupiter.params.provider.Arguments;
|
||||||
import org.junit.jupiter.params.provider.MethodSource;
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
public class CTUtilTest {
|
public class CTUtilTest {
|
||||||
|
|
||||||
|
|
@ -155,6 +154,6 @@ public class CTUtilTest {
|
||||||
@ParameterizedTest(name = "[{index}] STR: [ {0} ] EXPECTED: [ {1} ]")
|
@ParameterizedTest(name = "[{index}] STR: [ {0} ] EXPECTED: [ {1} ]")
|
||||||
@MethodSource("normalizingTestCases")
|
@MethodSource("normalizingTestCases")
|
||||||
void normalizeTest(String str, String expected) {
|
void normalizeTest(String str, String expected) {
|
||||||
Assertions.assertEquals(expected, CTUtil.normalize(str));
|
Assertions.assertEquals(expected, CTUtil.normalize(str, "21", "21"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue