forum.bitel.ru http://forum.bitel.ru/ |
|
Удаление договоров и Inet http://forum.bitel.ru/viewtopic.php?f=22&t=11774 |
Страница 1 из 1 |
Автор: | oldb0y [ 08 июл 2016, 10:12 ] |
Заголовок сообщения: | Удаление договоров и Inet |
Настраиваю, запускаю, приходит письмо — These contracts were deleted! Смотрю в биллинге все договора на месте. Если хотябы на одном договоре закрою период на сервисе Inet, то договор удалится. Как быть? И второе, можно ли настроить или добавить в будущих релизах возможность исключать договора, если они входят в определенную группу. То есть, существует одна общая группа PPPoE, которая используется в различных целях (в т.ч. в дин. коде), в нее всключены все договора данной технологии. При этом существует группа VIP в нее входят договора, которые нельзя удалять и делать прочие действия. Существуют договора, которые входят одновременно в эти 2 группы, и нужно как-то исключить из задачи удаления группу договоров VIP |
Автор: | stark [ 13 июл 2016, 14:27 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
Это фраза выводится до уделания. Ее можно исправить на фразу "Эти договоры будут удалены". Или писать уже по факту те договоры, которые реально получилось удалить. Группу можно добавить. |
Автор: | oldb0y [ 13 июл 2016, 14:42 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
stark Не удалось полностью понять Ваш коментарий. Если я понял само письмо информирует не о факте удаления договоров, а о том что они будут удалены. Когда? Если это имелось в виду, то первый вопрос с открытым сервисом Inet отпадает (осталось узнать когда происходит удаление). А исключать группы договоров при удалении возможно? |
Автор: | stark [ 21 июл 2016, 16:13 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
oldb0y писал(а): stark Не удалось полностью понять Ваш коментарий. Если я понял само письмо информирует не о факте удаления договоров, а о том что они будут удалены. Когда? Да. о том что будут удалены. Перед попыткой их удаления . Но потом некоторые не получается удалить и об этом вы уже не получаете сообщений. oldb0y писал(а): А исключать группы договоров при удалении возможно? Пока вроде нет, надо дорабатывать. |
Автор: | oldb0y [ 26 июл 2016, 15:59 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
Тогда напишем свое.. Сразу примечание 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 ); } } // Кашерно удаляем ПТ |
Автор: | Artur [ 26 июл 2016, 16:02 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
Закрывайте в коде PreparedStatement. Либо явно через close(), либо используйте try-with-resources. |
Автор: | oldb0y [ 26 июл 2016, 16:05 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
И собственно вопросы. Что сюда добавить, чтобы удалить договор полностью? В предыдущем посте я отметил, что deleteContract() не умеет удалять персональные ТП. Может он так же не подчищает параметры контракта, общие ПТ, финансовые наработки и т.д. Собственно для этого прошу разрабов подсказать как сделать хорошо. А еще нужно удалять все записи по NPAY договор. |
Автор: | oldb0y [ 26 июл 2016, 16:16 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
Ой, оказывается удаляет параметры и фин. часть Код: 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; } |
Автор: | oldb0y [ 26 июл 2016, 16:21 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
Тогда остается: Модули Inet и Npay, ТП и ПТП, Примечания, Объекты (я не использую еще, поэтому мало интересно). Вроде все? |
Автор: | Ildar [ 26 июл 2016, 21:09 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
oldb0y писал(а): Тогда остается: Модули Inet и Npay, ТП и ПТП, Примечания, Объекты (я не использую еще, поэтому мало интересно). Вроде все? Вам для начала обновиться бы. По NPay, ТП и примечания насколько знаю ничего в 6.2 уже не остается( кроме месячных таблиц npay ). ПТП в ближайшее время займусь, обращу на это внимание. |
Автор: | Ildar [ 28 июл 2016, 02:06 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
ПТП действительно остаются, в ближайшее время будет исправлено. |
Автор: | Ildar [ 28 июл 2016, 03:56 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
Архивация и удаление ПТП исправлены( пока только в 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 ); } } |
Автор: | oldb0y [ 15 авг 2016, 13:36 ] |
Заголовок сообщения: | Re: Удаление договоров и Inet |
Спасибо! В ближайшее время займусь собственным обработчиком удаления договоров (: |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |