60 lines
2.5 KiB
Python
60 lines
2.5 KiB
Python
# coding=utf-8
|
|
"""识别记录表:每次拍照/选图识别落库,便于追溯与统计。"""
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import Column, DateTime, ForeignKey, Index, Integer, String, Text
|
|
from sqlalchemy.sql import func
|
|
|
|
from dao.db import Base
|
|
|
|
|
|
class RecognitionRecord(Base):
|
|
__tablename__ = 'recognition_records'
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True, comment='主键ID')
|
|
request_id = Column(String(64), nullable=False, comment='识别请求号(与上报 API 一致)')
|
|
base_code = Column(String(50), nullable=True, comment='基地编码')
|
|
source_base_id = Column(
|
|
Integer,
|
|
ForeignKey('bases.id', ondelete='SET NULL'),
|
|
nullable=True,
|
|
comment='基地表 ID',
|
|
)
|
|
capture_time = Column(DateTime, nullable=False, default=datetime.now, comment='抓拍/识别时间')
|
|
source_image = Column(String(512), nullable=True, comment='原图路径或 URL')
|
|
labeled_image = Column(String(512), nullable=True, comment='标注图路径或 URL')
|
|
dish_count = Column(Integer, nullable=False, default=0, server_default='0', comment='菜品区域数')
|
|
unknown_count = Column(Integer, nullable=False, default=0, server_default='0', comment='未知菜数量')
|
|
summary = Column(String(512), nullable=True, comment='结果摘要(菜名列表)')
|
|
result_json = Column(Text, nullable=False, comment='完整 dishes JSON')
|
|
create_time = Column(
|
|
DateTime,
|
|
nullable=False,
|
|
default=datetime.now,
|
|
server_default=func.now(),
|
|
comment='入库时间',
|
|
)
|
|
|
|
__table_args__ = (
|
|
Index('idx_recog_request', 'request_id'),
|
|
Index('idx_recog_capture', 'capture_time'),
|
|
Index('idx_recog_base_code', 'base_code'),
|
|
Index('idx_recog_base_id', 'source_base_id'),
|
|
)
|
|
|
|
def to_dict(self):
|
|
return {
|
|
'id': self.id,
|
|
'request_id': self.request_id,
|
|
'base_code': self.base_code,
|
|
'source_base_id': self.source_base_id,
|
|
'capture_time': self.capture_time.strftime('%Y-%m-%d %H:%M:%S') if self.capture_time else None,
|
|
'source_image': self.source_image,
|
|
'labeled_image': self.labeled_image,
|
|
'dish_count': self.dish_count,
|
|
'unknown_count': self.unknown_count,
|
|
'summary': self.summary,
|
|
'result_json': self.result_json,
|
|
'create_time': self.create_time.strftime('%Y-%m-%d %H:%M:%S') if self.create_time else None,
|
|
}
|