clearing-service dbf-exporter S_DF03 S_DF11 для множества вариантов learing_member_category допустимо несколько отчётов на 1 фирму

This commit is contained in:
AKurakin 2023-01-18 12:32:55 +03:00
parent c1de35e101
commit ecab3cbee2
2 changed files with 23 additions and 20 deletions

View file

@ -51,9 +51,9 @@ public class SdfCreatorBySTLDPayment {
Collection<PaymentInstruction> paymentInstructionFound = paymentImdgs.getCollectionObjectsByFieldValues( Collection<PaymentInstruction> paymentInstructionFound = paymentImdgs.getCollectionObjectsByFieldValues(
Map.of("transactionStatus", TransactionStatus.stld.getKey())); Map.of("transactionStatus", TransactionStatus.stld.getKey()));
log.info("Found {} PaymentInstruction by status {}", paymentInstructionFound.size(), TransactionStatus.stld.getKey()); log.info("Found {} PaymentInstruction by status {}", paymentInstructionFound.size(), TransactionStatus.stld.getKey());
Map<Long, PaymentBatchInfo> paymentBySender = paymentInstructionFound List<AbstractMap.SimpleEntry<Long, PaymentBatchInfo>> paymentBySenderLst = new ArrayList<>();
.stream() paymentInstructionFound.stream()
//группируем по компаниям (fixme sorted убрать?) //группируем по компаниям
.sorted(Comparator.comparing(PaymentInstruction::getSenderId)) .sorted(Comparator.comparing(PaymentInstruction::getSenderId))
.collect(Collectors.groupingBy(PaymentInstruction::getSenderId)) .collect(Collectors.groupingBy(PaymentInstruction::getSenderId))
.entrySet() .entrySet()
@ -61,24 +61,25 @@ public class SdfCreatorBySTLDPayment {
//результатом работы senderGroupSorter будет Map<senderId -> PaymentBatchInfo> //результатом работы senderGroupSorter будет Map<senderId -> PaymentBatchInfo>
//PaymentBatchInfo содержит возможную ошибку, при необходимости отсортированные Payment //PaymentBatchInfo содержит возможную ошибку, при необходимости отсортированные Payment
//тип ClearingMemberCategory //тип ClearingMemberCategory
.map(entry -> { .forEachOrdered(entry -> {
Long senderId = entry.getKey(); Long senderId = entry.getKey();
List<PaymentInstruction> pmtInstrcs = entry.getValue(); List<PaymentInstruction> pmtInstrcs = entry.getValue();
PaymentBatchInfo senderInfo = senderGroupSorter.sortCompanyPayments(generationId, senderId, pmtInstrcs); List<PaymentBatchInfo> senderInfos = senderGroupSorter.sortCompanyPayments(generationId, senderId, pmtInstrcs);
if (senderInfo.getError() != null) { for (PaymentBatchInfo senderInfo:senderInfos) {
anyError[0] = true; 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 //save SDF03/SDF11
log.debug("Sending save {} sdf03/sdf11", paymentBySender.size()); log.debug("Sending save {} sdf03/sdf11", paymentBySenderLst.size());
for (var entry : paymentBySender.entrySet()) { for (var entry : paymentBySenderLst) {
PaymentBatchInfo senderPayments = entry.getValue(); PaymentBatchInfo senderPayments = entry.getValue();
saveSdfAnSendToKafka(senderPayments, generationId); saveSdfAnSendToKafka(senderPayments, generationId);
} }
//update PaymentInstruction.transactionStatus //update PaymentInstruction.transactionStatus
for (var entry : paymentBySender.entrySet()) { for (var entry : paymentBySenderLst) {
PaymentBatchInfo batch = entry.getValue(); PaymentBatchInfo batch = entry.getValue();
//все PaymentInstruction.transactionStatus в batch с error != null //все PaymentInstruction.transactionStatus в batch с error != null
//уже проапдейтились в методе sortCompanyPayments //уже проапдейтились в методе sortCompanyPayments

View file

@ -42,14 +42,15 @@ public class PaymentInstructionSorter {
this.messageResolver = messageResolver; this.messageResolver = messageResolver;
} }
public PaymentBatchInfo sortCompanyPayments(Long generationId, Long senderId, List<PaymentInstruction> payments) { public List<PaymentBatchInfo> sortCompanyPayments(Long generationId, Long senderId, List<PaymentInstruction> payments) {
List<PaymentBatchInfo> result = new ArrayList<>(2);
log.info("processing PaymentInstruction's generationId={} senderId={} size={}", generationId, senderId, payments.size()); log.info("processing PaymentInstruction's generationId={} senderId={} size={}", generationId, senderId, payments.size());
Collection<ClearingMemberCategory> cmcList = clrngMmbrImdg.getCollectionObjectsByFieldValues(Map.of("companyId", senderId)); Collection<ClearingMemberCategory> cmcList = clrngMmbrImdg.getCollectionObjectsByFieldValues(Map.of("companyId", senderId));
Collection<ClearingMemberCategoryD> companyCategory = cmcList.stream() Collection<ClearingMemberCategoryD> companyCategory = cmcList.stream()
.filter(cat -> cat.getClearingMemberCategory()!=null) .filter(cat -> cat.getClearingMemberCategory() != null)
.map(cat -> IEnumKey.getEnumByKey(ClearingMemberCategoryD.class, cat.getClearingMemberCategory())) .map(cat -> IEnumKey.getEnumByKey(ClearingMemberCategoryD.class, cat.getClearingMemberCategory()))
.collect(Collectors.toSet()); .collect(Collectors.toSet());
for (ClearingMemberCategoryD categoryValue: companyCategory) { for (ClearingMemberCategoryD categoryValue : companyCategory) {
log.debug("For category {}", categoryValue); log.debug("For category {}", categoryValue);
PaymentBatchInfo batchInfo = new PaymentBatchInfo(); PaymentBatchInfo batchInfo = new PaymentBatchInfo();
batchInfo.setCategoryD(categoryValue); batchInfo.setCategoryD(categoryValue);
@ -111,21 +112,22 @@ public class PaymentInstructionSorter {
pmt.setTransactionStatus(TransactionStatus.cher.getKey()); pmt.setTransactionStatus(TransactionStatus.cher.getKey());
pmtInstrctnsImdg.update(pmt); pmtInstrctnsImdg.update(pmt);
}); });
return batchInfo; result.add(batchInfo);
} else { } else {
batchInfo.setFromClearingToBank(aList); batchInfo.setFromClearingToBank(aList);
batchInfo.setFromBankToClearing(bList); batchInfo.setFromBankToClearing(bList);
return batchInfo; result.add(batchInfo);
} }
} else if (ClearingMemberCategoryD.B.equals(categoryValue)) { } else if (ClearingMemberCategoryD.B.equals(categoryValue)) {
batchInfo.setInitialOrder(payments); batchInfo.setInitialOrder(payments);
return batchInfo; result.add(batchInfo);
} else { } else {
log.debug("Do nothing as category {}, check next", categoryValue); 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 + ""); + generationId + " companyId=" + senderId + "");
return result;
} }
} }