You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
4.4 KiB
Python

# -*- coding: utf-8 -*-
from typing import List, Dict, Any
from sqlalchemy import text
from website.db import get_session, to_json_list
"""
CREATE TABLE `enterprise_node` (
`id` int NOT NULL AUTO_INCREMENT,
`entity_suid` int NOT NULL COMMENT '企业uuid',
`name` varchar(255) DEFAULT '' COMMENT '企业name',
`parent` int DEFAULT NULL,
`addr` varchar(255) DEFAULT '',
`lola` varchar(255) DEFAULT '',
`contact` varchar(255) DEFAULT '',
`phone` varchar(255) DEFAULT '',
`comment` varchar(255) DEFAULT '',
`del` int DEFAULT '0',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='企业节点表'
"""
class EnterpriseNodeDB(object):
def insert_node(self, node: dict) -> int:
with get_session() as session:
session.execute(
text(
"insert into "
"enterprise_node(suid, entity_id, entity_suid, name, parent, addr, lola, contact, phone, comment) "
"values (:suid, :entity_id, :entity_suid, :name, :parent, :addr, :lola, :contact, :phone, :comment)"
), node)
# last_insert_id = session.execute(text("SELECT LAST_INSERT_ID()")).scalar()
# logging.info(f"last_insert_id: {last_insert_id}")
return 0
def update_node(self, node: dict) -> int:
with get_session() as session:
sql = ("update enterprise_node "
"set name=:name, parent=:parent, addr=:addr, lola=:lola, contact=:contact, phone=:phone, comment=:comment where id=:id")
param = {
"id": node["id"],
"name": node["name"],
"parent": node["parent"],
"addr": node["addr"],
"lola": node["lola"],
"contact": node["contact"],
"phone": node["phone"],
"comment": node["comment"]
}
session.execute(text(sql), param)
return 0
def select_tree(self, entity_id: int, name: str = "") -> List[Dict[str, Any]]:
roots = []
with get_session() as session:
sql = "select id, name, suid from enterprise_node where entity_id=:entity_id and del=0 and parent=0 "
param = {"entity_id": entity_id}
if name:
sql += " and name like :name"
param["name"] = f"%{name}%"
res = session.execute(text(sql), param)
node_list = to_json_list(res)
node_list = node_list and node_list or []
for node in node_list:
root = {
"id": node["id"],
"name": node["name"],
"suid": node["suid"],
"children": self.build_tree(session, node, name)
}
roots.append(root)
# return node_list
return roots
def build_tree(self, session: Any, node: Dict[str, Any], name: str = "") -> List[Any]:
sql = "select id, name, suid from enterprise_node where del=0 and parent=:parent"
param = {"parent": node["id"]}
if name:
sql += " and name like :name"
param["name"] = f"%{name}%"
res = session.execute(text(sql), param)
node_list = to_json_list(res)
node_list = node_list and node_list or []
children = []
for node in node_list:
child = {
"id": node["id"],
"name": node["name"],
"suid": node["suid"],
"children": self.build_tree(session, node, name)
}
children.append(child)
return children
def select_node(self, node_id: int) -> Dict[str, Any]:
with get_session() as session:
sql = ("select id, name, parent, addr, lola, contact, phone, comment, suid from enterprise_node "
"where id=:id and del=0")
param = {"id": node_id}
res = session.execute(text(sql), param)
node_list = to_json_list(res)
node_list = node_list and node_list or []
return node_list[0] if node_list else None
def delete_node(self, node_id: int) -> int:
with get_session() as session:
sql = ("update enterprise_node set del=1 where id=:id")
param = {"id": node_id}
session.execute(text(sql), param)
return 0