forum.bitel.ru
http://forum.bitel.ru/

Детальный баланс
http://forum.bitel.ru/viewtopic.php?f=19&t=11684
Страница 1 из 1

Автор:  AlexNVZ [ 12 июн 2016, 00:25 ]
Заголовок сообщения:  Детальный баланс

Добрый день
Получаю детальный баланс:
Код:
$year = date('Y');
$month = '05';
$url = "http://127.0.0.1:8080/bgbilling/executer/json/ru.bitel.bgbilling.kernel.contract.balance/BalanceService";
$data = json_encode(array(
    "method" => "balanceDetailList",
    "user" => array(
        "user" => "admin",
        "pswd" => "sipadmin125"
    ),
    "params" => array(
        "contractId" => $contract_id,
        "period" => array("year" => $year, "month" => $month, "day_from" => "1", "day_to" => "31"),
        "available" => false
    )
));

echo "<br>Запрос: ".$data."<br><br>";

curl_setopt_array($myCurl, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $data
));
$response = curl_exec($myCurl);
curl_close($myCurl);

echo "Ответ: ".$response."<br><br>";

Но сколько не меняю месяц в периоде, все равно выдает последний месяц. Так и должно быть?
Код:
  Клиент: вер. 7.0.813 / 10.06.2016 16:56:23
    os: Windows 10; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91
  Сервер: вер. 7.0.1051 / 10.06.2016 16:57:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_92

Автор:  dimOn [ 13 июн 2016, 18:18 ]
Заголовок сообщения:  Re: Детальный баланс

ну а как у вас баланс на договоре распределён и какие месяцы вы ставите? может вы вперёд месяц двигаете?

Автор:  AlexNVZ [ 14 июн 2016, 14:34 ]
Заголовок сообщения:  Re: Детальный баланс

Ну я не тупее паровоза, конечно назад, и договор 1, без субдоговоров.
В запросе вы видете прошлый месяц, а выводит последний.

Автор:  skn [ 14 июн 2016, 16:14 ]
Заголовок сообщения:  Re: Детальный баланс

месяцы с нуля считаются...

Автор:  AlexNVZ [ 15 июн 2016, 17:09 ]
Заголовок сообщения:  Re: Детальный баланс

Спасибо, теперь ясно.
Вот только не работает, все равно последний выводит

Автор:  nik247 [ 15 июн 2016, 17:20 ]
Заголовок сообщения:  Re: Детальный баланс

Пробовал этот скрипт на 6.2 и та же самая ситуация - выводит только текущий месяц.

Автор:  AlexNVZ [ 15 июн 2016, 17:47 ]
Заголовок сообщения:  Re: Детальный баланс

Если это так и задумано, тогда вопрос, зачем период требуется?
Если ошибка, то неплохо бы поправить.

Автор:  dimOn [ 15 июн 2016, 18:44 ]
Заголовок сообщения:  Re: Детальный баланс

нет судя по коду период там читается, но если период кривой, то берётся текущий месяц

Автор:  dimOn [ 15 июн 2016, 19:25 ]
Заголовок сообщения:  Re: Детальный баланс

вы где этот код взяли? а так точно должно работать?
Код:
"period" => array("year" => $year, "month" => $month, "day_from" => "1", "day_to" => "31"),

Автор:  nik247 [ 15 июн 2016, 19:43 ]
Заголовок сообщения:  Re: Детальный баланс

dimOn писал(а):
вы где этот код взяли? а так точно должно работать?
Код:
"period" => array("year" => $year, "month" => $month, "day_from" => "1", "day_to" => "31"),

Я так понимаю отсюда:
Код:
balanceDetailList
java.util.List<BalanceDetailItem> balanceDetailList(int contractId,
                                                    Period period,
                                                    boolean available)
                                             throws ru.bitel.bgbilling.common.BGException
Получнение списка для детализированного баланса, как с учетом резервов, так и нет. Метод максимально соответсвует старому акшену( ActionContractBalanceDetail );
Parameters:
contractId - - код договора.
period - - период, шагом является месяц.
available - если = true, то вернет с учетом резервов, то есть с учетом доступной суммы.
Returns:
список в хронологическом порядке(ну кроме нароботков) приходов, расходов, нароботков, резервов(если available=true) за период.
Throws:
ru.bitel.bgbilling.common.BGException
И отсюда:
Код:
Period
public Period(int year,
              int month,
              int day_from,
              int day_to)
