baodan/dify-main/api/insurance/db/models.py

145 lines
5.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""SQLAlchemy 数据模型。直接复用 Dify 的 db 连接。"""
from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, Text, TIMESTAMP, func
from sqlalchemy.dialects.postgresql import JSONB
from extensions.ext_database import db
class WecomUserMapping(db.Model):
"""企微用户与 Dify 用户映射表。"""
__tablename__ = "wecom_user_mapping"
id = Column(Integer, primary_key=True, autoincrement=True)
wecom_userid = Column(String(64), unique=True, nullable=False)
dify_user_id = Column(String(64), nullable=False, index=True)
username = Column(String(128))
department = Column(String(128))
role = Column(String(32), default="sales")
password_hash = Column(String(256))
status = Column(String(16), default="active")
created_at = Column(TIMESTAMP, server_default=func.now())
last_active_at = Column(TIMESTAMP)
class RecommendationRecord(db.Model):
"""产品推荐方案记录表。"""
__tablename__ = "recommendation_records"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(String(64), nullable=False, index=True)
customer_name = Column(String(64))
customer_age = Column(Integer)
customer_gender = Column(String(8))
health_status = Column(String(32))
occupation = Column(String(64))
annual_income = Column(Integer)
monthly_budget = Column(Integer)
insurance_types = Column(Text) # JSON 数组
coverage_amount = Column(Integer)
coverage_period = Column(String(32))
existing_policies = Column(Text) # JSON可为空
generated_plan = Column(Text) # Markdown 文本
plan_variants = Column(Text) # JSON多套方案
dify_task_id = Column(String(64))
status = Column(String(16), default="pending", index=True) # pending/processing/done/failed
error_message = Column(Text)
share_token = Column(String(64))
share_expire_at = Column(TIMESTAMP)
created_at = Column(TIMESTAMP, server_default=func.now(), index=True)
completed_at = Column(TIMESTAMP)
class SystemOperationLog(db.Model):
"""系统操作日志表。"""
__tablename__ = "system_operation_logs"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(String(64), nullable=False, index=True)
action = Column(String(32), nullable=False, index=True)
target_type = Column(String(32))
target_id = Column(String(64))
detail = Column(JSONB)
ip = Column(String(45))
user_agent = Column(String(256))
created_at = Column(TIMESTAMP, server_default=func.now(), index=True)
class ChatSession(db.Model):
"""保险前台会话记录。"""
__tablename__ = "insurance_chat_sessions"
id = Column(String(64), primary_key=True)
user_id = Column(String(64), nullable=False, index=True)
name = Column(String(255), default="新会话")
app_id = Column(String(64), index=True)
api_token = Column(String(255))
dify_conversation_id = Column(String(64), index=True)
status = Column(String(16), default="active", index=True)
created_at = Column(TIMESTAMP, server_default=func.now(), index=True)
updated_at = Column(TIMESTAMP, server_default=func.now(), onupdate=func.now(), index=True)
class ChatMessage(db.Model):
"""保险前台问答消息记录。"""
__tablename__ = "insurance_chat_messages"
id = Column(String(64), primary_key=True)
session_id = Column(String(64), ForeignKey("insurance_chat_sessions.id"), nullable=False, index=True)
user_id = Column(String(64), nullable=False, index=True)
query = Column(Text, nullable=False)
answer = Column(Text, default="")
sources = Column(JSONB, default=[])
filters = Column(JSONB)
dify_message_id = Column(String(64), index=True)
feedback = Column(String(32), index=True)
correction = Column(Text)
created_at = Column(TIMESTAMP, server_default=func.now(), index=True)
updated_at = Column(TIMESTAMP, server_default=func.now(), onupdate=func.now())
class DocumentMetadata(db.Model):
"""文档元数据编号、标签、险种、保司。Phase 7 创建。"""
__tablename__ = "document_metadata"
id = Column(Integer, primary_key=True, autoincrement=True)
dify_document_id = Column(String(64), nullable=False)
dataset_id = Column(String(64), nullable=False)
doc_number = Column(String(32))
insurance_type = Column(String(32))
company = Column(String(64))
tags = Column(JSONB, default=[])
created_at = Column(TIMESTAMP, server_default=func.now())
updated_at = Column(TIMESTAMP, server_default=func.now(), onupdate=func.now())
class DatasourceConfig(db.Model):
"""保司 API 数据源配置。Phase 7 创建。"""
__tablename__ = "datasource_configs"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(128), nullable=False)
api_url = Column(String(512), nullable=False)
api_key_encrypted = Column(Text)
sync_frequency = Column(String(32))
insurance_type = Column(String(32))
last_sync_at = Column(TIMESTAMP)
last_sync_status = Column(String(16))
last_sync_count = Column(Integer)
status = Column(String(16), default="active")
created_at = Column(TIMESTAMP, server_default=func.now())
class DatasourceSyncLog(db.Model):
"""数据源同步日志。Phase 7 创建。"""
__tablename__ = "datasource_sync_logs"
id = Column(Integer, primary_key=True, autoincrement=True)
datasource_id = Column(Integer, nullable=False, index=True)
status = Column(String(16))
items_added = Column(Integer, default=0)
items_updated = Column(Integer, default=0)
items_deleted = Column(Integer, default=0)
error_message = Column(Text)
started_at = Column(TIMESTAMP, server_default=func.now())
completed_at = Column(TIMESTAMP)