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

Программное создание контракта.
http://forum.bitel.ru/viewtopic.php?f=22&t=3130
Страница 1 из 1

Автор:  dale [ 05 ноя 2009, 02:19 ]
Заголовок сообщения:  Программное создание контракта.

Уважаемые разработчики, вопрос такой.
Почему когда я создаю контракт программно следующим образом:
Код:
ContractManager manager = new ContractManager(con);
Contract c = manager.createFromPattern(templateId, getContractNumber(), Calendar.getInstance(), passGen.getPassword());


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

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

Автор:  Администратор [ 06 ноя 2009, 12:08 ]
Заголовок сообщения:  Re: Программное создание контракта.

Программно это из скрипта или вообще посторонняя Java программа? Закономерность есть, что не создается? Можете выложить скрин договора и шаблона?

Автор:  dale [ 05 дек 2009, 01:33 ]
Заголовок сообщения:  Re: Программное создание контракта.

Джава программа это отдельная, на самом деле уже решил проблему путем просто запросов прямо в майсиквел. Но ваш код так и не заработал. Если интересно вышлю код.

Автор:  stark [ 15 дек 2009, 18:29 ]
Заголовок сообщения:  Re: Программное создание контракта.

dale писал(а):
Джава программа это отдельная, на самом деле уже решил проблему путем просто запросов прямо в майсиквел. Но ваш код так и не заработал. Если интересно вышлю код.

там все эти действия делаются по событиям , а чтобы обрабатывались события, нужно запустить EventProcessor

Автор:  Brodayga [ 10 окт 2011, 16:57 ]
Заголовок сообщения:  Re: Программное создание контракта.

Есть необходимость из java программы создать договор. версия 4.6
взял за основу пример из wiki magadan.java
Но он написан для 4.5 если использовать библиотеки от 4.5 работает но не добавляется услуга абонплата из шаблона.

если библиотеки от 4.6 то
Код:
script 10-10/14:15:51  INFO [main] EventProcessor:197 - Process event cid:0; event:Event bitel.billing.server.script.bean.event.system.ContractCreateEvent ci
d: 0; module: 0; type: 0
script 10-10/14:15:51  INFO [main] EventProcessor:269 - Skipping script processing..
script 10-10/14:15:51  INFO [main] EventProcessor:197 - Process event cid:4371; event:Event bitel.billing.server.script.bean.event.ContractStatusChangingEvent cid: 4371; module: 0; type: 18
 10-10/14:15:51  INFO [main] EventProcessor:87 - Add event to queue Event bitel.billing.server.script.bean.event.ContractStatusChangedEvent cid: 4371; module: 0; type: 19
java.lang.NullPointerException
        at bitel.billing.server.admin.eventbus.BillingEventBus.publish(BillingEventBus.java:39)
        at bitel.billing.server.contract.bean.ContractStatusManager.changeStatus(ContractStatusManager.java:421)
        at bitel.billing.server.contract.bean.ContractStatusManager.changeStatus(ContractStatusManager.java:296)
        at bitel.billing.server.contract.bean.ContractManager.createFromPattern(ContractManager.java:206)
        at bitel.billing.server.contract.bean.ContractManager.createFromPattern(ContractManager.java:74)
        at bitel.billing.server.contract.bean.ContractManager.createFromPattern(ContractManager.java:53)
        at bitel.billing.test.convert.Magadan.createContract(Magadan.java:93)
        at bitel.billing.test.convert.Magadan.<init>(Magadan.java:147)
        at bitel.billing.test.convert.Magadan.main(Magadan.java:125)
finished..




сам код инициализация
Код:
bgSetup = new DefaultServerSetup("data.data");
bgSetup.initConnectionPool();
EventProcessor.initProcessor( bgSetup, false, new ServerEventProcessor() );
Server.initSetup();


createContract

Код:
...
     Connection con = bgSetup.getDBConnectionFromPool();
     ContractManager cm = new ContractManager( con );
     Contract contract = cm.createFromPattern(templateId, "test_test", Calendar.getInstance(), pass);
...

Автор:  Администратор [ 12 окт 2011, 10:22 ]
Заголовок сообщения:  Re: Программное создание контракта.

Пишите в глобальном скрипте. Иначе в окружении программы нет MQ соединения, чтобы события слать.

Автор:  Brodayga [ 12 окт 2011, 12:21 ]
Заголовок сообщения:  Re: Программное создание контракта.