Создает период по году, месяцу, дню начала и окончания.
Parameters:
year - - год
month - - 0-based месяц (то есть январю соответствует 0)
day_from - - день начала
day_to - - день окончания (если взять заведомо большое, то обрежется до актуального максимума этого месяца)

Автор:  dimOn [ 15 июн 2016, 20:16 ]
Заголовок сообщения:  Re: Детальный баланс

Ну код я как раз сам видел. Не уверен именно что можно таким образом period создать.
А изучать код ещё json-велосипеда не очень хочется.
Подобная работа с периодом где-то описана?

Автор:  AlexNVZ [ 16 июн 2016, 21:40 ]
Заголовок сообщения:  Re: Детальный баланс

А что могут сказать господа разработчики?

Автор:  skn [ 16 июн 2016, 23:18 ]
Заголовок сообщения:  Re: Детальный баланс

AlexNVZ писал(а):
А что могут сказать господа разработчики?


Код:
package ru.bitel.common.model;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import javax.xml.bind.annotation.XmlAttribute;

import bitel.billing.common.TimeUtils;

/**
 * Класс-модель "период".
 */
public class Period
    implements Comparable<Period>
{
    private Date dateFrom;
    private Date dateTo;

   public Period()
   {}

   public Period( Date fromDate, Date toDate )
   {
      this.dateFrom = fromDate;
      this.dateTo = toDate;
   }
   
   /**
    * Создает период по году, месяцу, дню начала и окончания.
    * @param year - год
    * @param month - 0-based месяц (то есть январю соответствует 0)
    * @param day_from - день начала
    * @param day_to - день окончания (если взять заведомо большое, то обрежется до актуального максимума этого месяца)
    */
   public Period( int year, int month, int day_from, int day_to )
    {
      GregorianCalendar cal1 =  new GregorianCalendar( year, month, 1 );
      cal1.set( Calendar.DAY_OF_MONTH, Math.max( day_from, cal1.getActualMinimum( Calendar.DAY_OF_MONTH ) ) );
       this.dateFrom = cal1.getTime();
       cal1.set( Calendar.DAY_OF_MONTH, Math.min( day_to, cal1.getActualMaximum( Calendar.DAY_OF_MONTH ) ) );
       this.dateTo = cal1.getTime();
    }

Автор:  Phricker [ 17 июн 2016, 03:38 ]
Заголовок сообщения:  Re: Детальный баланс

Гыгыгы.
Читаю
AlexNVZ писал(а):
А что могут сказать господа разработчики?

и думаю "ну вон же тебе Димон сказал, что период возможно не так создается", чем его ответ то не нравится.
И только потом догоняю, что дело то в цвете :D

Автор:  AlexNVZ [ 17 июн 2016, 23:00 ]
Заголовок сообщения:  Re: Детальный баланс

Скрипт это конечно хорошо, но где не правильность в моем коде, вроде все по написанному в описании создания периода.

Автор:  skn [ 17 июн 2016, 23:43 ]
Заголовок сообщения:  Re: Детальный баланс

AlexNVZ писал(а):
Скрипт это конечно хорошо, но где не правильность в моем коде, вроде все по написанному в описании создания периода.


это описание для создания периода из Java кода, т.е. если передать в Java конструктор класса указанные параметры то будет запущен КОД (см. выше) который создаст объект с двумя полями типа "дата" (эти поля будут вычислены на основании переданных данных), вы же из своего вызова должны передать уже ГОТОВЫЙ объект типа Period с установленными полями датами...

Автор:  AlexNVZ [ 22 июн 2016, 12:18 ]
Заголовок сообщения:  Re: Детальный баланс

Спасибо, но к сожалению не смогу воспользоваться советом, я в Java как свинья в апельсинах. Не представляю где находится этот конструктор и как туда передать данные а затем еще посмотреть чего получилось. Потому и пишу на PHP. Буду признателен, если вы мне подскажете готовый ответ, какой объект получится на выходе.

Автор:  skn [ 22 июн 2016, 13:57 ]
Заголовок сообщения:  Re: Детальный баланс

AlexNVZ писал(а):
Спасибо, но к сожалению не смогу воспользоваться советом, я в Java как свинья в апельсинах. Не представляю где находится этот конструктор и как туда передать данные а затем еще посмотреть чего получилось. Потому и пишу на PHP. Буду признателен, если вы мне подскажете готовый ответ, какой объект получится на выходе.


к сожалению я не пиши на php и как вызвать из php сервис понятия не имею...

Автор:  AlexNVZ [ 22 июн 2016, 14:03 ]
Заголовок сообщения:  Re: Детальный баланс

Цитата:
к сожалению я не пиши на php и как вызвать из php сервис понятия не имею...

Но вы по крайней мере можете выполнить запрос своим способом, и получить ожидаемый объект.

Автор:  Amir [ 22 июн 2016, 20:02 ]
Заголовок сообщения:  Re: Детальный баланс

Попробуйте так:
Код:
"period" => array("dateFrom" => "2016-06-01", "dateTo" => "2016-06-01")
или
Код:
"period" => array("dateFrom" => "2016-06-01T00:00:00.000Z", "dateTo" => "2016-06-01T00:00:00.000Z")

Автор:  nik247 [ 22 июн 2016, 20:52 ]
Заголовок сообщения:  Re: Детальный баланс

Amir писал(а):
Попробуйте так:
Код:
"period" => array("dateFrom" => "2016-06-01", "dateTo" => "2016-06-01")
или
Код:
"period" => array("dateFrom" => "2016-06-01T00:00:00.000Z", "dateTo" => "2016-06-01T00:00:00.000Z")
Спасибо.
По обоим вариантам начало учитывать даты на 6.2.

Автор:  AlexNVZ [ 23 июн 2016, 19:26 ]
Заголовок сообщения:  Re: Детальный баланс

Присоединяюсь, спасибо огромное.

Автор:  igimux [ 05 май 2017, 11:07 ]
Заголовок сообщения:  Re: Детальный баланс

Amir писал(а):
Попробуйте так:
Код:
"period" => array("dateFrom" => "2016-06-01", "dateTo" => "2016-06-01")
или
Код:
"period" => array("dateFrom" => "2016-06-01T00:00:00.000Z", "dateTo" => "2016-06-01T00:00:00.000Z")


Добавлю момент один, что в данном случае нельзя использовать неправильную дату, например 31 апреля, чтобы было проще, как в mysql, например.

Код:
"period" => array("dateFrom" => "2017-04-01", "dateTo" => "2017-04-31")
выдаст за текущий месяц, а не за указанный, поэтому придется количество дней рассчитывать.

Автор:  igimux [ 05 май 2017, 12:00 ]
Заголовок сообщения:  Re: Детальный баланс

Подскажите, может кто пишет на Ruby On Rails. В этом же случае как посте, на PHP всё работает, а с Ruby никак не получается передать период.

Код:
params = {
      contractId: contractId,
      period: {:dateFrom => "2017-04-01", :dateTo => "2017-04-30"},
      available: false
}


Пробовал по разному:
Код:
      period: {:dateFrom => "2017-04-01", :dateTo => "2017-04-30"}
      period: [{:dateFrom => "2017-04-01", :dateTo => "2017-04-30"}]
      period: [{:dateFrom => "2017-04-01"}, {:dateTo => "2017-04-30"}]
      period: [{"dateFrom" => "2017-04-01"}, {"dateTo" => "2017-04-30"}]
      period: [:dateFrom => ["2017-03-01"], :dateTo => ["2017-03-30"]]

и другие версии этих

Автор:  AlexNVZ [ 07 май 2017, 16:47 ]
Заголовок сообщения:  Re: Детальный баланс

Цитата:
Добавлю момент один, что в данном случае нельзя использовать неправильную дату, например 31 апреля, чтобы было проще, как в mysql, например.

Код:
"period" => array("dateFrom" => "2017-04-01", "dateTo" => "2017-04-31")
выдаст за текущий месяц, а не за указанный, поэтому придется количество дней рассчитывать.

Это решается так:
Код:
$date_yy = date('Y');
$date_mm = date('m');

$day = new DateTime($date_yy.'-'.$date_mm.'-01');
$day = $day->format('t');    //Последний день в месяце

$datefrom = $date_yy.'-'.$date_mm.'-01';
$dateto = $date_yy.'-'.$date_mm.'-'.$day;

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/