Скрипт предоставление скидки пенсионерам
Материал из BiTel WiKi
(Различия между версиями)
Boris (Обсуждение | вклад) (Новая страница: «Скрипт предоставление скидки пенсионерам <source lang="java"> </source>») |
Boris (Обсуждение | вклад) |
||
| Строка 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(); }
