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

4.6 -> 5.1 В дереве тарифов не показываются узлы
http://forum.bitel.ru/viewtopic.php?f=22&t=6398
Страница 1 из 1

Автор:  afedorov [ 01 фев 2012, 17:28 ]
Заголовок сообщения:  4.6 -> 5.1 В дереве тарифов не показываются узлы

После апгрейда 4.6 -> 5.1 в дереве тарифов не показываются некоторые узлы, которые там были.
Например для PPP не видно узлов с RADIUS атрибутами, но при авторизации RADIUS их выдает.
Т.е. реально оно там все есть, просто не отображается.
Если же создавать узлы заново, то они нормально отображаются.
Может формат хранения в БД поменялся и надо сконвертировать что-то?
Кто знает как?

Автор:  afedorov [ 01 фев 2012, 18:01 ]
Заголовок сообщения:  Re: 4.6 -> 5.1 В дереве тарифов не показываются узлы

Если поселектить из базы информацию по тарифу, то там вот что:

Код:
SELECT mn.*, tp.title
FROM tariff_plan tp
join module_tariff_tree mtt on mtt.tree_id=tp.id
join mtree_node mn on mtt.id = mn.mtree_id
where tp.id=391


Код:
3517   586   763   service   4   155   xCity2
3518   3517   763   cost   col&1%costType&0%type&2%cost&0.0   1   xCity2
3519   3517   763   attr_set   set_id&25%override&0   2   xCity2
3667   586   763   tariff_config   session_detail.delayed.update=1log_session.delayed.update=1   171   xCity2
3514   0   764   root      508   xCity2
3515   3514   764   month_mode   sid&5%mode&month   1   xCity2
3516   3515   764   month_cost   type&0%cost&490.0   1   xCity2

Автор:  afedorov [ 02 фев 2012, 02:08 ]
Заголовок сообщения:  Re: 4.6 -> 5.1 В дереве тарифов не показываются узлы

Начал разбираться. Написал тестовый скрипт, который извлекает дерево тарифного плана.
Код:
import java.util.*;
import java.io.*;
import java.sql.*;

boolean walkTreeItems(Connection con,int tree_id, int mid, int deep)
{
   boolean result = false;
    int mtree = 0;
    int mtreeParent = 0;
 
    String query = "SELECT id, parent_tree FROM module_tariff_tree WHERE mid=? AND tree_id=?";
    PreparedStatement ps = this.con.prepareStatement(query);
    ps.setInt(1, mid);
    ps.setInt(2, tree_id);
    ResultSet rs = ps.executeQuery();
 
    if (rs.next())
   {
      mtree = rs.getInt(1);
      mtreeParent = rs.getInt(2);
 
      if (mtreeParent == 0)
      {
         ps.close();
          query = "SELECT parent_tree FROM tariff_tree WHERE id=?";
          ps = this.con.prepareStatement(query);
         ps.setInt(1, tree_id);
         rs = ps.executeQuery();
          if (rs.next())
         {
            mtreeParent = rs.getInt(1);
         }
 
      }
       ps.close();
       if (mtreeParent != 0)
      {
         walkTreeItems(con, mtreeParent, mid, deep + 1);
      }
 
      print ("subtree id="+String.valueOf(mtree)+" deep="+String.valueOf(deep));

      query = "SELECT id, type, parent_node, data FROM mtree_node WHERE mtree_id=? ORDER BY pos";
      ps = this.con.prepareStatement(query);
      ps.setInt(1, mtree);
      rs = ps.executeQuery();
      while (rs.next())
      {
         print(" item id="+rs.getString(1)+" type="+rs.getString(2)+" parent="+rs.getString(3)+" data="+rs.getString(4));
      }
       print("---");
      result = true;
   }
    ps.close();
   return result;
}

public void main( setup, con, conSlave )
{
   walkTreeItems(con,390, 1, 0);
}


Для моего тарифного плана с id=390 он выдает следующий результат:
Код:
subtree id=1 deep=2
 item id=1 type=root parent=0 data=
 item id=2 type=service parent=1 data=1
 item id=6 type=cost parent=2 data=cost&0.0%col&1%type&5
 item id=7 type=cost parent=3 data=cost&0.0%col&1%type&2
 item id=8 type=cost parent=4 data=cost&0.0%col&1%type&2
 item id=3 type=service parent=1 data=3
 item id=4 type=service parent=1 data=2
---
subtree id=75 deep=1
 item id=587 type=multi_service parent=586 data=sids&1,2,3
 item id=590 type=cost parent=587 data=type&2%cost&0.0%col&1
 item id=586 type=root parent=0 data=
---
subtree id=761 deep=0
 item id=3512 type=cost parent=3511 data=col&1%costType&0%type&2%cost&0.0
 item id=3513 type=attr_set parent=3511 data=set_id&24%override&0
 item id=3511 type=service parent=586 data=4
 item id=3666 type=tariff_config parent=586 data=session_detail.delayed.update=1
log_session.delayed.update=1

---


На картинках ниже показано как этот тарифный план и его предки выглядят в клиенте.
В выводе скрипта видим например item id=3513 type=attr_set parent=3511 data=set_id&24%override&0
Но почему в клиенте не отображается этот узел?

Вложения:
Комментарий к файлу: Предок 2
p3.png
p3.png [ 14.94 КБ | Просмотров: 2178 ]
Комментарий к файлу: Предок 1
p2.png
p2.png [ 17.25 КБ | Просмотров: 2178 ]
Комментарий к файлу: Тарифный план где не видно узлов
p1.png
p1.png [ 22.46 КБ | Просмотров: 2178 ]

Автор:  afedorov [ 02 фев 2012, 03:37 ]
Заголовок сообщения:  Re: 4.6 -> 5.1 В дереве тарифов не показываются узлы

Похоже я нашел в чем дело.
В промежуточном предке есть "item id=586 type=root parent=0 data=" на который ссылается потомок, и узлы предка, но ни в одном узле нет ссылок на самого первого предка.
После того как во всех узлах, которые ссылались на этот root id=586, были поправлены parent_node на первый предок, все начало нормально показываться и редактироваться.
Получается версия 4.6 допускала наличие узлов, которые не ссылаются на предка через parent_node, а 5.1 уже нет.

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