From a6c6a7d733bdef408bb8dbea5f4d9a50e5c1d205 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 8 Feb 2023 13:36:48 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-130 --- .../service/SdfCreatorBySTLDPayment.java | 8 ++-- .../service/builder/Sdf03Builder.java | 38 ++++++++++++++++--- .../service/builder/Sdf11Builder.java | 37 +++++++++++++++--- .../ru/spcex/platform/enumeration/Sender.java | 2 +- 4 files changed, 69 insertions(+), 16 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java index d73d9d0d8..65edfa9ab 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java @@ -4,6 +4,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.generated.ClearingMemberCategory; import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.sdf.SDf03; @@ -22,7 +23,6 @@ import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.collection.Pair; import ru.spcex.platform.utils.enumeration.IEnumKey; -import ru.spcex.platform.utils.text.TextUtil; import java.util.*; import java.util.function.Function; @@ -34,6 +34,7 @@ public class SdfCreatorBySTLDPayment { private Logger log = LoggerFactory.getLogger(getClass()); private final Imdg paymentImdgs; private final Imdg clearingMemberCategoryImdg; + private final Imdg companyImdg; private final ImdgId idGenerator; private final PaymentInstructionSorter senderGroupSorter; private final Imdg sdf03Imdg; @@ -46,6 +47,7 @@ public class SdfCreatorBySTLDPayment { this.clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); this.sdf03Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf03, SDf03.class); this.sdf11Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf11, SDf11.class); + this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.idGenerator = imdgProvider.getImdgIdGenerator(); this.senderGroupSorter = senderGroupSorter; this.kafkaSender = kafkaSender; @@ -123,12 +125,12 @@ public class SdfCreatorBySTLDPayment { Long requestId = null; if (category.equals(ClearingCategory.I) || category.equals(ClearingCategory.V)) { batch.stream() - .map(paymentInstruction -> Sdf03Builder.buildSdf03(paymentInstruction, generationId)) + .map(paymentInstruction -> new Sdf03Builder(companyImdg).buildSdf03(paymentInstruction, generationId)) .forEach(sdf03Imdg::insert); requestId = kafkaSender.sendRequestToQueue(Consts.SDF03_PROCESS, kafkaMessage); } else if (category.equals(ClearingCategory.B)) { batch.stream() - .map(paymentInstruction -> Sdf11Builder.buildSdf11(paymentInstruction, generationId)) + .map(paymentInstruction -> new Sdf11Builder(companyImdg).buildSdf11(paymentInstruction, generationId)) .forEach(sdf11Imdg::insert); requestId = kafkaSender.sendRequestToQueue(Consts.SDF11_PROCESS, kafkaMessage); } else { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/Sdf03Builder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/Sdf03Builder.java index 628619fd0..a57d5d9b3 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/Sdf03Builder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/Sdf03Builder.java @@ -1,30 +1,56 @@ package ru.spcex.clearing.service.builder; +import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.sdf.SDf03; import ru.spcex.clearing.service.SpecifUtil; import ru.spcex.platform.enumeration.Sender; +import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.utils.time.TimeUtil; import java.time.Instant; import java.time.LocalDate; public class Sdf03Builder { - public static SDf03 buildSdf03(PaymentInstruction paymentInstruction, Long generationId) { + private final Imdg companyImdg; + + public Sdf03Builder(Imdg companyImdg) { + this.companyImdg = companyImdg; + } + + + public SDf03 buildSdf03(PaymentInstruction paymentInstruction, Long generationId) { SDf03 sDf03 = new SDf03(); - sDf03.setSeg_type("S"); + sDf03.setSeg_type("U"); sDf03.setDoc_type("002"); sDf03.setDocnm_ref(paymentInstruction.getId().toString()); sDf03.setPriority("9"); sDf03.setSbankcode(Sender.Prc.equalsById(paymentInstruction.getSenderId()) ? "@09999" : "@0"); sDf03.setC_acc_deb(paymentInstruction.getDebitLegAccount()); - sDf03.setSbanknam1(paymentInstruction.getPayeeBankName()); + if (paymentInstruction.getSenderId().equals(Sender.One.getId())) { + sDf03.setSbanknam1(paymentInstruction.getPayeeBankName()); + } else { + Company company = companyImdg.getSingleObjectByID(paymentInstruction.getSenderId()); + if (company != null) { + sDf03.setSbanknam1(company.getShortName()); + } + } // =@00100, если ?; // =@00000, если ?. - sDf03.setRbankcode(Sender.Prc.equalsById(paymentInstruction.getSenderId()) ? "@09999" : "@0"); + sDf03.setRbankcode(Sender.One.equalsById(paymentInstruction.getSenderId()) ? "@09999" : "@0"); sDf03.setC_acc_cred(paymentInstruction.getCreditLegAccount()); - sDf03.setRbanknam1(paymentInstruction.getAddresseeBankName()); - sDf03.setPay_date(LocalDate.now().format(TimeUtil.PROPERTY_DATE_FORMATTER)); + if (paymentInstruction.getAddresseeId().equals(Sender.One.getId())) { + sDf03.setRbanknam1(paymentInstruction.getAddresseeBankName()); + } else { + Company company = companyImdg.getSingleObjectByID(paymentInstruction.getAddresseeId()); + if (company != null) { + sDf03.setRbanknam1(company.getShortName()); + } + } + LocalDate paymtDt = TimeUtil.toLocalDate(paymentInstruction.getPaymentDate()); + if (paymtDt != null) { + sDf03.setPay_date(paymtDt.format(TimeUtil.PROPERTY_DATE_FORMATTER)); + } sDf03.setPay_val("RUR"); sDf03.setSum_deb(paymentInstruction.getDebitLegAmount() != null ? paymentInstruction.getDebitLegAmount().toString() : null); //37 sp_code varchar(2) Код назначения платежа diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/Sdf11Builder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/Sdf11Builder.java index 6818a776a..94d6d3c14 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/Sdf11Builder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/Sdf11Builder.java @@ -1,30 +1,55 @@ package ru.spcex.clearing.service.builder; +import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.sdf.SDf11; import ru.spcex.clearing.service.SpecifUtil; import ru.spcex.platform.enumeration.Sender; +import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.utils.time.TimeUtil; import java.time.Instant; import java.time.LocalDate; public class Sdf11Builder { - public static SDf11 buildSdf11(PaymentInstruction paymentInstruction, Long generationId) { + private final Imdg companyImdg; + + public Sdf11Builder(Imdg companyImdg) { + this.companyImdg = companyImdg; + } + + public SDf11 buildSdf11(PaymentInstruction paymentInstruction, Long generationId) { SDf11 sDf11 = new SDf11(); - sDf11.setSeg_type("S"); + sDf11.setSeg_type("U"); sDf11.setDoc_type("002"); sDf11.setDocnm_ref(paymentInstruction.getId().toString()); sDf11.setPriority("9"); sDf11.setSbankcode(Sender.Prc.equalsById(paymentInstruction.getSenderId()) ? "@09999" : "@0"); sDf11.setC_acc_deb(paymentInstruction.getDebitLegAccount()); - sDf11.setSbanknam1(paymentInstruction.getPayeeBankName()); + if (paymentInstruction.getSenderId().equals(Sender.One.getId())) { + sDf11.setSbanknam1(paymentInstruction.getPayeeBankName()); + } else { + Company company = companyImdg.getSingleObjectByID(paymentInstruction.getSenderId()); + if (company != null) { + sDf11.setSbanknam1(company.getShortName()); + } + } // =@00100, если ?; // =@00000, если ?. - sDf11.setRbankcode(Sender.Prc.equalsById(paymentInstruction.getSenderId()) ? "@09999" : "@0"); + sDf11.setRbankcode(Sender.One.equalsById(paymentInstruction.getSenderId()) ? "@09999" : "@0"); sDf11.setC_acc_cred(paymentInstruction.getCreditLegAccount()); - sDf11.setRbanknam1(paymentInstruction.getAddresseeBankName()); - sDf11.setPay_date(LocalDate.now().format(TimeUtil.PROPERTY_DATE_FORMATTER)); + if (paymentInstruction.getAddresseeId().equals(Sender.One.getId())) { + sDf11.setRbanknam1(paymentInstruction.getAddresseeBankName()); + } else { + Company company = companyImdg.getSingleObjectByID(paymentInstruction.getAddresseeId()); + if (company != null) { + sDf11.setRbanknam1(company.getShortName()); + } + } + LocalDate paymtDt = TimeUtil.toLocalDate(paymentInstruction.getPaymentDate()); + if (paymtDt != null) { + sDf11.setPay_date(paymtDt.format(TimeUtil.PROPERTY_DATE_FORMATTER)); + } sDf11.setPay_val("RUR"); sDf11.setSum_deb(paymentInstruction.getDebitLegAmount() != null ? paymentInstruction.getDebitLegAmount().toString() : null); //37 sp_code varchar(2) Код назначения платежа diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Sender.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Sender.java index f4f822c5c..2c2fa94f3 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Sender.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Sender.java @@ -3,7 +3,7 @@ package ru.spcex.platform.enumeration; import ru.spcex.platform.utils.enumeration.IEnumId; public enum Sender implements IEnumId { - Prc(2L); + One(1L), Prc(2L); private final Long key;