LP: added subject registration
This commit is contained in:
parent
6767a8c204
commit
3921087946
7 changed files with 166 additions and 23 deletions
|
|
@ -0,0 +1,16 @@
|
||||||
|
package ru.nbch.credit_tracker.entities.app;
|
||||||
|
|
||||||
|
import lombok.*;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public class SignalLegalFidMap {
|
||||||
|
private Long id;
|
||||||
|
private Long packageId;
|
||||||
|
private String subjectId;
|
||||||
|
private Long inn;
|
||||||
|
private Long regNum;
|
||||||
|
}
|
||||||
|
|
@ -151,11 +151,20 @@ public class SignalFacade {
|
||||||
Long packageId = userPackageService.registerPackage(userId, packageName, subjectType, signalTypes);
|
Long packageId = userPackageService.registerPackage(userId, packageName, subjectType, signalTypes);
|
||||||
LogUtil.addMdcLogKey("%s %d".formatted(packageName, packageId));
|
LogUtil.addMdcLogKey("%s %d".formatted(packageName, packageId));
|
||||||
log.info("Package registered. PackageId {}. Status: {}", packageId, Status.ACCEPTED.name());
|
log.info("Package registered. PackageId {}. Status: {}", packageId, Status.ACCEPTED.name());
|
||||||
Pipeline pipeline = pipelinePackageManager.build(new SetupParam(packageId, parsedFilePath, PipelineMode.DEFAULT));
|
|
||||||
pipelineOrchestrator.startOrDelay(() -> {
|
if (subjectType == 1) {
|
||||||
saver.readAndSave(packageId, parsedFilePath);
|
Pipeline pipeline = pipelinePackageManager.build(new SetupParam(packageId, parsedFilePath, PipelineMode.DEFAULT));
|
||||||
CtFileUtils.deleteQuietly(parsedFilePath);
|
pipelineOrchestrator.startOrDelay(() -> {
|
||||||
}, pipeline, packageId);
|
saver.readAndSaveNpPackage(packageId, parsedFilePath);
|
||||||
|
CtFileUtils.deleteQuietly(parsedFilePath);
|
||||||
|
}, pipeline, packageId);
|
||||||
|
} else {
|
||||||
|
Pipeline pipeline = pipelinePackageManager.build(new SetupParam(packageId, parsedFilePath, PipelineMode.DEFAULT));
|
||||||
|
pipelineOrchestrator.startOrDelay(() -> {
|
||||||
|
saver.readAndSaveLpPackage(packageId, parsedFilePath);
|
||||||
|
CtFileUtils.deleteQuietly(parsedFilePath);
|
||||||
|
}, pipeline, packageId);
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
try {
|
try {
|
||||||
Files.delete(parsedFilePath);
|
Files.delete(parsedFilePath);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
package ru.nbch.credit_tracker.mapper.signal;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface LegalsFidMapMapper {
|
||||||
|
|
||||||
|
List<Long> registerJson(@Param("json") String json);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
package ru.nbch.credit_tracker.service.indic;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import ru.nbch.credit_tracker.entities.app.SignalLegalFidMap;
|
||||||
|
import ru.nbch.credit_tracker.mapper.signal.LegalsFidMapMapper;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class LegalsMapService {
|
||||||
|
|
||||||
|
private final LegalsFidMapMapper legalsFidMapMapper;
|
||||||
|
private final ObjectMapper entityToJsonMapper;
|
||||||
|
|
||||||
|
public LegalsMapService(LegalsFidMapMapper legalsFidMapMapper,
|
||||||
|
ObjectMapper entityToJsonMapper) {
|
||||||
|
this.legalsFidMapMapper = legalsFidMapMapper;
|
||||||
|
this.entityToJsonMapper = entityToJsonMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Long> registerSubjects(List<SignalLegalFidMap> subjects) {
|
||||||
|
try {
|
||||||
|
String json = entityToJsonMapper.writeValueAsString(subjects.stream()
|
||||||
|
.map(phoneFidMap -> new HashMap<String, Object>() {{
|
||||||
|
put("subject_id", phoneFidMap.getSubjectId());
|
||||||
|
put("inn", phoneFidMap.getInn());
|
||||||
|
put("reg_num", phoneFidMap.getRegNum());
|
||||||
|
put("package_id", phoneFidMap.getPackageId());
|
||||||
|
}}).toList());
|
||||||
|
return legalsFidMapMapper.registerJson(json);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -78,7 +78,7 @@ public class StartupRestoreService {
|
||||||
log.debug("Try to read and build pipeline for packageId {}; req xml path: {}", userPackage.getId(), xmlReqPath);
|
log.debug("Try to read and build pipeline for packageId {}; req xml path: {}", userPackage.getId(), xmlReqPath);
|
||||||
Pipeline pipeline = pipelinePackageManager.build(new SetupParam(userPackage.getId(), xmlReqPath, PipelineMode.DEFAULT));
|
Pipeline pipeline = pipelinePackageManager.build(new SetupParam(userPackage.getId(), xmlReqPath, PipelineMode.DEFAULT));
|
||||||
pipelineOrchestrator.startOrDelay(
|
pipelineOrchestrator.startOrDelay(
|
||||||
() -> saver.readAndSave(userPackage.getId(), xmlReqPath),
|
() -> saver.readAndSaveNpPackage(userPackage.getId(), xmlReqPath),
|
||||||
pipeline, userPackage.getId()
|
pipeline, userPackage.getId()
|
||||||
);
|
);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,11 @@ 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.entities.app.PackagesRecordsMap;
|
import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap;
|
||||||
|
import ru.nbch.credit_tracker.entities.app.SignalLegalFidMap;
|
||||||
import ru.nbch.credit_tracker.entities.user_request.monitoring_request.MonitoringRequest;
|
import ru.nbch.credit_tracker.entities.user_request.monitoring_request.MonitoringRequest;
|
||||||
import ru.nbch.credit_tracker.enums.Status;
|
import ru.nbch.credit_tracker.enums.Status;
|
||||||
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
|
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
|
||||||
|
import ru.nbch.credit_tracker.service.indic.LegalsMapService;
|
||||||
import ru.nbch.credit_tracker.service.indic.PhoneService;
|
import ru.nbch.credit_tracker.service.indic.PhoneService;
|
||||||
import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
|
import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
|
||||||
import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
|
import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
|
||||||
|
|
@ -23,43 +25,74 @@ public class Saver {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
private final StaxXmlProcessor xmlProcessor;
|
private final StaxXmlProcessor xmlProcessor;
|
||||||
private final PhoneService phoneService;
|
private final PhoneService phoneService;
|
||||||
|
private final LegalsMapService legalsMapService;
|
||||||
private final UserPackageMapper userPackageMapper;
|
private final UserPackageMapper userPackageMapper;
|
||||||
private final int BATCH_SIZE;
|
private final int BATCH_SIZE;
|
||||||
|
|
||||||
|
|
||||||
public Saver(StaxXmlProcessor xmlProcessor,
|
public Saver(StaxXmlProcessor xmlProcessor,
|
||||||
PhoneService phoneService,
|
PhoneService phoneService,
|
||||||
|
LegalsMapService legalsMapService,
|
||||||
UserPackageMapper userPackageMapper,
|
UserPackageMapper userPackageMapper,
|
||||||
CreditTrackerSettings creditTrackerSettings) {
|
CreditTrackerSettings creditTrackerSettings) {
|
||||||
this.xmlProcessor = xmlProcessor;
|
this.xmlProcessor = xmlProcessor;
|
||||||
this.phoneService = phoneService;
|
this.phoneService = phoneService;
|
||||||
|
this.legalsMapService = legalsMapService;
|
||||||
this.userPackageMapper = userPackageMapper;
|
this.userPackageMapper = userPackageMapper;
|
||||||
this.BATCH_SIZE = creditTrackerSettings.getSaverSubjectBatchSize();
|
this.BATCH_SIZE = creditTrackerSettings.getSaverSubjectBatchSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void readAndSave(Long packageId, Path pkgPath) {
|
public void readAndSaveNpPackage(Long packageId, Path pkgPath) {
|
||||||
log.info("Start registering subjects. PackageId: {}; pkg path: {}", packageId, pkgPath);
|
log.info("Start registering np subjects. PackageId: {}; pkg path: {}", packageId, pkgPath);
|
||||||
try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(pkgPath), 8 * 1024 * 1024)) {
|
try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(pkgPath), 8 * 1024 * 1024)) {
|
||||||
xmlProcessor.read(in, MonitoringRequest.class,
|
xmlProcessor.read(in, MonitoringRequest.class,
|
||||||
request -> {
|
request -> {
|
||||||
if (!request.getSubjects().getSubject().isEmpty()) {
|
if (!request.getSubjects().getSubject().isEmpty()) {
|
||||||
log.trace("Reading subject's {} batch. PackageId: {}", request.getSubjects().getSubject().size(), packageId);
|
log.trace("Reading np subject's {} batch. PackageId: {}", request.getSubjects().getSubject().size(), packageId);
|
||||||
List<PackagesRecordsMap> subjectForSave = request.getSubjects().getSubject().stream().map(subject -> PackagesRecordsMap.builder()
|
List<PackagesRecordsMap> subjectForSave = request.getSubjects().getSubject().stream().map(subject -> PackagesRecordsMap.builder()
|
||||||
.subjectId(subject.getId())
|
.subjectId(subject.getId())
|
||||||
.packageId(packageId)
|
.packageId(packageId)
|
||||||
.phone_l(Long.valueOf(subject.getClientId())) // validated ru.nbch.credit_tracker.service.ValidationService.validateMonitoringRequest
|
.phone_l(Long.valueOf(subject.getClientId())) // validated ru.nbch.credit_tracker.service.ValidationService.validateMonitoringRequest
|
||||||
.build()).toList();
|
.build()).toList();
|
||||||
phoneService.registerSubjects(subjectForSave);
|
phoneService.registerSubjects(subjectForSave);
|
||||||
request.getSubjects().getSubject().clear();
|
request.getSubjects().getSubject().clear();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
request -> request.getSubjects().getSubject().isEmpty(),
|
request -> request.getSubjects().getSubject().isEmpty(),
|
||||||
BATCH_SIZE, "/MonitoringRequest/Subjects/Subject"
|
BATCH_SIZE, "/MonitoringRequest/Subjects/Subject"
|
||||||
);
|
);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.error("{}", ExceptionUtils.getStackTrace(e));
|
log.error("{}", ExceptionUtils.getStackTrace(e));
|
||||||
}
|
}
|
||||||
userPackageMapper.updatePackageStatus(packageId, Status.PROCESSING.name());
|
userPackageMapper.updatePackageStatus(packageId, Status.PROCESSING.name());
|
||||||
log.info("Complete registering subjects. PackageId: {}; pkg path: {}", packageId, pkgPath);
|
log.info("Complete registering np subjects. PackageId: {}; pkg path: {}", packageId, pkgPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readAndSaveLpPackage(Long packageId, Path pkgPath) {
|
||||||
|
log.info("Start registering lp subjects. PackageId: {}; pkg path: {}", packageId, pkgPath);
|
||||||
|
try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(pkgPath), 8 * 1024 * 1024)) {
|
||||||
|
xmlProcessor.read(in, MonitoringRequest.class,
|
||||||
|
request -> {
|
||||||
|
if (!request.getSubjects().getSubject().isEmpty()) {
|
||||||
|
log.trace("Reading lp subject's {} batch. PackageId: {}", request.getSubjects().getSubject().size(), packageId);
|
||||||
|
List<SignalLegalFidMap> subjectForSave = request.getSubjects().getSubject().stream().map(subject -> SignalLegalFidMap.builder()
|
||||||
|
.subjectId(subject.getId())
|
||||||
|
.packageId(packageId)
|
||||||
|
.inn(Long.valueOf(subject.getInn())) // validated ru.nbch.credit_tracker.service.ValidationService.validateMonitoringRequest
|
||||||
|
.regNum(Long.valueOf(subject.getRegNum())) // validated ru.nbch.credit_tracker.service.ValidationService.validateMonitoringRequest
|
||||||
|
.build()).toList();
|
||||||
|
|
||||||
|
legalsMapService.registerSubjects(subjectForSave);
|
||||||
|
request.getSubjects().getSubject().clear();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
request -> request.getSubjects().getSubject().isEmpty(),
|
||||||
|
BATCH_SIZE, "/MonitoringRequest/Subjects/Subject"
|
||||||
|
);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("{}", ExceptionUtils.getStackTrace(e));
|
||||||
|
}
|
||||||
|
userPackageMapper.updatePackageStatus(packageId, Status.PROCESSING.name());
|
||||||
|
log.info("Complete registering lp subjects. PackageId: {}; pkg path: {}", packageId, pkgPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
|
||||||
|
<mapper namespace="ru.nbch.credit_tracker.mapper.signal.LegalsMapMapper">
|
||||||
|
|
||||||
|
<select id="registerJson" parameterType="string" resultType="long">
|
||||||
|
WITH src AS (SELECT row_number() OVER () AS rn,
|
||||||
|
subject_id,
|
||||||
|
inn,
|
||||||
|
reg_num,
|
||||||
|
package_id
|
||||||
|
FROM json_to_recordset(#{json}::json) AS t(
|
||||||
|
subject_id varchar(255),
|
||||||
|
inn bigint,
|
||||||
|
reg_num bigint,
|
||||||
|
package_id bigint
|
||||||
|
))
|
||||||
|
INSERT
|
||||||
|
INTO signals_legal_fid_map
|
||||||
|
(subject_id, inn, reg_num, package_id)
|
||||||
|
SELECT subject_id,
|
||||||
|
inn,
|
||||||
|
reg_num,
|
||||||
|
package_id
|
||||||
|
FROM src
|
||||||
|
ORDER BY rn
|
||||||
|
RETURNING id;
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
Loading…
Add table
Reference in a new issue