Сервер: вер. 5.2 сборка 1643 от 02.11.2015 16:37:29
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_26
bill вер. 5.2 сборка 319 от 08.08.2015 01:22:30
phone вер. 5.2 сборка 285 от 13.10.2015 22:06:04
Задача: в CDR модуля Phone приходят SMS, нужно в счетах показать их количество - просто количество сессий в log_sessions_...
Попробовал воспользоваться макросом NOZERO_SERVICE_COUNT:
Код:
bill.pos.1137.title=Короткие сообщения
bill.pos.1137.name=Короткие сообщения
bill.pos.1137.summ=SERVICE_AMOUNT($month,831,833)
bill.pos.1137.quantity=PHONE_NOZERO_SERVICE_COUNT(18,$month,831,833)
bill.pos.1137.unit=шт.
Не работает, выдаёт ошибку:
Код:
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3729)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3713)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3755)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.setNull(PreparedStatement.java:3793)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.setDate(PreparedStatement.java:3620)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.setDate(PreparedStatement.java:3600)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.commons.dbcp.DelegatingPreparedStatement.setDate(DelegatingPreparedStatement.java:141)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.DataExtractor.getCountFromTable(DataExtractor.java:135)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.DataExtractor.getCountFromTable(DataExtractor.java:105)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.DataExtractor.getCountSession(DataExtractor.java:213)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.counter.PhoneCounter.count(PhoneCounter.java:48)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.BillUtil.parsePositionQuantity(BillUtil.java:419)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.BillUtil.parsePosition(BillUtil.java:142)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.BillUtil.getPositionList(BillUtil.java:813)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.TemplateBillManager.getTemplatePositions(TemplateBillManager.java:244)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.TemplateBillManager.getTemplatePayBillList(TemplateBillManager.java:202)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.TemplateBillManager.getTemplatePayBillList(TemplateBillManager.java:59)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.action.ActionGetTemplateBillList.doAction(ActionGetTemplateBillList.java:95)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.Executer.doModule(Unknown Source)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.Executer$1.run(Unknown Source)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at java.security.AccessController.doPrivileged(Native Method)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at javax.security.auth.Subject.doAs(Subject.java:396)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.Executer.doPost(Unknown Source)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at ru.dsi.bgbilling.web.filter.XDFilter.doFilter(XDFilter.java:56)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:48)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at java.lang.Thread.run(Thread.java:662)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3729)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3713)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3755)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.setNull(PreparedStatement.java:3793)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.setDate(PreparedStatement.java:3620)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at com.mysql.jdbc.PreparedStatement.setDate(PreparedStatement.java:3600)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at org.apache.commons.dbcp.DelegatingPreparedStatement.setDate(DelegatingPreparedStatement.java:141)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.DataExtractor.getCountFromTable(DataExtractor.java:135)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.DataExtractor.getCountFromTable(DataExtractor.java:105)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.DataExtractor.getCountSession(DataExtractor.java:213)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.counter.PhoneCounter.count(PhoneCounter.java:48)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.BillUtil.parsePositionQuantity(BillUtil.java:419)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.BillUtil.parsePosition(BillUtil.java:142)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.BillUtil.getPositionList(BillUtil.java:813)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.TemplateBillManager.getTemplatePositions(TemplateBillManager.java:267)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.TemplateBillManager.getTemplatePayBillList(TemplateBillManager.java:202)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.bean.TemplateBillManager.getTemplatePayBillList(TemplateBillManager.java:59)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.bill.action.ActionGetTemplateBillList.doAction(ActionGetTemplateBillList.java:95)
server 09-21/10:45:04 ERROR ["http-bio-/0.0.0.0-8080"-exec-5] LoggingPrintStream - at bitel.billing.server.Executer.doModule(Unknown Source)
...
Судя по коду, проблема в getCountFromTable: когда month==null, то в одном месте проверка на это есть, а в другом - нет:
Код:
if (month != null)
{
query.append("AND ( " + date1Field + " IS NULL OR " + date1Field + " <= ? )");
query.append(" AND (" + date2Field + " IS NULL OR " + date2Field + ">= ?)");
}
if (Utils.notBlankString(filter))
{
query.append(filter);
}
PreparedStatement ps = con.prepareStatement(query.toString());
ps.setDate(1, TimeUtils.convertCalendarToSqlDate(month));
ps.setDate(2, TimeUtils.convertCalendarToSqlDate(month));
Но это первое, очевидное замечание.
Второе - не уверен, что это корректно отработает про filter==null:
Код:
if (sids.length() > 0)
{
filter = "AND sid IN ( " + sids + " ) AND " + filter;
}
И третье: а почему есть PHONE_NOZERO_SERVICE_COUNT, но нет просто PHONE_SERVICE_COUNT?
Кроме того, в PHONE_NOZERO_SERVICE_COUNT похоже нет ограничения на min_cost>0, т.е. она и работает как PHONE_SERVICE_COUNT, хотя в доках написано другое:
https://bgbilling.ru/v5.2/doc/ch10s03s01.htmlМне на самом деле нужны обе.