BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 18 июн 2025, 04:43

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Удаление договоров и Inet
СообщениеДобавлено: 08 июл 2016, 10:12 
Не в сети

Зарегистрирован: 28 авг 2014, 09:26
Сообщения: 162
Карма: 0
Настраиваю, запускаю, приходит письмо — These contracts were deleted!

Смотрю в биллинге все договора на месте.

Если хотябы на одном договоре закрою период на сервисе Inet, то договор удалится. Как быть?

И второе, можно ли настроить или добавить в будущих релизах возможность исключать договора, если они входят в определенную группу.
То есть, существует одна общая группа PPPoE, которая используется в различных целях (в т.ч. в дин. коде), в нее всключены все договора данной технологии. При этом существует группа VIP в нее входят договора, которые нельзя удалять и делать прочие действия. Существуют договора, которые входят одновременно в эти 2 группы, и нужно как-то исключить из задачи удаления группу договоров VIP


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 13 июл 2016, 14:27 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Это фраза выводится до уделания. Ее можно исправить на фразу "Эти договоры будут удалены". Или писать уже по факту те договоры, которые реально получилось удалить.
Группу можно добавить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 13 июл 2016, 14:42 
Не в сети

Зарегистрирован: 28 авг 2014, 09:26
Сообщения: 162
Карма: 0
stark
Не удалось полностью понять Ваш коментарий. Если я понял само письмо информирует не о факте удаления договоров, а о том что они будут удалены. Когда?

Если это имелось в виду, то первый вопрос с открытым сервисом Inet отпадает (осталось узнать когда происходит удаление).

А исключать группы договоров при удалении возможно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 21 июл 2016, 16:13 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
oldb0y писал(а):
stark
Не удалось полностью понять Ваш коментарий. Если я понял само письмо информирует не о факте удаления договоров, а о том что они будут удалены. Когда?


Да. о том что будут удалены. Перед попыткой их удаления . Но потом некоторые не получается удалить и об этом вы уже не получаете сообщений.

oldb0y писал(а):
А исключать группы договоров при удалении возможно?


Пока вроде нет, надо дорабатывать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 26 июл 2016, 15:59 
Не в сети

Зарегистрирован: 28 авг 2014, 09:26
Сообщения: 162
Карма: 0
Тогда напишем свое..


Сразу примечание deletePT() пришлось придумывать, потому что deleteContract() не умеет удалять персональные ТП

Код:
      ContractRemover cr = new ContractRemover( setup, con, null );
      CommonLib cl = new CommonLib();

      // Закрывает сервисы на договорах, а то не удалится (см. метод ниже)
      deleteService( con );

      // Пока без условий, удалим все
      String query = "SELECT id FROM contract";
      PreparedStatement ps  = con.prepareStatement( query );
      ResultSet rs = ps.executeQuery();

      while ( rs.next() ){
         cr.deleteContract( rs.getInt(1) );
         cl.deletePT( rs.getInt(1), "subscribe_price", con ); // (см. метод ниже)
      }
      rs.close(); ps.close();


Метод deleteService()
Код:
   private void deleteService( Connection con ) throws Exception {

      String query_d = "SELECT * FROM contract " +
                  "LEFT JOIN contract_module as cm  ON contract.id = cm.cid " +
                  "WHERE cm.mid = " + MODULE_ID + " AND contract.gr &  (1 << " + LOADED_GROUP + ") != 0 ";
      
      PreparedStatement ps = con.prepareStatement( query_d );
      ResultSet rs = ps.executeQuery();
 
      Date now = new Date();
 
      m1:
      while ( rs.next() ) {

         int cid = rs.getInt( "contract.id" );

         
         ServerContext context = ServerContext.get();
         InetServService wsServ = context.getService( InetServService.class, MODULE_ID );
         for ( InetServ oldServ : wsServ.inetServList( cid ) ) {            
            //во такой вот костыль чтобы удалить сервис, иначе не дает
            if ( oldServ.getDateTo() == null || TimeUtils.dateBefore(  now, oldServ.getDateTo() ) ) {

               oldServ.setDateFrom( TimeUtils.getPrevDay( now ) );
               oldServ.setDateTo( TimeUtils.getPrevDay( now ) );
 
               try {
                  wsServ.inetServUpdate( oldServ, new ArrayList<InetServOption>(), false, false, 0  );
               } catch( Exception e ) {
                  String message =  "Error while updating service date for contract " + cid + ":" + e.getMessage() ;
                  print( message );
                  continue;
               }
      }}}
   }