Администратор писал(а):
Пишите в глобальном скрипте. Иначе в окружении программы нет MQ соединения, чтобы события слать.

В версии 4.6 нет mq или я ошибаюсь.
В таком случае как мне из вне вызвать глобальный скрипт? Мне нужно при определённом "событии из вне" создать договор.

Автор:  Администратор [ 13 окт 2011, 11:16 ]
Заголовок сообщения:  Re: Программное создание контракта.

Ага, ну тут шина событий самодельная. Суть одна..
Можно вызвать - просто посмотрите HTTP запрос, который передаётся при вызове скрипта из клиента.
Клиент запустите bgbilling_debug.bat, либо посмотрите в access логах сервера запрос, либо посмотрите в журнале запросов, там только он не как в URL немного.
Ну и к запросу нужно добавить user=..&pswd=...

Автор:  Brodayga [ 13 окт 2011, 15:36 ]
Заголовок сообщения:  Re: Программное создание контракта.

Администратор писал(а):
Ага, ну тут шина событий самодельная. Суть одна..
Можно вызвать - просто посмотрите HTTP запрос, который передаётся при вызове скрипта из клиента.
Клиент запустите bgbilling_debug.bat, либо посмотрите в access логах сервера запрос, либо посмотрите в журнале запросов, там только он не как в URL немного.
Ну и к запросу нужно добавить user=..&pswd=...

Понял. Спасибо.
Хорошее решение. Одно но: как передать параметры(например логин)?

Автор:  Cromeshnic [ 14 окт 2011, 06:32 ]
Заголовок сообщения:  Re: Программное создание контракта.

Логин/пароль для биллинга?
Просто добавляете к запросу: &user=admin&pswd=admin

Автор:  Brodayga [ 18 окт 2011, 16:51 ]
Заголовок сообщения:  Re: Программное создание контракта.

Cromeshnic писал(а):
Логин/пароль для биллинга?
Просто добавляете к запросу: &user=admin&pswd=admin

нет параметры создаваемого контракта. передаю через базу в вспомогательной таблице.

Автор:  Cromeshnic [ 19 окт 2011, 06:47 ]
Заголовок сообщения:  Re: Программное создание контракта.

Тогда нужно отдельные http-запросы.
Вот кусок ruby - скрипта, который создаёт типовые договоры с модулем dialup:

Код:
        xml = Common.exec_bgb("custom_title=#{title}&module=contract&sub_mode=0&action=NewContract&pattern_id=#{template}&date=#{date1}&")
        if xml.root.attributes["status"] == "ok"
                cid = xml.elements["//contract/@id"].to_s
                #Берем lid сгенерированного логина
                xml1 = Common.exec_bgb("module=contract&action=ContractCard&contentType=xml&cid=#{cid}&")
                if xml1.root.attributes["status"] == "ok"
##                      passwd = xml1.elements["//contract/@pswd"].to_s
                        passwd = gen()
                        lid = xml1.elements["//module[@id='1']/user_login_1/@id"].to_s
                        #Задаем pppoe-логин = номеру договора
                        Common.exec_bgb("module=dialup&alias=p#{title}&object_id=0&login_pswd=#{passwd}&access=0&cid=#{cid}&lid=#{lid}&session=1&action=UpdateLoginInfo&date2=&mid=1&")
                        #Заменяем пароль от статистики
                        Common.exec_bgb("module=contract&value=#{passwd}&action=UpdateContractPassword&cid=#{cid}&")
                else
                        print xml1.to_s
                        next
                end
      else
                print xml.to_s
        end


Хелпер:

Код:
require 'net/http'
require 'uri'
require 'rexml/document'
require 'iconv'
include REXML

class Common
        def self.get_uri(uri_str)
           response = Net::HTTP.get_response(URI.parse(uri_str))
           case response
           when Net::HTTPSuccess
                 response
           when Net::HTTPRedirection
                 fetch(response['location'], limit-1)
           else
                 response.error!
           end
           return response.body.to_s
        end

        def self.exec_bgb(uri, ignore=nil)
           s = get_uri("http://127.0.0.1:8080/bgbilling/executer?user=admin&pswd=admin&#{uri}")
           ret = REXML::Document.new(s)
           return ret if ignore
           if ret.root.attributes['status'] != 'ok'
                 STDERR.puts "WARN: -- #{uri}"
                 STDERR.puts Iconv.new('utf-8','cp1251').iconv(ret.to_s)
           end
           return ret
        end
end

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