1. Java / Говнокод #18421

    +66

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    Map<Organization, Collection<IFormula>> comissionFormulasMap = getComissionFormulae(bank, service, a);
                transIterator:
                for (Transaction T : afterBillingMemorandum) {//для каждой транзакции
    
                    if (comissionFormulasMap.isEmpty()) {
                        //System.out.println("Нет формулы для комиссии");
                        afterComissionSet.add(T); //если нет формулы для определения комиссии транзакция попадает в список на расщепление
                    } else {
                        BigDecimal transactionStartValue = T.getStartValue();
                        Set<Transaction> afterComissionForCurrent = new HashSet<>();
                        BigDecimal fullTax = BigDecimal.ZERO;
                        Collection<IFormula> comissionsAKT = new LinkedList<>();
    
                        for (Map.Entry<Organization, Collection<IFormula>> comissionsByBank : comissionFormulasMap.entrySet()) {
                            Organization comissionBank = comissionsByBank.getKey();
                            for (IFormula f : comissionsByBank.getValue()) {//для каждой формулы по комиссии
                                GeneratedTransactionTypes transactionType = f.getGeneratedTransactionTypes(comissionBank);
    
                                if (transactionType == GeneratedTransactionTypes.AKT) {
                                    comissionsAKT.add(f);
                                } else {
                                    BigDecimal commie = f.commission(transactionStartValue);//Определяем значение комиссии
                                    if (commie.compareTo(BigDecimal.ZERO) == 0)
                                        continue; //Комиссия 0 нам не интересна, переходим к следующей формуле
                                    fullTax = fullTax.add(commie);//складываем комиссии
                                    if (fullTax.compareTo(transactionStartValue) == 1) {
                                        log.error("Помилка зняття комісії. Сума комісій більша 100 %. Транзакція не буде оброблена. Транзакція: {}", T.toBaseString());
                                        continue transIterator;
                                    } else {
                                        afterComissionForCurrent.add(T.getComissionTransaction(f.getOrganization(), commie, transactionType));
                                    }
                                }
                            }
                        }
    //
    //                    afterComissionSet.addAll(afterComissionForCurrent);
    //                    afterComissionForCurrent.clear();
    
                        //Далі зняття по акту
                        BigDecimal afterComissionStartValue = transactionStartValue.subtract(fullTax);
                        BigDecimal aktFullTax = BigDecimal.ZERO;
                        for (IFormula f : comissionsAKT) {
                            GeneratedTransactionTypes transactionType = GeneratedTransactionTypes.AKT;
    
                            BigDecimal commie = f.commission(afterComissionStartValue);
                            if (commie.compareTo(BigDecimal.ZERO) == 0)
                                continue;
                            BigDecimal newFullTax = aktFullTax.add(commie);
                            if (newFullTax.compareTo(afterComissionStartValue) > 0) {
                                continue;
                            }
                            aktFullTax = newFullTax;
                            afterComissionForCurrent.add(T.getComissionTransaction(f.getOrganization(), commie, transactionType));
                        }
    
    
                        afterComissionSet.add(T.getRestTransaction(fullTax.add(aktFullTax)));
                        afterComissionSet.addAll(afterComissionForCurrent);
                    }
                }

    Писал один товарещ, притом взрослый и сформировавшийся как личность )

    Запостил: ekh, 30 Июня 2015

    Комментарии (2) RSS

    Добавить комментарий