Ув. разработчики, интересует возможность, стоимость и сроки доработки API модуля NPAY 5.2
Я уже приводил код для определения размера абонплаты и режима списания:
Код:
package ru.ttk.billing.event.GlobalScript;
import bitel.billing.common.TimeUtils;
import bitel.billing.server.npay.bean.ServiceObject;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffModuleTree;
import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffModuleTreeSet;
import ru.bitel.bgbilling.kernel.tariff.tree.server.TariffModuleTreeSetDao;
import ru.bitel.bgbilling.modules.npay.tariff.server.NPayTariffContext;
import ru.bitel.bgbilling.modules.npay.tariff.server.NPayTariffRequest;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.Preferences;
import ru.bitel.common.model.Period;
import ru.bitel.common.sql.ConnectionSet;
/**
*
* @author lda
*/
public class test extends GlobalScriptBase{
@Override
public void execute( Setup setup, ConnectionSet connectionSet )
throws Exception{
int cid = 79343;
int mid = 7;
Calendar dt = TimeUtils.clear_HOUR_MIN_MIL_SEC(Calendar.getInstance());
Calendar startMonth = TimeUtils.getStartMonth( dt );
Calendar endMonth = TimeUtils.getEndMonth( dt );
int daysInMonth = startMonth.getActualMaximum( Calendar.DAY_OF_MONTH );
Connection con = connectionSet.getConnection();
Connection conSlave = connectionSet.getSlaveConnection();
try {
TariffModuleTreeSetDao tariffModuleTreeSetDao = new TariffModuleTreeSetDao( con );
Preferences moduleSetup = setup.getModuleSetup( mid );
NPayTariffContext context = new NPayTariffContext( moduleSetup, con, mid, startMonth, endMonth, endMonth, String.valueOf(cid), null );
context.setPrecalcOpenPeriod( new Period( TimeUtils.convertCalendarToDate( startMonth ), null ) );
String query =
"SELECT cid, sid, col, emid, eid " +
"FROM npay_service_object_" + mid + " " +
"WHERE (date1 IS NULL OR date1<=?) AND (date2 IS NULL OR date2>=?) ";
query += " AND cid IN (" + cid + ")";
query += " ORDER BY cid, sid";
PreparedStatement ps = conSlave.prepareStatement( query );
ps.setDate( 1, TimeUtils.convertCalendarToSqlDate( dt ) );
ps.setDate( 2, TimeUtils.convertCalendarToSqlDate( dt ) );
ResultSet rs = ps.executeQuery();
while( rs.next() ){
ServiceObject serviceObject = new ServiceObject();
serviceObject.setContractId( rs.getInt( 1 ) );
serviceObject.setServiceId( rs.getInt( 2 ) );
serviceObject.setDate1( TimeUtils.convertCalendarToDate(startMonth ));
serviceObject.setDate2( TimeUtils.convertCalendarToDate(endMonth ) );
serviceObject.setCol( rs.getInt( 3 ) );
serviceObject.setEntityMid( rs.getInt( 4 ) );
serviceObject.setEntityId( rs.getInt( 5 ) );
int emid = serviceObject.getEntityMid();
int eid = serviceObject.getEntityId();
int col = serviceObject.getCol();
int sid = serviceObject.getServiceId();
Calendar serviceStart = TimeUtils.convertDateToCalendar( serviceObject.getDate1() );
Calendar serviceEnd = TimeUtils.convertDateToCalendar( serviceObject.getDate2() );
Calendar date1 = (Calendar)serviceStart.clone();
Calendar date2 = (Calendar)serviceEnd.clone();
TariffModuleTreeSet tts = tariffModuleTreeSetDao.getTariffTreeSetForDay(cid, dt, "npay", mid, emid, eid);
for( TariffModuleTreeSet.Entry tariffPeriod : tts.entries() ){
List<NPayTariffRequest.NPayServiceCost> serviceCostList = Collections.singletonList( new NPayTariffRequest.NPayServiceCost( sid, serviceStart, serviceEnd, date1, date2, col ) );
NPayTariffRequest req = new NPayTariffRequest( mid, cid, sid );
req.setInfoEnable( true );
req.setConnectionSet( connectionSet );
req.setAccountingMonthDays( daysInMonth );
req.setTime( date1 );
req.setServiceCost( sid, serviceCostList);
final TariffModuleTree tree = tariffPeriod.getTree();
tree.execute( req, context );
if( req.isAccepted() ){
boolean isDayMode = req.toString().indexOf("Day mode") != -1;
for( NPayTariffRequest.NPayServiceCost serviceCost : req.getServiceCostList() ){
print("cost="+serviceCost.cost);
print("isDayMode="+isDayMode);
}
}
}
}
ps.close();
tariffModuleTreeSetDao.freeResources();
}catch( Exception e ){
e.printStackTrace();
}
}
}
Нам требуется:
1. Получать размер абонплаты напрямую из тарифа, а не так как сейчас.
Сейчас для получения размера абонплаты приходится указывать, что тариф и услуга действуют весь месяц и договор активен весь месяц.
2. Режим списания.
3. Если режим списания дневной, то требуется раскладка по дням, в какой день, какая сумма была списана.
2 и 3 пункт у Вас уже есть в req.toString(), но к сожалению в текстовом виде.
Новый функционал можно добавить в NPayTariffRequest.NPayServiceCost serviceCost