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.

310 lines
8.8 KiB
Python

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# -*- coding: utf-8 -*-
import logging
from sqlalchemy import text
from website import db_mysql, errors
from website.handler import APIHandler, authenticated
from website.util import shortuuid
from website.db.enterprise_device import enterprise_device as DB_Device
class DeviceClassificationAddHandler(APIHandler):
"""
- 描述:添加设备分类
- 请求方式post
- 请求参数:
>- entity_id, int, 企业id
>- name, string, 设备分类名称
- 返回值:
```
{
"id": 123
}
```
"""
@authenticated
def post(self):
name = self.get_escaped_argument("name", "")
with self.app_mysql.connect() as conn:
cur = conn.execute(
text("SELECT id FROM device_classification WHERE name=:name"),
{"name": name},
)
row = cur.fetchone()
if row:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "设备分类已存在")
conn.execute(
text(
"INSERT INTO device_classification (name, suid) VALUES (:name, :suid)"
),
{"name": name, "suid": shortuuid.ShortUUID().random(10)},
)
conn.commit()
self.finish()
class DeviceClassificationHandler(APIHandler):
"""
- 描述:设备分类列表
- 请求方式post
- 请求参数:
>- 无
- 返回值:
```
{
"data": [
{
"id": 123,
"suid": "xxx",
"name": "xxx"
},
...
]
}
```
"""
@authenticated
def post(self):
with self.app_mysql.connect() as conn:
cur = conn.execute(
text(
"SELECT id, suid, name FROM device_classification where del=0 ORDER BY id DESC"
)
)
res = db_mysql.to_json_list(cur)
res = res and res or []
self.finish({"data": res})
class DeviceClassificationDeleteHandler(APIHandler):
"""
- 描述:删除设备分类
- 请求方式post
- 请求参数:
>- id
- 返回值:无
"""
@authenticated
def post(self):
did = self.get_int_argument("id")
with self.app_mysql.connect() as conn:
conn.execute(
text("update device_classification set del=1 WHERE id=:id"), {"id": did}
)
conn.commit()
self.finish()
class DeviceAddHandler(APIHandler):
"""
- 描述:企业节点,添加设备
- 请求方式post
- 请求参数:
>- entity_id, int, 企业id
>- node_id, int
>- name, string, 设备名称
>- addr, string, 设备位置
>- classification string, 设备分类
>- device_model, string, 设备型号
>- param, string, 设备参数
>- comment, string, 备注
- 返回值:
```
```
"""
@authenticated
def post(self):
entity_id = self.get_int_argument("entity_id")
node_id = self.get_int_argument("node_id")
name = self.get_escaped_argument("name", "")
addr = self.get_escaped_argument("addr", "")
classification = self.get_escaped_argument("classification", "")
device_model = self.get_escaped_argument("device_model", "")
param = self.get_escaped_argument("param", "")
comment = self.get_escaped_argument("comment", "")
if not name:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "设备名称不能为空")
if not entity_id or not node_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "企业节点不能为空")
device_data = {
"entity_id": entity_id,
"node_id": node_id,
"name": name,
"addr": addr,
"classification": classification,
"device_model": device_model,
"param": param,
"comment": comment,
}
db_device = DB_Device.EnterpriseDeviceRepository()
db_device.add_device(device_data)
self.finish()
class DeviceEditHandler(APIHandler):
"""
- 描述:企业节点,编辑设备
- 请求方式post
- 请求参数:
>- device_id, int, 设备id
>- name, string, 设备名称
>- addr, string, 设备位置
>- classification string, 设备分类的short uuid
>- device_model, string, 设备型号
>- param, string, 设备参数
>- comment, string, 备注
- 返回值:无
"""
@authenticated
def post(self):
device_id = self.get_int_argument("device_id")
name = self.get_escaped_argument("name", "")
addr = self.get_escaped_argument("addr", "")
classification = self.get_escaped_argument("classification", "")
device_model = self.get_escaped_argument("device_model", "")
param = self.get_escaped_argument("param", "")
comment = self.get_escaped_argument("comment", "")
if not device_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "设备id不能为空")
if not name:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "设备名称不能为空")
device_data = {
"id": device_id,
"name": name,
"addr": addr,
"classification": classification,
"device_model": device_model,
"param": param,
"comment": comment,
}
db_device = DB_Device.EnterpriseDeviceRepository()
db_device.edit_device(device_data)
self.finish()
class DeviceDeleteHandler(APIHandler):
"""
### /enterprise/entity/nodes/device/delete
- 描述:企业节点,删除设备
- 请求方式post
- 请求参数:
>- node_id, int
>- device_id, int, 设备id
- 返回值:无
"""
@authenticated
def post(self):
# node_id = self.get_int_argument('node_id')
device_id = self.get_int_argument("device_id")
if not device_id:
raise errors.HTTPAPIError(
errors.ERROR_BAD_REQUEST, "企业节点或设备不能为空"
)
db_device = DB_Device.EnterpriseDeviceRepository()
db_device.delete_device(device_id)
self.finish()
class DeviceListHandler(APIHandler):
"""
- 描述:企业节点,设备列表
- 请求方式post
- 请求参数:
> - pageNo
> - pageSize
> - node_id, int, 节点id
- 返回值:
```
{
"count": 123,
"data": [
{
"device_id": 123,
"device_name": "xxx",
"device_class": "xxx", 设备类型
"deployed": 0, # 是否部署, 0/未部署, 1/已部署
},
...
]
}
```
"""
@authenticated
def post(self):
node_id = self.get_int_argument("node_id")
pageNo = self.get_int_argument("pageNo", 1)
pageSize = self.get_int_argument("pageSize", 20)
if not node_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "企业节点不能为空")
db_device = DB_Device.EnterpriseDeviceRepository()
devices = db_device.list_devices(
node_id=node_id, pageNo=pageNo, pageSize=pageSize
)
logging.info(devices)
self.finish({"count": devices["total_count"], "data": devices["devices"]})
class DeviceListSimpleHandler(APIHandler):
"""获取节点下所有设备的简单信息"""
@authenticated
def post(self):
node_id = self.get_int_argument("node_id")
if not node_id:
raise errors.HTTPAPIError(errors.ERROR_BAD_REQUEST, "企业节点不能为空")
db_device = DB_Device.EnterpriseDeviceRepository()
devices = db_device.list_simple_devices(node_id=node_id)
logging.info(devices)
self.finish({"data": devices})
class DeviceInfoHandler(APIHandler):
"""
- 描述:企业节点,设备信息
- 请求方式post
- 请求参数:
> - device_id, int, 设备id
- 返回值:
```
{
"name": "xxx",
"addr": "xxx",
"classification": "xxx",
"device_model": "xxx",
"param": "xxx",
"comment": "xxx",
}
```
"""
def post(self):
device_id = self.get_int_argument("device_id")
if not device_id:
raise errors.HTTPAPIError(
errors.ERROR_BAD_REQUEST, "企业节点或设备不能为空"
)
db_device = DB_Device.EnterpriseDeviceRepository()
device = db_device.get_device(device_id=device_id)
logging.info(device)
self.finish(device)