CREATE SCHEMA IF NOT EXISTS workcase;

-- 系统外部人员（来客）管理 用于给系统外人员创建id
DROP TABLE IF EXISTS sys.tb_guest CASCADE;
CREATE TABLE sys.tb_guest(
    optsn              VARCHAR(50)   NOT NULL,               -- 流水号
    user_id            VARCHAR(50)   NOT NULL,               -- 来客ID
    name               VARCHAR(50)   NOT NULL,               -- 姓名
    phone              VARCHAR(50)   DEFAULT NULL,               -- 电话
    email              VARCHAR(50)   DEFAULT NULL,               -- 邮箱
    wechat_id          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 (user_id),
    UNIQUE (wechat_id),
    UNIQUE (phone),
    UNIQUE (email)
);


-- 客服对话记录，客服对话消息，包含ai、员工回答和来客提问，从ai.tb_chat同步ai对话时的数据
-- 先是ai对话，后转人工




-- 工单表
DROP TABLE IF EXISTS workcase.tb_workcase CASCADE;
CREATE TABLE workcase.tb_workcase(
    optsn              VARCHAR(50)   NOT NULL,               -- 流水号
    workcase_id        VARCHAR(50)   NOT NULL,               -- 工单ID
    chat_id            VARCHAR(50)   NOT NULL,               -- 对话ID
    user_id            VARCHAR(50)   NOT NULL,               -- 来客ID
    username           VARCHAR(200)  NOT NULL,               -- 来客姓名
    phone              VARCHAR(20)   NOT NULL,               -- 来客电话
    type               VARCHAR(50)   NOT NULL,               -- 故障类型
    device             VARCHAR(50)   NOT NULL,               -- 设备名称
    device_code        VARCHAR(50)   NOT NULL,               -- 设备代码
    imgs               VARCHAR(50)[] DEFAULT '[]',           -- 工单图片id
    emergency          VARCHAR(50)   NOT NULL DEFAULT 'normal', -- 紧急程度 normal-普通 emergency-紧急
    status             VARCHAR(50)   NOT NULL DEFAULT 'pending', -- 状态 pending-待处理 processing-处理中 done-已完成
    processor          VARCHAR(50)   DEFAULT NULL,           -- 处理人
    creator            VARCHAR(50)   NOT 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 (workcase_id),
    UNIQUE (chat_id),
    UNIQUE (optsn)
);

-- 工单处理过程表（包含工单流转）
DROP TABLE IF EXISTS workcase.tb_workcase_process CASCADE;
CREATE TABLE workcase.tb_workcase_process(
    optsn              VARCHAR(50)   NOT NULL,               -- 流水号
    workcase_id        VARCHAR(50)   NOT NULL,               -- 工单ID
    process_id         VARCHAR(50)   NOT NULL,               -- 过程id
    action             VARCHAR(50)   NOT NULL,               -- 动作 info：记录，assign：指派，redeploy：转派，repeal：撤销，finish：完成
    message            VARCHAR(200)  DEFAULT NULL,           -- 消息
    files              VARCHAR(50)[] DEFAULT '[]',           -- 携带文件
    processor          VARCHAR(50)   DEFAULT NULL,           -- 处理人（指派、转派专属）
    remark             VARCHAR(500)  DEFAULT NULL,           -- 备注
    creator            VARCHAR(50)   NOT NULL,               -- 过程发起人
    create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
    PRIMARY KEY (process_id)
);

-- 工单设备涉及的文件表
DROP TABLE IF EXISTS workcase.tb_workcase_device CASCADE;
CREATE TABLE workcase.tb_workcase_device(
    optsn             VARCHAR(50)   NOT NULL,                -- 流水号
    workcase_id       VARCHAR(50)   NOT NULL,                -- 工单ID
    device            VARCHAR(50)   NOT NULL,                -- 设备名称
    device_code       VARCHAR(50)   DEFAULT NULL,            -- 设备代码
    file_id           VARCHAR(50)   NOT NULL,                -- 文件id
    file_name         VARCHAR(50)   NOT NULL,                -- 文件名
    file_root_id      VARCHAR(50)   DEFAULT NULL,            -- 文件根id
    PRIMARY KEY(workcase_id, file_id)
);

-- 来客对话、工单过程中生成的词云表
DROP TABLE IF EXISTS workcase.tb_word_cloud CASCADE;
CREATE TABLE workcase.tb_word_cloud(
    optsn              VARCHAR(50)   NOT NULL,               -- 流水号
    word_id            VARCHAR(50)   NOT NULL,               -- 词条ID
    word               VARCHAR(100)  NOT NULL,               -- 词语
    frequency          INTEGER       NOT NULL DEFAULT 1,     -- 词频
    source_type        VARCHAR(20)   NOT NULL,               -- 来源类型 chat-聊天 workcase-工单
    source_id          VARCHAR(50)   DEFAULT NULL,           -- 来源ID（chat_id/workcase_id，NULL表示全局统计）
    category           VARCHAR(50)   DEFAULT NULL,           -- 分类（如：故障类型、设备名称、情绪词等）
    stat_date          DATE          NOT NULL,               -- 统计日期（按天聚合）
    create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
    update_time        TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
    PRIMARY KEY (word_id),
    UNIQUE (word, source_type, source_id, stat_date)         -- 同一天同一来源的词唯一
);

DROP TABLE IF EXISTS workcase.tb_word_cloud CASCADE;
CREATE TABLE workcase.tb_word_cloud(
    word_id      VARCHAR(50)   NOT NULL,               -- 词条ID
    word         VARCHAR(100)  NOT NULL,               -- 词语
    frequency    INTEGER       NOT NULL DEFAULT 1,     -- 词频
    category     VARCHAR(50)   DEFAULT NULL,           -- 分类：fault-故障类型 device-设备 emotion-情绪词
    stat_date    DATE          NOT NULL,               -- 统计日期（按天聚合）
    create_time  TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
    update_time  TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
    PRIMARY KEY (word_id),
    UNIQUE (word, category, stat_date)  -- 同一天同一分类的词唯一
);