BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 19 мар 2024, 16:34

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
СообщениеДобавлено: 22 май 2013, 11:11 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Доброго дня.

Информация о версии:
Клиент: вер. 5.2 сборка 1135 от 18.03.2013 20:13:26
os: Linux; java: OpenJDK 64-Bit Server VM, v.1.6.0_27

Собственно сабж.

Имеется договор, в нем подключен и настроен модуль CerberCrypt с следующей конфой:
---
#название пункта Web меню
web.menuItem1=Управление подпиской CerberCrypt
#web.menuItem1=Управление подпиской CerberCrypt
web.menuItem2=Виртуальный кинотеатр CerberCrypt
#web.menuItem2=Виртуальный кинотеатр CerberCrypt
#Проверка наличия каналов на пакете при добавлении новых каналов
#0 - проверки нет
#1 - проверка только при действии Открыть пакеты
#2 - проверка при действии Открыть пакеты и при открытии пакета через веб-статистику
#3 - проверка при действии Открыть пакеты, открытии пакета через веб-статистику и при добавлении пакета через клиента биллинга
cerbercrypt.cardpacket.addcheck=1
sa=ru.bitel.bgbilling.modules.cerbercrypt.server.CerbercryptServiceActivator
server.0.host=10.1.19.51
server.0.port=8100
server.0.login=<Login>
server.0.pswd=<Pass>
# сколько часов от суток "прощать" при блокировке
forgive.hours=2
error.mail=admc@mycentra.ru
#через запятую можно указать номера карт, подписку для которых обновлять не следует
ignore.cards=1,3
---

В личном кабинете выбираю Управление подпиской карт CerberCrypt. В нем выбираю карту и подключаемый пакет.
Посде добавления у пакета видна дата начала, но нет даты окончания. Подскажите какие настройки необходимы, чтобы пакет автоматически отключался через 30 дней? Те чтобы вместе с датой начала подставлялась и дата окончания действия пакета.


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

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
асинхронное:
http://bgbilling.ru/v6.0/javadoc/ru/bit ... Event.html
просто изменять в БД при необходимости.

наверно, лучше синхронное:
http://bgbilling.ru/v6.0/javadoc/ru/bit ... Event.html
внутри ставите setProcessed и переопределяете штатную логику.
штатная такая:

Код:
CardPacket cardPacket = new CardPacket();
                         cardPacket.setContractId( cid );
                         cardPacket.setUsercardId( usercardId );
                         cardPacket.setPacketId( packetId );
                         cardPacket.setDateFrom( TimeUtils.convertCalendarToDate( date ) );
                         if( comment != null ) cardPacket.setComment( comment );
                         
                        // проверка периода пакета на невыход за пределы периода юзеркарты
                        if( ( cardPacket.getDateFrom() == null && userCard.getDate1() != null ) ||
                            ( cardPacket.getDateTo() == null && userCard.getDate2() != null ) ||   
                            ( cardPacket.getDateFrom() != null && userCard.getDate1() != null &&  TimeUtils.dateBefore( cardPacket.getDateFrom(), userCard.getDate1() ) ) ||
                            ( cardPacket.getDateTo() != null && userCard.getDate2() != null && TimeUtils.dateBefore( userCard.getDate2(), cardPacket.getDateTo() ) ) )
                        {
                            throw new BGMessageException( "Интервал пакета выходит за интервал карты" );
                        }
                       
                         try
                         {
                            cpm.openCardPackets( moduleSetup, cpm, packetMap, cid, usercardId,
                                                 Collections .singletonList( cardPacket ), now, true );

                            Event event = new SubscriptionChangedEvent( userID, mid, cid, userCard.getId(),
                                                                        SubscriptionChangedEvent.CHANGE_PLACE_WEB, SubscriptionChangedEvent.MODE_OPEN,
                                                                        cardPacket.getPacketId(), TimeUtils.convertCalendarToDate( date ) );
                            context.publishAfterCommit( event );
                              // Обновление подписки для этой карты, которую затронуло
                            // зависимые тоже обрабатываем
                            new UserCardManager( con, mid, User.USER_CONTRACT ).updateSubscribe( date.getTime(), cardPacket.getUsercardId(), true );
                         }
                         catch( BGMessageException e )
                         {
                            throw new BGMessageException( e.getMessage() );
                         }



