Автоматическая отправка счетов через глобальный скрипт поведения

Материал из 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)

Личные инструменты