BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 21 июн 2025, 03:01

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
СообщениеДобавлено: 12 май 2012, 18:32 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Собственно вот такой вот скрипт
Код:
import bitel.billing.common.TimeUtils.*;
import bitel.billing.server.util.*;

public void main( setup, con, conSlave )
{
   //получаем установленную дату закрытого периода
   ClosedDateChecker cdc = new ClosedDateChecker();
   closeDate = cdc.getClosePeriodDate();

   //получаем последнее число предыдущего месяца
   Calendar calendar = Calendar.getInstance();
   calendar.add(Calendar.MONTH, -1);
   int lastDay = calendar.getActualMaximum(Calendar.DATE);
   calendar.set(Calendar.DATE, lastDay); 

   //если установленная дата ранее чем полученная - выставляем в закрытом периоде полученную дату
   if( TimeUtils.dateBefore(closeDate, calendar) ){
      print("Дата закрытого периода ранее конца предыдущего месяца. Устанавливаю дату закрытия");
      cdc.setClosePeriodDate(calendar.getTime());
   }

}


При запуске его вручную через кнопку Выполнить скрипт - все выполняется. Если дата закрытого периода раньше, чем последнее число предыдущего месяца - выставляется последнее число предыдущего месяца.

Однако если добавить задачу в планировщик, в которой прописать tids=<ID_этого_скрипта> и поставить ее на выполнение каждые 10 минут - ничего не происходит.
Точнее как.
Первый запуск задачи через планировщик пишет следующее
Код:
GENERATE_TIME: 12.05.12 16:10:03
EXECUTION_STOP_TIME: 12.05.12 16:10:03
PROCESS_TIME: 28

OUT:
Дата закрытого периода ранее конца предыдущего месяца. Устанавливаю дату закрытия

Но главное, что только пишет. Дату не выставляет.

Все остальные запуски (даже вручную через Выполнить сейчас) тупо пусто
Код:
GENERATE_TIME: 12.05.12 16:30:43
EXECUTION_STOP_TIME: 12.05.12 16:30:43
PROCESS_TIME: 13

OUT:


В логах на последнее действие пусто
Код:
05-12/16:30:43  INFO [Thread-13] TaskRunProcessor - Running Task: bitel.billing.server.script.global.bean.GlobalScriptTimer
05-12/16:30:43  INFO [pool-1-thread-2] GlobalScriptTimer - start task id => 24 at time 12.05.2012 16
05-12/16:30:43  INFO [pool-1-thread-2] ScriptInstance - Invoke method Установка закрытого периода : main
05-12/16:30:43  INFO [pool-1-thread-2] GlobalScriptTimer - Task finished time=18 ms.
05-12/16:30:43  INFO [pool-1-thread-2] GlobalScriptTimer - task time : 0 d 00:00:00
05-12/16:30:43  INFO [pool-1-thread-2] GlobalScriptTimer - RunTask finished time=19 ms.

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 12 май 2012, 18:40 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
А да. билды на которых проверялось
Рабочая машинка
Код:
  Сервер: вер. 5.2 сборка 1141 от 01.04.2012 00:13:46
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_31

Тестовая машинка
Код:
  Сервер: вер. 5.2 сборка 1185 от 11.05.2012 19:35:19
    os: Linux; java: Java HotSpot(TM) Client VM, v.1.6.0_31

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 06:44 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Похоже, дата закрытого периода хранится и в базе (таблица setup) и в памяти, у сервера и шедулера в памяти разные даты -> :|


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 11:04 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Cromeshnic писал(а):
у сервера и шедулера в памяти разные даты -> :|

Изображение

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 13:18 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Разработчики, скажите вы обратили внимание на эту тему, или нужно каждый день писать "АП"? )

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 13:20 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Phricker писал(а):
Разработчики, скажите вы обратили внимание на эту тему, или нужно каждый день писать "АП"? )

Phricker писал(а):
dimOn писал(а):
повторяю: => хелпдеск => $$ => доработка => профит

Fixed :P

