This commit is contained in:
parent
51e226caf2
commit
35e056c990
3 changed files with 91 additions and 6 deletions
|
|
@ -1,8 +1,5 @@
|
|||
package ru.spcex.clearing.xml.exporter.logic.stages;
|
||||
|
||||
import static ru.spcex.clearing.platform.messaging.domain.Consts.PAIR_SDF;
|
||||
import static ru.spcex.clearing.xml.exporter.logic.data.tags.objects.ObjectTag.ruCurrency;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
|
@ -12,11 +9,21 @@ import java.util.Comparator;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf01;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf02;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf06;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf07;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf52;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf53;
|
||||
import ru.clearing.classes.statics.data.sdf.WithMessageId;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import static ru.spcex.clearing.platform.messaging.domain.Consts.PAIR_SDF;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.PairSdfRequest;
|
||||
import ru.spcex.clearing.platform.messaging.serialization.LogFormatter;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
|
|
@ -28,6 +35,7 @@ import ru.spcex.clearing.xml.exporter.logic.data.enums.Table;
|
|||
import ru.spcex.clearing.xml.exporter.logic.data.tags.DocumentTag;
|
||||
import ru.spcex.clearing.xml.exporter.logic.data.tags.ParentDocTag;
|
||||
import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.ObjectTag;
|
||||
import static ru.spcex.clearing.xml.exporter.logic.data.tags.objects.ObjectTag.ruCurrency;
|
||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
|
|
@ -42,6 +50,10 @@ public class ExportFromHazelcast {
|
|||
private final Supplier<KafkaSender> kafkaSender;
|
||||
private final ExportXMLServiceSettings settings;
|
||||
|
||||
private final Imdg<SDf01> sDf01Imdg;
|
||||
private final Imdg<SDf52> sDf52Imdg;
|
||||
private final Imdg<SDf06> sDf06Imdg;
|
||||
|
||||
public ExportFromHazelcast(ImdgProvider imdgProvider,
|
||||
SFTPConfig.XmlGateway gateway,
|
||||
@Qualifier("mapOfTable") Map<Table, ObjectTag<? extends SpcexObjectBase>> objectTagMap,
|
||||
|
|
@ -52,6 +64,10 @@ public class ExportFromHazelcast {
|
|||
this.objectTagMap = objectTagMap;
|
||||
this.kafkaSender = kafkaSender;
|
||||
this.settings = settings;
|
||||
|
||||
this.sDf01Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf01, SDf01.class);
|
||||
this.sDf52Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf52, SDf52.class);
|
||||
this.sDf06Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf06, SDf06.class);
|
||||
}
|
||||
|
||||
public StageResult process(ResultContainer resultContainer) {
|
||||
|
|
@ -61,9 +77,7 @@ public class ExportFromHazelcast {
|
|||
|
||||
DocumentTag documentTag = new DocumentTag();
|
||||
ParentDocTag parentDocTag = new ParentDocTag();
|
||||
parentDocTag.setParentId("");
|
||||
// todo: Добавить данные DocumentTag'а
|
||||
documentTag.setMessageId("");
|
||||
documentTag.setMessageId(String.valueOf(resultContainer.getGroupId()));
|
||||
documentTag.setMessageType(table.getFilePrefix().replace("-", ""));
|
||||
documentTag.setMessageName("");
|
||||
documentTag.setMessageDate(LocalDate.now());
|
||||
|
|
@ -94,6 +108,16 @@ public class ExportFromHazelcast {
|
|||
((ArrayList<SpcexObjectBase>) tableRows).sort(Comparator.comparing(SpcexObjectBase::getId));
|
||||
}
|
||||
|
||||
for (SpcexObjectBase s : tableRows) {
|
||||
if (s instanceof SDf02 sDf02) {
|
||||
patchDocumentTag(documentTag, sDf02.getInSDfId(), sDf01Imdg, SDf01::getMessageId);
|
||||
} else if (s instanceof SDf53 sDf53) {
|
||||
patchDocumentTag(documentTag, sDf53.getInSDfId(), sDf52Imdg, SDf52::getMessageId);
|
||||
} else if (s instanceof SDf07 sDf07) {
|
||||
patchDocumentTag(documentTag, sDf07.getInSDfId(), sDf06Imdg, SDf06::getMessageId);
|
||||
}
|
||||
}
|
||||
|
||||
documentTag.setObjects(addObjectTags(tableRows, table));
|
||||
resultContainer.setDocumentTag(documentTag);
|
||||
|
||||
|
|
@ -135,6 +159,23 @@ public class ExportFromHazelcast {
|
|||
return result;
|
||||
}
|
||||
|
||||
private <T extends SpcexObjectBase> void patchDocumentTag(DocumentTag documentTag, Long inSdfId, Imdg<T> mapWithInSdf, Function<T, String> messageIdGetter) {
|
||||
T inSdf = mapWithInSdf.getSingleObjectByID(inSdfId);
|
||||
if (inSdf instanceof WithMessageId withMessageId) {
|
||||
if (documentTag.getParentDoc().getParentId() == null) {
|
||||
documentTag.getParentDoc().setParentId(withMessageId.getMessageId());
|
||||
} else if (!documentTag.getParentDoc().getParentId().equalsIgnoreCase(withMessageId.getMessageId())) {
|
||||
log.warn(
|
||||
"Different messageId (for batch {}, current {}), skip",
|
||||
documentTag.getParentDoc().getParentId(),
|
||||
withMessageId.getMessageId()
|
||||
);
|
||||
} else {
|
||||
documentTag.getParentDoc().setParentId(withMessageId.getMessageId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sendPairSdfRequest(ResultContainer resultContainer) {
|
||||
PairSdfRequest request = new PairSdfRequest();
|
||||
request.setGenerationId(resultContainer.getGroupId());
|
||||
|
|
|
|||
|
|
@ -24,11 +24,14 @@ import org.springframework.boot.test.mock.mockito.SpyBean;
|
|||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf01;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf02;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf03;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf05;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf06;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf07;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf51;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf52;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf53;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf54;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf56;
|
||||
|
|
@ -93,6 +96,7 @@ class ExportFromHazelcastTest {
|
|||
@Test
|
||||
void process_shouldExportSDf02ToObjectTag() {
|
||||
SDf02 expectedSDf02 = new SDf02();
|
||||
expectedSDf02.setGenerationId(1777L);
|
||||
expectedSDf02.setCurr_code("test1");
|
||||
expectedSDf02.setAccount("test2");
|
||||
expectedSDf02.setRemainder("test3");
|
||||
|
|
@ -106,16 +110,26 @@ class ExportFromHazelcastTest {
|
|||
expectedSDf02.setSumunblock("test10");
|
||||
expectedSDf02.setFile_type("test11");
|
||||
expectedSDf02.setResult("test12");
|
||||
expectedSDf02.setInSDfId((long) "inSDf02Id".hashCode());
|
||||
|
||||
Imdg<SDf02> imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf02, SDf02.class);
|
||||
imdg.insert(expectedSDf02);
|
||||
|
||||
SDf01 forParentId = new SDf01();
|
||||
forParentId.setId(expectedSDf02.getInSDfId());
|
||||
forParentId.setMessageId("007");
|
||||
Imdg<SDf01> sDf01Imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf01, SDf01.class);
|
||||
sDf01Imdg.insert(forParentId);
|
||||
|
||||
ResultContainer actualResultContainer = new ResultContainer(Table.S_DF02);
|
||||
actualResultContainer.setGroupId(1777L);
|
||||
actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-02_S_PRC1604240915_1.xml"));
|
||||
|
||||
StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
|
||||
DF02ObjectTag actualObjectTag = (DF02ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
|
||||
|
||||
Assertions.assertThat("1777").isEqualTo(actualResultContainer.getDocumentTag().getMessageId());
|
||||
Assertions.assertThat("007").isEqualTo(actualResultContainer.getDocumentTag().getParentDoc().getParentId());
|
||||
Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
|
||||
Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF02");
|
||||
Assertions.assertThat(actualObjectTag.getCurrCode()).isEqualTo(expectedSDf02.getCurr_code());
|
||||
|
|
@ -203,6 +217,8 @@ class ExportFromHazelcastTest {
|
|||
@Test
|
||||
void process_shouldExportSDf07ToObjectTag() {
|
||||
SDf07 expectedSDf07 = new SDf07();
|
||||
expectedSDf07.setGenerationId(Long.valueOf(3775));
|
||||
expectedSDf07.setInSDfId((long) "inSDf07Id".hashCode());
|
||||
expectedSDf07.setAccount("test1");
|
||||
expectedSDf07.setSum(new BigDecimal(BigInteger.TEN));
|
||||
expectedSDf07.setMarket("test3");
|
||||
|
|
@ -220,12 +236,21 @@ class ExportFromHazelcastTest {
|
|||
Imdg<SDf07> imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf07, SDf07.class);
|
||||
imdg.insert(expectedSDf07);
|
||||
|
||||
SDf06 forParentId = new SDf06();
|
||||
forParentId.setId(expectedSDf07.getInSDfId());
|
||||
forParentId.setMessageId("005");
|
||||
Imdg<SDf06> sDf06Imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf06, SDf06.class);
|
||||
sDf06Imdg.insert(forParentId);
|
||||
|
||||
ResultContainer actualResultContainer = new ResultContainer(Table.S_DF07);
|
||||
actualResultContainer.setGroupId(3775L);
|
||||
actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-07_S_PRC1604240915_1.xml"));
|
||||
|
||||
StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
|
||||
DF07ObjectTag actualObjectTag = (DF07ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
|
||||
|
||||
Assertions.assertThat("3775").isEqualTo(actualResultContainer.getDocumentTag().getMessageId());
|
||||
Assertions.assertThat("005").isEqualTo(actualResultContainer.getDocumentTag().getParentDoc().getParentId());
|
||||
Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
|
||||
Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF07");
|
||||
Assertions.assertThat(actualObjectTag.getAccount()).isEqualTo(expectedSDf07.getAccount());
|
||||
|
|
@ -268,6 +293,8 @@ class ExportFromHazelcastTest {
|
|||
@Test
|
||||
void process_shouldExportSDf53ToObjectTag() {
|
||||
SDf53 expectedSDf53 = new SDf53();
|
||||
expectedSDf53.setGenerationId(2776L);
|
||||
expectedSDf53.setInSDfId((long) "inSDf53Id".hashCode());
|
||||
expectedSDf53.setAccount("test1");
|
||||
expectedSDf53.setAccName("test2");
|
||||
expectedSDf53.setDeal("test3");
|
||||
|
|
@ -279,12 +306,21 @@ class ExportFromHazelcastTest {
|
|||
Imdg<SDf53> imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf53, SDf53.class);
|
||||
imdg.insert(expectedSDf53);
|
||||
|
||||
SDf52 forParentId = new SDf52();
|
||||
forParentId.setId(expectedSDf53.getInSDfId());
|
||||
forParentId.setMessageId("006");
|
||||
Imdg<SDf52> sDf52Imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf52, SDf52.class);
|
||||
sDf52Imdg.insert(forParentId);
|
||||
|
||||
ResultContainer actualResultContainer = new ResultContainer(Table.S_DF53);
|
||||
actualResultContainer.setGroupId(2776L);
|
||||
actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-53_S_PRC1604240915_1.xml"));
|
||||
|
||||
StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
|
||||
DF53ObjectTag actualObjectTag = (DF53ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
|
||||
|
||||
Assertions.assertThat("2776").isEqualTo(actualResultContainer.getDocumentTag().getMessageId());
|
||||
Assertions.assertThat("006").isEqualTo(actualResultContainer.getDocumentTag().getParentDoc().getParentId());
|
||||
Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
|
||||
Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF53");
|
||||
Assertions.assertThat(actualObjectTag.getAccount()).isEqualTo(expectedSDf53.getAccount());
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ import org.slf4j.LoggerFactory;
|
|||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf57;
|
||||
import ru.clearing.classes.statics.data.sdf.WithMessageId;
|
||||
import ru.clearing.classes.statics.data.sdf.WithParentId;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.BankAccountNewRequest;
|
||||
import ru.spcex.clearing.xml.importer.logic.data.ResultContainer;
|
||||
import ru.spcex.clearing.xml.importer.logic.data.enums.ETable;
|
||||
|
|
@ -58,6 +60,12 @@ public class ImportToDB {
|
|||
"Номер транзакции " + ((SDf57) entityTable).getDbfId() + " в полученном df57 уже был обработан ранее",
|
||||
Priority.HIGH);
|
||||
} else {
|
||||
if (entityTable instanceof WithParentId withParentId && documentTag.getParentDoc() != null) {
|
||||
withParentId.setParentId(documentTag.getParentDoc().getParentId());
|
||||
}
|
||||
if (entityTable instanceof WithMessageId withMessageId) {
|
||||
withMessageId.setMessageId(documentTag.getMessageId());
|
||||
}
|
||||
o.injectEntity(entityTable);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue