|
|
@@ -0,0 +1,158 @@
|
|
|
+<?xml version="1.0" encoding="UTF-8" ?>
|
|
|
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
|
+<mapper namespace="com.fs.company.mapper.AiOutboundCallDashboardMapper">
|
|
|
+
|
|
|
+ <!-- 按任务维度查询外呼统计 -->
|
|
|
+ <select id="selectCallStatisticsByTask" parameterType="com.fs.company.param.AiOutboundCallDashboardParam"
|
|
|
+ resultType="com.fs.company.dto.AiOutboundCallStatisticsDTO">
|
|
|
+ SELECT
|
|
|
+ ccl.robotic_id AS roboticId,
|
|
|
+ cvr.name AS taskName,
|
|
|
+ COUNT(*) AS totalCalls,
|
|
|
+ SUM(CASE WHEN ccl.status = 2 AND ccl.call_time > 0 THEN 1 ELSE 0 END) AS connectedCalls,
|
|
|
+ SUM(CASE WHEN ccl.intention IS NOT NULL AND ccl.intention != '' AND ccl.intention IN ('5', '4') THEN 1 ELSE 0 END) AS intentCalls,
|
|
|
+ SUM(CASE WHEN ccl.intention = '1' THEN 1 ELSE 0 END) AS transferCalls,
|
|
|
+ SUM(CASE WHEN ccl.status = 2 AND ccl.call_time > 0 THEN ccl.call_time ELSE 0 END) AS totalDuration,
|
|
|
+ MAX(ccl.call_type) AS callType
|
|
|
+ FROM company_voice_robotic_call_log_callphone ccl
|
|
|
+ INNER JOIN company_voice_robotic cvr ON cvr.id = ccl.robotic_id
|
|
|
+ WHERE ccl.company_id = #{companyId}
|
|
|
+ AND cvr.del_flag = 0
|
|
|
+ AND ccl.run_time >= CONCAT(#{startTime}, ' 00:00:00')
|
|
|
+ AND ccl.run_time <= CONCAT(#{endTime}, ' 23:59:59')
|
|
|
+ GROUP BY ccl.robotic_id, cvr.name
|
|
|
+ ORDER BY totalCalls DESC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 查询每日外呼趋势 -->
|
|
|
+ <select id="selectDailyCallTrend" parameterType="com.fs.company.param.AiOutboundCallDashboardParam"
|
|
|
+ resultType="com.fs.company.dto.AiOutboundCallDailyTrendDTO">
|
|
|
+ SELECT
|
|
|
+ DATE_FORMAT(ccl.run_time, '%Y-%m-%d') AS callDate,
|
|
|
+ COUNT(*) AS totalCalls,
|
|
|
+ SUM(CASE WHEN ccl.status = 2 AND ccl.call_time > 0 THEN 1 ELSE 0 END) AS connectedCalls
|
|
|
+ FROM company_voice_robotic_call_log_callphone ccl
|
|
|
+ WHERE ccl.company_id = #{companyId}
|
|
|
+ AND ccl.run_time >= CONCAT(#{startTime}, ' 00:00:00')
|
|
|
+ AND ccl.run_time <= CONCAT(#{endTime}, ' 23:59:59')
|
|
|
+ GROUP BY DATE_FORMAT(ccl.run_time, '%Y-%m-%d')
|
|
|
+ ORDER BY callDate ASC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 查询通话状态分布 -->
|
|
|
+ <select id="selectCallStatusDistribution" parameterType="com.fs.company.param.AiOutboundCallDashboardParam"
|
|
|
+ resultType="com.fs.company.dto.AiOutboundCallStatusDTO">
|
|
|
+ SELECT
|
|
|
+ CASE
|
|
|
+ WHEN ccl.status = 2 AND ccl.call_time > 0 THEN '接通'
|
|
|
+ WHEN ccl.status = 3 THEN '未接通'
|
|
|
+ WHEN ccl.status = 1 THEN '呼叫中'
|
|
|
+ ELSE '其他'
|
|
|
+ END AS name,
|
|
|
+ COUNT(*) AS value
|
|
|
+ FROM company_voice_robotic_call_log_callphone ccl
|
|
|
+ WHERE ccl.company_id = #{companyId}
|
|
|
+ AND ccl.run_time >= CONCAT(#{startTime}, ' 00:00:00')
|
|
|
+ AND ccl.run_time <= CONCAT(#{endTime}, ' 23:59:59')
|
|
|
+ GROUP BY
|
|
|
+ CASE
|
|
|
+ WHEN ccl.status = 2 AND ccl.call_time > 0 THEN '接通'
|
|
|
+ WHEN ccl.status = 3 THEN '未接通'
|
|
|
+ WHEN ccl.status = 1 THEN '呼叫中'
|
|
|
+ ELSE '其他'
|
|
|
+ END
|
|
|
+ ORDER BY value DESC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 查询意向分布 -->
|
|
|
+ <select id="selectIntentDistribution" parameterType="com.fs.company.param.AiOutboundCallDashboardParam"
|
|
|
+ resultType="com.fs.company.dto.AiOutboundCallIntentDTO">
|
|
|
+ SELECT
|
|
|
+ CASE
|
|
|
+ WHEN ccl.intention = '5' THEN 'A级(高意向)'
|
|
|
+ WHEN ccl.intention = '4' THEN 'B级(较高意向)'
|
|
|
+ WHEN ccl.intention = '3' THEN 'C级(一般意向)'
|
|
|
+ WHEN ccl.intention = '2' THEN 'D级(较低意向)'
|
|
|
+ WHEN ccl.intention = '1' THEN 'E级(需转人工)'
|
|
|
+ WHEN ccl.intention = '10' THEN 'F级(无意向)'
|
|
|
+ WHEN ccl.intention = '11' THEN 'G级'
|
|
|
+ WHEN ccl.intention = '12' THEN 'H级'
|
|
|
+ WHEN ccl.intention = '13' THEN 'I级'
|
|
|
+ WHEN ccl.intention = '14' THEN 'J级'
|
|
|
+ WHEN ccl.intention = '0' OR ccl.intention IS NULL OR ccl.intention = '' THEN '未标记'
|
|
|
+ ELSE CONCAT(ccl.intention, '级')
|
|
|
+ END AS name,
|
|
|
+ COUNT(*) AS value
|
|
|
+ FROM company_voice_robotic_call_log_callphone ccl
|
|
|
+ WHERE ccl.company_id = #{companyId}
|
|
|
+ AND ccl.run_time >= CONCAT(#{startTime}, ' 00:00:00')
|
|
|
+ AND ccl.run_time <= CONCAT(#{endTime}, ' 23:59:59')
|
|
|
+ AND ccl.status = 2 AND ccl.call_time > 0
|
|
|
+ GROUP BY
|
|
|
+ CASE
|
|
|
+ WHEN ccl.intention = '5' THEN 'A级(高意向)'
|
|
|
+ WHEN ccl.intention = '4' THEN 'B级(较高意向)'
|
|
|
+ WHEN ccl.intention = '3' THEN 'C级(一般意向)'
|
|
|
+ WHEN ccl.intention = '2' THEN 'D级(较低意向)'
|
|
|
+ WHEN ccl.intention = '1' THEN 'E级(需转人工)'
|
|
|
+ WHEN ccl.intention = '10' THEN 'F级(无意向)'
|
|
|
+ WHEN ccl.intention = '11' THEN 'G级'
|
|
|
+ WHEN ccl.intention = '12' THEN 'H级'
|
|
|
+ WHEN ccl.intention = '13' THEN 'I级'
|
|
|
+ WHEN ccl.intention = '14' THEN 'J级'
|
|
|
+ WHEN ccl.intention = '0' OR ccl.intention IS NULL OR ccl.intention = '' THEN '未标记'
|
|
|
+ ELSE CONCAT(ccl.intention, '级')
|
|
|
+ END
|
|
|
+ ORDER BY value DESC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 查询敏感词触发统计(按任务维度) -->
|
|
|
+ <select id="selectViolationStatistics" parameterType="com.fs.company.param.AiOutboundCallDashboardParam"
|
|
|
+ resultType="com.fs.company.dto.AiOutboundCallViolationDTO">
|
|
|
+ SELECT
|
|
|
+ ccl.robotic_id AS roboticId,
|
|
|
+ cvr.name AS taskName,
|
|
|
+ COUNT(*) AS totalCalls,
|
|
|
+ SUM(CASE WHEN ccl.is_warning = 1 THEN 1 ELSE 0 END) AS warningCount,
|
|
|
+ IFNULL(SUM(CASE WHEN ccl.is_warning = 1 THEN ccl.violation_num ELSE 0 END), 0) AS violationNum
|
|
|
+ FROM company_voice_robotic_call_log_callphone ccl
|
|
|
+ INNER JOIN company_voice_robotic cvr ON cvr.id = ccl.robotic_id
|
|
|
+ WHERE ccl.company_id = #{companyId}
|
|
|
+ AND cvr.del_flag = 0
|
|
|
+ AND ccl.run_time >= CONCAT(#{startTime}, ' 00:00:00')
|
|
|
+ AND ccl.run_time <= CONCAT(#{endTime}, ' 23:59:59')
|
|
|
+ GROUP BY ccl.robotic_id, cvr.name
|
|
|
+ ORDER BY warningCount DESC
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <!-- 查询通话时长分布 -->
|
|
|
+ <select id="selectDurationDistribution" parameterType="com.fs.company.param.AiOutboundCallDashboardParam"
|
|
|
+ resultType="com.fs.company.dto.AiOutboundCallDurationDTO">
|
|
|
+ SELECT
|
|
|
+ CASE
|
|
|
+ WHEN ccl.call_time > 0 AND ccl.call_time <= 30 THEN '0-30秒'
|
|
|
+ WHEN ccl.call_time > 30 AND ccl.call_time <= 60 THEN '30-60秒'
|
|
|
+ WHEN ccl.call_time > 60 AND ccl.call_time <= 120 THEN '1-2分钟'
|
|
|
+ WHEN ccl.call_time > 120 AND ccl.call_time <= 300 THEN '2-5分钟'
|
|
|
+ WHEN ccl.call_time > 300 THEN '5分钟以上'
|
|
|
+ ELSE '未接通'
|
|
|
+ END AS
ange,
|
|
|
+ COUNT(*) AS count
|
|
|
+ FROM company_voice_robotic_call_log_callphone ccl
|
|
|
+ WHERE ccl.company_id = #{companyId}
|
|
|
+ AND ccl.run_time >= CONCAT(#{startTime}, ' 00:00:00')
|
|
|
+ AND ccl.run_time <= CONCAT(#{endTime}, ' 23:59:59')
|
|
|
+ GROUP BY
|
|
|
+ CASE
|
|
|
+ WHEN ccl.call_time > 0 AND ccl.call_time <= 30 THEN '0-30秒'
|
|
|
+ WHEN ccl.call_time > 30 AND ccl.call_time <= 60 THEN '30-60秒'
|
|
|
+ WHEN ccl.call_time > 60 AND ccl.call_time <= 120 THEN '1-2分钟'
|
|
|
+ WHEN ccl.call_time > 120 AND ccl.call_time <= 300 THEN '2-5分钟'
|
|
|
+ WHEN ccl.call_time > 300 THEN '5分钟以上'
|
|
|
+ ELSE '未接通'
|
|
|
+ END
|
|
|
+ ORDER BY
|
|
|
+ FIELD(
ange, '0-30秒', '30-60秒', '1-2分钟', '2-5分钟', '5分钟以上', '未接通')
|
|
|
+ </select>
|
|
|
+
|
|
|
+</mapper>
|