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);
|
||||
LogUtil.addMdcLogKey("%s %d".formatted(packageName, packageId));
|
||||
log.info("Package registered. PackageId {}. Status: {}", packageId, Status.ACCEPTED.name());
|
||||
|
||||
if (subjectType == 1) {
|
||||
Pipeline pipeline = pipelinePackageManager.build(new SetupParam(packageId, parsedFilePath, PipelineMode.DEFAULT));
|
||||
pipelineOrchestrator.startOrDelay(() -> {
|
||||
saver.readAndSave(packageId, parsedFilePath);
|
||||
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) {
|
||||
try {
|
||||
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);
|
||||
Pipeline pipeline = pipelinePackageManager.build(new SetupParam(userPackage.getId(), xmlReqPath, PipelineMode.DEFAULT));
|
||||
pipelineOrchestrator.startOrDelay(
|
||||
() -> saver.readAndSave(userPackage.getId(), xmlReqPath),
|
||||
() -> saver.readAndSaveNpPackage(userPackage.getId(), xmlReqPath),
|
||||
pipeline, userPackage.getId()
|
||||
);
|
||||
} catch (Exception e) {
|
||||
|
|
|
|||
|
|
@ -5,9 +5,11 @@ import org.slf4j.LoggerFactory;
|
|||
import org.springframework.stereotype.Service;
|
||||
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
||||
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.enums.Status;
|
||||
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.xml.stax.StaxXmlProcessor;
|
||||
import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
|
||||
|
|
@ -23,27 +25,30 @@ public class Saver {
|
|||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private final StaxXmlProcessor xmlProcessor;
|
||||
private final PhoneService phoneService;
|
||||
private final LegalsMapService legalsMapService;
|
||||
private final UserPackageMapper userPackageMapper;
|
||||
private final int BATCH_SIZE;
|
||||
|
||||
|
||||
public Saver(StaxXmlProcessor xmlProcessor,
|
||||
PhoneService phoneService,
|
||||
LegalsMapService legalsMapService,
|
||||
UserPackageMapper userPackageMapper,
|
||||
CreditTrackerSettings creditTrackerSettings) {
|
||||
this.xmlProcessor = xmlProcessor;
|
||||
this.phoneService = phoneService;
|
||||
this.legalsMapService = legalsMapService;
|
||||
this.userPackageMapper = userPackageMapper;
|
||||
this.BATCH_SIZE = creditTrackerSettings.getSaverSubjectBatchSize();
|
||||
}
|
||||
|
||||
public void readAndSave(Long packageId, Path pkgPath) {
|
||||
log.info("Start registering subjects. PackageId: {}; pkg path: {}", packageId, pkgPath);
|
||||
public void readAndSaveNpPackage(Long packageId, Path pkgPath) {
|
||||
log.info("Start registering np 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 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()
|
||||
.subjectId(subject.getId())
|
||||
.packageId(packageId)
|
||||
|
|
@ -60,6 +65,34 @@ public class Saver {
|
|||
log.error("{}", ExceptionUtils.getStackTrace(e));
|
||||
}
|
||||
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