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

    +71

    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
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    @Override
        List search(Long ownerId, Long projectId, String docnumber, String ctr1, String ctr2, Long dateFrom, Long dateTo, String contract,
                    Double amountFrom, Double amountTo, Double vatAmountFrom, Double vatAmountTo, Double withVatAmountFrom,
                    Double withVatAmountTo, Boolean defect, DocumentDefect d, Long vatId, Integer limit, String sortField, String order, String docType) {
    
            // доступные проекты
            List projects = projectDAO.findAll(ownerId)
            
            if(!projects){
                logger.warn("Ошибка отображения списка документов: нет доступных проектов: ownerId:$ownerId")
                return []
            }
            
            Criteria criteria = currentSession.createCriteria(DocumentView)
                .createAlias("document", "d")//
                .createAlias("d.project", "p")//
                .add(Restrictions.in("p.id", projects.id))//
    
    //            if(projectId)
    //                criteria.add(Restrictions.eq("d.project.id", projectId))
    
            if (docnumber)
                criteria.add(Restrictions.ilike("docNumber", docnumber, MatchMode.ANYWHERE))
            if (ctr1)
                criteria.add(Restrictions.ilike("supplierName", ctr1, MatchMode.ANYWHERE))
            if (ctr2)
                criteria.add(Restrictions.ilike("customerName", ctr2, MatchMode.ANYWHERE))
            if (dateFrom) {
                Calendar date1 = Calendar.instance
                date1.setTime(new Date(dateFrom))
                criteria.add(Restrictions.ge("docDate", date1))
            }
            if (dateTo) {
                Calendar date1 = Calendar.instance
                date1.setTime(new Date(dateTo))
                date1.add(Calendar.DAY_OF_MONTH, 1)
                criteria.add(Restrictions.lt("docDate", date1))
            }
            if (contract)
                criteria.add(Restrictions.ilike("contract", contract, MatchMode.ANYWHERE))
            if (amountFrom)
                criteria.add(Restrictions.ge("amount", amountFrom))
            if (amountTo)
                criteria.add(Restrictions.le("amount", amountTo))
            if (vatAmountFrom)
                criteria.add(Restrictions.ge("vatAmount", vatAmountFrom))
            if (vatAmountTo)
                criteria.add(Restrictions.le("vatAmount", vatAmountTo))
            if (withVatAmountFrom)
                criteria.add(Restrictions.ge("totalAmount", withVatAmountFrom))
            if (withVatAmountTo)
                criteria.add(Restrictions.le("totalAmount", withVatAmountTo))
            if (defect) {
                criteria.add(Restrictions.isNotNull("defect"))
                if (d)
                    criteria.add(Restrictions.eq("defect", d))
            }
    //        if (vatId)
    //            criteria.add(Restrictions.eq("d.", withVatAmountTo))
    
            if (docType) {
                def dt = DocumentType.values().find { it.link == docType || it.code == docType }
                if (dt)
                    criteria.add(Restrictions.like("docLink", dt.code, MatchMode.START))
                else
                    logger.error("Неправильное значение параметра фильтрации по виду документа [d_t:$docType]. Допустимые значения ${DocumentType.values().code}")
            }
    
            // получаем общее кол-во записей без ограничений по странице
            def rowCount = criteria.setProjection(Projections.rowCount()).uniqueResult() as Integer
    
            List result = criteria.setProjection(null)//
                    .setResultTransformer(Criteria.ROOT_ENTITY)//
                    .addOrder(Order."$order"(sortField))//
                    .setMaxResults(limit)//
                    .list()
    
            [rowCount, result]
    
        }

    поиск ?!

    Запостил: floppy, 20 Декабря 2013

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

    • Глядя на эту "линейку" входных параметров, я тоже вспомнил как один парень из одной контры на заре карьеры, с упорством барана доказывал мне что в метод и по 100 параметров можно передавать. Главным аргументом было: "Но ведь работает же!". Там кстати тоже были vatAmountTo и withVatAmountTo.
      Ответить
      • я плакал кровью... аргумент кстати был тот же
        Ответить
    • Сам код вроде ничего. Сигнатура метода безусловно говно.
      Ответить
      • Но в этом виноват по большей части язык. Были бы именованные параметры хотя бы, проблемы бы не было. А так имеем что имеем — либо жесть из поста, либо билдеры билдеров фабрик билдеров.
        Ответить
        • Прочел комент в стоке и понял, что речь о яве.
          Ответить
        • >А так имеем что имеем — либо жесть из поста
          Либо передача парметром структуры (POJO).
          Копировать столько данных через стек - однозначное западло, вне зависимости от именованных параметров и языка.
          Ответить
          • >>передача парметром структуры
            +1
            Всегда так делаю в дельфях. А вообще, года 4 назад прочел у msrem-a, что в целях выйгрыша в скорости целесообразнее передавать в процедуру или функцию не более 3-4 параметров. Асм я так хорошо не знаю, но могу предположить, что в этом случае не будут задействованы дополнительные регистры.
            Ответить
            • Тут не асм, тут jbc. В данном случае количество роли не играет
              Ответить
            • В делфе структуры по значению, а в жавке по значению только примитивные типы.
              Ответить
              • Проще - в жабе нет структур
                Ответить
                • В жабе есть почти структуры, если все типы в них - примитивные (численные/булевы)
                  Ответить
                • Уточнение в скобках (POJO) было специально для любителей придраться к букве.
                  Ответить
              • > В делфе структуры по значению
                Не всегда, можно поюзать var или const, чтобы передать по ссылке.
                Ответить
            • >целесообразнее передавать в процедуру или функцию не более 3-4 параметров
              А Вы свой человек, я посмотрю.
              Ответить
      • А нельзя было какой -нибудь структурой все оформить и передавать листом, по которому будут выполняться инструкции?

        Ну то есть передается набор команд, которые выполняются в зависимости от их контекста.
        Ответить
        • конечно можно, и даже нужно... но поди объясни
          Ответить
    • по мне 2, 3 параметра максимум, дальше тока каша получается.
      Этот метод тоже каша, причем полная.
      Ответить
    • .addOrder(Order."$order"(sortField))//

      Это точно жава?
      Ответить
    • сначала прочитал crаteria вместо criteria, подумал чувак в метроида переиграл)
      Ответить
    • groovy + hibernate здесь вижу я
      Ответить

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