Files
wecom_it_smart_desk/backend/seed_conversations.py
T

184 lines
7.8 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.
# =============================================================================
# 企微IT智能服务台 — 会话 Mock 数据填充脚本
# =============================================================================
# 说明:往 SQLite 数据库 conversations 表写入 15 条模拟会话
# 用法:cd backend && ..\venv\Scripts\python.exe seed_conversations.py
# =============================================================================
import sqlite3
from datetime import datetime, timezone, timedelta
import json
import uuid
DB_PATH = r"C:\Users\simon\wecom_it_smart_desk\backend\it_smart_desk.db"
# 当前时间(UTC
NOW = datetime.now(tz=timezone.utc)
ISO = lambda dt: dt.isoformat()
def make_conv(cid, user_id, name, dept, position, level,
status, is_vip, is_pinned, is_todo,
urgency, tags, assigned_agent, impact, is_blocking, emotion,
last_summary, mins_ago):
"""构造一条会话记录(tuple"""
seq = int(cid.split("-")[1])
hours_ago = max(0, 48 - seq * 3)
created = NOW - timedelta(hours=hours_ago)
updated = NOW - timedelta(minutes=mins_ago) if mins_ago else created
last_msg = NOW - timedelta(minutes=mins_ago) if mins_ago else None
return (
cid, # id
"ww1234567890", # corp_id
user_id, # employee_id
name, # employee_name
dept, # department
position, # position
level, # level
status, # status
1 if is_vip else 0, # is_vip
1 if is_pinned else 0, # is_pinned
1 if is_todo else 0, # is_todo
urgency, # urgency_score
json.dumps(tags, ensure_ascii=False), # tags (JSON)
assigned_agent, # assigned_agent_id
json.dumps([], ensure_ascii=False), # collaborating_agent_ids
0, # ai_substantive_reply_count
impact, # impact_scope
1 if is_blocking else 0, # is_blocking
emotion, # emotion_state
None, # dify_conversation_id
ISO(last_msg) if last_msg else None, # last_message_at
last_summary, # last_message_summary
ISO(created), # created_at
ISO(updated), # updated_at
)
rows = [
# ── 排队中(queued)────
make_conv("conv-001", "user-001", "张伟", "财务部", "经理", "P6",
"queued", False, False, False,
5, {"hand_raise": True, "emotion": "urgent"},
None, 0, False, "urgent",
"VPN 连不上,报错 Error 691,今天要急着报税!", 5),
make_conv("conv-002", "user-002", "李娜", "设计部", "设计师", "P5",
"queued", False, False, True,
3, {"emotion": "worried"},
None, 0, False, "worried",
"PS 2026 安装后一直闪退,急需用", 12),
make_conv("conv-003", "user-003", "王强", "市场部", "总监", "P7",
"queued", True, False, False,
4, {"hand_raise": True, "need_intervene": True},
None, 8, True, "angry",
"邮箱满了,发送失败,影响了3个客户的报价单!", 1),
make_conv("conv-004", "user-004", "刘芳", "人事部", "HRBP", "P6",
"queued", False, False, False,
2, {},
None, 0, False, "neutral",
"OA 系统白屏,其他同事也有同样问题", 30),
make_conv("conv-005", "user-005", "陈明", "研发部", "高级工程师", "P7",
"queued", True, False, False,
4, {"need_intervene": True},
None, 2, True, "urgent",
"生产数据库只读权限申请,今天上线要用", 8),
# ── 服务中(serving)────
make_conv("conv-006", "user-006", "赵敏", "市场部", "专员", "P4",
"serving", False, False, False,
3, {"emotion": "worried"},
"agent-001", 0, False, "worried",
"打印机驱动装好了,但是打印出来是乱码", 60),
make_conv("conv-007", "user-007", "周婷", "行政部", "行政主管", "P5",
"serving", False, True, False,
2, {},
"agent-001", 0, False, "neutral",
"会议室投影仪怎么切换到HDMI模式?下午有客户来访", 120),
make_conv("conv-008", "user-008", "吴婷", "人事部", "薪酬经理", "P6",
"serving", False, False, True,
3, {"emotion": "angry"},
"agent-001", 1, False, "angry",
"新员工入职的笔记本磁盘只有 256G,完全不够用", 45),
make_conv("conv-009", "user-009", "刘军", "销售部", "大区经理", "P7",
"serving", True, False, False,
4, {"hand_raise": True},
"agent-001", 5, True, "urgent",
"CRM 系统卡死,正在和客户通话,急!!", 10),
# ── AI 处理中(ai_handling)────
make_conv("conv-010", "user-010", "孙磊", "运维部", "SRE", "P6",
"ai_handling", False, False, False,
2, {},
None, 0, False, "neutral",
"Prometheus 告警:磁盘使用率超过 85%,怎么清理?", 90),
make_conv("conv-011", "user-011", "马超", "研发部", "实习生", "P3",
"ai_handling", False, False, False,
1, {},
None, 0, False, "neutral",
"Git 提交时提示 'fatal: unable to access',怎么解决?", 150),
# ── 已结单(resolved)────
make_conv("conv-012", "user-001", "张伟", "财务部", "经理", "P6",
"resolved", False, False, False,
3, {},
"agent-001", 0, False, "neutral",
"谢谢,VPN 问题已解决,是密码过期了", 300),
make_conv("conv-013", "user-007", "周婷", "行政部", "行政主管", "P5",
"resolved", False, False, False,
2, {},
"agent-001", 0, False, "neutral",
"IT 已来处理,投影仪换了新的HDMI线,正常了", 500),
make_conv("conv-014", "user-012", "杨阳", "公关部", "专员", "P4",
"resolved", False, False, False,
1, {},
"agent-001", 0, False, "neutral",
"耳机没声音的问题解决了,是静音键被误触了😅", 800),
make_conv("conv-015", "user-005", "刘芳", "人事部", "HRBP", "P6",
"resolved", False, False, False,
2, {},
"agent-001", 0, False, "neutral",
"OA 白屏问题已恢复,是浏览器缓存导致的,清掉就好了", 1200),
]
# 插入数据库(INSERT OR IGNORE 避免主键冲突,重复运行安全)
conn = sqlite3.connect(DB_PATH)
cur = conn.cursor()
cur.execute("SELECT COUNT(*) FROM conversations")
before = cur.fetchone()[0]
print(f"插入前已有 {before} 条记录")
sql = """
INSERT OR IGNORE INTO conversations (
id, corp_id, employee_id, employee_name, department, position, level,
status, is_vip, is_pinned, is_todo, urgency_score, tags,
assigned_agent_id, collaborating_agent_ids, ai_substantive_reply_count,
impact_scope, is_blocking, emotion_state, dify_conversation_id,
last_message_at, last_message_summary, created_at, updated_at
) VALUES (
?,?,?,?,?,?,?,
?,?,?,?,?,?,
?,?,?,
?,?,?,?,
?,?,?,?
)
"""
cur.executemany(sql, rows)
conn.commit()
cur.execute("SELECT COUNT(*) FROM conversations")
after = cur.fetchone()[0]
print(f"✅ 插入后共 {after} 条记录(新增 {after - before} 条会话 Mock 数据)!")
conn.close()