forum.bitel.ru
http://forum.bitel.ru/

скрипт закрытия абонентов
http://forum.bitel.ru/viewtopic.php?f=19&t=7322
Страница 1 из 1

Автор:  skyb [ 19 окт 2012, 11:30 ]
Заголовок сообщения:  скрипт закрытия абонентов

есть скрипт который через определенное время закрывает абонентов, выставляя ему дату закрытия, но после этого не закрывается не абонка не ТП. А когда делается руками - то все закрывается, что выполняет биллинг и что мне и где вызвать в скрипте чтоб закрывалось в скрипте все???
Код:
package ru.skyb.scripts.global;

import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import java.sql.*;
import java.util.*;
import java.util.Date;

import bitel.billing.common.TimeUtils;
import bitel.billing.server.contract.bean.*;

public class archive
   extends GlobalScriptBase
{
   @Override
   public void execute( Setup setup1, ConnectionSet connectionSet2 )
      throws Exception
   {
      Connection con = connectionSet2.getConnection();   
      Calendar calendar = new GregorianCalendar();
      GregorianCalendar nowDate = (GregorianCalendar) calendar.clone();//клонируем дату для дальнейшей работы
      nowDate.get(Calendar.DATE);
      GregorianCalendar sqlDate = (GregorianCalendar) calendar.clone();
      Date dateSql = TimeUtils.convertCalendarToSqlDate(sqlDate);
      Date dateNow = TimeUtils.convertCalendarToDate(nowDate);//переводим дату в тип Date с типа Calendar
      String query = "select id from contract where gr&(1<<3)>0";
      PreparedStatement contractPs = con.prepareStatement( query );
      ResultSet contractRs = contractPs.executeQuery();
      int cid;
      int i = 0;
       while ( contractRs.next() )
          {
            cid = contractRs.getInt( 1 );
            ContractManager contract = new ContractManager(con);
            Contract ct = contract.getContractById(cid);
/*==========================close==============================

getLastBalanceMonth
public java.util.Date getLastBalanceMonth(Contract contract)
возращает самый старший месяц, за который есть данные по Балансу*/
            BalanceUtils balance = new BalanceUtils(con);            
            Date contract_balance = (Date) balance.getLastBalanceMonth(ct);
            if( contract_balance == null)
               {
                  continue;
               } 
//==========================close==============================//
            int mounth = TimeUtils.monthsDelta(contract_balance,dateNow);
            if (mounth > 6 )
               {
                  print ("Контракт с сидом " + cid);
/*         print ("Дата которая попала в жопу " + contract_balance);
         String update_query = "update contract set gr=0 where id = "+ cid;
         PreparedStatement ps = con.prepareStatement( update_query );
         ps.executeUpdate() ; */
                  String close_query = "update contract set date2 = '" + dateSql + "' where id = "+ cid;
                  PreparedStatement rs = con.prepareStatement( close_query );
                  rs.executeUpdate() ;
                  ContractParameterManager cpu = new ContractParameterManager( con );
                  cpu.setGroup( cid, 19 );
                  cpu.unsetGroup( cid, 3 );
                  cpu.unsetGroup( cid, 0 );
                  i++;
               }
   
             }
         print("кол-во " +i );
      }
}

Автор:  Phricker [ 19 окт 2012, 11:50 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

closeContract братииииииииш © Павлик

Автор:  dimOn [ 19 окт 2012, 11:52 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

никаких отличий не должно быть. разве что если что-то падает

Автор:  Phricker [ 19 окт 2012, 11:56 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

dimOn писал(а):
никаких отличий не должно быть. разве что если что-то падает

Да ничего у него не падает (по крайней мере в этом скрипте :lol: В остальном свечку не держал :lol: ). Просто этот скрипт через SQL в базе дату закрытия выставляет. А это не вызывает закрытия сущностей.
Пускай closeContract использует и будет ему счастье. Заодно новым скриптом поделится :D

Автор:  dimOn [ 19 окт 2012, 11:59 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

ну а как тогда пишет что закрывается?

Автор:  skyb [ 19 окт 2012, 12:01 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

dimOn писал(а):
ну а как тогда пишет что закрывается?

Код:
String close_query = "update contract set date2 = '" + dateSql + "' where id = "+ cid;

Автор:  dimOn [ 19 окт 2012, 12:03 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

ну так это тоже не закроет сущностей то.

Цитата:
А когда делается руками - то все закрывается,
это вот что значит?

Автор:  Phricker [ 19 окт 2012, 12:12 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

Я почему то думал что skn ночью не спал и будет с утра тормозить ))) Так у вас там походу групповой поход по пиффку был, и только skn'а прибило и он на форум вылез :D
Этот скрипт через базу выставляет дату закрытия договора, что естественно не вызывает закрытия сущностей. Однако Скуб заметил, что если через клиент биллинга РУКАМИ установить дату закрытия договора - все его сущности закрываются. Поэтому он спрашивает в чем же дело )
Срочно кофе, Димон ))) Большую чашку :umnik:

