diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java index 8cdbb6d2a..ea7db2f9b 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java @@ -101,13 +101,13 @@ public class AccountBalanceService { public void updateAccountBalanceByClearing(AccountBalanceClearingRequest req) { ClearingCategory category = getClearingCategoryByCompanyId(req.getCompanyId()); req.setFirstLegAmount(safeBD(req.getFirstLegAmount())); - if (category.equals(ClearingCategory.I)) { + if (ClearingCategory.I.equals(category)) { updateAccountCategoryIClrn(req.getAccountId(), req.getCompanyId(), req.getFirstLegAmount()); updateAccountCategoryITran(req.getFirstLegAmount()); - } else if (category.equals(ClearingCategory.V)) { + } else if (ClearingCategory.V.equals(category)) { updateAccountCategoryVInfo(req.getAccountId(), req.getCompanyId(), req.getFirstLegAmount()); updateAccountCategoryVAnlt(req.getFirstLegAmount()); - } else if (category.equals(ClearingCategory.B)) { + } else if (ClearingCategory.B.equals(category)) { updateAccountCategoryBClrn(req.getAccountId(), req.getCompanyId(), req.getFirstLegAmount()); } } 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 89b515660..3d3295909 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 @@ -59,25 +59,7 @@ public class SdfCreatorBySTLDPayment { Map.of("transactionStatus", TransactionStatus.stld.getKey())); log.info("Found {} PaymentInstruction by status {}", paymentInstructionFound.size(), TransactionStatus.stld.getKey()); /*Map> byOrder = */ - List>>> allEntries = paymentInstructionFound.stream().flatMap(paymentInstruction -> { - ClearingCategory clearingCategory = getClearingCategory(paymentInstruction); - Long senderId = paymentInstruction.getSenderId(); - if (senderId == null) { - return Stream.empty(); - } else { - return Stream.of(new Pair<>(new GroupWrapper(clearingCategory, senderId), paymentInstruction)); - } - //группируем по equals/hashCode группы - }).collect(Collectors.groupingBy(Pair::getFirst, Collectors.mapping(Pair::getSecond, Collectors.toList()))) - .entrySet() - .stream() - //сортируем по группе compareTo - .sorted(Map.Entry.comparingByKey()) - //преобразуем поток entry>, разбиваем список на группы по senderId - .map((Function>, Map.Entry>>>) entry -> { - Collection> values = entry.getValue().stream().collect(Collectors.groupingBy(PaymentInstruction::getSenderId)).values(); - return new AbstractMap.SimpleEntry<>(entry.getKey(), values); - }).toList(); + List>>> allEntries = group(paymentInstructionFound); allEntries.forEach(entry -> { log.info("Group category {}, index {}", entry.getKey().category, entry.getKey().getSortIndex()); @@ -112,6 +94,28 @@ public class SdfCreatorBySTLDPayment { }); } + public List>>> group(Collection payments) { + return payments.stream().flatMap(paymentInstruction -> { + ClearingCategory clearingCategory = getClearingCategory(paymentInstruction); + Long senderId = paymentInstruction.getSenderId(); + if (senderId == null) { + return Stream.empty(); + } else { + return Stream.of(new Pair<>(new GroupWrapper(clearingCategory, senderId), paymentInstruction)); + } + //группируем по equals/hashCode группы + }).collect(Collectors.groupingBy(Pair::getFirst, Collectors.mapping(Pair::getSecond, Collectors.toList()))) + .entrySet() + .stream() + //сортируем по группе compareTo + .sorted(Map.Entry.comparingByKey()) + //преобразуем поток entry>, разбиваем список на группы по senderId + .map((Function>, Map.Entry>>>) entry -> { + Collection> values = entry.getValue().stream().collect(Collectors.groupingBy(PaymentInstruction::getSenderId)).values(); + return new AbstractMap.SimpleEntry<>(entry.getKey(), values); + }).toList(); + } + private void saveSdfAnSendToKafka(Long senderId, ClearingCategory category, List batch, Long generationId) { SdfClearingRequest kafkaMessage = new SdfClearingRequest(); kafkaMessage.setGroupId(generationId); @@ -132,9 +136,9 @@ public class SdfCreatorBySTLDPayment { log.debug("Send to kafka command, CategoryD={}, requestId={}", category, requestId); } - private static class GroupWrapper implements Comparable { - private Long senderId; - private ClearingCategory category; + public static class GroupWrapper implements Comparable { + private final Long senderId; + private final ClearingCategory category; public GroupWrapper(ClearingCategory clearingCategory, Long senderId) { this.category = clearingCategory; @@ -174,7 +178,7 @@ public class SdfCreatorBySTLDPayment { } } - private ClearingCategory getClearingCategory(PaymentInstruction paymentInstruction) { + ClearingCategory getClearingCategory(PaymentInstruction paymentInstruction) { ClearingMemberCategory category = clearingMemberCategoryImdg.getSingleObjectByFieldValues( Map.of("companyId", paymentInstruction.getSenderId())); return IEnumKey.getEnumByKeyOrUndefined(ClearingCategory.class,