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/