Dish_Recognition/models/Bases.py

88 lines
3.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# coding=utf-8
"""基地信息表(仅总服务器 MySQL;本地 SQLite 可不使用)。"""
from datetime import datetime
from sqlalchemy import Column, DateTime, Float, Index, Integer, String
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from dao.db import Base
class BaseInfo(Base):
__tablename__ = 'bases'
id = Column(Integer, primary_key=True, autoincrement=True, comment='主键ID(本地)')
# 管理系统返回的 id,不作为本地主键,避免与自增 ID / FK 冲突
external_id = Column(Integer, nullable=True, unique=True, comment='管理系统基地ID')
base_code = Column(String(128), nullable=False, unique=True, comment='基地唯一编码(=管理系统 code)')
base_name = Column(String(100), nullable=False, comment='基地名称')
branch_name = Column(String(100), nullable=True, comment='分部名称')
region = Column(String(100), nullable=True, comment='区域(省/市/区拼接)')
province = Column(String(50), nullable=True, comment='省')
city = Column(String(50), nullable=True, comment='市')
district = Column(String(50), nullable=True, comment='区')
address = Column(String(255), nullable=True, comment='地址')
contact = Column(String(50), nullable=True, comment='联系人')
phone = Column(String(50), nullable=True, comment='电话')
description = Column(String(255), nullable=True, comment='描述')
longitude = Column(Float, nullable=True, comment='经度')
latitude = Column(Float, nullable=True, comment='纬度')
sort_order = Column(Integer, nullable=False, default=0, server_default='0', comment='排序')
register_time = Column(
DateTime,
nullable=False,
default=datetime.now,
server_default=func.now(),
comment='注册时间',
)
last_heartbeat = Column(
DateTime,
nullable=False,
default=datetime.now,
server_default=func.now(),
onupdate=datetime.now,
comment='最后心跳时间',
)
is_active = Column(Integer, nullable=False, default=1, server_default='1', comment='是否启用')
templates = relationship(
'GlobalTemplate',
back_populates='source_base',
foreign_keys='GlobalTemplate.source_base_id',
)
sync_logs = relationship('SyncLog', back_populates='base')
pending_approvals = relationship(
'PendingApproval',
back_populates='source_base',
foreign_keys='PendingApproval.source_base_id',
)
__table_args__ = (
Index('idx_bases_active', 'is_active'),
Index('idx_bases_sort', 'sort_order'),
)
def to_dict(self):
return {
'id': self.id,
'external_id': self.external_id,
'base_code': self.base_code,
'base_name': self.base_name,
'branch_name': self.branch_name,
'region': self.region,
'province': self.province,
'city': self.city,
'district': self.district,
'address': self.address,
'contact': self.contact,
'phone': self.phone,
'description': self.description,
'longitude': self.longitude,
'latitude': self.latitude,
'sort_order': self.sort_order,
'is_active': self.is_active,
'register_time': self.register_time.strftime('%Y-%m-%d %H:%M:%S') if self.register_time else None,
'last_heartbeat': self.last_heartbeat.strftime('%Y-%m-%d %H:%M:%S') if self.last_heartbeat else None,
}