http://jira.mfd.msk:8088/browse/CLS-794 messageId type -> UUID and remove "-" for messageId

This commit is contained in:
akulikov 2024-11-29 17:20:55 +03:00
parent dd19fa74d9
commit edb3760b51
3 changed files with 30 additions and 23 deletions

View file

@ -6,6 +6,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.UUID;
import org.apache.commons.lang3.tuple.Triple; import org.apache.commons.lang3.tuple.Triple;
import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.Producer;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -76,12 +77,13 @@ public class SDFProcessService {
boolean txOk = false; boolean txOk = false;
imdgTransaction.beginTransaction(); imdgTransaction.beginTransaction();
HashSet<String> fileNames = new HashSet<>(); HashSet<String> fileNames = new HashSet<>();
String messageId = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
try { // 2. обновление данных, в транзакции try { // 2. обновление данных, в транзакции
Imdg<SDf53> sdf53Imdg = imdgTransaction.getImdg(IMDGDistributedNames.Map_SDf53, SDf53.class); Imdg<SDf53> sdf53Imdg = imdgTransaction.getImdg(IMDGDistributedNames.Map_SDf53, SDf53.class);
Instant now = Instant.now(); Instant now = Instant.now();
for (Triple<SDf52, Account, String> item : toProcessSDF53) { for (Triple<SDf52, Account, String> item : toProcessSDF53) {
SDf53 sDf53 = createBy(item.getLeft(), item.getRight(), now, generationId); SDf53 sDf53 = createBy(item.getLeft(), item.getRight(), now, generationId, messageId);
sdf53Imdg.insert(sDf53); sdf53Imdg.insert(sDf53);
fileNames.add(item.getLeft().getFileName()); fileNames.add(item.getLeft().getFileName());
} }
@ -104,7 +106,7 @@ public class SDFProcessService {
messageStatementToExport53(generationId, fileNameSingle); messageStatementToExport53(generationId, fileNameSingle);
} }
SDf53 createBy(SDf52 sdf52, String result, Instant now, Long newGenerationId) { SDf53 createBy(SDf52 sdf52, String result, Instant now, Long newGenerationId, String messageId) {
SDf53 newSdf = new SDf53(); SDf53 newSdf = new SDf53();
newSdf.setId(idGenerator.nextId()); newSdf.setId(idGenerator.nextId());
newSdf.setAccName(sdf52.getAcc_name()); newSdf.setAccName(sdf52.getAcc_name());
@ -116,8 +118,8 @@ public class SDFProcessService {
newSdf.setResult(result); newSdf.setResult(result);
newSdf.setGenerationTime(now); newSdf.setGenerationTime(now);
newSdf.setGenerationId(sdf52.getGenerationId()); newSdf.setGenerationId(sdf52.getGenerationId());
newSdf.setMessageId(String.valueOf(sdf52.getGenerationId())); newSdf.setMessageId(messageId);
newSdf.setParentId(sdf52.getMessageId() != null ? sdf52.getMessageId().replaceAll("-", "") : null); newSdf.setParentId(sdf52.getMessageId());
if (!Objects.equals(newGenerationId, newSdf.getGenerationId())) { // never if (!Objects.equals(newGenerationId, newSdf.getGenerationId())) { // never
log.warn("Different GenerationId={} for sdf53[{}] and GenerationId={} for group of sdf52", log.warn("Different GenerationId={} for sdf53[{}] and GenerationId={} for group of sdf52",
newSdf.getGenerationId(), newSdf.getId(), newGenerationId newSdf.getGenerationId(), newSdf.getId(), newGenerationId

View file

@ -9,6 +9,7 @@ import java.util.Collection;
import java.util.Comparator; import java.util.Comparator;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.UUID;
import java.util.function.Function; import java.util.function.Function;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -126,6 +127,7 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
log.info("SDF01 execution: sdf01 file={} number={}, groupId={}", result.getFileName(), sdf.size(), sdf.stream().findFirst().map(SDf01::getGenerationId).orElse(null)); log.info("SDF01 execution: sdf01 file={} number={}, groupId={}", result.getFileName(), sdf.size(), sdf.stream().findFirst().map(SDf01::getGenerationId).orElse(null));
ArrayList<SDf01> orderedSdf = new ArrayList<>(sdf); ArrayList<SDf01> orderedSdf = new ArrayList<>(sdf);
orderedSdf.sort(Comparator.comparing(SDf01::getId));// Сортировка по возрастанию id, чтобы сохранить последовательность строк SDF02, как в SDF01 orderedSdf.sort(Comparator.comparing(SDf01::getId));// Сортировка по возрастанию id, чтобы сохранить последовательность строк SDF02, как в SDF01
String messageId = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
for (SDf01 sdf01 : orderedSdf) { for (SDf01 sdf01 : orderedSdf) {
IValidator validator = sDf01Validator.apply(sdf01); IValidator validator = sDf01Validator.apply(sdf01);
Optional<EnumMessage> error = validator.tillFirstError(); Optional<EnumMessage> error = validator.tillFirstError();
@ -149,14 +151,14 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
if (error.isPresent()) { if (error.isPresent()) {
log.error("sdf01.id={} error: {}", sdf01.getId(), messageResolver.resolve(error.get())); log.error("sdf01.id={} error: {}", sdf01.getId(), messageResolver.resolve(error.get()));
//fixme инициировать = команда для другого сервиса? sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup)); //fixme инициировать = команда для другого сервиса? sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup));
sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup)); sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup, messageId));
continue; continue;
} }
log.debug("sdf01.id={} validation passed", sdf01.getId()); log.debug("sdf01.id={} validation passed", sdf01.getId());
Statement stmt = createSdf01Statement(sdf01, company, account); Statement stmt = createSdf01Statement(sdf01, company, account);
SDf02 sdf02New = createSuccessSdf02(sdf01, generationIdForGroup); SDf02 sdf02New = createSuccessSdf02(sdf01, generationIdForGroup, messageId);
sdf02Imdg.insert(sdf02New); sdf02Imdg.insert(sdf02New);
stmt.setOutSDfId(sdf02New.getId()); stmt.setOutSDfId(sdf02New.getId());
statementImdg.insert(stmt); statementImdg.insert(stmt);
@ -278,7 +280,7 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
return req; return req;
} }
private SDf02 createErrorSdf02(SDf01 sdf01, EnumMessage error, Long generationIdForGroup) { private SDf02 createErrorSdf02(SDf01 sdf01, EnumMessage error, Long generationIdForGroup, String messageId) {
SDf02 sDf02 = new SDf02(); SDf02 sDf02 = new SDf02();
sDf02.setCurr_code(sdf01.getCurr_code()); sDf02.setCurr_code(sdf01.getCurr_code());
sDf02.setAccount(sdf01.getAccount()); sDf02.setAccount(sdf01.getAccount());
@ -301,12 +303,12 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
} }
sDf02.setGenerationId(generationIdForGroup); sDf02.setGenerationId(generationIdForGroup);
sDf02.setGenerationTime(Instant.now()); sDf02.setGenerationTime(Instant.now());
sDf02.setMessageId(String.valueOf(sdf01.getGenerationId())); sDf02.setMessageId(messageId);
sDf02.setParentId(sdf01.getMessageId() != null ? sdf01.getMessageId().replaceAll("-", "") : null); sDf02.setParentId(sdf01.getMessageId());
return sDf02; return sDf02;
} }
private SDf02 createSuccessSdf02(SDf01 sdf01, Long generationIdForGroup) { private SDf02 createSuccessSdf02(SDf01 sdf01, Long generationIdForGroup, String messageId) {
SDf02 sDf02 = new SDf02(); SDf02 sDf02 = new SDf02();
sDf02.setCurr_code(sdf01.getCurr_code()); sDf02.setCurr_code(sdf01.getCurr_code());
sDf02.setAccount(sdf01.getAccount()); sDf02.setAccount(sdf01.getAccount());
@ -324,8 +326,8 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
sDf02.setGenerationId(generationIdForGroup); sDf02.setGenerationId(generationIdForGroup);
sDf02.setGenerationTime(Instant.now()); sDf02.setGenerationTime(Instant.now());
sDf02.setResult(SdfResult.OK.getKey()); sDf02.setResult(SdfResult.OK.getKey());
sDf02.setMessageId(String.valueOf(sdf01.getGenerationId())); sDf02.setMessageId(messageId);
sDf02.setParentId(sdf01.getMessageId() != null ? sdf01.getMessageId().replaceAll("-", "") : null); sDf02.setParentId(sdf01.getMessageId());
return sDf02; return sDf02;
} }

View file

@ -8,6 +8,7 @@ import java.util.Collection;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.UUID;
import java.util.function.Function; import java.util.function.Function;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -136,6 +137,7 @@ public class Sdf06Executor {
} }
Collection<AssetOperationRequest> requests = new ArrayList<>(); Collection<AssetOperationRequest> requests = new ArrayList<>();
boolean sdf07WasCreated = false; boolean sdf07WasCreated = false;
String messageId = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
for (SDf06 sDf06 : sdfs) { for (SDf06 sDf06 : sdfs) {
IValidator validator = sDf06Validator.apply(sDf06); IValidator validator = sDf06Validator.apply(sDf06);
Optional<EnumMessage> err = validator.tillFirstError(); Optional<EnumMessage> err = validator.tillFirstError();
@ -150,7 +152,7 @@ public class Sdf06Executor {
((Company) validator.getStored(ValidationStored.Sdf06Company)).getId(), ((Company) validator.getStored(ValidationStored.Sdf06Company)).getId(),
account, null); account, null);
} }
errorSdf07 = createSdf07(sDf06, now, errorResult); errorSdf07 = createSdf07(sDf06, now, errorResult, messageId);
errorSdf07.setGenerationId(sdf07GroupId); errorSdf07.setGenerationId(sdf07GroupId);
sdf07Imdg.insert(errorSdf07); sdf07Imdg.insert(errorSdf07);
sdf07WasCreated = true; sdf07WasCreated = true;
@ -175,7 +177,7 @@ public class Sdf06Executor {
requests.add(GatewayRequestCreator.from(stmt, company.getTradingCode(), tcr.getCode(), requests.add(GatewayRequestCreator.from(stmt, company.getTradingCode(), tcr.getCode(),
currency.getCurrencyCode())); currency.getCurrencyCode()));
} else { } else {
processedApproved(stmt, sDf06, now, sdf07GroupId); processedApproved(stmt, sDf06, now, sdf07GroupId, messageId);
if (tcr != null) { if (tcr != null) {
dmiService.setProcContract(tcr.getId(), dmiService.setProcContract(tcr.getId(),
sDf06.getPay_val(), sDf06.getPay_val(),
@ -198,16 +200,16 @@ public class Sdf06Executor {
} }
} }
private void processedApproved(Statement stmt, SDf06 sDf06, Instant time) { private void processedApproved(Statement stmt, SDf06 sDf06, Instant time, String messageId) {
processedApproved(stmt, sDf06, time, sdf07GroupId); processedApproved(stmt, sDf06, time, sdf07GroupId, messageId);
} }
private void processedApproved(Statement stmt, SDf06 sDf06, Instant time, Long sdf07GenerationId) { private void processedApproved(Statement stmt, SDf06 sDf06, Instant time, Long sdf07GenerationId, String messageId) {
log.trace("statement.id={}, sdf07.id={}, sdf06.id={} executed", log.trace("statement.id={}, sdf07.id={}, sdf06.id={} executed",
stmt.getId(), stmt.getId(),
sDf06.getGenerationId(), sDf06.getGenerationId(),
sDf06.getId()); sDf06.getId());
SDf07 sdf07 = createSdf07(sDf06, time, successResult); SDf07 sdf07 = createSdf07(sDf06, time, successResult, messageId);
sdf07.setGenerationId(sdf07GenerationId); sdf07.setGenerationId(sdf07GenerationId);
sdf07Imdg.insert(sdf07); sdf07Imdg.insert(sdf07);
stmt.setOperationStatus(OperationStatus.Executed.getKey()); stmt.setOperationStatus(OperationStatus.Executed.getKey());
@ -266,6 +268,7 @@ public class Sdf06Executor {
} }
requestIsIntendedForSdf06 = true; requestIsIntendedForSdf06 = true;
String messageId = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
Long sdf06Id = stmt.getInSDfId(); Long sdf06Id = stmt.getInSDfId();
SDf06 sdf06 = sdf06Imdg.getSingleObjectByID(sdf06Id); SDf06 sdf06 = sdf06Imdg.getSingleObjectByID(sdf06Id);
if (fileName == null && !TextUtil.isEmpty(sdf06.getFileName())) { if (fileName == null && !TextUtil.isEmpty(sdf06.getFileName())) {
@ -288,7 +291,7 @@ public class Sdf06Executor {
Instant updatedTime = Instant.now(); Instant updatedTime = Instant.now();
if (gatewayMsg.isApproved()) { if (gatewayMsg.isApproved()) {
processedApproved(stmt, sdf06, updatedTime); processedApproved(stmt, sdf06, updatedTime, messageId);
Optional<TradingClearingRegistry> tcr = searchTcrOnGatewayResponse(sdf06); Optional<TradingClearingRegistry> tcr = searchTcrOnGatewayResponse(sdf06);
dmiService.setProcContract(tcr.map(SpcexObjectBase::getId).orElse(null), dmiService.setProcContract(tcr.map(SpcexObjectBase::getId).orElse(null),
sdf06.getPay_val(), sdf06.getPay_val(),
@ -304,7 +307,7 @@ public class Sdf06Executor {
statementId, statementId,
sdf06.getGenerationId(), sdf06.getGenerationId(),
sdf06.getId()); sdf06.getId());
SDf07 sdf07 = createSdf07(sdf06, now, errorResult3); SDf07 sdf07 = createSdf07(sdf06, now, errorResult3, messageId);
sdf07.setGenerationId(sdf07GroupId); sdf07.setGenerationId(sdf07GroupId);
sdf07Imdg.insert(sdf07); sdf07Imdg.insert(sdf07);
stmt.setOperationStatus(OperationStatus.Rejected.getKey()); stmt.setOperationStatus(OperationStatus.Rejected.getKey());
@ -339,7 +342,7 @@ public class Sdf06Executor {
kafkaSender.sendRequestToQueue(Consts.EXPORT_PROCESS, exportRequest); kafkaSender.sendRequestToQueue(Consts.EXPORT_PROCESS, exportRequest);
} }
private SDf07 createSdf07(SDf06 sdf06, Instant time, BigDecimal result) { private SDf07 createSdf07(SDf06 sdf06, Instant time, BigDecimal result, String messageId) {
SDf07 sDf07 = new SDf07(); SDf07 sDf07 = new SDf07();
sDf07.setInSDfId(sdf06.getId()); sDf07.setInSDfId(sdf06.getId());
sDf07.setGenerationTime(time); sDf07.setGenerationTime(time);
@ -357,8 +360,8 @@ public class Sdf06Executor {
sDf07.setDoc_date(sdf06.getDoc_date()); sDf07.setDoc_date(sdf06.getDoc_date());
sDf07.setDoc_num(sdf06.getDoc_num()); sDf07.setDoc_num(sdf06.getDoc_num());
sDf07.setPay_val(sdf06.getPay_val()); sDf07.setPay_val(sdf06.getPay_val());
sDf07.setMessageId(String.valueOf(sdf06.getGenerationId())); sDf07.setMessageId(messageId);
sDf07.setParentId(sdf06.getMessageId() != null ? sdf06.getParentId().replaceAll("-", "") : null); sDf07.setParentId(sdf06.getMessageId());
return sDf07; return sDf07;
} }