Dish_Recognition/models/Recognition_records.py

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