Новый номер договора группе договоров

Материал из BiTel WiKi

Перейти к: навигация, поиск

Если нужно назначить новые номера договоров для группы, еспользуем этот скрипт Разработка Bitel @author dimon

Внимание! Данное решение/метод/статья относится к версии 6.0 и для других версий может быть неактуальна! Вам нужно самостоятельно поправить решение под свои нужды или воспользоваться помощью на форуме. Будем признательны, если внизу страницы или отдельной статьёй вы разместите исправленное решение для другой версии или подсказки что надо исправить.

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.GregorianCalendar;
 
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import bitel.billing.server.contract.bean.ContractPattern;
import bitel.billing.server.contract.bean.ContractPatternManager;
 
/**
 * Т.е. переименовать внутри групп по одному шаблону. Ну в целом не очень сложно,
 * скрипт выбирает все договоры группы и ставит новый тайтл по какой-то маске. Чтобы дальше
 * сами нумеровались надо будет шаблон имени договора сделать точно с таким же форматом.
 * @author dimon
 */
public class RenameContract
{
	/** группа для обработки */
	private final static int GROUP = 24;
	/** id шаблона договора, где находится нужный паттерн именования договора */
	private final static int PATTERN_ID = 31;
 
	public void execute( Setup setup, ConnectionSet connectionSet )
		throws Exception
	{
		System.out.println("Start");
		Connection con  = connectionSet.getConnection();
		//
		long timeStart = System.currentTimeMillis();
		//
		ContractPattern pattern = new ContractPatternManager( con ).getPattern( PATTERN_ID );
		//
		PreparedStatement ps  = con.prepareStatement( "SELECT id, title FROM contract WHERE gr & (1<<?) != 0" );
		ps.setInt( 1, GROUP );
		ResultSet rs = ps.executeQuery();
		int count = 0;
		while ( rs.next() )
		{
			int id = rs.getInt("id");
			String title = rs.getString("title");
			String new_title = ContractPatternManager.getContractTitle( con, pattern, new GregorianCalendar(), null );
			System.out.println(String.format("#%s : %s -> %s", id, title, new_title));
			// переименование
            PreparedStatement psc = con.prepareStatement( "UPDATE contract SET title=? WHERE id=?" );           
            psc.setString( 1, new_title );
            psc.setInt( 2, id );
            psc.executeUpdate();
            psc.close();
			//
			++count;				
		}
		ps.close();
		System.out.println( "Processed " + count + " contracts..." );
		//
		long timeEnd = System.currentTimeMillis();
		System.out.println( "Process time: " + (timeEnd - timeStart)/1000 + " s." );
	}
}
Личные инструменты