Автоматическая отправка счетов через глобальный скрипт поведения
Материал из BiTel WiKi
Версия от 07:16, 17 июня 2014; Skyb (Обсуждение | вклад)
Возникла необходимость отправки счетов после их выставления всем абонентам, но не руками, а автоматически через глобальный скрипт поведения по планировщику заданий http://forum.bitel.ru/viewtopic.php?f=14&t=9341 - тема на форуме Сам скрипт, работает на динамическом коде, писалось на 6.0
package ru.skyb.scripts.global.TaskDataManager; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Calendar; import bitel.billing.common.TimeUtils; import bitel.billing.server.bill.BillDocsSenderForAll; import bitel.billing.server.task.bean.RunTaskDataManager; import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase; import ru.bitel.bgbilling.server.util.ModuleSetup; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; import org.apache.log4j.Logger; public class BillDocsSender extends GlobalScriptBase { private static final Logger logger = Logger.getLogger( BillDocsSender.class ); @Override public void execute(Setup setup1, ConnectionSet connectionSet2) throws Exception { log("Инициализация"); Calendar c = Calendar.getInstance(); String yyyy = TimeUtils.format ( c, "yyyy" ); log("Ищем счета для отправки за " + TimeUtils.format ( c, "MM" ) +" " + yyyy + " года"); c.add( Calendar.MONTH, -1 ); String mm = TimeUtils.format ( c, "MM" ); StringBuilder sb = new StringBuilder (); int mid = 9; int i = 0; Connection con = connectionSet2.getConnection(); String query = " SELECT c.id, c.title, bd.id, bd.format_number FROM contract AS c "+ " LEFT JOIN bill_data_" + mid + " AS bd ON bd.cid=c.id "+ " WHERE bd.unload_status = 0 AND bd.status = 0 AND bd.yy = "+ yyyy +" AND bd.mm = " + mm; PreparedStatement contractPs = con.prepareStatement( query ); ResultSet contractRs = contractPs.executeQuery(); while ( contractRs.next() ) { i++; int cid = contractRs.getInt( 1 ); String title = contractRs.getString( 2 ); String billCodes = contractRs.getString( 3 ); String format_number = contractRs.getString( 4 ); sb.append("Найдены счета для договоров " + title + " с номером " + format_number + "\n"); //print("cid => " + cid + " billCodes => " + billCodes); new RunTaskDataManager( con ).addTask( new BillDocsSenderForAll( mid, billCodes, null, 0 ) ); } log("Количество счетов для отправки " + i); log(sb.toString()); log("Счета отправлены"); contractPs.close(); contractRs.close(); } /** * Вывод сообщений и в лог-файл и в клиентский лог. * @param msg текст сообщения. */ private void log( String msg ) { print( msg ); logger.info( msg ); } }
Запускать нужно после выставления счетов(в моем случае). Можно поправить логику поиска счетов и отправлять нужные вам --Skyb 07:16, 17 июня 2014 (UTC)