бгггг

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 13:28 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Смейся смейся. Ты у себя проверил то?
Я на форум написал потому, что засомневался правильно ли делаю, т.к. раньше не добавлял глобальные скрипты в планировщик.

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 13:30 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
не, мне покачто ненада такого, вроде все работает =) могу проверить

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 13:37 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Я обратил внимание, но не понял. Какая ещё память? Какие разные даты?

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 13:41 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
В общем этот скрипт делает следующее
Получает дату закрытого периода
Изображение
И если установленная дата раньше чем последнее число предыдущего месяца - меняет дату закрытого периода на последнее число предыдущего месяца.

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

И, собственно, дело в том, что этот скрипт НЕ РАБОТАЕТ если он запускается через планировщик задач, задачей "Выполнение глобальных скриптов по таймеру". И этот скрип РАБОТАЕТ если этот же скрипт запускается из глобальных скриптов вручную.

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 14:07 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
А как дата берётся в скрипте?

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 14:08 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
А какая дата получается? Что не работает? Не берётся, не ставится? Дата левая?

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 14:21 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Код:
import bitel.billing.common.TimeUtils.*;
import bitel.billing.server.util.*;

public void main( setup, con, conSlave )
{
   //получаем установленную дату закрытого периода
   ClosedDateChecker cdc = new ClosedDateChecker();
   closeDate = cdc.getClosePeriodDate();
print("closeDate = " + closeDate);

   //получаем последнее число предыдущего месяца
   Calendar calendar = Calendar.getInstance();
   calendar.add(Calendar.MONTH, -1);
   int lastDay = calendar.getActualMaximum(Calendar.DATE);
   calendar.set(Calendar.DATE, lastDay); 
print("calendar" + calendar);

   //если установленная дата ранее чем полученная - выставляем в закрытом периоде полученную дату
   if( TimeUtils.dateBefore(closeDate, calendar) ){
      print("Дата закрытого периода ранее конца предыдущего месяца. Устанавливаю дату закрытия");
      cdc.setClosePeriodDate(calendar.getTime());
   }

}

Вот скрипт (с первого поста, только добавил выводы дат)

Вот его вывод при запуске вручную. Дата закрытого периода выставляется.
Код:
GENERATE_TIME: 14.05.12 12:12:20
EXECUTION_STOP_TIME: 14.05.12 12:12:20
PROCESS_TIME: 25

OUT:
closeDate = java.util.GregorianCalendar[time=1331582400000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="W-SU",offset=14400000,dstSavings=0,useDaylight=false,transitions=78,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=1,YEAR=2012,MONTH=2,WEEK_OF_YEAR=12,WEEK_OF_MONTH=3,DAY_OF_MONTH=13,DAY_OF_YEAR=73,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=14400000,DST_OFFSET=0]
calendarjava.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="W-SU",offset=14400000,dstSavings=0,useDaylight=false,transitions=78,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=1,YEAR=2012,MONTH=3,WEEK_OF_YEAR=21,WEEK_OF_MONTH=3,DAY_OF_MONTH=30,DAY_OF_YEAR=135,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=0,HOUR_OF_DAY=12,MINUTE=12,SECOND=20,MILLISECOND=671,ZONE_OFFSET=14400000,DST_OFFSET=0]
Дата закрытого периода ранее конца предыдущего месяца. Устанавливаю дату закрытия



А вот задача
Изображение Изображение Изображение

А вот ее вывод
Код:
GENERATE_TIME: 14.05.12 12:20:04
EXECUTION_STOP_TIME: 14.05.12 12:20:04
PROCESS_TIME: 31

OUT:
closeDate = java.util.GregorianCalendar[time=1335729600000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="W-SU",offset=14400000,dstSavings=0,useDaylight=false,transitions=78,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=1,YEAR=2012,MONTH=3,WEEK_OF_YEAR=19,WEEK_OF_MONTH=6,DAY_OF_MONTH=30,DAY_OF_YEAR=121,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=5,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=14400000,DST_OFFSET=0]
calendarjava.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="W-SU",offset=14400000,dstSavings=0,useDaylight=false,transitions=78,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=1,YEAR=2012,MONTH=3,WEEK_OF_YEAR=21,WEEK_OF_MONTH=3,DAY_OF_MONTH=30,DAY_OF_YEAR=135,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=0,HOUR_OF_DAY=12,MINUTE=20,SECOND=4,MILLISECOND=279,ZONE_OFFSET=14400000,DST_OFFSET=0]


