增加基础接口关联查询

iot
DESKTOP-1JS6RSM\Admin 3 months ago
parent 4647d9faa7
commit e181e42c44

@ -1,7 +1,7 @@
from iti.applications.extensions import db
from iti.applications.common.crud import TimeModelMixin
from iti.applications.common.utils import BaseSchema
from apiflask.fields import String, Integer, DateTime
from apiflask.fields import String, Integer, DateTime, Nested
class IotDevice(db.Model, TimeModelMixin):
"""
@ -22,6 +22,11 @@ class IotDevice(db.Model, TimeModelMixin):
brand_name = db.Column(db.String(255), nullable=False, comment="品牌名称")
specification_model = db.Column(db.String(255), nullable=False, comment="规格型号")
status = db.Column(db.Integer, nullable=False, default=0, comment="状态 0:已停机 1:生产中 2:维修中")
#关系
workshop = db.relationship(
"IotWorkshop",
primaryjoin="foreign(IotDevice.workshop_id) == IotWorkshop.id",
)
class IotDeviceSchema(BaseSchema):
@ -41,3 +46,18 @@ class IotDeviceSchema(BaseSchema):
status = Integer()
created_at = DateTime(format="%Y-%m-%d %H:%M:%S")
updated_at = DateTime(format="%Y-%m-%d %H:%M:%S")
#关系
workshop = Nested("IotWorkshopSimpleSchema")
class IotDeviceSimpleSchema(BaseSchema):
"""
设备信息表联合查询响应结构
"""
class Meta:
name = "IotDevice"
id = Integer()
device_name = String()
device_number = String()
#关系
workshop = Nested("IotWorkshopSimpleSchema")

@ -1,7 +1,7 @@
from iti.applications.extensions import db
from iti.applications.common.crud import TimeModelMixin
from iti.applications.common.utils import BaseSchema
from apiflask.fields import String, Integer, DateTime
from apiflask.fields import String, Integer, DateTime, Nested
class IotEndpoint(db.Model, TimeModelMixin):
@ -25,6 +25,11 @@ class IotEndpoint(db.Model, TimeModelMixin):
brand_name = db.Column(db.String(255), nullable=False, comment="品牌名称")
specification_model = db.Column(db.String(255), nullable=False, comment="规格型号")
status = db.Column(db.Integer, nullable=False, default=0, comment="状态 0:停用 1:运行中 2:维修中")
#关系
device = db.relationship(
"IotDevice",
primaryjoin="foreign(IotEndpoint.device_id) == IotDevice.id",
)
class IotEndpointSchema(BaseSchema):
@ -46,3 +51,19 @@ class IotEndpointSchema(BaseSchema):
status = Integer()
created_at = DateTime(format="%Y-%m-%d %H:%M:%S")
updated_at = DateTime(format="%Y-%m-%d %H:%M:%S")
#关系
device = Nested("IotDeviceSimpleSchema")
class IotEndpointSimpleSchema(BaseSchema):
"""
采集端信息表联合查询响应结构
"""
class Meta:
name = "IotEndpoint"
id = Integer()
endpoint_name = String()
endpoint_number = String()
#关系
device = Nested("IotDeviceSimpleSchema")

@ -1,7 +1,7 @@
from iti.applications.extensions import db
from iti.applications.common.crud import TimeModelMixin
from iti.applications.common.utils import BaseSchema
from apiflask.fields import String, Integer, DateTime
from apiflask.fields import String, Integer, DateTime, Nested
class IotNode(db.Model, TimeModelMixin):
@ -28,6 +28,11 @@ class IotNode(db.Model, TimeModelMixin):
calling_effective_config = db.Column(db.String(255), nullable=False, comment="报警触发表达式")
method_content = db.Column(db.String(255), nullable=False, comment="方法节点")
status = db.Column(db.Integer, nullable=False, default=0, comment="状态 0:禁用 1:启用")
#关系
endpoint = db.relationship(
"IotEndpoint",
primaryjoin="foreign(IotNode.endpoint_id) == IotEndpoint.id",
)
class IotNodeSchema(BaseSchema):
@ -52,3 +57,5 @@ class IotNodeSchema(BaseSchema):
status = Integer()
created_at = DateTime(format="%Y-%m-%d %H:%M:%S")
updated_at = DateTime(format="%Y-%m-%d %H:%M:%S")
#关系
endpoint = Nested("IotEndpointSimpleSchema")

@ -39,3 +39,14 @@ class IotWorkshopSchema(BaseSchema):
remark = String()
created_at = DateTime(format="%Y-%m-%d %H:%M:%S")
updated_at = DateTime(format="%Y-%m-%d %H:%M:%S")
class IotWorkshopSimpleSchema(BaseSchema):
"""
车间信息表联合查询响应结构
"""
class Meta:
name = "IotWorkshop"
id = Integer()
workshop_name = String()
workshop_number = String()

@ -31,7 +31,7 @@ def list_device(query_data: DeviceQuery):
获取设备列表
"""
return success(get_list_or_page(query_data))
return success(get_list(query_data))
@bp.get("/page")
@ -45,7 +45,7 @@ def page_device(query_data: DeviceQuery):
分页获取设备列表
"""
return page(get_list_or_page(query_data))
return page(get_page(query_data))
@bp.post("/add")
@ -105,9 +105,9 @@ def delete_device(id: int):
return success()
def get_list_or_page(query_data: DeviceQuery):
def get_page(query_data: DeviceQuery):
"""
获取设备信息列表或分页
获取设备信息分页
"""
query = select(IotDevice).order_by(IotDevice.created_at.desc())
if query_data.keyword:
@ -118,9 +118,26 @@ def get_list_or_page(query_data: DeviceQuery):
)
if query_data.workshop_id:
query = query.filter(IotDevice.workshop_id == query_data.workshop_id)
if query_data.status:
if query_data.status is not None:
query = query.filter(IotDevice.status == query_data.status)
if query_data.page and query_data.size:
return db.paginate(query, page=query_data.page, per_page=query_data.size)
else:
def get_list(query_data: DeviceQuery):
"""
获取设备列表
"""
query = select(IotDevice).options(noload(IotDevice.workshop)).order_by(IotDevice.created_at.desc())
if query_data.keyword:
kw = ModelFilter.escape_like(query_data.keyword)
query = query.filter(
IotDevice.device_name.like(f"%{kw}%")
| IotDevice.device_number.like(f"%{kw}%")
)
if query_data.workshop_id:
query = query.filter(IotDevice.workshop_id == query_data.workshop_id)
if query_data.status is not None:
query = query.filter(IotDevice.status == query_data.status)
return db.session.scalars(query).all()

@ -31,7 +31,7 @@ def list_endpoint(query_data: EndpointQuery):
获取采集端列表
"""
return success(get_list_or_page(query_data))
return success(get_list(query_data))
@bp.get("/page")
@ -45,7 +45,7 @@ def page_endpoint(query_data: EndpointQuery):
分页获取采集端列表
"""
return page(get_list_or_page(query_data))
return page(get_page(query_data))
@bp.post("/add")
@ -104,9 +104,9 @@ def delete_endpoint(id: int):
db.session.commit()
return success()
def get_list_or_page(query_data: EndpointQuery):
def get_page(query_data: EndpointQuery):
"""
获取采集端信息列表或分页
获取采集端信息分页
"""
query = select(IotEndpoint).order_by(IotEndpoint.created_at.desc())
if query_data.keyword:
@ -117,9 +117,26 @@ def get_list_or_page(query_data: EndpointQuery):
)
if query_data.device_id:
query = query.filter(IotEndpoint.device_id == query_data.device_id)
if query_data.status:
if query_data.status is not None:
query = query.filter(IotEndpoint.status == query_data.status)
if query_data.page and query_data.size:
return db.paginate(query, page=query_data.page, per_page=query_data.size)
else:
def get_list(query_data: EndpointQuery):
"""
获取采集端信息列表
"""
query = select(IotEndpoint).options(noload(IotEndpoint.device)).order_by(IotEndpoint.created_at.desc())
if query_data.keyword:
kw = ModelFilter.escape_like(query_data.keyword)
query = query.filter(
IotEndpoint.endpoint_name.like(f"%{kw}%")
| IotEndpoint.endpoint_number.like(f"%{kw}%")
)
if query_data.device_id:
query = query.filter(IotEndpoint.device_id == query_data.device_id)
if query_data.status is not None:
query = query.filter(IotEndpoint.status == query_data.status)
return db.session.scalars(query).all()

@ -31,7 +31,7 @@ def list_node(query_data: NodeQuery):
获取采集节点列表
"""
return success(get_list_or_page(query_data))
return success(get_list(query_data))
@bp.get("/page")
@ -45,7 +45,7 @@ def page_node(query_data: NodeQuery):
分页获取采集节点列表
"""
return page(get_list_or_page(query_data))
return page(get_page(query_data))
@bp.post("/add")
@ -105,16 +105,26 @@ def delete_node(id: int):
return success()
def get_list_or_page(query_data: NodeQuery):
def get_page(query_data: NodeQuery):
"""
获取采集节点列表或分页
获取采集节点分页
"""
query = select(IotNode).order_by(IotNode.created_at.desc())
if query_data.endpoint_id:
query = query.filter(IotNode.endpoint_id == query_data.endpoint_id)
if query_data.status:
if query_data.status is not None:
query = query.filter(IotNode.status == query_data.status)
if query_data.page and query_data.size:
return db.paginate(query, page=query_data.page, per_page=query_data.size)
else:
def get_list(query_data: NodeQuery):
"""
获取采集节点列表
"""
query = select(IotNode).options(noload(IotNode.endpoint)).order_by(IotNode.created_at.desc())
if query_data.endpoint_id:
query = query.filter(IotNode.endpoint_id == query_data.endpoint_id)
if query_data.status is not None:
query = query.filter(IotNode.status == query_data.status)
return db.session.scalars(query).all()

@ -116,7 +116,7 @@ def get_list_or_page(query_data: WorkshopQuery):
| IotWorkshop.workshop_number.like(f"%{kw}%")
| IotWorkshop.director_name.like(f"%{kw}%")
)
if query_data.status:
if query_data.status is not None:
query = query.filter(IotWorkshop.status == query_data.status)
if query_data.page and query_data.size:
return db.paginate(query, page=query_data.page, per_page=query_data.size)

Loading…
Cancel
Save