51 lines
2.4 KiB
Python
51 lines
2.4 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")
|
|
product_source_type = Column(String(20), nullable=True, comment="library_product/user_material")
|
|
product_source_id = Column(String(64), nullable=True, comment="产品来源 ID")
|
|
product_snapshot_json = Column(Text, nullable=True, comment="产品信息快照 JSON")
|
|
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
|
|
def _safe_json(text):
|
|
if not text:
|
|
return None
|
|
try:
|
|
return json.loads(text)
|
|
except (json.JSONDecodeError, TypeError):
|
|
return None
|
|
|
|
return {
|
|
"id": self.id,
|
|
"userId": self.user_id,
|
|
"productId": self.product_id,
|
|
"productSource": {
|
|
"type": self.product_source_type or "library_product",
|
|
"id": self.product_source_id or self.product_id,
|
|
},
|
|
"productSnapshot": _safe_json(self.product_snapshot_json),
|
|
"sourceFileUrl": self.source_file_url,
|
|
"parseStatus": self.parse_status,
|
|
"parsedData": _safe_json(self.parsed_data),
|
|
"confirmedData": _safe_json(self.confirmed_data),
|
|
"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,
|
|
}
|