А условие if не выполнилось. А почему?
Дата не поменялась
Изображение

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 17:15 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Ну так даты то почему разные? :mrgreen:
Дата кеширутся при изменении и записывается в БД. О какой памяти речь?

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 17:21 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Ну да, если вы поменяете в сервере дату, то она запишется в БД и закешируется в памяти. При последующей попытке взятия она поглядится - в памяти есть, ага, из БД не пересчётся. Если при этом была переустановлена дата в шедулере, то она также запишется в БД и в память. Но память другая. В итоге сервер не понимает что дата изменилась, он то видит закешированную дату в своём серверском сетапе. Выход какой- читать вам тока из БД ддату и всё, и никогда не из памяти (сетапа). Но всё равно дата то установится но сервер её не подхватит. выхода я не вижу, кроме убирания кеширования, что есть плохо. Ну или обновлять дату по событиям меж приложениями.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 май 2012, 17:28 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Мммммм... А как дата закрытого периода меняется вручную?
Ну т.е. что при этом происходит?
Может я в скрипте повторю это и всего то делов :)

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 май 2012, 12:11 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Дело в том, что любое изменение в шедулере базы данных не отразится в сервере, потому там что значение из БД уже было прочитано и закешировано. И пока в сервере кто-либо не дёрнет дату на изменение (=>не перечитается там кеш из БД) в сервере будет браться та же самая дата, которая уже в памяти, хотя в БД другая. Код там такой:
Код:
   public Calendar getClosePeriodDate()
   {
      Calendar dt = null;
      String dateStr = Setup.getSetup().get( "closed.date", null );
      if ( Utils.isBlankString( dateStr ) )
      {
         Connection con = Setup.getSetup().getDBConnectionFromPool();
         dt = TimeUtils.convertStringToCalendar( ServerUtils.getSetupValue( con, "1" ) );
         ServerUtils.closeConnection( con );
         Setup.getSetup().set( "closed.date", TimeUtils.formatDate( dt ) );
...

Код:
    public void setClosePeriodDate( Date dt )
    {
       Setup.getSetup().set( "closed.date", TimeUtils.formatDate( dt ) );
       Connection con = Setup.getSetup().getDBConnectionFromPool();
       ServerUtils.setSetupValue( con, "1", TimeUtils.formatDate( dt ) );
        ServerUtils.closeConnection( con );
    }

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 май 2012, 12:11 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Дело в том, что любое изменение в шедулере базы данных не отразится в сервере, потому там что значение из БД уже было прочитано и закешировано. И пока в сервере кто-либо не дёрнет дату на изменение (=>не перечитается там кеш из БД) в сервере будет браться та же самая дата, которая уже в памяти, хотя в БД другая. Код там такой:
Код:
   public Calendar getClosePeriodDate()
   {
      Calendar dt = null;
      String dateStr = Setup.getSetup().get( "closed.date", null );
      if ( Utils.isBlankString( dateStr ) )
      {
         Connection con = Setup.getSetup().getDBConnectionFromPool();
         dt = TimeUtils.convertStringToCalendar( ServerUtils.getSetupValue( con, "1" ) );
         ServerUtils.closeConnection( con );
         Setup.getSetup().set( "closed.date", TimeUtils.formatDate( dt ) );
...

Код:
    public void setClosePeriodDate( Date dt )
    {
       Setup.getSetup().set( "closed.date", TimeUtils.formatDate( dt ) );
       Connection con = Setup.getSetup().getDBConnectionFromPool();
       ServerUtils.setSetupValue( con, "1", TimeUtils.formatDate( dt ) );
        ServerUtils.closeConnection( con );
    }

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.048s | 51 Queries | GZIP : On ]