Скрипт предоставление скидки пенсионерам

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

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

Скидка предоставляется пенсионерам, при наличии в договоре заполненного параметра даты предъявления пенсионного удостоверения в текущем году. Скидка предоставляется при условии предоплаты услуг, при отсутствии предоплаты, скидка не предоставляется, в случае предоплаты, скидка восстанавливаться со следующего месяца. Скидка достигаеться путем изменения услуги. При смене услуги, договор также переводиться в группу льготников.

import bitel.billing.server.util.*;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import bitel.billing.server.contract.bean.BalanceUtils;
import bitel.billing.server.contract.bean.ContractParameterManager;
import bitel.billing.server.npay.bean.ServiceObject;
import bitel.billing.server.npay.bean.ServiceObjectManager;
 
ServiceObjectManager sm =null;
Calendar now = null;
//ИД ПАРАМЕТРА ДАТЫ ПРЕДЪЯВЛЕНИЯПЕНСИОННОГО УДОСТОВЕРЕНИЯ
int pid = 27;
//МОДУЛЬ АБОНПЛАТ 
int mid = 66;
//УСЛУГА АБОНПЛАТЫ БЕЗ СКИДКИ
int sidNormal = 79;
//ЛЬГОТНАЯ УСЛУГА АБОНПЛАТЫ
int sidLgota = 75;
//ГРУППА НЕ ЛЬГОТНИКОВ
int groupFrom = 9;
//ГРУППА ЛЬГОТНИКОВ
int groupTo = 10;
Calendar endDate = null;
Calendar startDate = null;
PreparedStatement psClearGroup = null;
PreparedStatement psAddGroup = null;
 
public void main( setup, con, conSlave )
        throws Exception
    {
 
        now = new GregorianCalendar();
        endDate = (Calendar)now.clone();
        endDate.add( Calendar.MONTH, -1 );
        endDate.set( Calendar.DAY_OF_MONTH, endDate.getActualMaximum( Calendar.DAY_OF_MONTH ));
        startDate = (Calendar)now.clone();
        startDate.set( Calendar.DAY_OF_MONTH, 1);
 
		//это для отключения и лобавления групп
		psClearGroup = con.prepareStatement( "UPDATE contract set gr=gr&~(1<<?) where id=?" );
		psAddGroup = con.prepareStatement( "UPDATE contract SET gr=gr|(1<<?) WHERE id=?" );
		psClearGroup.setInt(1,groupFrom);
		psAddGroup.setInt(1,groupTo);
 
        ContractParameterManager pm = new ContractParameterManager( con );
        sm = new ServiceObjectManager( con, mid );
        BalanceUtils bu = new BalanceUtils(con);
        //String sql = "SELECT id FROM contract WHERE status = 0";
        String sql = "SELECT id FROM contract WHERE status = 0 ANd id =352751";
        PreparedStatement ps = con.prepareStatement( sql );
        ResultSet rs = ps.executeQuery();
        while(rs.next())
        {
            int cid = rs.getInt( 1 );
            Calendar date = pm.getDateParam( cid, pid );
            //даты нет или она не этого года
            if( date == null || date.get( Calendar.YEAR )!= now.get( Calendar.YEAR ))
            {
 
                closeLgota(cid);
                continue;
            }
            BigDecimal rest = bu.getBalanceSumma1( now.getTime(), cid );
            if(rest.compareTo( BigDecimal.ZERO ) < 0)
            {
                closeLgota(cid);
            }
            else
            {
                openLgota( cid);
            }
 
 
        }
    }
 
private void closeLgota(int cid)
    {
 
        ServiceObject so = findSevice( cid, sidLgota);
        if( so == null)
        {
            return;
        }
		print("close lgota for cid =>"+cid);
        //закрываем абонплату последним днем прошлого месяца если она не ботьлше даты открытия иначе удаляем
        if( so.getDate1().compareTo( endDate.getTime() )>=0)
        {
            sm.deleteServiceObject( so.getId() );
        }
        else
        {
            so.setDate2( endDate.getTime() );
            sm.updateServiceObject( so );
        }
        ServiceObject serviceObject = new ServiceObject();
        serviceObject.setId( -1 );
        serviceObject.setContractId( cid );
        serviceObject.setServiceId( sidNormal );
        serviceObject.setObjectId( 0 );
        serviceObject.setCol( so.getCol() );
        serviceObject.setEntityMid( so.getEntityMid() );
        serviceObject.setEntityId( so.getEntityId() );
        serviceObject.setDate1( startDate.getTime() );
        serviceObject.setDate2( null );
        serviceObject.setComment( "Отключение льготы скриптом" );
        sm.updateServiceObject( serviceObject );
 
    }
    private void openLgota(int cid)
    {
 
        ServiceObject so = findSevice( cid, sidNormal);
        if( so == null)
        {
            return;
        }
		print("open lgota for cid =>"+cid);
        //закрываем абонплату последним днем прошлого месяца если она не ботьлше даты открытия иначе удаляем
        if( so.getDate1().compareTo( endDate.getTime() )>=0)
        {
            sm.deleteServiceObject( so.getId() );
        }
        else
        {
            so.setDate2( endDate.getTime() );
            sm.updateServiceObject( so );
        }
        ServiceObject serviceObject = new ServiceObject();
        serviceObject.setId( -1 );
        serviceObject.setContractId( cid );
        serviceObject.setServiceId( sidLgota );
        serviceObject.setObjectId( 0 );
        serviceObject.setCol( so.getCol() );
        serviceObject.setEntityMid( so.getEntityMid() );
        serviceObject.setEntityId( so.getEntityId() );
        serviceObject.setDate1( startDate.getTime() );
        serviceObject.setDate2( null );
        serviceObject.setComment( "Включение льготы скриптом" );
        sm.updateServiceObject( serviceObject );
		//меняем льготу
		changeGroup(cid);
    }   
 
 
    private ServiceObject findSevice( int cid, int sid)
    {
 
        List list = sm.getServiceObjectList( cid, now.getTime() );
        for( ServiceObject so : list)
        {
            if( so.getServiceId() == sid)
            {
                return so ;
            }
        }
        return null;
    }
    private void changeGroup(int cid)
    {
        psClearGroup.setInt(2,cid);
	psAddGroup.setInt(2,cid);
	psClearGroup.executeUpdate();
	psAddGroup.executeUpdate();		
    }
Личные инструменты