Files
urbanLifeline/urbanLifelineServ/.bin/database/postgres/sql/createTableCustomerService.sql
2025-12-02 13:21:18 +08:00

290 lines
19 KiB
SQL
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.

-- =============================
-- 智能客服系统业务模块
-- 支持微信小程序客户咨询、智能问答、工单管理、CRM集成
-- =============================
CREATE SCHEMA IF NOT EXISTS customer_service;
-- 客户信息表
DROP TABLE IF EXISTS customer_service.tb_customer CASCADE;
CREATE TABLE customer_service.tb_customer (
optsn VARCHAR(50) NOT NULL, -- 流水号
customer_id VARCHAR(50) NOT NULL, -- 客户ID
customer_no VARCHAR(100), -- 客户编号
customer_name VARCHAR(255), -- 客户姓名
customer_type VARCHAR(30) DEFAULT 'individual', -- 客户类型individual-个人/enterprise-企业
company_name VARCHAR(255), -- 公司名称
phone VARCHAR(20), -- 电话
email VARCHAR(100), -- 邮箱
wechat_openid VARCHAR(100), -- 微信OpenID
wechat_unionid VARCHAR(100), -- 微信UnionID
avatar VARCHAR(500), -- 头像URL
gender INTEGER DEFAULT 0, -- 性别0-未知/1-男/2-女
address VARCHAR(500), -- 地址
customer_level VARCHAR(20) DEFAULT 'normal', -- 客户等级vip/important/normal/potential
customer_source VARCHAR(50), -- 客户来源wechat-微信/web-网站/phone-电话/referral-推荐
tags TEXT[], -- 客户标签数组
notes TEXT, -- 备注
crm_customer_id VARCHAR(50), -- CRM系统客户ID外部系统
last_contact_time timestamptz, -- 最后联系时间
total_consultations INTEGER DEFAULT 0, -- 咨询总次数
total_orders INTEGER DEFAULT 0, -- 订单总数
total_amount DECIMAL(18,2) DEFAULT 0, -- 总消费金额
satisfaction_score DECIMAL(3,2), -- 满意度评分1-5
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
status VARCHAR(20) DEFAULT 'active', -- 状态active-活跃/inactive-非活跃/blacklist-黑名单
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time timestamptz NOT NULL DEFAULT now(), -- 创建时间
update_time timestamptz DEFAULT NULL, -- 更新时间
delete_time timestamptz DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (customer_id),
UNIQUE (optsn),
UNIQUE (wechat_openid),
UNIQUE (phone),
UNIQUE (email)
);
CREATE INDEX idx_customer_type ON customer_service.tb_customer(customer_type) WHERE deleted = false;
CREATE INDEX idx_customer_level ON customer_service.tb_customer(customer_level) WHERE deleted = false;
CREATE INDEX idx_customer_wechat ON customer_service.tb_customer(wechat_openid) WHERE deleted = false;
COMMENT ON TABLE customer_service.tb_customer IS '客户信息表';
COMMENT ON COLUMN customer_service.tb_customer.customer_level IS '客户等级vip/important/normal/potential';
-- 会话表
DROP TABLE IF EXISTS customer_service.tb_conversation CASCADE;
CREATE TABLE customer_service.tb_conversation (
optsn VARCHAR(50) NOT NULL, -- 流水号
conversation_id VARCHAR(50) NOT NULL, -- 会话ID
customer_id VARCHAR(50) NOT NULL, -- 客户ID
conversation_type VARCHAR(30) DEFAULT 'ai', -- 会话类型ai-AI客服/human-人工客服/transfer-转接
channel VARCHAR(20) DEFAULT 'wechat', -- 渠道wechat-微信/web-网页/app-应用/phone-电话
agent_id VARCHAR(50), -- 智能体ID或客服人员ID
agent_type VARCHAR(20) DEFAULT 'ai', -- 座席类型ai-AI/human-人工
session_start_time timestamptz DEFAULT now(), -- 会话开始时间
session_end_time timestamptz, -- 会话结束时间
duration_seconds INTEGER, -- 会话时长(秒)
message_count INTEGER DEFAULT 0, -- 消息数量
conversation_status VARCHAR(20) DEFAULT 'active', -- 会话状态active-进行中/closed-已结束/transferred-已转接/timeout-超时
satisfaction_rating INTEGER, -- 满意度评分1-5星
satisfaction_feedback TEXT, -- 满意度反馈
summary TEXT, -- 会话摘要AI生成
tags TEXT[], -- 会话标签
metadata JSONB, -- 会话元数据
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time timestamptz NOT NULL DEFAULT now(), -- 创建时间
update_time timestamptz DEFAULT NULL, -- 更新时间
delete_time timestamptz DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (conversation_id),
UNIQUE (optsn),
FOREIGN KEY (customer_id) REFERENCES customer_service.tb_customer(customer_id)
);
CREATE INDEX idx_conv_customer ON customer_service.tb_conversation(customer_id, session_start_time DESC) WHERE deleted = false;
CREATE INDEX idx_conv_status ON customer_service.tb_conversation(conversation_status) WHERE deleted = false;
CREATE INDEX idx_conv_agent ON customer_service.tb_conversation(agent_id) WHERE deleted = false;
COMMENT ON TABLE customer_service.tb_conversation IS '会话表';
COMMENT ON COLUMN customer_service.tb_conversation.conversation_type IS '会话类型ai/human/transfer';
-- 会话消息表
DROP TABLE IF EXISTS customer_service.tb_conversation_message CASCADE;
CREATE TABLE customer_service.tb_conversation_message (
optsn VARCHAR(50) NOT NULL, -- 流水号
message_id VARCHAR(50) NOT NULL, -- 消息ID
conversation_id VARCHAR(50) NOT NULL, -- 所属会话ID
sender_type VARCHAR(20) NOT NULL, -- 发送者类型customer-客户/agent-座席/system-系统
sender_id VARCHAR(50), -- 发送者ID
message_type VARCHAR(30) NOT NULL DEFAULT 'text',-- 消息类型text-文本/image-图片/voice-语音/video-视频/file-文件/card-卡片
content TEXT, -- 消息内容
content_url VARCHAR(500), -- 内容URL图片、文件等
is_ai_generated BOOLEAN DEFAULT false, -- 是否AI生成
ai_model VARCHAR(100), -- 使用的AI模型
kb_references VARCHAR(50)[], -- 引用的知识库文档ID数组
confidence_score DECIMAL(5,4), -- AI回答置信度
sentiment VARCHAR(20), -- 情感分析positive-正面/neutral-中性/negative-负面
intent VARCHAR(100), -- 意图识别结果
is_sensitive BOOLEAN DEFAULT false, -- 是否敏感信息
read_status BOOLEAN DEFAULT false, -- 已读状态
read_time timestamptz, -- 阅读时间
metadata JSONB, -- 消息元数据
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
create_time timestamptz NOT NULL DEFAULT now(), -- 创建时间(发送时间)
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (message_id),
UNIQUE (optsn),
FOREIGN KEY (conversation_id) REFERENCES customer_service.tb_conversation(conversation_id)
);
CREATE INDEX idx_msg_conversation ON customer_service.tb_conversation_message(conversation_id, create_time) WHERE deleted = false;
CREATE INDEX idx_msg_sender ON customer_service.tb_conversation_message(sender_id) WHERE deleted = false;
COMMENT ON TABLE customer_service.tb_conversation_message IS '会话消息表';
COMMENT ON COLUMN customer_service.tb_conversation_message.sentiment IS '情感分析positive/neutral/negative';
-- 工单表
DROP TABLE IF EXISTS customer_service.tb_ticket CASCADE;
CREATE TABLE customer_service.tb_ticket (
optsn VARCHAR(50) NOT NULL, -- 流水号
ticket_id VARCHAR(50) NOT NULL, -- 工单ID
ticket_no VARCHAR(100) NOT NULL, -- 工单编号
customer_id VARCHAR(50) NOT NULL, -- 客户ID
conversation_id VARCHAR(50), -- 关联会话ID
ticket_type VARCHAR(50) NOT NULL, -- 工单类型consultation-咨询/complaint-投诉/suggestion-建议/repair-维修/installation-安装/other-其他
ticket_category VARCHAR(100), -- 工单分类(具体业务分类)
priority VARCHAR(20) DEFAULT 'normal', -- 优先级urgent-紧急/high-高/normal-普通/low-低
title VARCHAR(500) NOT NULL, -- 工单标题
description TEXT NOT NULL, -- 问题描述
attachments VARCHAR(50)[], -- 附件ID数组
ticket_source VARCHAR(30) DEFAULT 'ai', -- 工单来源ai-AI生成/manual-人工创建/system-系统自动
assigned_to VARCHAR(50), -- 分配给(处理人)
assigned_dept VARCHAR(50), -- 分配部门
ticket_status VARCHAR(30) DEFAULT 'pending', -- 工单状态pending-待处理/processing-处理中/resolved-已解决/closed-已关闭/cancelled-已取消
resolution TEXT, -- 解决方案
resolution_time timestamptz, -- 解决时间
close_time timestamptz, -- 关闭时间
response_time timestamptz, -- 首次响应时间
sla_deadline timestamptz, -- SLA截止时间
is_overdue BOOLEAN DEFAULT false, -- 是否逾期
customer_rating INTEGER, -- 客户评分1-5星
customer_feedback TEXT, -- 客户反馈
crm_ticket_id VARCHAR(50), -- CRM系统工单ID外部系统
sync_status VARCHAR(20) DEFAULT 'pending', -- 同步状态pending-待同步/synced-已同步/failed-失败
tags TEXT[], -- 工单标签
metadata JSONB, -- 工单元数据
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time timestamptz NOT NULL DEFAULT now(), -- 创建时间
update_time timestamptz DEFAULT NULL, -- 更新时间
delete_time timestamptz DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (ticket_id),
UNIQUE (optsn),
UNIQUE (ticket_no),
FOREIGN KEY (customer_id) REFERENCES customer_service.tb_customer(customer_id)
);
CREATE INDEX idx_ticket_customer ON customer_service.tb_ticket(customer_id) WHERE deleted = false;
CREATE INDEX idx_ticket_status ON customer_service.tb_ticket(ticket_status) WHERE deleted = false;
CREATE INDEX idx_ticket_assigned ON customer_service.tb_ticket(assigned_to) WHERE deleted = false;
CREATE INDEX idx_ticket_priority ON customer_service.tb_ticket(priority) WHERE deleted = false;
CREATE INDEX idx_ticket_sla ON customer_service.tb_ticket(sla_deadline) WHERE deleted = false AND is_overdue = false;
COMMENT ON TABLE customer_service.tb_ticket IS '工单表';
COMMENT ON COLUMN customer_service.tb_ticket.ticket_type IS '工单类型consultation/complaint/suggestion/repair/installation/other';
-- 工单处理记录表
DROP TABLE IF EXISTS customer_service.tb_ticket_log CASCADE;
CREATE TABLE customer_service.tb_ticket_log (
optsn VARCHAR(50) NOT NULL, -- 流水号
log_id VARCHAR(50) NOT NULL, -- 日志ID
ticket_id VARCHAR(50) NOT NULL, -- 工单ID
action_type VARCHAR(50) NOT NULL, -- 操作类型create-创建/assign-分配/update-更新/comment-评论/resolve-解决/close-关闭/reopen-重开
action_content TEXT, -- 操作内容
old_value TEXT, -- 旧值
new_value TEXT, -- 新值
operator_id VARCHAR(50), -- 操作人ID
operator_name VARCHAR(100), -- 操作人姓名
attachments VARCHAR(50)[], -- 附件ID数组
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
create_time timestamptz NOT NULL DEFAULT now(), -- 创建时间
PRIMARY KEY (log_id),
UNIQUE (optsn),
FOREIGN KEY (ticket_id) REFERENCES customer_service.tb_ticket(ticket_id)
);
CREATE INDEX idx_ticket_log_ticket ON customer_service.tb_ticket_log(ticket_id, create_time DESC);
COMMENT ON TABLE customer_service.tb_ticket_log IS '工单处理记录表';
-- FAQ表常见问题
DROP TABLE IF EXISTS customer_service.tb_faq CASCADE;
CREATE TABLE customer_service.tb_faq (
optsn VARCHAR(50) NOT NULL, -- 流水号
faq_id VARCHAR(50) NOT NULL, -- FAQ ID
kb_id VARCHAR(50), -- 关联知识库ID
category VARCHAR(100) NOT NULL, -- 分类
question TEXT NOT NULL, -- 问题
answer TEXT NOT NULL, -- 答案
similar_questions TEXT[], -- 相似问题数组
keywords TEXT[], -- 关键词数组
hit_count INTEGER DEFAULT 0, -- 命中次数
helpful_count INTEGER DEFAULT 0, -- 有帮助次数
unhelpful_count INTEGER DEFAULT 0, -- 无帮助次数
is_published BOOLEAN DEFAULT false, -- 是否发布
priority INTEGER DEFAULT 0, -- 优先级
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time timestamptz NOT NULL DEFAULT now(), -- 创建时间
update_time timestamptz DEFAULT NULL, -- 更新时间
delete_time timestamptz DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (faq_id),
UNIQUE (optsn)
);
CREATE INDEX idx_faq_category ON customer_service.tb_faq(category) WHERE deleted = false;
CREATE INDEX idx_faq_published ON customer_service.tb_faq(is_published) WHERE deleted = false AND is_published = true;
COMMENT ON TABLE customer_service.tb_faq IS 'FAQ常见问题表';
-- 客服评价表
DROP TABLE IF EXISTS customer_service.tb_service_evaluation CASCADE;
CREATE TABLE customer_service.tb_service_evaluation (
optsn VARCHAR(50) NOT NULL, -- 流水号
evaluation_id VARCHAR(50) NOT NULL, -- 评价ID
customer_id VARCHAR(50) NOT NULL, -- 客户ID
conversation_id VARCHAR(50), -- 会话ID
ticket_id VARCHAR(50), -- 工单ID
evaluation_type VARCHAR(30) NOT NULL, -- 评价类型conversation-会话/ticket-工单/overall-整体服务
rating INTEGER NOT NULL, -- 评分1-5星
dimensions JSONB, -- 分维度评分JSON格式响应速度、专业性、态度等
feedback TEXT, -- 评价反馈
tags TEXT[], -- 评价标签
is_anonymous BOOLEAN DEFAULT false, -- 是否匿名
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
create_time timestamptz NOT NULL DEFAULT now(), -- 创建时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (evaluation_id),
UNIQUE (optsn),
FOREIGN KEY (customer_id) REFERENCES customer_service.tb_customer(customer_id)
);
CREATE INDEX idx_eval_customer ON customer_service.tb_service_evaluation(customer_id) WHERE deleted = false;
CREATE INDEX idx_eval_rating ON customer_service.tb_service_evaluation(rating) WHERE deleted = false;
COMMENT ON TABLE customer_service.tb_service_evaluation IS '客服评价表';
-- CRM集成配置表
DROP TABLE IF EXISTS customer_service.tb_crm_config CASCADE;
CREATE TABLE customer_service.tb_crm_config (
optsn VARCHAR(50) NOT NULL, -- 流水号
config_id VARCHAR(50) NOT NULL, -- 配置ID
crm_system VARCHAR(50) NOT NULL, -- CRM系统名称
api_endpoint VARCHAR(500) NOT NULL, -- API端点
api_key VARCHAR(500), -- API密钥加密存储
auth_type VARCHAR(30) DEFAULT 'api_key', -- 认证类型api_key/oauth2/basic_auth
sync_interval INTEGER DEFAULT 3600, -- 同步间隔(秒)
sync_direction VARCHAR(30) DEFAULT 'bidirectional',-- 同步方向to_crm-单向到CRM/from_crm-单向从CRM/bidirectional-双向
field_mapping JSONB, -- 字段映射配置
sync_enabled BOOLEAN DEFAULT false, -- 是否启用同步
last_sync_time timestamptz, -- 最后同步时间
dept_path VARCHAR(255) DEFAULT NULL, -- 部门全路径
creator VARCHAR(50) DEFAULT NULL, -- 创建者
updater VARCHAR(50) DEFAULT NULL, -- 更新者
create_time timestamptz NOT NULL DEFAULT now(), -- 创建时间
update_time timestamptz DEFAULT NULL, -- 更新时间
delete_time timestamptz DEFAULT NULL, -- 删除时间
deleted BOOLEAN NOT NULL DEFAULT false, -- 是否删除
PRIMARY KEY (config_id),
UNIQUE (optsn)
);
COMMENT ON TABLE customer_service.tb_crm_config IS 'CRM集成配置表';