/// 创建统计sql=坐席状态
        /// <summary>
        /// 创建统计sql=坐席状态
        /// </summary>
        /// <param name="type"></param>
        /// <param name="tmp"></param>
        /// <returns></returns>
        private string CreateAgentStatetatSql(ReportTempType type, string tmp)
        {
            string groupby = "";

            if (type == ReportTempType.Hour)
            {
                groupby = "StatDate,Hour,AgentUserID";
            }
            else if (type == ReportTempType.Day)
            {
                groupby = "StatDate,AgentUserID";
            }
            else
            {
                return("");
            }
            string sql = @"SELECT " + groupby + @",
                                    SUM(is_qianru) AS N_SignIn ,-- 签入次数
                                    SUM(is_qianchu) AS N_SignOut ,-- 签出次数
                                    SUM(is_zhixian) AS N_Free ,-- 置闲次数
                                    SUM(is_zhimang) AS N_Busy ,-- 置忙次数
                                    SUM(is_busy0) AS N_Busy_0 ,-- 置忙-自动次数
                                    SUM(is_busy1) AS N_Busy_1 ,-- 置忙-小休次数
                                    SUM(is_busy2) AS N_Busy_2 ,-- 置忙-任务回访次数
                                    SUM(is_busy3) AS N_Busy_3 ,-- 置忙-业务处理次数
                                    SUM(is_busy4) AS N_Busy_4 ,-- 置忙-会议次数
                                    SUM(is_busy5) AS N_Busy_5 ,-- 置忙-培训次数
                                    SUM(is_busy6) AS N_Busy_6 ,-- 置忙-离席次数
                                    SUM(t_qianru) AS T_SignIn ,-- 签入时长
                                    NULL AS T_SignOut ,-- 签出时长
                                    SUM(t_zhixian) AS T_Free ,-- 置闲时长
                                    SUM(t_zhimang) AS T_Busy ,-- 置忙时长
                                    SUM(t_busy0) AS T_Busy_0 ,-- 置忙-自动时长
                                    SUM(t_busy1) AS T_Busy_1 ,-- 置忙-小休时长
                                    SUM(t_busy2) AS T_Busy_2 ,-- 置忙-任务回访时长
                                    SUM(t_busy3) AS T_Busy_3 ,-- 置忙-业务处理时长
                                    SUM(t_busy4) AS T_Busy_4 ,-- 置忙-会议时长
                                    SUM(t_busy5) AS T_Busy_5 ,-- 置忙-培训时长
                                    SUM(t_busy6) AS T_Busy_6 ,-- 置忙-离席时长
                                    GETDATE() AS CreateTime
                                    INTO " + tmp + @"
                                    FROM #tmp_state
                                    GROUP BY " + groupby + @"
                                    ORDER BY " + groupby;

            return(sql);
        }
        /// 创建统计sql=话务
        /// <summary>
        /// 创建统计sql=话务
        /// </summary>
        /// <param name="type"></param>
        /// <param name="tmp"></param>
        /// <returns></returns>
        private string CreateCallRecordStatSql(ReportTempType type, string tmp)
        {
            string groupby = "";

            if (type == ReportTempType.Hour)
            {
                groupby = "StatDate,Hour,BGID,AgentUserID,CallDirection,CallType";
            }
            else if (type == ReportTempType.Day)
            {
                groupby = "StatDate,BGID,AgentUserID,CallDirection,CallType";
            }
            else
            {
                return("");
            }
            string sql = @"SELECT " + groupby + @",
                                    COUNT(*) AS N_Total,--电话总量
                                    SUM(ISEstablished) AS N_ETotal,--接通总量
                                    COUNT(*)-SUM(ISEstablished) AS N_NoETotal ,-- 未接通总量
                                    SUM(ISTransferIn) AS  N_TransferIn ,-- 转入总量
                                    SUM(ISTransferOut) AS N_TransferOut ,-- 转出总量
                                    SUM(CASE ISEstablished WHEN 1 THEN T_Ringing ELSE 0 END) AS T_ERinging ,-- 接通振铃时长
                                    SUM(CASE ISEstablished WHEN 0 THEN T_Ringing ELSE 0 END) AS T_NoERinging ,-- 未接通振铃时长
                                    SUM(T_Ringing) AS T_Ringing ,-- 总振铃时长
                                    SUM(T_Talk) AS T_Talk ,-- 总通话时长
                                    SUM(AfterWorkTime) AS T_AfterWork ,-- 总话后时长
                                    SUM(T_Ringing) + SUM(T_Talk) + SUM(AfterWorkTime) AS T_ALL ,-- 总时长=(总振铃+总通话+总话后)      
                                    GETDATE() AS CreateTime
                                    INTO " + tmp + @"
                                    FROM #tmp_call
                                    GROUP BY " + groupby + @"
                                    ORDER BY " + groupby;

            return(sql);
        }
        /// 创建话务统计临时表
        /// <summary>
        /// 创建话务统计临时表
        /// </summary>
        /// <param name="conn"></param>
        /// <param name="date"></param>
        /// <param name="tableEndName"></param>
        /// <param name="tmp_hour"></param>
        /// <param name="tmp_day"></param>
        public Dictionary <ReportTempType, string> CreateReportCallRecordStatForDayTmp(SqlConnection conn, DateTime date, ReportTempType tmptype, string tableendname, out string msg)
        {
            #region 创建临时表
            string tmpsql = @"SELECT * ,
                                        CASE WHEN ISNULL(EstablishedTime,'1970-1-1')>'1970-1-1' THEN 1 ELSE 0 END AS ISEstablished,--接通
                                        CASE WHEN ISNULL(TransferInTime,'1970-1-1')>'1970-1-1' THEN 1 ELSE 0 END AS ISTransferIn,--转入
                                        CASE WHEN ISNULL(TransferOutTime,'1970-1-1')>'1970-1-1' THEN 1 ELSE 0 END AS ISTransferOut,--转出
                                        CASE WHEN ISNULL(EstablishedTime,'1970-1-1')>'1970-1-1' THEN (DATEDIFF(SECOND,RingingTime,EstablishedTime)) ELSE (DATEDIFF(SECOND,RingingTime,ReleaseTime)) END AS T_Ringing,--振铃时长
                                        CASE WHEN ISNULL(EstablishedTime,'1970-1-1')>'1970-1-1' THEN (DATEDIFF(SECOND,EstablishedTime,ReleaseTime)) ELSE (0) END AS T_Talk--通话时长
                                        INTO #tmp_call
                                        FROM
                                        (
                                        SELECT 
                                        --主要字段
                                        a.CreateTime,a.CreateUserID as AgentUserID,
                                        CAST(a.CreateTime AS DATE) AS StatDate,
                                        DATENAME(HOUR,a.CreateTime) AS [Hour],
                                        CASE WHEN ISNULL(b.BGID,0)>0 THEN ISNULL(b.BGID,0) ELSE ISNULL(c.BGID,0) END AS BGID,
                                        CASE a.CallStatus 
                                        WHEN 1 THEN ISNULL(d.CDID,0) 
                                        WHEN 2 THEN (CASE a.OutBoundType WHEN 1 THEN 1 WHEN 2 THEN 2 WHEN 4 THEN 3 ELSE 1 END) 
                                        WHEN 3 THEN ISNULL(d.CDID,0) 
                                        ELSE -1 END AS CallType,
                                        a.CallStatus AS CallDirection,
                                        --时间字段
                                        a.InitiatedTime,a.RingingTime,a.EstablishedTime,ISNULL(a.AgentReleaseTime,a.CustomerReleaseTime) AS ReleaseTime,
                                        a.AfterWorkBeginTime,a.AfterWorkTime,a.ConsultTime,a.ReconnectCall,a.TransferInTime,a.TransferOutTime
                                        FROM dbo.CallRecord_ORIG" + tableendname + @" a
                                        LEFT JOIN dbo.CallRecord_ORIG_Business" + tableendname + @" b ON a.CallID=b.CallID
                                        LEFT JOIN dbo.EmployeeAgent c ON a.CreateUserID=c.UserID
                                        LEFT JOIN dbo.CallDisplay d ON a.SwitchINNum=d.AreaCode+d.TelMainNum
                                        WHERE a.CreateTime>='" + date.ToString("yyyy-MM-dd") + @" 00:00:00' AND a.CreateTime<='" + date.ToString("yyyy-MM-dd") + @" 23:59:59'
                                        ) tmp
                                        WHERE tmp.BGID>0 AND tmp.CallType>0
                                        AND ISNULL(InitiatedTime,'1970-1-1')>'1970-1-1'
                                        AND ISNULL(RingingTime,'1970-1-1')>'1970-1-1'
                                        AND ISNULL(ReleaseTime,'1970-1-1')>'1970-1-1'";
            int    a      = SqlHelper.ExecuteNonQuery(conn, System.Data.CommandType.Text, tmpsql);
            msg = "查询一天的数据量=" + a + ";";
            #endregion

            Dictionary <ReportTempType, string> list = new Dictionary <ReportTempType, string>();
            if (tmptype == ReportTempType.Hour || tmptype == ReportTempType.All)
            {
                string tmp = "#tmp_callrecord_hour";
                string sql = CreateCallRecordStatSql(ReportTempType.Hour, tmp);
                int    b   = SqlHelper.ExecuteNonQuery(conn, System.Data.CommandType.Text, sql);
                list.Add(ReportTempType.Hour, tmp);
                msg += "统计小时数据=" + b + ";";
            }

            if (tmptype == ReportTempType.Day || tmptype == ReportTempType.All)
            {
                string tmp = "#tmp_callrecord_day";
                string sql = CreateCallRecordStatSql(ReportTempType.Day, tmp);
                int    b   = SqlHelper.ExecuteNonQuery(conn, System.Data.CommandType.Text, sql);
                list.Add(ReportTempType.Day, tmp);
                msg += "统计天数据=" + b + ";";
            }
            return(list);
        }
        /// 创建坐席状态统计临时表
        /// <summary>
        /// 创建坐席状态统计临时表
        /// </summary>
        /// <param name="conn"></param>
        /// <param name="date"></param>
        /// <param name="tablename"></param>
        /// <param name="tmp_hour"></param>
        /// <param name="tmp_day"></param>
        public Dictionary <ReportTempType, string> CreateReportAgentStateStatForDayTmp(SqlConnection conn, DateTime date, ReportTempType tmptype, string tablename, out string msg)
        {
            #region 创建临时表
            string tmpsql = @"
                        SELECT 
                        --统计时间,小时,坐席,状态1,2,时长
                        CAST(StatDate AS DATE) AS StatDate,[Hour],AgentUserID,State,AgentAuxState,T_time,
                        --指标
                        CASE a.STATE WHEN 1 THEN 1 ELSE 0 END AS is_qianchu,
                        CASE a.STATE WHEN 2 THEN 1 ELSE 0 END AS is_qianru,
                        CASE a.STATE WHEN 3 THEN 1 ELSE 0 END AS is_zhixian,
                        CASE a.STATE WHEN 4 THEN 1 ELSE 0 END AS is_zhimang,

                        CASE a.STATE WHEN 1 THEN T_time ELSE 0 END AS t_qianchu,
                        CASE a.STATE WHEN 2 THEN T_time ELSE 0 END AS t_qianru,
                        CASE a.STATE WHEN 3 THEN T_time ELSE 0 END AS t_zhixian,
                        CASE a.STATE WHEN 4 THEN T_time ELSE 0 END AS t_zhimang,

                        CASE WHEN a.STATE=4 AND a.AgentAuxState=0 THEN 1 ELSE 0 END AS is_busy0,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=1 THEN 1 ELSE 0 END AS is_busy1,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=2 THEN 1 ELSE 0 END AS is_busy2,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=3 THEN 1 ELSE 0 END AS is_busy3,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=4 THEN 1 ELSE 0 END AS is_busy4,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=5 THEN 1 ELSE 0 END AS is_busy5,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=6 THEN 1 ELSE 0 END AS is_busy6,

                        CASE WHEN a.STATE=4 AND a.AgentAuxState=0 THEN T_time ELSE 0 END AS t_busy0,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=1 THEN T_time ELSE 0 END AS t_busy1,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=2 THEN T_time ELSE 0 END AS t_busy2,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=3 THEN T_time ELSE 0 END AS t_busy3,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=4 THEN T_time ELSE 0 END AS t_busy4,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=5 THEN T_time ELSE 0 END AS t_busy5,
                        CASE WHEN a.STATE=4 AND a.AgentAuxState=6 THEN T_time ELSE 0 END AS t_busy6
                        INTO #tmp_state
                        FROM (
	                        --主表 计算每一个小时的间隔时长
	                        SELECT 
	                        Oid,StatDate,AgentUserID,AgentName,State,AgentAuxState,stat_hour AS [Hour],
	                        CASE WHEN stat_hour=start_hour THEN StartTime ELSE StatDate END AS calc_st,
	                        CASE WHEN stat_hour=end_hour THEN EndTime ELSE DATEADD(hour,1,StatDate) END AS calc_et,
	                        DATEDIFF(SECOND,(CASE WHEN stat_hour=start_hour THEN StartTime ELSE StatDate END),(CASE WHEN stat_hour=end_hour THEN EndTime ELSE DATEADD(hour,1,StatDate) END)) AS T_time
	                        FROM (
		                        SELECT
		                        --所有拆分小时后的明细数据
		                        tmp_main.StatDate,a.Oid,a.AgentID AS AgentUserID,a.AgentName,a.State,a.AgentAuxState,a.StartTime,a.EndTime,
		                        DATENAME(HOUR,a.StartTime) AS start_hour,
		                        DATENAME(HOUR,a.EndTime) AS end_hour,
		                        DATENAME(HOUR,tmp_main.StatDate) AS stat_hour
		                        FROM (
			                        SELECT mind AS StatDate,AgentID 
			                        --全量时间表
			                        FROM f_R_GetMWD('"             + date.ToString("yyyy-MM-dd") + @" 00:00:00' ,'" + date.ToString("yyyy-MM-dd") + @" 23:59:59',4) AS tmp_date,
			                        --全量坐席表
			                        (SELECT DISTINCT AgentID FROM "             + tablename + @" a 
                                        WHERE a.StartTime>='" + date.ToString("yyyy-MM-dd") + @" 00:00:00' 
                                        AND a.StartTime<='" + date.ToString("yyyy-MM-dd") + @" 23:59:59' 
                                        AND State IN (1,2,3,4)) AS tmp_agent
		                        ) AS tmp_main
		                        --关联具体数据
		                        INNER JOIN "         + tablename + @" a 
		                        --8:30-12:30转成7:30-12:30转成8:00,9:00,10:00,11:00,12:00
		                        --8:00-12:00转成7:00-12:00转成9:00,10:00,11:00
		                        ON (tmp_main.AgentID=a.AgentID AND tmp_main.StatDate>DATEADD(HOUR,-1,a.StartTime) AND tmp_main.StatDate<a.EndTime)
                                WHERE a.State IN (1,2,3,4)
	                        ) tmp
                        ) a";
            int    a      = SqlHelper.ExecuteNonQuery(conn, System.Data.CommandType.Text, tmpsql);
            msg = "查询一天的数据量=" + a + ";";
            #endregion

            Dictionary <ReportTempType, string> list = new Dictionary <ReportTempType, string>();
            if (tmptype == ReportTempType.Hour || tmptype == ReportTempType.All)
            {
                string tmp = "#tmp_agentstate_hour";
                string sql = CreateAgentStatetatSql(ReportTempType.Hour, tmp);
                int    b   = SqlHelper.ExecuteNonQuery(conn, System.Data.CommandType.Text, sql);
                list.Add(ReportTempType.Hour, tmp);
                msg += "统计小时数据=" + b + ";";
            }

            if (tmptype == ReportTempType.Day || tmptype == ReportTempType.All)
            {
                string tmp = "#tmp_agentstate_day";
                string sql = CreateAgentStatetatSql(ReportTempType.Day, tmp);
                int    b   = SqlHelper.ExecuteNonQuery(conn, System.Data.CommandType.Text, sql);
                list.Add(ReportTempType.Day, tmp);
                msg += "统计天数据=" + b + ";";
            }
            return(list);
        }