очевидно, вам надо поставить ещё
cardPacket.setDateTo

SubscriptionChangedEvent можно не бросать, если не пользуетесь

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 май 2013, 15:51 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Те это надо писать динамически подгружаемый класс расширять существующий?
Потом производить подмену cardPacket.setDateTo необходимым значением?
Если не трудно подскажите последовательность действия ...
Просто насколь я понимаю кроме как при создании пакета
---
CardPacket cardPacket = new CardPacket();
cardPacket.setContractId( cid );
cardPacket.setUsercardId( usercardId );
cardPacket.setPacketId( packetId );
cardPacket.setDateFrom( TimeUtils.convertCalendarToDate( date ) );
---
указать cardPacket.setDateTo более нигде нельзя?


Последний раз редактировалось iseed 23 май 2013, 16:21, всего редактировалось 2 раз(а).

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 май 2013, 15:04 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Те надо потом добавлять каждому пользователю как скрипт поведения? А есть возможность както глобально определить поведение. Те при каждом из подобных эвентов применяется правило?
Просто пока не понятно как лучше организовать такое...


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

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

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

но теоретически можно сделать так: отнаследовать старый веб-экшен, там перегрузить doAction вначале вызвать super.doAction а в конце каким-то образом уже добавленный недавно в БД картпакет снова отапдейтить нужной вам датой.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 май 2013, 11:40 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Подсобите если не трудно с реализацией??? Уже 4 день моск кипит.

1) Насколь я понимаю надо обьявить что при данном эвенте выполняется данный скрипт.
Собственно как? В документации никак не показано, а на форуме уже собственно сами скрипты, а не то что необходимо отписать в конфигурации чтобы вызвать функцию.

2) Создать функцию типа:
---
import bitel.billing.server.util.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;import bitel.billing.server.contract.bean.*;
import bitel.billing.server.tariff.*;
import bitel.billing.common.KernelConst;
import bitel.billing.server.script.bean.event.*;
import ru.bitel.common.sql.ConnectionSet;

public void onEvent( event, setup, con, conSlave )
{
int conid = event.getContractId();
String query = "update `card_packet_7`
set `date2`=from_unixtime(unix_timestamp()+3600*24*30)
where `id` =
(select id from
(SELECT cp.id as id
FROM `contract` c
join `card_packet_7` cp on (c.id=cp.cid)
join `packet_7` p7 on (cp.pid=p7.id)
where c.title = " + conid +"
order by cp.date1 desc
limit 1) as `tmp`)
";
PreparedStatement ps = con.prepareStatement(query);
ps.executeQuery();
}
---


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

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
iseed писал(а):
1) Насколь я понимаю надо обьявить что при данном эвенте выполняется данный скрипт.
Собственно как? В документации никак не показано, а на форуме уже собственно сами скрипты, а не то что необходимо отписать в конфигурации чтобы вызвать функцию.

Как так, целая глава про это всё:
http://bgbilling.ru/v5.2/doc/ch02.html

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 май 2013, 09:08 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
К сожалению в статье много непонятного.
1) В статье на странице http://bgbilling.ru/v5.2/doc/ch02s03s03.html
Указаны [Скрипты BGBS] и [Классы Java]
В скриптах BGBS находятся только опредустановленые события среди которых нету привязки к ru.bitel.bgbilling.modules.cerbercrypt.server.event.ChangePacketSubscriptionEvent
Ближайшие по смысле эвенты там [Перед открытием пакета].
Пробовал создать обработку на этот эвент чтото типа:
---
import bitel.billing.server.util.*;
import java.io.*;
import java.util.*;
import javax.activation.DataSource;
import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.plugins.dispatch.common.bean.Contact;
import ru.bitel.bgbilling.plugins.dispatch.server.sender.Sender;

