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; } }