暫無描述

THSC_Report.aspx.cs 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Data;
  5. using System.Linq;
  6. using System.Web;
  7. using System.Web.Security;
  8. using System.Web.UI;
  9. using System.Web.UI.HtmlControls;
  10. using System.Web.UI.WebControls;
  11. using System.Web.UI.WebControls.WebParts;
  12. using System.Xml.Linq;
  13. using System.Text;
  14. public partial class Report_THSC_Report : System.Web.UI.Page
  15. {
  16. protected void Page_Load(object sender, EventArgs e)
  17. {
  18. if (!this.IsPostBack)
  19. {
  20. }
  21. }
  22. /// <summary>
  23. /// 获取坐席名称(x轴数据)
  24. /// </summary>
  25. /// <returns></returns>
  26. public string GetAgent()
  27. {
  28. string result = "[";
  29. var userAccountList = new XYFDRQ.BLL.T_Sys_UserAccount().GetModelList("F_StateFlag=1 and F_SeatFlag=1");
  30. foreach (XYFDRQ.Model.T_Sys_UserAccount item in userAccountList)
  31. {
  32. result += "'" + item.F_UserName + "',";
  33. }
  34. result = result.TrimEnd(',');
  35. return result + "]";
  36. }
  37. /// <summary>
  38. /// 获取坐席的呼出次数
  39. /// </summary>
  40. /// <param name="BeginTime">开始时间</param>
  41. /// <param name="EndTime">结束时间</param>
  42. /// <param name="Tag">1表示呼出,0表示呼入</param>
  43. /// <returns></returns>
  44. public string GetCallRecordOut(string BeginTime, string EndTime, string Tag)
  45. {
  46. return GetHighChartData(BeginTime, EndTime, Tag);
  47. }
  48. /// <summary>
  49. /// 获取坐席的呼入次数
  50. /// </summary>
  51. /// <param name="BeginTime">开始时间</param>
  52. /// <param name="EndTime">结束时间</param>
  53. /// <returns></returns>
  54. public string GetCallRecordIn(string BeginTime, string EndTime, string Tag)
  55. {
  56. return GetHighChartData(BeginTime, EndTime, Tag);
  57. }
  58. /// <summary>
  59. /// 获取呼入呼出数据
  60. /// </summary>
  61. /// <param name="BeginTime">开始时间</param>
  62. /// <param name="EndTime">结束时间</param>
  63. /// <param name="Tag">1表示呼出,0表示呼入</param>
  64. /// <returns></returns>
  65. private string GetHighChartData(string BeginTime, string EndTime, string Tag)
  66. {
  67. string result = "[";
  68. string sql = " and CallType=" + Tag; // 呼入
  69. var userAccountList = new XYFDRQ.BLL.T_Sys_UserAccount().GetModelList("F_StateFlag=1 and F_SeatFlag=1");
  70. if (BeginTime != "")
  71. {
  72. sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
  73. }
  74. if (EndTime != "")
  75. {
  76. sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
  77. }
  78. DataTable dt = XYFDRQ.DBUtility.DbHelperSQL.Query("SELECT UserId,UserCode,UserName,COUNT(*) AS calloutCount FROM vw_callRecords where 1=1 " + sql + " GROUP BY UserId,UserCode,UserName").Tables[0];
  79. Dictionary<string, int> myDictionary = new Dictionary<string, int>();
  80. foreach (XYFDRQ.Model.T_Sys_UserAccount item in userAccountList)
  81. {
  82. if (!myDictionary.ContainsKey(item.F_UserName))
  83. myDictionary.Add(item.F_UserName, 0);
  84. DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field<string>("UserName") == item.F_UserName);
  85. if (drUser != null)
  86. {
  87. myDictionary[item.F_UserName] += int.Parse(drUser[3].ToString());
  88. }
  89. }
  90. foreach (var item in myDictionary)
  91. {
  92. result += item.Value + ",";
  93. }
  94. result = result.TrimEnd(',');
  95. return result + "]";
  96. }
  97. /// <summary>
  98. /// 获取通话总时长
  99. /// </summary>
  100. /// <param name="BeginTime">开始时间</param>
  101. /// <param name="EndTime">结束时间</param>
  102. /// <returns></returns>
  103. public string GetCallRecordTotalTime(string BeginTime, string EndTime)
  104. {
  105. string result = "[";
  106. string sql = "";
  107. if (BeginTime != "")
  108. {
  109. sql += " and DATEDIFF(d,BeginTime,'" + BeginTime + "')<=0";
  110. }
  111. if (EndTime != "")
  112. {
  113. sql += " and DATEDIFF(d,BeginTime,'" + EndTime + "')>=0";
  114. }
  115. var userAccountList = new XYFDRQ.BLL.T_Sys_UserAccount().GetModelList("F_StateFlag=1 and F_SeatFlag=1");
  116. DataTable dt = XYFDRQ.DBUtility.DbHelperSQL.Query("SELECT UserId,UserCode,UserName,COUNT(*) AS calloutCount,SUM(TalkLongTime) AS TalkSummaryTime FROM vw_callRecords where 1=1 " + sql + " GROUP BY UserId,UserCode,UserName").Tables[0];
  117. foreach (XYFDRQ.Model.T_Sys_UserAccount item in userAccountList)
  118. {
  119. DataRow drUser = dt.AsEnumerable().FirstOrDefault(dr => dr.Field<string>("UserName") == item.F_UserName);
  120. if (drUser != null && drUser[4].ToString()!="")
  121. result += drUser[4].ToString() + ",";
  122. else
  123. result += "0,";
  124. }
  125. result = result.TrimEnd(',');
  126. return result + "]";
  127. }
  128. /// <summary>
  129. /// 获取通话平均时长
  130. /// </summary>
  131. /// <param name="BeginTime">开始时间</param>
  132. /// <param name="EndTime">结束时间</param>
  133. /// <returns></returns>
  134. public string GetCallAverageTime(string BeginTime, string EndTime)
  135. {
  136. string result = "[";
  137. string[] CallInTime = GetCallRecordIn(BeginTime, EndTime, "0").TrimStart('[').TrimEnd(']').Split(',');
  138. string[] CallOutTime = GetCallRecordOut(BeginTime, EndTime, "1").TrimStart('[').TrimEnd(']').Split(',');
  139. string[] CallTotalTime = GetCallRecordTotalTime(BeginTime, EndTime).TrimStart('[').TrimEnd(']').Split(',');
  140. for (int i = 0; i < CallInTime.Length; i++)
  141. {
  142. double subt = 0.0;
  143. if (double.Parse(CallInTime[i]) != 0)
  144. {
  145. subt += double.Parse(CallInTime[i]);
  146. }
  147. if (double.Parse(CallOutTime[i]) != 0)
  148. {
  149. subt += double.Parse(CallOutTime[i]);
  150. }
  151. if (subt != 0)
  152. result += (double.Parse(CallTotalTime[i]) / subt).ToString("F2") + ",";
  153. else
  154. result += "0,";
  155. }
  156. result = result.TrimEnd(',');
  157. return result + "]";
  158. }
  159. /// <summary>
  160. /// 生成表格的标题和统计字段
  161. /// </summary>
  162. /// <param name="TableTitle">表格的标题</param>
  163. /// <param name="TableHead">表格统计字段</param>
  164. /// <returns></returns>
  165. public StringBuilder CreateTableTitleAndHead(string TableTitle, string BeginTime, string EndTime, params object[] TableHead)
  166. {
  167. StringBuilder html = new StringBuilder();
  168. html.Append("<h1 style='font-size: 18px;font-weight: bold;color: #333333;text-align:center;width:100%;'><b>" + TableTitle + "</b></h1>");
  169. html.Append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" align='center'>");
  170. html.Append("<tr style=\"text-align: center;\">");
  171. for (int i = 0; i < TableHead.Length; i++)
  172. {
  173. //标题第一行
  174. 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>");
  175. }
  176. html.Append("</tr>");
  177. GetTabelData(html, BeginTime, EndTime);
  178. html.Append("</table>");
  179. return html;
  180. }
  181. /// <summary>
  182. /// 获取表格统计数据
  183. /// </summary>
  184. /// <param name="SB"></param>
  185. /// <param name="BeginTime"></param>
  186. /// <param name="EndTime"></param>
  187. public void GetTabelData(StringBuilder SB, string BeginTime, string EndTime)
  188. {
  189. string[] CallInTime = GetCallRecordIn(BeginTime, EndTime, "0").TrimStart('[').TrimEnd(']').Split(',');
  190. string[] CallOutTime = GetCallRecordOut(BeginTime, EndTime, "1").TrimStart('[').TrimEnd(']').Split(',');
  191. string[] CallTotalTime = GetCallRecordTotalTime(BeginTime, EndTime).TrimStart('[').TrimEnd(']').Split(',');
  192. string[] AgentArr = GetAgent().TrimStart('[').TrimEnd(']').Split(',');
  193. string[] AverageTime=GetCallAverageTime(BeginTime, EndTime).TrimStart('[').TrimEnd(']').Split(',');
  194. for (int i = 0; i < AgentArr.Length; i++)
  195. {
  196. SB.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\" >");
  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;\">" + AgentArr[i].Replace('\'',' ') + "</td>");
  198. 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>");
  199. 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>");
  200. 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>");
  201. 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>");
  202. SB.Append("</tr>");
  203. }
  204. }
  205. /// <summary>
  206. /// wbx 4-30 导出Excel
  207. /// </summary>
  208. /// <param name="sender"></param>
  209. /// <param name="e"></param>
  210. protected void btnExtWord_Click(object sender, EventArgs e)
  211. {
  212. string s = CreateTableTitleAndHead("洛阳12329客户服务热线坐席通话时长统计", txtBeginTime.Text.Trim(),txtEndTime.Text.Trim(),"坐席名称", "呼入次数", "呼出次数","通话总时长","平均通话时长").ToString();
  213. byte[] content = System.Text.Encoding.Default.GetBytes(s);
  214. HttpResponse clsreponse = System.Web.HttpContext.Current.Response;
  215. clsreponse.ClearHeaders();
  216. clsreponse.ClearContent();
  217. clsreponse.AddHeader("Content-Disposition", "attachment;filename=THSC" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
  218. clsreponse.ContentType = "application/ms-excel";
  219. clsreponse.OutputStream.Write(content, 0, content.Length);
  220. clsreponse.End();
  221. }
  222. }