Повышение приоритета процессов

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

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

Повышение приоритета для старых проблем.

Класс может быть запущен планировщиком либо командой консоли crm.sh runclass <className>.

package ru.bgcrm.dyn;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.GregorianCalendar;
import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.log4j.Logger;
 
import ru.bgcrm.dao.ParamValueDAO;
import ru.bgcrm.dao.process.ProcessDAO;
import ru.bgcrm.dao.process.ProcessLinkDAO;
import ru.bgcrm.model.BGException;
import ru.bgcrm.model.CommonObjectLink;
import ru.bgcrm.model.Pair;
import ru.bgcrm.model.SearchResult;
import ru.bgcrm.model.process.Process;
import ru.bgcrm.model.process.StatusChange;
import ru.bgcrm.util.Setup;
import ru.bgcrm.util.Utils;
import ru.bgcrm.util.sql.ConnectionSet;
import ru.bgcrm.util.sql.PreparedDelay;
import ru.bgcrm.util.sql.SQLUtils;
import ru.bgcrm.util.TimeUtils;
 
public class setprior
    implements Runnable
    {
	private static final Logger log = Logger.getLogger(setprior.class );
	private static AtomicBoolean working = new AtomicBoolean();
	@Override
	public void run(){
		log.info( "Started" );
 
		if( working.get() ){
		    log.warn( "Already working" );
		    return;
		}
		Connection con = Setup.getSetup().getDBConnectionFromPool();
		try{
		    working.set( true );
		    ProcessDAO processDao = new ProcessDAO( con );
		    String query = 
			"SELECT *  FROM process " +  
			"WHERE  process.close_dt IS NULL";  
		    PreparedStatement ps = con.prepareStatement( query );
		    ResultSet rs = ps.executeQuery();
		    while( rs.next() ){
			Process process = ProcessDAO.getProcessFromRs( rs );
			int daysdelta =TimeUtils.daysDelta(TimeUtils.convertDateToCalendar(process.getStatusTime()), new GregorianCalendar())+1;
			if ((daysdelta<9)&&(process.getPriority()<daysdelta))
			    process.setPriority(daysdelta);
			processDao.updateProcess(process);
			con.commit();
		    }
	    	    ps.close();
		}catch( Exception e ){
			log.error( e.getMessage(), e );
		}finally{
			SQLUtils.closeConnection( con);
			working.set( false );
		}
		log.info( "Finished" );
	}
}
Личные инструменты