baodan/api/insurance/models/poster_case_upload.py

35 lines
1.7 KiB
Python

"""海报计划书上传模型。"""
from sqlalchemy import Column, String, Text, BigInteger, TIMESTAMP, func
from insurance.db.compat import db
class PosterCaseUpload(db.Model):
"""海报计划书上传记录表。"""
__tablename__ = "poster_case_uploads"
id = Column(BigInteger, primary_key=True, autoincrement=True)
user_id = Column(String(50), nullable=False, comment="用户 ID")
product_id = Column(String(50), nullable=False, comment="产品 ID")
source_file_url = Column(String(500), nullable=False, comment="源文件地址")
parse_status = Column(String(20), default="pending", comment="解析状态: pending/parsed/failed")
parsed_data = Column(Text, nullable=True, comment="系统解析结果 JSON")
confirmed_data = Column(Text, nullable=True, comment="人工核对后最终结果 JSON")
confirmed_by = Column(String(50), nullable=True, comment="核对人")
confirmed_at = Column(TIMESTAMP, nullable=True, comment="核对时间")
created_at = Column(TIMESTAMP, server_default=func.now())
def to_dict(self):
import json
return {
"id": self.id,
"userId": self.user_id,
"productId": self.product_id,
"sourceFileUrl": self.source_file_url,
"parseStatus": self.parse_status,
"parsedData": json.loads(self.parsed_data) if self.parsed_data else None,
"confirmedData": json.loads(self.confirmed_data) if self.confirmed_data else None,
"confirmedBy": self.confirmed_by,
"confirmedAt": self.confirmed_at.isoformat() if self.confirmed_at else None,
"createdAt": self.created_at.isoformat() if self.created_at else None,
}