public void onEvent( event, setup, con, conSlave )
{
PrintWriter zzz = null;
zzz = new PrintWriter(new FileOutputStream("/home/asd/asd.log"));
zzz.println("asd");
zzz.close();
}
--
Соотвественно при добавлении пакета в карточку абонента - файлик не появляется.
Скрипт к абоненту подключил.

Если смотреть [Классы Java] то там надо создавать новый класс расширяя существующий.
При создании нового в перечне класса нужный мне отсутствует.
Если создать класс ru.bitel.bgbilling.modules.cerbercrypt.server.event.OpenPacketSubscriptionEvent
и добавить в код
---
package ru.bitel.bgbilling.modules.cerbercrypt.server.event;

import ru.bitel.bgbilling.kernel.event.Event;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import java.io.*;
import java.util.*;

public class OpenPacketSubscriptionEvent
extends EventScriptBase
{
@Override
public void onEvent( Event event1, Setup setup2, ConnectionSet connectionSet3 )
throws Exception
{
PrintWriter zzz = null;
zzz = new PrintWriter(new FileOutputStream("/home/asd/asd.log"));
zzz.println("asd");
zzz.close();
}

}
---
Соответсвенно эвент при создании из личного кабинета также не сработал ...

Куда копать то? Подскажи о великий учитель !


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

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
И там и там можно использовать только существующие события, разумеется. Должны быть доступны для обеих способов.

ru.bitel.bgbilling.modules.cerbercrypt.server.event.SubscriptionChangedEvent -- Изменение подписки карты
ru.bitel.bgbilling.modules.cerbercrypt.server.event.OpenPacketSubscriptionEvent -- Перед открытием пакета

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


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

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Цитата:
Соотвественно при добавлении пакета в карточку абонента - файлик не появляется.

Так-то речь была, вроде, про личный кабинет, а из клиента не работает. Это же написано и по ссылке на явадок про это событие (дал выше).

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


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

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Не очень понятно. Если у вас эти события есть в BGBS но нету в дин.классах, значит, неправильно обновление прошло (когда-то давно).
Переставьте заново модуль с "!", перед этим почистите кеш выполненных запросов:
http://bgbilling.ru/v5.2/doc/ch01s13.html

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 май 2013, 15:38 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Посыпаю голову пеплом - галчонок не на том эвенте был ...

Добавляю пакет естественно из личного кабинета пользвоателя.

В типовом [Скрипты BGBS] есть событие 'Перед открытием пакета'.
На него скрипта вешал, он срабатывает. Но пробелма в том что мне нужно не перед открытием, а после открытия - те после добавления в бд записи о тарифе.
Не подскажете как можно так сделать?

Сюдя по методам евентов OpenPacketSubscriptionEvent и ChangePacketSubscriptionEvent
в них ввобще нету метода который параметром к себе имеет дату закрытия.
OpenPacketSubscriptionEvent
public OpenPacketSubscriptionEvent(int userId,
int mid,
int cid,
ru.bitel.bgbilling.modules.cerbercrypt.common.bean.UserCard userCard,
ru.bitel.bgbilling.modules.cerbercrypt.common.bean.Packet packet,
java.util.Date fromDate)
public ChangePacketSubscriptionEvent(int userId,
int moduleId,
int contractId,
ru.bitel.bgbilling.modules.cerbercrypt.common.bean.UserCard userCard,
ru.bitel.bgbilling.modules.cerbercrypt.common.bean.Packet packet,
java.util.Date fromDate)


Вложения:
Снимок экрана.png
Снимок экрана.png [ 83.92 КБ | Просмотров: 9927 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

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


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

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


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

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