UU跑腿标准版

talktimereport.aspx.cs 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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 talktimereport : System.Web.UI.Page
  12. {
  13. protected void Page_Load(object sender, EventArgs e)
  14. {
  15. }
  16. /// <summary>
  17. /// 获取坐席的呼入次数
  18. /// </summary>
  19. /// <param name="BeginTime">开始时间</param>
  20. /// <param name="EndTime">结束时间</param>
  21. /// <returns></returns>
  22. public string GetCallRecordIn(string BeginTime, string EndTime, string Tag)
  23. {
  24. return GetHighChartData(BeginTime, EndTime, Tag);
  25. }
  26. /// <summary>
  27. /// 获取呼入呼出数据
  28. /// </summary>
  29. /// <param name="BeginTime">开始时间</param>
  30. /// <param name="EndTime">结束时间</param>
  31. /// <param name="Tag">1表示呼出,0表示呼入</param>
  32. /// <returns></returns>
  33. private string GetHighChartData(string BeginTime, string EndTime, string Tag)
  34. {
  35. string result = "[";
  36. string sql = " and CallType=" + Tag; // 呼入
  37. var userAccountList = new BLL.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1");
  38. if (BeginTime != "")
  39. {
  40. sql += " and BeginTime>='" + BeginTime + "'";
  41. //sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
  42. }
  43. if (EndTime != "")
  44. {
  45. sql += " and BeginTime<='" + EndTime + "'";
  46. //sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
  47. }
  48. DataTable dt = DBUtility.DbHelperSQL.Query("SELECT UserId,UserCode,UserName,COUNT(*) AS calloutCount FROM T_Call_CallRecords where 1=1 " + sql + " GROUP BY UserId,UserCode,UserName").Tables[0];
  49. Dictionary<string, int> myDictionary = new Dictionary<string, int>();
  50. foreach (Model.T_Sys_UserAccount item in userAccountList)
  51. {
  52. if (!myDictionary.ContainsKey(item.F_UserName))
  53. myDictionary.Add(item.F_UserName, 0);
  54. DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field<string>("UserCode") == item.F_UserCode);
  55. if (drUser != null)
  56. {
  57. myDictionary[item.F_UserName] += int.Parse(drUser[3].ToString());
  58. }
  59. }
  60. foreach (var item in myDictionary)
  61. {
  62. result += item.Value + ",";
  63. }
  64. result = result.TrimEnd(',');
  65. return result + "]";
  66. }
  67. /// <summary>
  68. /// 生成表格的标题和统计字段
  69. /// </summary>
  70. /// <param name="TableTitle">表格的标题</param>
  71. /// <param name="TableHead">表格统计字段</param>
  72. /// <returns></returns>
  73. public StringBuilder CreateTableTitleAndHead(string TableTitle, string BeginTime, string EndTime, params object[] TableHead)
  74. {
  75. StringBuilder html = new StringBuilder();
  76. html.Append("<h1 style='font-size: 18px;font-weight: bold;color: #333333;text-align:center;width:100%;'><b>" + TableTitle + "</b></h1>");
  77. html.Append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" align='center'>");
  78. html.Append("<tr style=\"text-align: center;\">");
  79. for (int i = 0; i < TableHead.Length; i++)
  80. {
  81. //标题第一行
  82. 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>");
  83. }
  84. html.Append("</tr>");
  85. GetTabelData(html, BeginTime, EndTime);
  86. html.Append("</table>");
  87. return html;
  88. }
  89. /// <summary>
  90. /// 获取坐席的呼出次数
  91. /// </summary>
  92. /// <param name="BeginTime">开始时间</param>
  93. /// <param name="EndTime">结束时间</param>
  94. /// <param name="Tag">1表示呼出,0表示呼入</param>
  95. /// <returns></returns>
  96. public string GetCallRecordOut(string BeginTime, string EndTime, string Tag)
  97. {
  98. return GetHighChartData(BeginTime, EndTime, Tag);
  99. }
  100. /// <summary>
  101. /// 获取通话总时长
  102. /// </summary>
  103. /// <param name="BeginTime">开始时间</param>
  104. /// <param name="EndTime">结束时间</param>
  105. /// <returns></returns>
  106. public string GetCallRecordTotalTime(string BeginTime, string EndTime)
  107. {
  108. string result = "[";
  109. string sql = "";
  110. if (BeginTime != "")
  111. {
  112. sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
  113. }
  114. if (EndTime != "")
  115. {
  116. sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
  117. }
  118. var userAccountList = new BLL.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1");
  119. DataTable dt = DBUtility.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];
  120. foreach (Model.T_Sys_UserAccount item in userAccountList)
  121. {
  122. DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field<string>("UserCode") == item.F_UserCode);
  123. if (drUser != null && drUser[4].ToString() != "")
  124. result += drUser[4].ToString() + ",";
  125. else
  126. result += "0,";
  127. }
  128. result = result.TrimEnd(',');
  129. return result + "]";
  130. }
  131. /// <summary>
  132. /// 获取坐席名称(x轴数据)
  133. /// </summary>
  134. /// <returns></returns>
  135. public string GetAgent()
  136. {
  137. string result = "[";
  138. var userAccountList = new BLL.T_Sys_UserAccount().GetModelList(" F_SeatFlag=1");
  139. foreach (Model.T_Sys_UserAccount item in userAccountList)
  140. {
  141. result += "'" + item.F_UserName + "',";
  142. }
  143. result = result.TrimEnd(',');
  144. return result + "]";
  145. }
  146. /// <summary>
  147. /// 获取通话平均时长
  148. /// </summary>
  149. /// <param name="BeginTime">开始时间</param>
  150. /// <param name="EndTime">结束时间</param>
  151. /// <returns></returns>
  152. public string GetCallAverageTime(string BeginTime, string EndTime)
  153. {
  154. string result = "[";
  155. string[] CallInTime = GetCallRecordIn(BeginTime, EndTime, "0").TrimStart('[').TrimEnd(']').Split(',');
  156. string[] CallOutTime = GetCallRecordOut(BeginTime, EndTime, "1").TrimStart('[').TrimEnd(']').Split(',');
  157. string[] CallTotalTime = GetCallRecordTotalTime(BeginTime, EndTime).TrimStart('[').TrimEnd(']').Split(',');
  158. for (int i = 0; i < CallInTime.Length; i++)
  159. {
  160. double subt = 0.0;
  161. if (double.Parse(CallInTime[i]) != 0)
  162. {
  163. subt += double.Parse(CallInTime[i]);
  164. }
  165. if (double.Parse(CallOutTime[i]) != 0)
  166. {
  167. subt += double.Parse(CallOutTime[i]);
  168. }
  169. if (subt != 0)
  170. result += (double.Parse(CallTotalTime[i]) / subt).ToString("F2") + ",";
  171. else
  172. result += "0,";
  173. }
  174. result = result.TrimEnd(',');
  175. return result + "]";
  176. }
  177. /// <summary>
  178. /// 获取表格统计数据
  179. /// </summary>
  180. /// <param name="SB"></param>
  181. /// <param name="BeginTime"></param>
  182. /// <param name="EndTime"></param>
  183. public void GetTabelData(StringBuilder SB, string BeginTime, string EndTime)
  184. {
  185. string[] CallInTime = GetCallRecordIn(BeginTime, EndTime, "0").TrimStart('[').TrimEnd(']').Split(',');
  186. string[] CallOutTime = GetCallRecordOut(BeginTime, EndTime, "1").TrimStart('[').TrimEnd(']').Split(',');
  187. string[] CallTotalTime = GetCallRecordTotalTime(BeginTime, EndTime).TrimStart('[').TrimEnd(']').Split(',');
  188. string[] AgentArr = GetAgent().TrimStart('[').TrimEnd(']').Split(',');
  189. string[] AverageTime = GetCallAverageTime(BeginTime, EndTime).TrimStart('[').TrimEnd(']').Split(',');
  190. for (int i = 0; i < AgentArr.Length; i++)
  191. {
  192. SB.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\" >");
  193. 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>");
  194. 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;\">" + CallInTime[i] + "</td>");
  195. 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;\">" + CallOutTime[i] + "</td>");
  196. 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;\">" + CallTotalTime[i] + "S</td>");
  197. 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;\">" + AverageTime[i] + "S</td>");
  198. SB.Append("</tr>");
  199. }
  200. }
  201. }
  202. }