forum.bitel.ru http://forum.bitel.ru/ |
|
[BUG] При тарификации появляются некорректные дроби (CRM) http://forum.bitel.ru/viewtopic.php?f=17&t=10371 |
Страница 1 из 1 |
Автор: | Cromeshnic [ 06 апр 2015, 15:28 ] |
Заголовок сообщения: | [BUG] При тарификации появляются некорректные дроби |
Дано: плоский тариф 0.6р за единицу услуги Количество = 555632 Считаем на калькуляторе - получается 333379.2 Считаем модулем RSCM - получаем 333379.21875 Не можем выставить счета клиентам из-за этого. Код: mysql> select * from rscm_service_account_5_201504 where cid=204561; +-------+--------+-----+------------+--------+---------+ | id | cid | sid | date | amount | comment | +-------+--------+-----+------------+--------+---------+ | 31931 | 204561 | 591 | 2015-04-30 | 555632 | | +-------+--------+-----+------------+--------+---------+ 1 row in set (0.01 sec) mysql> select * from contract_account where cid=204561; +------+----+--------+-----+--------------+ | yy | mm | cid | sid | summa | +------+----+--------+-----+--------------+ | 2015 | 4 | 204561 | 591 | 333379.21875 | +------+----+--------+-----+--------------+ 1 row in set (0.00 sec) mysql> select * from mtree_node where id=234389; +--------+-------------+----------+------+----------------+-----+ | id | parent_node | mtree_id | type | data | pos | +--------+-------------+----------+------+----------------+-----+ | 234389 | 234387 | 24291 | cost | col&1%cost&0.6 | 0 | +--------+-------------+----------+------+----------------+-----+ 1 row in set (0.00 sec) Посмотрел по коду - вроде тоже всё просто. Но куча приведений типов к float, double. Возможно где-то тут косяк. (При делении на float-единицу? ) Сервер: вер. 5.2 сборка 1618 от 28.01.2015 21:38:59 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_22 rscm вер. 5.2 сборка 173 от 15.04.2014 11:37:53 |
Автор: | Cromeshnic [ 06 апр 2015, 15:37 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби |
Написал BGBS-скрипт для проверки на основе декомпиленного кода из RSCM: Код: long amount = 555632L; Long divisor = 1L; Float cost = 0.6; double summa = (float)amount * (cost.floatValue() / (float)divisor.longValue()); print(summa); выдаёт те же самые лишние копейки: Код: GENERATE_TIME: 06.04.15 17:33:39 EXECUTION_STOP_TIME: 06.04.15 17:33:39 PROCESS_TIME: 59 OUT: 333379.21875 Ну т.е. 100% баг |
Автор: | Cromeshnic [ 06 апр 2015, 15:50 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби |
http://habrahabr.ru/post/112953/ п.4. Впрочем, разработчики всё это уже давно знают, я думаю. Даже где-то всплывало тут вроде. Просто модуль RSCM похоже очень давно написан. |
Автор: | skn [ 06 апр 2015, 20:47 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби |
пофиксили, проверяйте |
Автор: | Cromeshnic [ 07 апр 2015, 08:16 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
Спасибо за оперативность. Уже выставили руками, обновимся на следующей неделе. |
Автор: | Cromeshnic [ 16 апр 2015, 07:26 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
Обновился, проверил - всё ок. Теперь посчитал как нужно - 333379.20 |
Автор: | Cromeshnic [ 29 апр 2015, 11:31 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
Алярм! После обновления сломались тарифы, в которых цена указана за x единиц услуги. Например, цена 0.10 за 1024 единицы В результате выдаёт всегда 0, т.к. при обсчёте: Код: amount.multiply(cost.divide(divisor, RoundingMode.HALF_UP)) Т.е. сначала мы 0.10 делим на 1024, а уже затем умножаем на amount! Судя по документации BigDecimal, после cost.divide(divisor, RoundingMode.HALF_UP) он сразу делает округление до scale объекта cost (т.е. до 2 знаков) - получаем цену за 1 единицу=0. Можете пофиксить оперативно для 5.2? Нам счета скоро выставлять. |
Автор: | Cromeshnic [ 29 апр 2015, 11:38 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
О, я придумал хак временный: указываем в тарифе цену не 0.1 и не 0.10, а 0.10000000000 - тогда считает верно. Т.е. баг есть, но можно временно его обойти задав нужный scale строки. Фишка в том, что в конструкторе BigDecimal при создании из строки берётся scale этой строки. |
Автор: | Cromeshnic [ 29 апр 2015, 12:58 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
Fix будет? |
Автор: | stark [ 29 апр 2015, 13:01 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
Cromeshnic писал(а): Fix будет? да, озадачили человека. |
Автор: | Cromeshnic [ 29 апр 2015, 13:29 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
Второй баг - перестал работать узел "Множитель цены": bitel.billing.server.tariff.MultCostTariffTreeNode: Код: ... if (minCost != null) { minCost = Float.valueOf(minCost.floatValue() * this.multiplier); request.setResponseParam("min_cost", minCost); } else if (cost != null) { if ((cost instanceof Float)) { Float costF = Float.valueOf(((Float)cost).floatValue() * this.multiplier); request.setResponseParam("cost", costF); } else if ((cost instanceof Double)) { Double costD = Double.valueOf(((Double)cost).doubleValue() * this.multiplier); request.setResponseParam("cost", costD); } } ... Теперь объект cost стал BigDecimal и "Множитель цены" его не видит |
Автор: | skn [ 29 апр 2015, 20:26 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
какая версия? |
Автор: | Cromeshnic [ 30 апр 2015, 06:21 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
5.2 |
Автор: | Cromeshnic [ 01 май 2015, 14:49 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
ИСПРАВЛЕНО Kernel: Использование цены типа BigDecimal в bitel.billing.server.tariff.MultCostTariffTreeNode ок, а первый баг с делением цены на x единиц услуги поправили? |
Автор: | stark [ 02 май 2015, 02:00 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
Cromeshnic писал(а): ИСПРАВЛЕНО Kernel: Использование цены типа BigDecimal в bitel.billing.server.tariff.MultCostTariffTreeNode ок, а первый баг с делением цены на x единиц услуги поправили? до праздников не успели. Видимо, уже после. Пока же есть workaround. |
Автор: | skn [ 02 май 2015, 15:44 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
подправили, пробуйте |
Автор: | stark [ 05 май 2015, 15:15 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
Обновитесь еще раз. Там не работал горячий обсчет и еще поменяли слегка. |
Автор: | Cromeshnic [ 05 май 2015, 16:01 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
У меня пока хотфикс в виде Jar-ки, через недельку обновлюсь |
Автор: | Cromeshnic [ 27 май 2015, 14:27 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
ага, следующий баг появился: при тарификации абсолютно все записи попадают в ошибки периодических процессов: Код: scheduler 05-27/16:14:30 ERROR [pool-1-thread-2] Calculator - Tariff request wasn't processed: accepted => true relevance => -1 REQ: sid => 230 time => 02.04.2015 00:00:00 RESP: divisor => 1 cost => 20.0 HIST: Ну т.е. "accepted => true", но при этом "Tariff request wasn't processed" Судя по всему, забыли установить в переменной accepted=tariffRequest.wasAccepted() в калькуляторе. |
Автор: | stark [ 27 май 2015, 20:16 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
Cromeshnic писал(а): ага, следующий баг появился: при тарификации абсолютно все записи попадают в ошибки периодических процессов: Код: scheduler 05-27/16:14:30 ERROR [pool-1-thread-2] Calculator - Tariff request wasn't processed: accepted => true relevance => -1 REQ: sid => 230 time => 02.04.2015 00:00:00 RESP: divisor => 1 cost => 20.0 HIST: Ну т.е. "accepted => true", но при этом "Tariff request wasn't processed" Судя по всему, забыли установить в переменной accepted=tariffRequest.wasAccepted() в калькуляторе. Да, там поломали версии 6.0 и 5.2. Остальные правильно работают. Обновление выкладывается, будет в течении 20 минут. |
Автор: | Cromeshnic [ 28 май 2015, 16:45 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
Не буду рисковать в конце месяца полным апдейтом - накачу только rscm.jar, пожалуй. (Сделал diff по декомпиленным исходникам - вроде ничего больше не поменялось). |
Автор: | Cromeshnic [ 28 май 2015, 16:53 ] |
Заголовок сообщения: | Re: [BUG] При тарификации появляются некорректные дроби (CRM |
накатил, пересчитал апрель - ошибки ушли |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |