Скрипт предоставление скидки пенсионерам
Материал из 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(); }