forum.bitel.ru http://forum.bitel.ru/ |
|
Инстанциировать BillManager и InvoiceManager в custom API http://forum.bitel.ru/viewtopic.php?f=19&t=9947 |
Страница 1 из 1 |
Автор: | boogie [ 20 ноя 2014, 18:56 ] |
Заголовок сообщения: | Инстанциировать BillManager и InvoiceManager в custom API |
Добрый день. Пишу собственный web-сервис (custom API). Возникла необходимость воспользоваться методами bitel.billing.server.bill.bean.BillManager.getBill() и bitel.billing.server.bill.bean.InvoiceManager.getInvoice(). Для этого мне необходимо либо как-то получить готовые экземпляры соответствующих классов, либо инстанциировать их вручную. Собственно, хочу понять, как мне сделать либо одно, либо другое. Конструкторы BillManager и InvoiceManager требуют Setup setup, java.sql.Connection con, int mid, Preferences moduleSetup. Насколько я понимаю, Setup я могу получить из ru.bitel.bgbilling.server.util.Setup.getSetup(), java.sql.Connection оттуда же с помощью getDBConnectionFromPool(). А вот откуда взять mid и moduleSetup? Чей mid указывать, модуля "Бухгалтерия"? |
Автор: | stark [ 20 ноя 2014, 19:07 ] |
Заголовок сообщения: | Re: Инстанциировать BillManager и InvoiceManager в custom AP |
boogie писал(а): Добрый день. Пишу собственный web-сервис (custom API). Возникла необходимость воспользоваться методами bitel.billing.server.bill.bean.BillManager.getBill() и bitel.billing.server.bill.bean.InvoiceManager.getInvoice(). Для этого мне необходимо либо как-то получить готовые экземпляры соответствующих классов, либо инстанциировать их вручную. Собственно, хочу понять, как мне сделать либо одно, либо другое. Конструкторы BillManager и InvoiceManager требуют Setup setup, java.sql.Connection con, int mid, Preferences moduleSetup. Насколько я понимаю, Setup я могу получить из ru.bitel.bgbilling.server.util.Setup.getSetup(), java.sql.Connection оттуда же с помощью getDBConnectionFromPool(). А вот откуда взять mid и moduleSetup? Чей mid указывать, модуля "Бухгалтерия"? Setup.getSetup().getModuleSetup( mid ) mid - код модуля бухгалтерия. |
Автор: | boogie [ 28 ноя 2014, 21:58 ] |
Заголовок сообщения: | Re: Инстанциировать BillManager и InvoiceManager в custom AP |
Сервис я накидал, однако теперь ловлю NPE при вызове BillDoc.getPositionList(). При этом BillDoc не NULL. ЧЯДНТ? Код: package api.net.sparktell.bgbilling.service.impl;
import org.apache.log4j.Logger; import java.sql.Connection; import java.util.List; import javax.jws.WebService; import ru.bitel.common.Preferences; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.kernel.container.service.server.AbstractService; import ru.bitel.bgbilling.server.util.Setup; import bitel.billing.server.bill.bean.BillManager; import bitel.billing.server.bill.bean.InvoiceManager; import bitel.billing.server.bill.bean.Bill; import bitel.billing.server.bill.bean.BillDoc; import bitel.billing.server.bill.bean.PositionValue; @WebService(targetNamespace="sparktell") public class BillServiceImpl extends AbstractService { private static final int BUH_MID = 12; private static final Logger logger = Logger.getLogger( BillServiceImpl.class ); private static final Setup setup = Setup.getSetup(); private static final Connection conn = setup.getDBConnectionFromPool(); private static final Preferences moduleSetup = setup.getModuleSetup( BUH_MID ); private String[] getResult( BillDoc billDoc ) throws BGException { if (billDoc == null) { logger.info( "billDoc is NULL!" ); return null; } List<String> nameList = null; for ( PositionValue positionValue : billDoc.getPositionList() ) { nameList.add( positionValue.getName() ); } String[] result = new String[nameList.size()]; nameList.toArray(result); return result; } public String[] getBillDetails( int id ) throws BGException { BillManager billManager = new BillManager( setup, conn, BUH_MID, moduleSetup); Bill bill = billManager.getBill( id ); return getResult( bill ); } public String[] getInvoiceDetails( int id ) throws BGException { InvoiceManager invoiceManager = new InvoiceManager( setup, conn, BUH_MID, moduleSetup); BillDoc invoice = invoiceManager.getInvoice( id ); return getResult( invoice ); } } |
Автор: | Artur [ 01 дек 2014, 12:27 ] |
Заголовок сообщения: | Re: Инстанциировать BillManager и InvoiceManager в custom AP |
в классах BillManager/InvoiceManager список позиций не заполняется. Готовый список позиций можно вытянуть из xml счета/счет-фактуры. У вас какая задача? |
Автор: | boogie [ 01 дек 2014, 14:50 ] |
Заголовок сообщения: | Re: Инстанциировать BillManager и InvoiceManager в custom AP |
Мне необходимо отдавать список позиций с их ценами в ответ на запрос с id счета или счет-фактуры. |
Автор: | Artur [ 01 дек 2014, 14:56 ] |
Заголовок сообщения: | Re: Инстанциировать BillManager и InvoiceManager в custom AP |
Тогда только такой вариант: по номеру счета достаем xml из БД, а из этой xml достаем все элементы pos. Также нужно учесть, что в счетах могут быть позиции субдоговоров, они хранятся в элементе sub_bill. Так то код не сильно сложный, если нужно, могу набросать. |
Автор: | boogie [ 01 дек 2014, 15:07 ] |
Заголовок сообщения: | Re: Инстанциировать BillManager и InvoiceManager в custom AP |
С удовольствием соглашусь ![]() |
Автор: | Artur [ 01 дек 2014, 15:15 ] |
Заголовок сообщения: | Re: Инстанциировать BillManager и InvoiceManager в custom AP |
Примерно вот так: Код: import java.io.InputStream; import java.sql.Blob; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Iterator; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import ru.bitel.common.XMLUtils; ... String query = "SELECT xml FROM bill_invoice_data_" + BILL_MID + " WHERE id=" + id; PreparedStatement ps = con.prepareStatement(); ResultSet rs = ps.executeQuery(); while( rs.next() ) { Blob xml = rs.getBlob( "xml" ); InputStream is = xml.getBinaryStream(); Document doc = XMLUtils.parseDocument( is ); Node billNode = XMLUtils.selectElement( doc, "//bill" ); Iterable elems = XMLUtils.selectElements( billNode, "pos" ); //список позиций for ( Iterator iterator = elems.iterator(); iterator.hasNext(); ) { Element posElem = (Element)iterator.next(); .... } //список позиций субдоговоров Iterable subElems = XMLUtils.selectElements( billNode, "sub_bill" ); for ( Iterator iterator = subElems.iterator(); iterator.hasNext(); ) { Element subContractElement = (Element)iterator.next(); .... } } rs.close(); ps.close(); Список атрибутов у позиции можно посмотреть в клиенте биллинга на вкладке Просмотр документов, нажав на кнопку XML. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |