# 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, }