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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «Скрипт предоставление скидки пенсионерам <source lang="java"> </source>»)
 
Строка 1: Строка 1:
-
Скрипт предоставление скидки пенсионерам
+
Скидка предоставляется пенсионерам, при наличии в договоре заполненного параметра даты предъявления пенсионного удостоверения в текущем году.
-
 
+
Скидка предоставляется при условии предоплаты услуг, при отсутствии предоплаты, скидка не предоставляется, в случае предоплаты, скидка восстанавливаться со следующего месяца.
 +
Скидка достигаеться путем изменения услуги.
 +
При смене услуги, договор также переводиться в группу льготников.
<source lang="java">
<source lang="java">
 +
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();
 +
    }
</source>
</source>

Текущая версия на 06:59, 23 июля 2010

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

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();		
    }
Личные инструменты