예제 #5
0
        /// 创建坐席状态统计临时表
        /// <summary>
        /// 创建坐席状态统计临时表
        /// </summary>
        /// <param name="date"></param>
        /// <param name="tmp_hour"></param>
        /// <param name="tmp_day"></param>
        public Dictionary <ReportTempType, string> CreateReportAgentStateStatForDayTmp(SqlConnection conn, DateTime date, ReportTempType tmptype, out string msg)
        {
            string tablename = "";

            if (date.Date == DateTime.Today)
            {
                tablename = "AgentStateDetail";
            }
            else
            {
                tablename = "AgentStateDetailHistory";
            }
            return(Dal.CallRecordReport.Instance.CreateReportAgentStateStatForDayTmp(conn, date, tmptype, tablename, out msg));
        }
예제 #6
0
        /// 创建话务统计临时表
        /// <summary>
        /// 创建话务统计临时表
        /// </summary>
        /// <param name="date"></param>
        /// <param name="tmp_hour"></param>
        /// <param name="tmp_day"></param>
        public Dictionary <ReportTempType, string> CreateReportCallRecordStatForDayTmp(SqlConnection conn, DateTime date, ReportTempType tmptype, out string msg)
        {
            string tableEndName = BLL.Util.CalcTableNameByMonth(3, date);

            return(Dal.CallRecordReport.Instance.CreateReportCallRecordStatForDayTmp(conn, date, tmptype, tableEndName, out msg));
        }