市长热线演示版

longwaitreport.aspx.cs 9.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Text;
  8. using System.Data;
  9. namespace HySoft.BaseCallCenter.Web.reportmanage
  10. {
  11. public partial class longwaitreport : System.Web.UI.Page
  12. {
  13. protected void Page_Load(object sender, EventArgs e)
  14. {
  15. if (!this.IsPostBack)
  16. {
  17. }
  18. }
  19. /// <summary>
  20. /// 获取坐席名称(x轴数据)
  21. /// </summary>
  22. /// <returns></returns>
  23. public string GetAgent()
  24. {
  25. string result = "[";
  26. var userAccountList = new BLL.T_Sys_UserAccount().GetModelList("F_SeatFlag=1");
  27. foreach (Model.T_Sys_UserAccount item in userAccountList)
  28. {
  29. result += "'" + item.F_UserName + "',";
  30. }
  31. result = result.TrimEnd(',');
  32. return result + "]";
  33. }
  34. /// <summary>
  35. /// 获取接通次数
  36. /// </summary>
  37. /// <param name="BeginTime">开始时间</param>
  38. /// <param name="EndTime">结束时间</param>
  39. /// <param name="Tag">1表示呼出,0表示呼入</param>
  40. /// <returns></returns>
  41. public string GetHighChartData(string BeginTime, string EndTime, string Tag)
  42. {
  43. string result = "[";
  44. string sql = " and CallType=" + Tag; // 呼入
  45. var userAccountList = new BLL.T_Sys_UserAccount().GetModelList("F_SeatFlag=1");
  46. if (BeginTime != "")
  47. {
  48. sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
  49. }
  50. if (EndTime != "")
  51. {
  52. sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
  53. }
  54. DataTable dt = DBUtility.DbHelperSQL.Query("SELECT UserId,UserCode,UserName,COUNT(*) AS calloutCount FROM T_Call_CallRecords where 1=1 and CallState=1 " + sql + " GROUP BY UserId,UserCode,UserName").Tables[0];
  55. Dictionary<string, int> myDictionary = new Dictionary<string, int>();
  56. foreach (Model.T_Sys_UserAccount item in userAccountList)
  57. {
  58. if (!myDictionary.ContainsKey(item.F_UserName))
  59. myDictionary.Add(item.F_UserName, 0);
  60. DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field<string>("UserName") == item.F_UserName);
  61. if (drUser != null)
  62. {
  63. myDictionary[item.F_UserName] += int.Parse(drUser[3].ToString());
  64. }
  65. }
  66. foreach (var item in myDictionary)
  67. {
  68. result += item.Value + ",";
  69. }
  70. result = result.TrimEnd(',');
  71. return result + "]";
  72. }
  73. /// <summary>
  74. /// 获取等待总时长
  75. /// </summary>
  76. /// <param name="BeginTime">开始时间</param>
  77. /// <param name="EndTime">结束时间</param>
  78. /// <returns></returns>
  79. public string GetCallRecordSummaryWaitTime(string BeginTime, string EndTime)
  80. {
  81. string result = "[";
  82. string sql = "";
  83. if (BeginTime != "")
  84. {
  85. sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
  86. }
  87. if (EndTime != "")
  88. {
  89. sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
  90. }
  91. var userAccountList = new BLL.T_Sys_UserAccount().GetModelList("F_SeatFlag=1");
  92. DataTable dt = DBUtility.DbHelperSQL.Query("SELECT UserId,UserCode,UserName,COUNT(*) AS calloutCount,SUM(IvrLongTime)+SUM(RingLongTime) AS WaitingSummaryTime FROM T_Call_CallRecords where 1=1 and CallState=1 AND CallType=0 " + sql + " GROUP BY UserId,UserCode,UserName").Tables[0];
  93. foreach (Model.T_Sys_UserAccount item in userAccountList)
  94. {
  95. DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field<string>("UserName") == item.F_UserName);
  96. if (drUser != null && drUser[4].ToString() != "")
  97. result += drUser[4].ToString() + ",";
  98. else
  99. result += "0,";
  100. }
  101. result = result.TrimEnd(',');
  102. return result + "]";
  103. }
  104. /// <summary>
  105. /// 获取平均等待时长
  106. /// </summary>
  107. /// <param name="BeginTime">开始时间</param>
  108. /// <param name="EndTime">结束时间</param>
  109. /// <returns></returns>
  110. public string GetCallRecordWaitingAverage(string BeginTime, string EndTime)
  111. {
  112. string result = "[";
  113. string sql = "";
  114. if (BeginTime != "")
  115. {
  116. sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
  117. }
  118. if (EndTime != "")
  119. {
  120. sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
  121. }
  122. var userAccountList = new BLL.T_Sys_UserAccount().GetModelList("F_SeatFlag=1");
  123. DataTable dt = DBUtility.DbHelperSQL.Query("SELECT UserId,UserCode,UserName,COUNT(*) AS calloutCount,SUM(IvrLongTime)+SUM(RingLongTime) AS WaitingSummaryTime FROM T_Call_CallRecords where 1=1 and CallState=1 AND CallType=0 " + sql + " GROUP BY UserId,UserCode,UserName").Tables[0];
  124. foreach (Model.T_Sys_UserAccount item in userAccountList)
  125. {
  126. DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field<string>("UserName") == item.F_UserName);
  127. if (drUser != null && drUser[4].ToString() != "")
  128. result += (double.Parse(drUser[4].ToString()) / double.Parse(drUser[3].ToString())).ToString("F2") + ",";
  129. else
  130. result += "0,";
  131. }
  132. result = result.TrimEnd(',');
  133. return result + "]";
  134. }
  135. /// <summary>
  136. /// 生成表格的标题和统计字段
  137. /// </summary>
  138. /// <param name="TableTitle">表格的标题</param>
  139. /// <param name="TableHead">表格统计字段</param>
  140. /// <returns></returns>
  141. public StringBuilder CreateTableTitleAndHead(string TableTitle, string BeginTime, string EndTime, params object[] TableHead)
  142. {
  143. StringBuilder html = new StringBuilder();
  144. html.Append("<h1 style='font-size: 18px;font-weight: bold;color: #333333;text-align:center;width:100%;'><b>" + TableTitle + "</b></h1>");
  145. html.Append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" align='center'>");
  146. html.Append("<tr style=\"text-align: center;\">");
  147. for (int i = 0; i < TableHead.Length; i++)
  148. {
  149. //标题第一行
  150. html.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #D5EDFE;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + TableHead[i] + "</td>");
  151. }
  152. html.Append("</tr>");
  153. GetTabelData(html, BeginTime, EndTime);
  154. html.Append("</table>");
  155. return html;
  156. }
  157. /// <summary>
  158. /// 获取表格统计数据
  159. /// </summary>
  160. /// <param name="SB"></param>
  161. /// <param name="BeginTime"></param>
  162. /// <param name="EndTime"></param>
  163. public void GetTabelData(StringBuilder SB, string BeginTime, string EndTime)
  164. {
  165. string[] AgentArr = GetAgent().TrimStart('[').TrimEnd(']').Split(',');
  166. string[] DataCallConnectTruns = GetHighChartData(txtBeginTime.Text.Trim(), txtEndTime.Text.Trim(), "0").TrimStart('[').TrimEnd(']').Split(',');
  167. string[] DataSummaryWaitTime = GetCallRecordSummaryWaitTime(txtBeginTime.Text.Trim(), txtEndTime.Text.Trim()).TrimStart('[').TrimEnd(']').Split(',');
  168. string[] DataAverageWaitTime = GetCallRecordWaitingAverage(txtBeginTime.Text.Trim(), txtEndTime.Text.Trim()).TrimStart('[').TrimEnd(']').Split(',');
  169. for (int i = 0; i < AgentArr.Length; i++)
  170. {
  171. SB.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  172. SB.Append("<td class=\"formtabletitle1\" style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + AgentArr[i].Replace('\'', ' ') + "</td>");
  173. SB.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + DataCallConnectTruns[i] + "</td>");
  174. SB.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + DataSummaryWaitTime[i] + "S</td>");
  175. SB.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: #fff;border-left: 1px solid #CCCCCC;border-right: 1px solid #CCCCCC;border-top: 1px solid #CCCCCC;border-bottom: 1px solid #CCCCCC;padding: 3px 3px 3px 3px;text-align:center;\">" + DataAverageWaitTime[i] + "S</td>");
  176. SB.Append("</tr>");
  177. }
  178. }
  179. }
  180. }