using CallCenter.Utility;
using CallCenterApi.DB;
using CallCenterApi.Interface.Controllers.Base;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace CallCenterApi.Interface.Controllers.report
{
// [Authority]
public class TalkTimeController : BaseController
{
//通话时长统计
//获取表头
public ActionResult GetColumnList()
{
ActionResult res = NoToken("未知错误,请重新登录");
String[] str = { "坐席名称", "呼入次数", "呼入时长", "呼入未接通次数", "呼出次数", "呼出时长", "呼出未接通次数", "振铃时长","接通总次数", "通话总时长", "平均通话时长" };
res = Success("获取通话时长统计表头成功", str);
return res;
}
//获取数据
public ActionResult GetDataList(string stime,string endtime)
{
ActionResult res = NoToken("未知错误,请重新登录");
DataTable dtNew = new DataTable();
dtNew = GetData(stime, endtime);
#region
//DataTable dtNew = new DataTable();
//#region 编辑表头
//DataColumn dc1 = new DataColumn("坐席名称", Type.GetType("System.String"));
//DataColumn dc2 = new DataColumn("呼入次数", Type.GetType("System.String"));
//DataColumn dc3 = new DataColumn("呼入时长", Type.GetType("System.String"));
//DataColumn dc4 = new DataColumn("呼出次数", Type.GetType("System.String"));
//DataColumn dc5 = new DataColumn("呼出时长", Type.GetType("System.String"));
//DataColumn dc6 = new DataColumn("呼出未接通次数", Type.GetType("System.String"));
//DataColumn dc7 = new DataColumn("振铃时长", Type.GetType("System.String"));
//DataColumn dc8 = new DataColumn("通话总时长", Type.GetType("System.String"));
//DataColumn dc9 = new DataColumn("平均通话总时长", Type.GetType("System.String"));
//dtNew.Columns.Add(dc1);
//dtNew.Columns.Add(dc2);
//dtNew.Columns.Add(dc3);
//dtNew.Columns.Add(dc4);
//dtNew.Columns.Add(dc5);
//dtNew.Columns.Add(dc6);
//dtNew.Columns.Add(dc7);
//dtNew.Columns.Add(dc8);
//dtNew.Columns.Add(dc9);
//#endregion
//string[] CallInTime = GetCallRecordIn(stime, endtime, "0").TrimStart('[').TrimEnd(']').Split(',');
//string[] CallInTimes = GetCallRecordTotalTime(stime, endtime, "0").TrimStart('[').TrimEnd(']').Split(',');
//string[] CallOutTime = GetCallRecordOut(stime, endtime, "1","").TrimStart('[').TrimEnd(']').Split(',');
//string[] CallOutTimes = GetCallRecordTotalTime(stime, endtime, "1").TrimStart('[').TrimEnd(']').Split(',');
//string[] CallOutWTime = GetCallRecordOut(stime, endtime, "1", "0").TrimStart('[').TrimEnd(']').Split(',');
//string[] CallOutWTimes = GetCallRecordRingTime(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
//string[] CallTotalTime = GetCallRecordTotalTime(stime, endtime, "").TrimStart('[').TrimEnd(']').Split(',');
//string[] AgentArr = GetAgent().TrimStart('[').TrimEnd(']').Split(',');
//string[] AverageTime = GetCallAverageTime(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
//for (int i = 0; i < AgentArr.Length; i++)
//{
// DataRow drNew = dtNew.NewRow();
// drNew["坐席名称"] = AgentArr[i].Replace('\'', ' ');
// drNew["呼入次数"] = CallInTime[i];
// drNew["呼入时长"] = CallInTimes[i];
// drNew["呼出次数"] = CallOutTime[i];
// drNew["呼出时长"] = CallOutTimes[i];
// drNew["呼出未接通次数"] = CallOutWTime[i];
// drNew["振铃时长"] = CallOutWTimes[i];
// drNew["通话总时长"] = CallTotalTime[i];
// drNew["平均通话总时长"] = AverageTime[i];
// dtNew.Rows.Add(drNew);
//}
#endregion
res = Success("获取通话时长数据成功", dtNew);
return res;
}
//导出数据
public ActionResult ExptList(string stime, string endtime)
{
ActionResult res = NoToken("未知错误,请重新登录");
if (Request.IsAuthenticated)
{
NPOIHelper npoi = new NPOIHelper();
DataTable dt = GetData(stime, endtime);
if (npoi.ExportToExcel("通话时长数据", dt) == "")
{
return Success("导出成功");
}
else
{
return Error("导出失败");
}
}
return res;
}
//获取数据源
private DataTable GetData(string stime, string endtime)
{
DataTable dtNew = new DataTable();
#region 编辑表头
DataColumn dc1 = new DataColumn("坐席名称", Type.GetType("System.String"));
DataColumn dc2 = new DataColumn("呼入次数", Type.GetType("System.String"));
DataColumn dc3 = new DataColumn("呼入时长", Type.GetType("System.String"));
DataColumn dc4 = new DataColumn("呼入未接通次数", Type.GetType("System.String"));
DataColumn dc5 = new DataColumn("呼出次数", Type.GetType("System.String"));
DataColumn dc6 = new DataColumn("呼出时长", Type.GetType("System.String"));
DataColumn dc7 = new DataColumn("呼出未接通次数", Type.GetType("System.String"));
DataColumn dc8 = new DataColumn("振铃时长", Type.GetType("System.String"));
DataColumn dc9 = new DataColumn("接通总次数", Type.GetType("System.String"));
DataColumn dc10 = new DataColumn("通话总时长", Type.GetType("System.String"));
DataColumn dc11 = new DataColumn("平均通话总时长", Type.GetType("System.String"));
dtNew.Columns.Add(dc1);
dtNew.Columns.Add(dc2);
dtNew.Columns.Add(dc3);
dtNew.Columns.Add(dc4);
dtNew.Columns.Add(dc5);
dtNew.Columns.Add(dc6);
dtNew.Columns.Add(dc7);
dtNew.Columns.Add(dc8);
dtNew.Columns.Add(dc9);
dtNew.Columns.Add(dc10);
dtNew.Columns.Add(dc11);
#endregion
string[] CallInTime = GetCallRecordIn(stime, endtime, "0","").TrimStart('[').TrimEnd(']').Split(',');
string[] CallInTimes = GetCallRecordTotalTime(stime, endtime, "0").TrimStart('[').TrimEnd(']').Split(',');
string[] CallInWTime = GetCallRecordIn(stime, endtime, "1", "0").TrimStart('[').TrimEnd(']').Split(',');
string[] CallOutTime = GetCallRecordOut(stime, endtime, "1", "").TrimStart('[').TrimEnd(']').Split(',');
string[] CallOutTimes = GetCallRecordTotalTime(stime, endtime, "1").TrimStart('[').TrimEnd(']').Split(',');
string[] CallOutWTime = GetCallRecordOut(stime, endtime, "1", "0").TrimStart('[').TrimEnd(']').Split(',');
string[] CallOutWTimes = GetCallRecordRingTime(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
string[] CallTime = GetCallRecord(stime, endtime, "", "1").TrimStart('[').TrimEnd(']').Split(',');
string[] CallTotalTime = GetCallRecordTotalTime(stime, endtime, "").TrimStart('[').TrimEnd(']').Split(',');
string[] AgentArr = GetAgent().TrimStart('[').TrimEnd(']').Split(',');
string[] AverageTime = GetCallAverageTime(stime, endtime).TrimStart('[').TrimEnd(']').Split(',');
for (int i = 0; i < AgentArr.Length; i++)
{
DataRow drNew = dtNew.NewRow();
drNew["坐席名称"] = AgentArr[i].Replace('\'', ' ');
drNew["呼入次数"] = CallInTime[i];
drNew["呼入时长"] = CallInTimes[i];
drNew["呼入未接通次数"] = CallInWTime[i];
drNew["呼出次数"] = CallOutTime[i];
drNew["呼出时长"] = CallOutTimes[i];
drNew["呼出未接通次数"] = CallOutWTime[i];
drNew["振铃时长"] = CallOutWTimes[i];
drNew["接通总次数"] = CallTime[i];
drNew["通话总时长"] = CallTotalTime[i];
drNew["平均通话总时长"] = AverageTime[i];
dtNew.Rows.Add(drNew);
}
return dtNew;
}
#region
///
/// 获取坐席的呼出次数
///
/// 开始时间
/// 结束时间
/// 1表示呼出,0表示呼入
///
public string GetCallRecordOut(string BeginTime, string EndTime, string Tag, string state)
{
return GetHighChartData(BeginTime, EndTime, Tag, state);
}
///
/// 获取通话总时长
///
/// 开始时间
/// 结束时间
///
public string GetCallRecordTotalTime(string BeginTime, string EndTime, string tag)
{
string result = "[";
string sql = "";
if (BeginTime != null && BeginTime != "")
{
sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
}
if (EndTime != null && EndTime != "")
{
sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
}
if (tag != "")
{
sql += " and CallType=" + tag;
}
var userAccountList = new BLL.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1");
DataTable dt = DbHelperSQL.Query("SELECT UserId,UserCode,UserName,COUNT(*) AS calloutCount,SUM(TalkLongTime) AS TalkSummaryTime FROM T_Call_CallRecords where 1=1 " + sql + " GROUP BY UserId,UserCode,UserName").Tables[0];
foreach (Model.T_Sys_UserAccount item in userAccountList)
{
DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field("UserName") == item.F_UserName);
if (drUser != null && drUser[4].ToString() != "")
result += drUser[4].ToString() + ",";
else
result += "0,";
}
result = result.TrimEnd(',');
return result + "]";
}
///
/// 获取坐席名称(x轴数据)
///
///
public string GetAgent()
{
string result = "[";
var userAccountList = new BLL.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1");
foreach (Model.T_Sys_UserAccount item in userAccountList)
{
result += "'" + item.F_UserName + "',";
}
result = result.TrimEnd(',');
return result + "]";
}
///
/// 获取通话平均时长
///
/// 开始时间
/// 结束时间
///
public string GetCallAverageTime(string BeginTime, string EndTime)
{
string result = "[";
string[] CallInTime = GetCallRecordIn(BeginTime, EndTime, "0","").TrimStart('[').TrimEnd(']').Split(',');
string[] CallOutTime = GetCallRecordOut(BeginTime, EndTime, "1","").TrimStart('[').TrimEnd(']').Split(',');
string[] CallTotalTime = GetCallRecordTotalTime(BeginTime, EndTime,"").TrimStart('[').TrimEnd(']').Split(',');
for (int i = 0; i < CallInTime.Length; i++)
{
double subt = 0.0;
if (double.Parse(CallInTime[i]) != 0)
{
subt += double.Parse(CallInTime[i]);
}
if (double.Parse(CallOutTime[i]) != 0)
{
subt += double.Parse(CallOutTime[i]);
}
if (subt != 0)
result += (double.Parse(CallTotalTime[i]) / subt).ToString("F2") + ",";
else
result += "0,";
}
result = result.TrimEnd(',');
return result + "]";
}
///
/// 获取坐席的呼入次数
///
/// 开始时间
/// 结束时间
///
public string GetCallRecordIn(string BeginTime, string EndTime, string Tag,string state)
{
return GetHighChartData(BeginTime, EndTime, Tag, state);
}
///
/// 获取坐席的接通次数
///
/// 开始时间
/// 结束时间
///
public string GetCallRecord(string BeginTime, string EndTime, string Tag, string state)
{
return GetHighChartData(BeginTime, EndTime, Tag, state);
}
///
/// 获取呼入呼出数据
///
/// 开始时间
/// 结束时间
/// 1表示呼出,0表示呼入
///
private string GetHighChartData(string BeginTime, string EndTime, string Tag, string state)
{
string result = "[";
string sql = " 1=1 ";
var userAccountList = new BLL.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1");
if (Tag != "")
{
sql += " and CallType=" + Tag.Trim();
}
if (BeginTime != "")
{
//sql += " and BeginTime>='" + BeginTime + "'";
sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
}
if (EndTime != "")
{
//sql += " and BeginTime<='" + EndTime + "'";
sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
}
if (state.Trim() != "")
{
sql += " and CallState=" + state.Trim();
}
DataTable dt = DbHelperSQL.Query("SELECT UserId,UserCode,UserName,COUNT(*) AS calloutCount FROM T_Call_CallRecords where " + sql + " GROUP BY UserId,UserCode,UserName").Tables[0];
Dictionary myDictionary = new Dictionary();
foreach (Model.T_Sys_UserAccount item in userAccountList)
{
if (!myDictionary.ContainsKey(item.F_UserName))
myDictionary.Add(item.F_UserName, 0);
DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field("UserName") == item.F_UserName);
if (drUser != null)
{
myDictionary[item.F_UserName] += int.Parse(drUser[3].ToString());
}
}
foreach (var item in myDictionary)
{
result += item.Value + ",";
}
result = result.TrimEnd(',');
return result + "]";
}
///
/// 获取振铃时长
///
///
///
///
public string GetCallRecordRingTime(string BeginTime, string EndTime)
{
string result = "[";
string sql = "";
if (BeginTime != "")
{
//sql += " and BeginTime>='" + BeginTime + "'";
sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
}
if (EndTime != "")
{
//sql += " and BeginTime<='" + EndTime + "'";
sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
}
sql += " and CallType=1 and CallState=0";
var userAccountList = new BLL.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1");
DataTable dt = DbHelperSQL.Query(" select UserCode,COUNT(1) count,SUM(Ringtimes) as RingTimes from(SELECT UserCode, datediff(second, RingStartTime, EndTime) as Ringtimes FROM T_Call_CallRecords where 1 = 1 " + sql + ") t GROUP BY UserCode").Tables[0];
foreach (Model.T_Sys_UserAccount item in userAccountList)
{
DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field("UserCode") == item.F_UserCode);
if (drUser != null && drUser[2].ToString() != "")
result += drUser[2].ToString() + ",";
else
result += "0,";
}
result = result.TrimEnd(',');
return result + "]";
}
#endregion
}
}