From 494bafbe1842be04f8c064129b374cb69ac48e4b Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 20 Nov 2023 14:07:45 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-536 --- .../builder/PaymentInstructionBuilderV2.java | 37 ++++++++++++++++++- .../impl/FormingPaymentInstructionAssets.java | 2 + 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionBuilderV2.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionBuilderV2.java index bb3667c39..bd9329402 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionBuilderV2.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionBuilderV2.java @@ -4,7 +4,9 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanyRoleSet; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.registry.Registry; @@ -12,6 +14,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.time.TimeUtil; import java.math.BigDecimal; @@ -27,6 +30,8 @@ public class PaymentInstructionBuilderV2 { private ImdgProvider imdgProvider; private Imdg companyImdg; private Imdg companySymbolsImdg; + private final Imdg clearingCategoryImdg; + private final Imdg cmpRoleImdg; private Long sessionId; private BigDecimal amount; private Account creditLegAccount; @@ -37,6 +42,7 @@ public class PaymentInstructionBuilderV2 { private static final DateTimeFormatter DATE_FORMATTER_ddMMyy = DateTimeFormatter.ofPattern("ddMMyy"); private Long senderId; private Long addresseeId; + private boolean useCS_BLKD = false; public static PaymentInstructionBuilderV2 builder(ImdgProvider imdgProvider) { return new PaymentInstructionBuilderV2(imdgProvider); @@ -46,6 +52,13 @@ public class PaymentInstructionBuilderV2 { this.imdgProvider = imdgProvider; this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + this.clearingCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); + this.cmpRoleImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class); + } + + public PaymentInstructionBuilderV2 useCS_BLKD(boolean useCS_BLKD) { + this.useCS_BLKD = useCS_BLKD; + return this; } public PaymentInstructionBuilderV2 sessionId(Long sessionId) { @@ -128,7 +141,12 @@ public class PaymentInstructionBuilderV2 { payment.setPaymentDate(Instant.now()); payment.setSettlementDate(LocalDate.now()); } - payment.setPaymentPurpose(purpose); + + if (useCS_BLKD && categoryVInitiator(senderId) && companyRoleODEPPresent(senderId)) { + payment.setPaymentPurpose("CS_BLKD " + purpose); + } else { + payment.setPaymentPurpose(purpose); + } payment.setCreditLeg_amount(amount); payment.setDebitLeg_amount(amount); @@ -193,4 +211,21 @@ public class PaymentInstructionBuilderV2 { return cSymbol.getCompanySymbolValue(); } } + + public boolean categoryVInitiator(Long companyId) { + ClearingMemberCategory category = clearingCategoryImdg.getFirstObjectByFieldValues( + Map.of("companyId", companyId)); + ClearingCategory ctg = IEnumKey.getEnumByKey(ClearingCategory.class, category.getClearingMemberCategory()); + return ctg != null && ctg.equals(ClearingCategory.V); + } + + public boolean companyRoleODEPPresent(Long companyId) { + return cmpRoleImdg.getFirstObjectBySQL( + "companyId = %d and companyRole = '%s' and workflowStatus = '%s'".formatted( + companyId, + CompanyRole.ODEP.getKey(), + WorkflowStatus.Active.getKey() + ) + ) != null; + } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionAssets.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionAssets.java index 89e020f81..30a2b7b47 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionAssets.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionAssets.java @@ -215,6 +215,7 @@ public class FormingPaymentInstructionAssets implements ISessionStage { .creditLegAccount(creditLegAccount) .amount(amount) .sessionId(sessionId) + .useCS_BLKD(SessionType.FINL.equals(sessionType) || SessionType.MEDM.equals(sessionType)) .purpose(String.format("Перевод по итогу клиринга по ТКР %s", registry.getTradingClearingRegistry())); PaymentInstruction paymentInstruction = paymentInstructionBuilder.build(); log.debug("Created paymentInstruction by registry.id: {}", registry.getId()); @@ -281,6 +282,7 @@ public class FormingPaymentInstructionAssets implements ISessionStage { .sender(senderId) .addressee(addresseeId) .debitLegAccount(debitLegAccount) + .useCS_BLKD(SessionType.FINL.equals(sessionType) || SessionType.MEDM.equals(sessionType)) .creditLegAccount(creditLegAccount) .amount(amount) .sessionId(sessionId)