Метод deletePT()
Код:
   public void deletePT( int Cid, String Lat,  Connection con ) throws Exception {

      
      String query_d = "SELECT tb0.id,tb1.id,tb0.tree_id FROM contract_tree_link AS tb0 " +
      "LEFT JOIN module_tariff_tree AS tb1 ON tb0.tree_id = tb1.tree_id " +
      "WHERE tb0.cid = " + Cid + " AND tb0.title LIKE '%" + Lat + "%'";
      PreparedStatement psd = con.prepareStatement( query_d );
      ResultSet rsd = psd.executeQuery();

      int deletePTid = 0;
      int deleteTreeID = 0;
      int treeID = 0;
      if( rsd.next() ) { deletePTid = rsd.getInt(1); deleteTreeID = rsd.getInt(2); treeID = rsd.getInt(3);}

      if(deletePTid != 0) {

         String error = new TariffTreeBuilder( con ).deleteTree( deleteTreeID );
         
         // Удаляем тарифные деревья модуля ПТ
         String dq1 = "DELETE FROM module_tariff_tree WHERE id = ?";
         PreparedStatement dps1 = con.prepareStatement( dq1 );
         dps1.setInt( 1, deleteTreeID );
         dps1.executeUpdate();

         // Удаляем непосредственно сами тарифные деревья ПТ
         String dq2 = "DELETE FROM mtree_node WHERE mtree_id = ?";
         PreparedStatement dps2 = con.prepareStatement( dq2 );
         dps2.setInt( 1, deleteTreeID );
         dps2.executeUpdate();

         // Подчищаем триайд, и там мусор собирается
         String dq3 = "DELETE FROM tariff_tree WHERE id = ?";
         PreparedStatement dps3 = con.prepareStatement( dq3 );
         dps3.setInt( 1, treeID );
         dps3.executeUpdate();

         // Удаляем ПТ
         PersonalTariffManager PTM =  new PersonalTariffManager( con );
         PTM.deletePersonalTariff( deletePTid );
      }



   } // Кашерно удаляем ПТ


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 26 июл 2016, 16:02 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Закрывайте в коде PreparedStatement. Либо явно через close(), либо используйте try-with-resources.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 26 июл 2016, 16:05 
Не в сети

Зарегистрирован: 28 авг 2014, 09:26
Сообщения: 162
Карма: 0
И собственно вопросы.

Что сюда добавить, чтобы удалить договор полностью?

В предыдущем посте я отметил, что deleteContract() не умеет удалять персональные ТП. Может он так же не подчищает параметры контракта, общие ПТ, финансовые наработки и т.д. Собственно для этого прошу разрабов подсказать как сделать хорошо.

А еще нужно удалять все записи по NPAY договор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 26 июл 2016, 16:16 
Не в сети