Автор:  skyb [ 19 окт 2012, 12:13 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

Phricker писал(а):
Я почему то думал что skn ночью не спал и будет с утра тормозить ))) Так у вас там походу групповой поход по пиффку был, и только skn'а прибило и он на форум вылез :D
Этот скрипт через базу выставляет дату закрытия договора, что естественно не вызывает закрытия сущностей. Однако Скуб заметил, что если через клиент биллинга РУКАМИ установить дату закрытия договора - все его сущности закрываются. Поэтому он спрашивает в чем же дело )
Срочно кофе, Димон ))) Большую чашку :umnik:

:facepalm: :facepalm: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Автор:  dimOn [ 19 окт 2012, 12:13 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

Объяснять надо ладом :lupa:

Автор:  skyb [ 19 окт 2012, 12:24 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

dimOn писал(а):
Объяснять надо ладом :lupa:

Дык вон, фрикер то сразу понял!!!

Автор:  skyb [ 19 окт 2012, 12:36 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

блин, а у меня он ещё выпелен, тока в среду появиццо, т.к. обновлятся буду

Автор:  skyb [ 19 окт 2012, 12:42 ]
Заголовок сообщения:  Re: скрипт закрытия абонентов

на обновленном тестовом работает

Код:
package ru.skyb.scripts.global;

import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import java.sql.*;
import java.util.*;
import java.util.Date;

import bitel.billing.common.TimeUtils;
import bitel.billing.server.contract.bean.*;

public class test extends GlobalScriptBase {
   @Override
   public void execute(Setup setup1, ConnectionSet connectionSet2)
         throws Exception {

      Connection con = connectionSet2.getConnection();
      Calendar calendar = new GregorianCalendar();
      GregorianCalendar nowDate = (GregorianCalendar) calendar.clone();// клонируем
                                                         // дату
                                                         // для
                                                         // дальнейшей
                                                         // работы
      nowDate.get(Calendar.DATE);
      GregorianCalendar sqlDate = (GregorianCalendar) calendar.clone();
      Date dateSql = TimeUtils.convertCalendarToSqlDate(sqlDate);
      Date dateNow = TimeUtils.convertCalendarToDate(nowDate);// переводим
                                                // дату в тип
                                                // Date с типа
                                                // Calendar
      String query = "select id from contract where gr&(1<<3)>0";
      PreparedStatement contractPs = con.prepareStatement(query);
      ResultSet contractRs = contractPs.executeQuery();
      int cid;
      int i = 0;
      while (contractRs.next()) {
         cid = contractRs.getInt(1);
         
         ContractManager contract = new ContractManager(con);
         Contract ct = contract.getContractById(cid);
         /*
          * getLastBalanceMonth public
          * java.util.Date getLastBalanceMonth(Contract contract) возращает
          * самый старший месяц, за который есть данные по Балансу
          */
         BalanceUtils balance = new BalanceUtils(con);
         Date contract_balance = (Date) balance.getLastBalanceMonth(ct);
         if (contract_balance == null) {
            continue;
         }
         // ==========================close==============================//
         int mounth = TimeUtils.monthsDelta(contract_balance, dateNow);
         if (mounth > 6) {
            print("Контракт с сидом " + cid);
            /*
             * String update_query = "update contract set gr=0 where id = "+
             * cid; PreparedStatement ps = con.prepareStatement(
             * update_query ); ps.executeUpdate() ; String close_query =
             * "update contract set date2 = '" + dateSql + "' where id = "+
             * cid; PreparedStatement rs = con.prepareStatement( close_query
             * ); rs.executeUpdate() ;
             */
            contract.closeContract(cid);
            ContractParameterManager cpu = new ContractParameterManager(con);
            cpu.setGroup(cid, 19);
            cpu.unsetGroup(cid, 3);
            cpu.unsetGroup(cid, 0);
            i++;
         }

      }
      print("кол-во " + i);
   }

}

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/