diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/SDFProcessService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/SDFProcessService.java index 3396848dc..01b9d8c7a 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/SDFProcessService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/SDFProcessService.java @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.UUID; import org.apache.commons.lang3.tuple.Triple; import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; @@ -76,12 +77,13 @@ public class SDFProcessService { boolean txOk = false; imdgTransaction.beginTransaction(); HashSet fileNames = new HashSet<>(); + String messageId = String.valueOf(UUID.randomUUID()).replaceAll("-", ""); try { // 2. обновление данных, в транзакции Imdg sdf53Imdg = imdgTransaction.getImdg(IMDGDistributedNames.Map_SDf53, SDf53.class); Instant now = Instant.now(); for (Triple item : toProcessSDF53) { - SDf53 sDf53 = createBy(item.getLeft(), item.getRight(), now, generationId); + SDf53 sDf53 = createBy(item.getLeft(), item.getRight(), now, generationId, messageId); sdf53Imdg.insert(sDf53); fileNames.add(item.getLeft().getFileName()); } @@ -104,7 +106,7 @@ public class SDFProcessService { 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(); newSdf.setId(idGenerator.nextId()); newSdf.setAccName(sdf52.getAcc_name()); @@ -116,8 +118,8 @@ public class SDFProcessService { newSdf.setResult(result); newSdf.setGenerationTime(now); newSdf.setGenerationId(sdf52.getGenerationId()); - newSdf.setMessageId(String.valueOf(sdf52.getGenerationId())); - newSdf.setParentId(sdf52.getMessageId() != null ? sdf52.getMessageId().replaceAll("-", "") : null); + newSdf.setMessageId(messageId); + newSdf.setParentId(sdf52.getMessageId()); if (!Objects.equals(newGenerationId, newSdf.getGenerationId())) { // never log.warn("Different GenerationId={} for sdf53[{}] and GenerationId={} for group of sdf52", newSdf.getGenerationId(), newSdf.getId(), newGenerationId diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java index f71dd386d..069323fe1 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java @@ -9,6 +9,7 @@ import java.util.Collection; import java.util.Comparator; import java.util.Map; import java.util.Optional; +import java.util.UUID; import java.util.function.Function; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -126,6 +127,7 @@ public class Sdf01Executor extends AbstractExecutor { log.info("SDF01 execution: sdf01 file={} number={}, groupId={}", result.getFileName(), sdf.size(), sdf.stream().findFirst().map(SDf01::getGenerationId).orElse(null)); ArrayList orderedSdf = new ArrayList<>(sdf); orderedSdf.sort(Comparator.comparing(SDf01::getId));// Сортировка по возрастанию id, чтобы сохранить последовательность строк SDF02, как в SDF01 + String messageId = String.valueOf(UUID.randomUUID()).replaceAll("-", ""); for (SDf01 sdf01 : orderedSdf) { IValidator validator = sDf01Validator.apply(sdf01); Optional error = validator.tillFirstError(); @@ -149,14 +151,14 @@ public class Sdf01Executor extends AbstractExecutor { if (error.isPresent()) { log.error("sdf01.id={} error: {}", sdf01.getId(), messageResolver.resolve(error.get())); //fixme инициировать = команда для другого сервиса? sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup)); - sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup)); + sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup, messageId)); continue; } log.debug("sdf01.id={} validation passed", sdf01.getId()); Statement stmt = createSdf01Statement(sdf01, company, account); - SDf02 sdf02New = createSuccessSdf02(sdf01, generationIdForGroup); + SDf02 sdf02New = createSuccessSdf02(sdf01, generationIdForGroup, messageId); sdf02Imdg.insert(sdf02New); stmt.setOutSDfId(sdf02New.getId()); statementImdg.insert(stmt); @@ -278,7 +280,7 @@ public class Sdf01Executor extends AbstractExecutor { 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.setCurr_code(sdf01.getCurr_code()); sDf02.setAccount(sdf01.getAccount()); @@ -301,12 +303,12 @@ public class Sdf01Executor extends AbstractExecutor { } sDf02.setGenerationId(generationIdForGroup); sDf02.setGenerationTime(Instant.now()); - sDf02.setMessageId(String.valueOf(sdf01.getGenerationId())); - sDf02.setParentId(sdf01.getMessageId() != null ? sdf01.getMessageId().replaceAll("-", "") : null); + sDf02.setMessageId(messageId); + sDf02.setParentId(sdf01.getMessageId()); return sDf02; } - private SDf02 createSuccessSdf02(SDf01 sdf01, Long generationIdForGroup) { + private SDf02 createSuccessSdf02(SDf01 sdf01, Long generationIdForGroup, String messageId) { SDf02 sDf02 = new SDf02(); sDf02.setCurr_code(sdf01.getCurr_code()); sDf02.setAccount(sdf01.getAccount()); @@ -324,8 +326,8 @@ public class Sdf01Executor extends AbstractExecutor { sDf02.setGenerationId(generationIdForGroup); sDf02.setGenerationTime(Instant.now()); sDf02.setResult(SdfResult.OK.getKey()); - sDf02.setMessageId(String.valueOf(sdf01.getGenerationId())); - sDf02.setParentId(sdf01.getMessageId() != null ? sdf01.getMessageId().replaceAll("-", "") : null); + sDf02.setMessageId(messageId); + sDf02.setParentId(sdf01.getMessageId()); return sDf02; } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java index 8e86ffdf9..5836dbeed 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf06Executor.java @@ -8,6 +8,7 @@ import java.util.Collection; import java.util.LinkedList; import java.util.Map; import java.util.Optional; +import java.util.UUID; import java.util.function.Function; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -136,6 +137,7 @@ public class Sdf06Executor { } Collection requests = new ArrayList<>(); boolean sdf07WasCreated = false; + String messageId = String.valueOf(UUID.randomUUID()).replaceAll("-", ""); for (SDf06 sDf06 : sdfs) { IValidator validator = sDf06Validator.apply(sDf06); Optional err = validator.tillFirstError(); @@ -150,7 +152,7 @@ public class Sdf06Executor { ((Company) validator.getStored(ValidationStored.Sdf06Company)).getId(), account, null); } - errorSdf07 = createSdf07(sDf06, now, errorResult); + errorSdf07 = createSdf07(sDf06, now, errorResult, messageId); errorSdf07.setGenerationId(sdf07GroupId); sdf07Imdg.insert(errorSdf07); sdf07WasCreated = true; @@ -175,7 +177,7 @@ public class Sdf06Executor { requests.add(GatewayRequestCreator.from(stmt, company.getTradingCode(), tcr.getCode(), currency.getCurrencyCode())); } else { - processedApproved(stmt, sDf06, now, sdf07GroupId); + processedApproved(stmt, sDf06, now, sdf07GroupId, messageId); if (tcr != null) { dmiService.setProcContract(tcr.getId(), sDf06.getPay_val(), @@ -198,16 +200,16 @@ public class Sdf06Executor { } } - private void processedApproved(Statement stmt, SDf06 sDf06, Instant time) { - processedApproved(stmt, sDf06, time, sdf07GroupId); + private void processedApproved(Statement stmt, SDf06 sDf06, Instant time, String messageId) { + 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", stmt.getId(), sDf06.getGenerationId(), sDf06.getId()); - SDf07 sdf07 = createSdf07(sDf06, time, successResult); + SDf07 sdf07 = createSdf07(sDf06, time, successResult, messageId); sdf07.setGenerationId(sdf07GenerationId); sdf07Imdg.insert(sdf07); stmt.setOperationStatus(OperationStatus.Executed.getKey()); @@ -266,6 +268,7 @@ public class Sdf06Executor { } requestIsIntendedForSdf06 = true; + String messageId = String.valueOf(UUID.randomUUID()).replaceAll("-", ""); Long sdf06Id = stmt.getInSDfId(); SDf06 sdf06 = sdf06Imdg.getSingleObjectByID(sdf06Id); if (fileName == null && !TextUtil.isEmpty(sdf06.getFileName())) { @@ -288,7 +291,7 @@ public class Sdf06Executor { Instant updatedTime = Instant.now(); if (gatewayMsg.isApproved()) { - processedApproved(stmt, sdf06, updatedTime); + processedApproved(stmt, sdf06, updatedTime, messageId); Optional tcr = searchTcrOnGatewayResponse(sdf06); dmiService.setProcContract(tcr.map(SpcexObjectBase::getId).orElse(null), sdf06.getPay_val(), @@ -304,7 +307,7 @@ public class Sdf06Executor { statementId, sdf06.getGenerationId(), sdf06.getId()); - SDf07 sdf07 = createSdf07(sdf06, now, errorResult3); + SDf07 sdf07 = createSdf07(sdf06, now, errorResult3, messageId); sdf07.setGenerationId(sdf07GroupId); sdf07Imdg.insert(sdf07); stmt.setOperationStatus(OperationStatus.Rejected.getKey()); @@ -339,7 +342,7 @@ public class Sdf06Executor { 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.setInSDfId(sdf06.getId()); sDf07.setGenerationTime(time); @@ -357,8 +360,8 @@ public class Sdf06Executor { sDf07.setDoc_date(sdf06.getDoc_date()); sDf07.setDoc_num(sdf06.getDoc_num()); sDf07.setPay_val(sdf06.getPay_val()); - sDf07.setMessageId(String.valueOf(sdf06.getGenerationId())); - sDf07.setParentId(sdf06.getMessageId() != null ? sdf06.getParentId().replaceAll("-", "") : null); + sDf07.setMessageId(messageId); + sDf07.setParentId(sdf06.getMessageId()); return sDf07; }