Зарегистрирован: 28 авг 2014, 09:26
Сообщения: 162
Карма: 0
Ой, оказывается удаляет параметры и фин. часть
Код:
public String deleteContract(int userId, int cid)
  {
    try
    {
      EventProcessor.getInstance().request(new ContractDeleteEvent(0, userId, cid, false));

      executeDelete("DELETE FROM contract WHERE id=?", cid);

      executeDelete("DELETE FROM contract_service WHERE cid=?", cid);
      executeDelete("DELETE FROM contract_status WHERE cid=?", cid);
      executeDelete("DELETE FROM contract_module WHERE cid=?", cid);
      executeDelete("DELETE FROM contract_payment WHERE cid=?", cid);
      executeDelete("DELETE FROM contract_charge WHERE cid=?", cid);
      executeDelete("DELETE FROM contract_tariff WHERE cid=?", cid);
      executeDelete("DELETE FROM contract_balance WHERE cid=?", cid);
      executeDelete("DELETE FROM contract_account WHERE cid=?", cid);

      ContractParameterManager contractParameterManager = new ContractParameterManager(this.con);
      contractParameterManager.deleteParamForContract(1, cid);
      contractParameterManager.deleteParamForContract(2, cid);
      contractParameterManager.deleteParamForContract(3, cid);
      contractParameterManager.deleteParamForContract(4, cid);
      contractParameterManager.deleteParamForContract(5, cid);
      contractParameterManager.deleteParamForContract(6, cid);
      contractParameterManager.deleteParamForContract(7, cid);

      contractParameterManager.deleteParamForContract(9, cid);

      String cidStr = String.valueOf(cid);

      List objects = ServerUtils.deleteRowsFromTable(this.con, "object", "cid", cidStr, "id");
      for (String objectId : objects)
      {
        ServerUtils.deleteRowsFromTable(this.con, "object_param_value_address", "object_id", objectId, null);
        ServerUtils.deleteRowsFromTable(this.con, "object_param_value_date", "object_id", objectId, null);
        ServerUtils.deleteRowsFromTable(this.con, "object_param_value_list", "object_id", objectId, null);
        ServerUtils.deleteRowsFromTable(this.con, "object_param_value_text", "object_id", objectId, null);
      }
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
      return ex.getMessage();
    }
    return null;
  }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 26 июл 2016, 16:21 
Не в сети

Зарегистрирован: 28 авг 2014, 09:26
Сообщения: 162
Карма: 0
Тогда остается: Модули Inet и Npay, ТП и ПТП, Примечания, Объекты (я не использую еще, поэтому мало интересно). Вроде все?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 26 июл 2016, 21:09 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 05 сен 2012, 18:20
Сообщения: 457
Карма: 27
oldb0y писал(а):
Тогда остается: Модули Inet и Npay, ТП и ПТП, Примечания, Объекты (я не использую еще, поэтому мало интересно). Вроде все?


Вам для начала обновиться бы.
По NPay, ТП и примечания насколько знаю ничего в 6.2 уже не остается( кроме месячных таблиц npay ).
ПТП в ближайшее время займусь, обращу на это внимание.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 28 июл 2016, 02:06 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 05 сен 2012, 18:20
Сообщения: 457
Карма: 27
ПТП действительно остаются, в ближайшее время будет исправлено.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 28 июл 2016, 03:56 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 05 сен 2012, 18:20
Сообщения: 457
Карма: 27
Архивация и удаление ПТП исправлены( пока только в 7.0 )
Раз вы уже удаляете сами, предложу код по короче:
Код:
            List<String> perTariffs = ServerUtils.deleteRowsFromTable( con, "contract_tree_link", "cid", String.valueOf( cid ), "tree_id" );
            for( String treeId : perTariffs )
            {
                ServerUtils.deleteRowsFromTable( con, "tariff_tree", "id", treeId, null );
                List<String> mtreeIdList = ServerUtils.deleteRowsFromTable( con, "module_tariff_tree", "tree_id", treeId, "id" );
                for( String mtreeId : mtreeIdList )
                {
                   ServerUtils.deleteRowsFromTable( con, "mtree_node", "mtree_id", mtreeId, null );
                }
            }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление договоров и Inet
СообщениеДобавлено: 15 авг 2016, 13:36 
Не в сети

Зарегистрирован: 28 авг 2014, 09:26
Сообщения: 162
Карма: 0
Спасибо!

В ближайшее время займусь собственным обработчиком удаления договоров (:


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.047s | 41 Queries | GZIP : On ]