Appearance
weberp-call 数据库表功能说明(梳理版)
本文档基于项目代码与原始说明整理,补充了字段说明、数据来源、表间关系及使用场景,供开发参考。
一、整体数据架构概览
263 呼叫中心平台
│
├─ 拉取员工数据 ──► tb_call_employee(坐席映射)
│
└─ 拉取话单数据 ──► tb_call_history(通话原始记录)
│
├─ 前端保存 ──► tb_call_work_order(工单)
│
├─ 预汇总 ──► tb_call_pre_sum(每日每坐席通话统计)
│ └─► tb_call_pre_sum_agent(每日活跃坐席)
│ └─► tb_call_pre_sum_cust(每日客户联系去重)
│
└─ 任务对比 ──► tb_call_target(月度目标)
└─► tb_call_target_day(日度目标)
中台(T+1)
└─ 开票数据 ──► tb_call_day_kpi(日 KPI)
└─► tb_call_month_kpi(月 KPI)
辅助表
├─ tb_call_work_calendar(工作日历)
├─ tb_call_task_failed(失败任务重试)
└─ tb_call_warn_record(预警记录)二、表详细说明
2.1 tb_call_employee —— 263 平台坐席信息
| 属性 | 说明 |
|---|---|
| 数据来源 | 263 平台接口拉取,主键直接使用平台 ID(IdType.INPUT) |
| 更新方式 | 定时同步,ON DUPLICATE KEY UPDATE 全量覆盖 |
| 核心作用 | 将云 ERP 用户(branch_id + hr_staff_id)映射到 263 坐席账号(username) |
字段分类:
| 字段 | 类型 | 说明 |
|---|---|---|
id | String(平台主键) | 263 平台员工 ID,直接作为主键 |
username | String | 坐席账号(企业号+账号),其他表中 agent 字段即对应此值 |
real_name | String | 员工姓名 |
agent_id | String | 分机号 |
agent_queue_id_in | String | 技能组 |
default_queue | String | 默认技能组 |
status | String | 状态:0 停用,1 正常 |
grp_name | String | 班组名称 |
update_date | Date | 平台数据修改时间(用于核对是否最新) |
| 人工维护字段 | ||
branch_id | String | 分公司标识(手动维护,关联云 ERP) |
hr_staff_id | String | HR 员工 ID(手动维护,关联云 ERP) |
password | String | 业务平台密码(不配置则取 nacos 默认) |
extension_password | String | SIP 话机密码(不配置则取 nacos 默认) |
关键关联:
username是其他所有表中agent字段的来源(话单、预汇总、工单等)- 通过
branch_id + hr_staff_id与tb_call_target/tb_call_target_day关联,找到任务对应坐席
使用场景: 登录云 ERP 时,用当前用户的
branch_id + hr_staff_id查此表,若查到坐席信息则允许打开电话条。
2.2 tb_call_history —— 通话历史记录(话单)
| 属性 | 说明 |
|---|---|
| 数据来源 | 263 平台接口拉取,主键直接使用平台 ID(IdType.INPUT) |
| 更新方式 | 定时同步,ON DUPLICATE KEY UPDATE 全量覆盖 |
| 核心作用 | 存储所有通话原始记录,是所有汇总统计的源数据 |
主要字段:
| 字段 | 说明 |
|---|---|
id | 平台主键 |
call_id | 话单 ID(与工单表关联的关键字段) |
agent | 坐席账号(对应 tb_call_employee.username) |
customer | 呼叫号码 |
phone_last_four | 号码后四位(自行截取,用于检索) |
call_direction | 呼叫方向:呼入 / 呼出 |
call_result | 呼叫结果:0 未接通,1 已接通 |
call_type | 呼叫方式(1:内部通话, 2:客户呼入, 3:手动呼出 等) |
c_start_time | 呼叫开始时间(时间范围查询的主要条件) |
c_answer_time | 通话接通时间 |
c_end_time | 通话结束时间 |
talksec | 人工通话时长(秒),汇总时使用 CEIL(talksec/60) 转分钟 |
billsec | 通话总时长(秒) |
ringsec | 振铃时长(秒) |
call_data | 随路数据,实际存储 branch_id(分公司标识),是数据归属分公司的关键字段 |
org_id | 部门 ID(下载时根据坐席查找当前所属部门写入) |
satisfaction | 满意度:1满意, 2一般, 3不满意, 0未评价, -1未触发 |
c_hangup_cause | 挂机原因(NORMAL_CLEARING 正常挂断 等) |
filename | 录音文件路径 |
注意:
call_data字段存储的是branch_id,是查询时过滤分公司数据的核心条件;agent IS NULL的记录表示呼入未接通且未分配坐席的话单(公司级数据)。
2.3 tb_call_work_order —— 通话工单
| 属性 | 说明 |
|---|---|
| 数据来源 | 前端在通话过程中手动保存 |
| 核心作用 | 记录每通电话的业务信息(客户、用途、备注等),与话单关联 |
关联方式:
tb_call_work_order.call_id = tb_call_history.call_id
tb_call_work_order.username = tb_call_history.agent
(双字段联合关联)主要字段:
| 字段 | 说明 |
|---|---|
id | 前端传入(需与埋点行为关联,先后顺序不确定) |
call_id | 话单 ID |
username | 坐席账号 |
agent_id | 坐席工号(对应 tb_call_employee.agent_id,即分机号) |
branch_id | 分公司标识 |
cust_id / cust_no / cust_name | 客户内码 / 编号 / 名称 |
new_group_cust_no | 客户标准码(用于客户数去重统计,非常关键) |
ou_id / ou_name | 业务实体 |
usage_id / usage_name | 用途 |
phone_num | 电话号码 |
event_names | 埋点拼接字段(开票/退补/退回/议价/对账) |
note | 备注(最多 1000 字) |
content | 待办事项(最多 1000 字) |
main_op_id / main_op_name | 责任开票员 |
2.4 tb_call_pre_sum —— 每日通话预汇总
| 属性 | 说明 |
|---|---|
| 数据来源 | 由 tb_call_history 按 branch_id + 日期 + agent + org_id 分组汇总计算写入 |
| 更新方式 | upsertBatch(ON DUPLICATE KEY UPDATE),支持实时/夜间重算 |
| 核心作用 | 存储每天每个坐席的通话次数和时长,供话务大盘和坐席汇总使用 |
字段说明:
| 字段 | 说明 |
|---|---|
id | 主键(IdType.INPUT,由代码生成) |
branch_id | 分公司标识(来自 tb_call_history.call_data) |
stat_date | 统计日期 |
agent | 坐席账号;agent 为 NULL 的记录表示公司级呼入未接通数据(263 部分呼入未接通话单,未分配坐席就挂断) |
call_out_count | 呼出次数(已接通) |
call_out_missed_count | 呼出次数(未接通) |
call_out_duration | 呼出时长(已接通,分钟,CEIL(talksec/60)) |
call_in_count | 呼入次数(已接通) |
call_in_missed_count | 呼入次数(未接通) |
call_in_duration | 呼入时长(已接通,分钟) |
total_count | 总次数(全部,含接通与未接通) |
org_id | 部门 ID |
汇总 SQL 逻辑(来自 CallPreSumMapper.xml):
呼出次数:call_result = 1 AND call_direction = '呼出'呼入次数:call_result = 1 AND call_direction = '呼入'时长:CEIL(talksec/60)向上取整转分钟,仅计算已接通- 按
call_data(branch_id)+ DATE(c_start_time) + agent + org_id分组
2.5 tb_call_pre_sum_agent —— 每日活跃坐席记录
| 属性 | 说明 |
|---|---|
| 数据来源 | 当日有已接通话单的坐席,写入此表 |
| 核心作用 | 记录每日活跃坐席,话务大盘中的"开票员数量"来源于此(COUNT(DISTINCT agent)) |
字段说明:
| 字段 | 说明 |
|---|---|
id | 主键 |
branch_id | 分公司标识 |
stat_date | 统计日期 |
agent | 坐席账号 |
查询示例(来自
CallBranchSumMapper.xml):统计分公司活跃坐席数COUNT(DISTINCT agent) FROM tb_call_pre_sum_agent WHERE stat_date BETWEEN ...
2.6 tb_call_pre_sum_cust —— 每日客户联系记录(客户数去重用)
| 属性 | 说明 |
|---|---|
| 数据来源 | tb_call_history INNER JOIN tb_call_work_order,按 branch_id + 日期 + agent + 客户标准码 + org_id 分组汇总 |
| 更新方式 | upsertBatch,支持实时/夜间重算 |
| 核心作用 | 记录每日每坐席联系的客户标准码,用于客户数去重统计 |
字段说明:
| 字段 | 说明 |
|---|---|
id | 主键 |
branch_id | 分公司标识 |
stat_date | 统计日期 |
agent | 坐席账号 |
new_group_cust_no | 客户标准码(来自工单表) |
cust_count | 与此客户的总通话次数(不去重) |
out_cust_count | 与此客户的呼出通话次数(不去重) |
org_id | 部门 ID |
重要说明:
- 统计任务里的"客户数"需要
out_cust_count > 0来过滤,只计算有呼出行为的客户 - 客户数去重使用
COUNT(DISTINCT new_group_cust_no)实现 - 汇总前提:
call_result = 1(已接通)且new_group_cust_no IS NOT NULL
2.7 tb_call_target —— 月度目标
| 属性 | 说明 |
|---|---|
| 数据来源 | 云 ERP 导入(Excel),实际数由系统自动计算更新 |
| 核心作用 | 管理每月每人的通话目标及实际完成情况 |
关联逻辑(任务实际数计算):
tb_call_target.branch_id + hr_staff_id
└─► tb_call_employee(找到对应坐席 username/agent)
└─► tb_call_history + tb_call_work_order(统计实际完成情况)主要字段:
| 字段 | 说明 |
|---|---|
id | 主键(IdType.ASSIGN_ID,雪花算法) |
branch_id | 分公司标识 |
hr_staff_id | HR 员工 ID(与 branch_id 联合定位员工) |
staff_name | 员工名称 |
target_year | 目标年份 |
target_month | 目标月份 |
target_count | 目标外呼客户数(手动设置) |
actual_count | 实际外呼客户数(系统自动计算:COUNT(DISTINCT new_group_cust_no) ,条件:已接通 + 呼出) |
day_target_count | 日目标客户数(手动设置) |
day_target_duration | 日目标通话时长(手动设置) |
day_target_type | 日目标覆盖方式(工作日 / 全部 / 自定义日期) |
day_description | 日目标覆盖日期描述(如 1,2,3,4,5 代表周一至周五) |
注意: 任务数据本身不含团队信息,导入时也不含;界面展示的"团队"只是显示当前用户所属团队。
2.8 tb_call_target_day —— 日度目标
| 属性 | 说明 |
|---|---|
| 数据来源 | 由月度目标的日目标配置自动生成,实际数由系统自动计算(实时 + 夜间重算) |
| 核心作用 | 管理每日每人的目标与实际完成情况 |
| 关联父表 | target_id 指向 tb_call_target.id |
主要字段:
| 字段 | 说明 |
|---|---|
id | 主键(IdType.INPUT,由代码生成) |
target_id | 关联月度目标 ID |
branch_id | 分公司标识 |
hr_staff_id | HR 员工 ID |
stat_date | 具体日期 |
day_target_count | 日目标客户数 |
day_actual_count | 日实际客户数(系统计算,逻辑同月度:已接通 + 呼出 + COUNT(DISTINCT new_group_cust_no)) |
day_target_duration | 日目标通话时长(分钟) |
day_actual_duration | 日实际通话时长(分钟,系统计算 CEIL(talksec/60)) |
delete_flag | 逻辑删除:0 正常,1 删除 |
实际数更新时机:
- 实时: 通话结束后触发单坐席重算
- 夜间: 定时任务批量重算当日全部数据
2.9 tb_call_work_calendar —— 工作日历
| 属性 | 说明 |
|---|---|
| 数据来源 | 系统维护(支持法定节假日、补班等) |
| 核心作用 | 判断某日是否为工作日,供日目标生成及完成率计算使用 |
字段说明:
| 字段 | 说明 |
|---|---|
id | 主键,值 = 对应日期的数字格式,如 20260629 |
stat_date | 日期 |
year_value / month_value / day_value | 年 / 月 / 日 |
week_value | 星期 |
workday_flag | 是否工作日:1 工作日,0 休息日 |
note | 备注(如"端午节"、"国庆补班"等) |
2.10 tb_call_day_kpi —— 日 KPI(开票金额等)
| 属性 | 说明 |
|---|---|
| 数据来源 | 每晚从中台获取(T+1 数据,中台已按日汇总) |
| 核心作用 | 话务大盘展示每日开票金额、销售金额、品规数 |
字段说明:
| 字段 | 说明 |
|---|---|
id | 主键 |
branch_id | 分公司标识 |
agent | 坐席账号 |
hr_staff_id | HR 员工 ID |
stat_date | 统计日期 |
sale_amt | 销售金额(BigDecimal) |
invoice_amt | 实际开票金额(BigDecimal) |
prod_cnt | 开票品规数(Integer) |
delete_flag | 逻辑删除:0 正常,1 删除 |
2.11 tb_call_month_kpi —— 月 KPI(开票金额等)
| 属性 | 说明 |
|---|---|
| 数据来源 | 每晚从中台获取(T+1 数据,中台已按月汇总) |
| 核心作用 | 话务大盘展示月度开票金额、销售金额、品规数 |
字段说明:
| 字段 | 说明 |
|---|---|
id | 主键 |
branch_id | 分公司标识 |
agent | 坐席账号 |
hr_staff_id | HR 员工 ID |
year_value / month_value | 年 / 月 |
sale_amt | 销售金额(BigDecimal) |
invoice_amt | 实际开票金额(BigDecimal) |
prod_cnt | 开票品规数(Integer) |
delete_flag | 逻辑删除:0 正常,1 删除 |
2.12 tb_call_task_failed —— 失败任务记录(辅助表)
| 属性 | 说明 |
|---|---|
| 数据来源 | 系统自动写入(定时任务或接口调用失败时) |
| 核心作用 | 记录失败任务,支持重试机制 |
字段说明:
| 字段 | 说明 |
|---|---|
task_type | 任务类型(区分业务逻辑) |
task_param | 入参 JSON 报文 |
error_code / error_msg | 错误编码 / 错误信息 |
status | 状态 |
retry_count | 已重试次数 |
next_retry_time | 下次重试时间 |
2.13 tb_call_warn_record —— 预警记录(辅助表)
| 属性 | 说明 |
|---|---|
| 数据来源 | 系统自动写入(异常触发预警时) |
| 核心作用 | 记录预警信息及钉钉推送状态 |
字段说明:
| 字段 | 说明 |
|---|---|
error_code / error_msg | 错误码 / 错误消息 |
title | 预警标题 |
content | 预警内容 |
supplement | 补充信息 |
warn_time | 预警时间 |
warn_status | 钉钉发送状态:1 已成功,0 未发送 |
warn_fail_reason | 钉钉发送失败原因 |
三、核心表关系汇总
| 关系 | 关联字段 |
|---|---|
tb_call_history ↔ tb_call_work_order | call_id + agent = call_id + username |
tb_call_history ↔ tb_call_employee | agent = username |
tb_call_target ↔ tb_call_employee | branch_id + hr_staff_id |
tb_call_target_day ↔ tb_call_target | target_id = id |
tb_call_target_day ↔ tb_call_employee | branch_id + hr_staff_id |
tb_call_pre_sum 来源于 tb_call_history | 按 call_data(branch_id) + 日期 + agent + org_id 分组汇总 |
tb_call_pre_sum_cust 来源于 history JOIN work_order | 按 branch_id + 日期 + agent + 客户标准码 分组 |
tb_call_pre_sum_agent | 当日有已接话单的坐席写入 |
四、关键统计口径说明
| 指标 | 计算方式 |
|---|---|
| 呼出次数(已接通) | call_result = 1 AND call_direction = '呼出' 的 COUNT |
| 呼入次数(已接通) | call_result = 1 AND call_direction = '呼入' 的 COUNT |
| 通话时长(分钟) | CEIL(talksec / 60),仅统计已接通 |
| 外呼客户数(任务实际数) | COUNT(DISTINCT new_group_cust_no) FROM history JOIN work_order,条件:call_result=1, call_direction='呼出', new_group_cust_no IS NOT NULL |
| 活跃坐席数 | COUNT(DISTINCT agent) FROM tb_call_pre_sum_agent |
| 公司级呼入未接通 | tb_call_pre_sum 中 agent IS NULL 的记录 |