1.数据库设计
2.python获取设备分组树结构
DATA = [{'group_id': 1, 'group_name': '桂妃山', 'parent_group_id': None, 'description': None, 'order_num': 1,
"group_level": 1},
{'group_id': 2, 'group_name': '1栋1层', 'parent_group_id': 1, 'description': None, 'order_num': 1,
"group_level": 2},
{'group_id': 3, 'group_name': '1栋2层', 'parent_group_id': 1, 'description': None, 'order_num': 2,
"group_level": 2},
{'group_id': 4, 'group_name': '1栋3层', 'parent_group_id': 1, 'description': None, 'order_num': 3,
"group_level": 2},
{'group_id': 5, 'group_name': '1栋4层', 'parent_group_id': 1, 'description': None, 'order_num': 4,
"group_level": 2},
{'group_id': 6, 'group_name': '1线', 'parent_group_id': 2, 'description': None, 'order_num': 1,
"group_level": 3},
{'group_id': 7, 'group_name': '2线', 'parent_group_id': 2, 'description': None, 'order_num': 2,
"group_level": 3},
{'group_id': 8, 'group_name': '3线', 'parent_group_id': 2, 'description': None, 'order_num': 3,
"group_level": 3},
{'group_id': 9, 'group_name': '4线', 'parent_group_id': 2, 'description': None, 'order_num': 4,
"group_level": 3},
{'group_id': 10, 'group_name': '1线', 'parent_group_id': 3, 'description': None, 'order_num': 1,
"group_level": 3},
{'group_id': 11, 'group_name': '2线', 'parent_group_id': 3, 'description': None, 'order_num': 2,
"group_level": 3},
{'group_id': 13, 'group_name': '4线', 'parent_group_id': 3, 'description': None, 'order_num': 4,
"group_level": 3},
{'group_id': 12, 'group_name': '3线', 'parent_group_id': 3, 'description': None, 'order_num': 3,
"group_level": 3},
{'group_id': 14, 'group_name': '1线', 'parent_group_id': 4, 'description': None, 'order_num': 1,
"group_level": 3},
{'group_id': 15, 'group_name': '2线', 'parent_group_id': 4, 'description': None, 'order_num': 2,
"group_level": 3},
{'group_id': 17, 'group_name': '饲喂器2', 'parent_group_id': 6, 'description': None, 'order_num': 2,
"group_level": 4},
{'group_id': 16, 'group_name': '饲喂器1', 'parent_group_id': 6, 'description': None, 'order_num': 1,
"group_level": 4},
{'group_id': 18, 'group_name': '查情宝1', 'parent_group_id': 7, 'description': None, 'order_num': 1,
"group_level": 4},
{'group_id': 19, 'group_name': '查情宝2', 'parent_group_id': 7, 'description': None, 'order_num': 2,
"group_level": 4},
{'group_id': 20, 'group_name': '多奶宝1', 'parent_group_id': 8, 'description': None, 'order_num': 1,
"group_level": 4},
{'group_id': 21, 'group_name': '多奶宝2', 'parent_group_id': 8, 'description': None, 'order_num': 2,
"group_level": 4}]
def constructDeptTrees(parent_group_id=None):
'''
通过递归实现根据父ID查找子部门
1.根据父ID获取该部门下的子部门
2.遍历子部门,继续向下获取,直到最小部门
3.如果没有遍历到,返回空的数组,有返回权限列表
:param parentId:
:return:dict
'''
data_list = [i for i in DATA if i['parent_group_id'] == parent_group_id]
data_list = sorted(data_list, key=lambda x: x['order_num'])
# print(data_list)
if len(data_list) > 0:
data = []
for dept in data_list:
children_list = constructDeptTrees(dept['group_id'])
if children_list:
dept['children'] = children_list
data.append(dept)
return data
return []
group_tree = constructDeptTrees()
print(group_tree)
[{'group_id': 1, 'group_name': '桂妃山', 'parent_group_id': None, 'description': None, 'order_num': 1, 'group_level': 1, 'children': [{'group_id': 2, 'group_name': '1栋1层', 'parent_group_id': 1, 'description': None, 'order_num': 1, 'group_level': 2, 'children': [{'group_id': 6, 'group_name': '1线', 'parent_group_id': 2, 'description': None, 'order_num': 1, 'group_level': 3, 'children': [{'group_id': 16, 'group_name': '饲喂器1', 'parent_group_id': 6, 'description': None, 'order_num': 1, 'group_level': 4}, {'group_id': 17, 'group_name': '饲喂器2', 'parent_group_id': 6, 'description': None, 'order_num': 2, 'group_level': 4}]}, {'group_id': 7, 'group_name': '2线', 'parent_group_id': 2, 'description': None, 'order_num': 2, 'group_level': 3, 'children': [{'group_id': 18, 'group_name': '查情宝1', 'parent_group_id': 7, 'description': None, 'order_num': 1, 'group_level': 4}, {'group_id': 19, 'group_name': '查情宝2', 'parent_group_id': 7, 'description': None, 'order_num': 2, 'group_level': 4}]}, {'group_id': 8, 'group_name': '3线', 'parent_group_id': 2, 'description': None, 'order_num': 3, 'group_level': 3, 'children': [{'group_id': 20, 'group_name': '多奶宝1', 'parent_group_id': 8, 'description': None, 'order_num': 1, 'group_level': 4}, {'group_id': 21, 'group_name': '多奶宝2', 'parent_group_id': 8, 'description': None, 'order_num': 2, 'group_level': 4}]}, {'group_id': 9, 'group_name': '4线', 'parent_group_id': 2, 'description': None, 'order_num': 4, 'group_level': 3}]}, {'group_id': 3, 'group_name': '1栋2层', 'parent_group_id': 1, 'description': None, 'order_num': 2, 'group_level': 2, 'children': [{'group_id': 10, 'group_name': '1线', 'parent_group_id': 3, 'description': None, 'order_num': 1, 'group_level': 3}, {'group_id': 11, 'group_name': '2线', 'parent_group_id': 3, 'description': None, 'order_num': 2, 'group_level': 3}, {'group_id': 12, 'group_name': '3线', 'parent_group_id': 3, 'description': None, 'order_num': 3, 'group_level': 3}, {'group_id': 13, 'group_name': '4线', 'parent_group_id': 3, 'description': None, 'order_num': 4,
'group_level': 3}]},
{'group_id': 4, 'group_name': '1栋3层', 'parent_group_id': 1, 'description': None, 'order_num': 3,
'group_level': 2, 'children': [
{'group_id': 14, 'group_name': '1线', 'parent_group_id': 4, 'description': None, 'order_num': 1,
'group_level': 3},
{'group_id': 15, 'group_name': '2线', 'parent_group_id': 4, 'description': None, 'order_num': 2,
'group_level': 3}]},
{'group_id': 5, 'group_name': '1栋4层', 'parent_group_id': 1, 'description': None, 'order_num': 4,
'group_level': 2}]}]