From ecab3cbee2fb16e71ca5143d582f854edabf94ad Mon Sep 17 00:00:00 2001 From: AKurakin Date: Wed, 18 Jan 2023 12:32:55 +0300 Subject: [PATCH] =?UTF-8?q?clearing-service=20dbf-exporter=20S=5FDF03=20S?= =?UTF-8?q?=5FDF11=20=D0=B4=D0=BB=D1=8F=20=D0=BC=D0=BD=D0=BE=D0=B6=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D0=B0=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20learing=5Fmember=5Fcategory=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=BF=D1=83=D1=81=D1=82=D0=B8=D0=BC=D0=BE=20=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=BE=D1=82=D1=87=D1=91?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20=D0=BD=D0=B0=201=20=D1=84=D0=B8=D1=80?= =?UTF-8?q?=D0=BC=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SdfCreatorBySTLDPayment.java | 27 ++++++++++--------- .../order/PaymentInstructionSorter.java | 16 ++++++----- 2 files changed, 23 insertions(+), 20 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 0dcfaef95..9d1f6bd25 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 @@ -51,9 +51,9 @@ public class SdfCreatorBySTLDPayment { Collection paymentInstructionFound = paymentImdgs.getCollectionObjectsByFieldValues( Map.of("transactionStatus", TransactionStatus.stld.getKey())); log.info("Found {} PaymentInstruction by status {}", paymentInstructionFound.size(), TransactionStatus.stld.getKey()); - Map paymentBySender = paymentInstructionFound - .stream() - //группируем по компаниям (fixme sorted убрать?) + List> paymentBySenderLst = new ArrayList<>(); + paymentInstructionFound.stream() + //группируем по компаниям .sorted(Comparator.comparing(PaymentInstruction::getSenderId)) .collect(Collectors.groupingBy(PaymentInstruction::getSenderId)) .entrySet() @@ -61,24 +61,25 @@ public class SdfCreatorBySTLDPayment { //результатом работы senderGroupSorter будет Map PaymentBatchInfo> //PaymentBatchInfo содержит возможную ошибку, при необходимости отсортированные Payment //тип ClearingMemberCategory - .map(entry -> { + .forEachOrdered(entry -> { Long senderId = entry.getKey(); List pmtInstrcs = entry.getValue(); - PaymentBatchInfo senderInfo = senderGroupSorter.sortCompanyPayments(generationId, senderId, pmtInstrcs); - if (senderInfo.getError() != null) { - anyError[0] = true; + List senderInfos = senderGroupSorter.sortCompanyPayments(generationId, senderId, pmtInstrcs); + for (PaymentBatchInfo senderInfo:senderInfos) { + if (senderInfo.getError() != null) { + anyError[0] = true; + } + paymentBySenderLst.add(new AbstractMap.SimpleEntry<>(senderId, senderInfo)); } - return new AbstractMap.SimpleEntry<>(senderId, senderInfo); - }) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + }); //save SDF03/SDF11 - log.debug("Sending save {} sdf03/sdf11", paymentBySender.size()); - for (var entry : paymentBySender.entrySet()) { + log.debug("Sending save {} sdf03/sdf11", paymentBySenderLst.size()); + for (var entry : paymentBySenderLst) { PaymentBatchInfo senderPayments = entry.getValue(); saveSdfAnSendToKafka(senderPayments, generationId); } //update PaymentInstruction.transactionStatus - for (var entry : paymentBySender.entrySet()) { + for (var entry : paymentBySenderLst) { PaymentBatchInfo batch = entry.getValue(); //все PaymentInstruction.transactionStatus в batch с error != null //уже проапдейтились в методе sortCompanyPayments diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/order/PaymentInstructionSorter.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/order/PaymentInstructionSorter.java index 9ba803e76..c898213d2 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/order/PaymentInstructionSorter.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/order/PaymentInstructionSorter.java @@ -42,14 +42,15 @@ public class PaymentInstructionSorter { this.messageResolver = messageResolver; } - public PaymentBatchInfo sortCompanyPayments(Long generationId, Long senderId, List payments) { + public List sortCompanyPayments(Long generationId, Long senderId, List payments) { + List result = new ArrayList<>(2); log.info("processing PaymentInstruction's generationId={} senderId={} size={}", generationId, senderId, payments.size()); Collection cmcList = clrngMmbrImdg.getCollectionObjectsByFieldValues(Map.of("companyId", senderId)); Collection companyCategory = cmcList.stream() - .filter(cat -> cat.getClearingMemberCategory()!=null) + .filter(cat -> cat.getClearingMemberCategory() != null) .map(cat -> IEnumKey.getEnumByKey(ClearingMemberCategoryD.class, cat.getClearingMemberCategory())) .collect(Collectors.toSet()); - for (ClearingMemberCategoryD categoryValue: companyCategory) { + for (ClearingMemberCategoryD categoryValue : companyCategory) { log.debug("For category {}", categoryValue); PaymentBatchInfo batchInfo = new PaymentBatchInfo(); batchInfo.setCategoryD(categoryValue); @@ -111,21 +112,22 @@ public class PaymentInstructionSorter { pmt.setTransactionStatus(TransactionStatus.cher.getKey()); pmtInstrctnsImdg.update(pmt); }); - return batchInfo; + result.add(batchInfo); } else { batchInfo.setFromClearingToBank(aList); batchInfo.setFromBankToClearing(bList); - return batchInfo; + result.add(batchInfo); } } else if (ClearingMemberCategoryD.B.equals(categoryValue)) { batchInfo.setInitialOrder(payments); - return batchInfo; + result.add(batchInfo); } else { log.debug("Do nothing as category {}, check next", categoryValue); // проверить следующую категорил, когда закончатся выдать ошибку } } - throw new IllegalStateException("unknown clearing member category ["+companyCategory+"] for generationId=" + log.warn("unknown clearing member category [" + companyCategory + "] for generationId=" + generationId + " companyId=" + senderId + ""); + return result; } }