akulikov 2024-11-25 17:33:30 +03:00
parent 51e226caf2
commit 35e056c990
3 changed files with 91 additions and 6 deletions

View file

@ -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());

View file

@ -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());

View file

@ -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);
}
}