UU跑腿标准版

callratereport.aspx.cs 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Web;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. namespace HySoft.BaseCallCenter.Web.reportmanage
  10. {
  11. public partial class callratereport : System.Web.UI.Page
  12. {
  13. protected void Page_Load(object sender, EventArgs e)
  14. {
  15. if (!this.IsPostBack)
  16. {
  17. }
  18. }
  19. #region 日报表
  20. /// <summary>
  21. /// 生成表格的标题和统计字段
  22. /// </summary>
  23. /// <param name="TableTitle">表格的标题</param>
  24. /// <param name="TableHead">表格统计字段</param>
  25. /// <returns></returns>
  26. public StringBuilder CreateTableTitleAndHead(string TableTitle, string BeginTime, string EndTime, params object[] TableHead)
  27. {
  28. StringBuilder html = new StringBuilder();
  29. html.Append("<h1 style='font-size: 18px;font-weight: bold;color: #333333;text-align:center;width:100%;'><b>" + TableTitle + "</b></h1>");
  30. html.Append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" align='center'>");
  31. html.Append("<tr style=\"text-align: center;\">");
  32. for (int i = 0; i < TableHead.Length; i++)
  33. {
  34. //标题第一行
  35. 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>");
  36. }
  37. html.Append("</tr>");
  38. GetTabelData(html, BeginTime, EndTime);
  39. html.Append("</table>");
  40. return html;
  41. }
  42. /// <summary>
  43. /// 获取需要统计的数据
  44. /// </summary>
  45. /// <param name="BeginTime"></param>
  46. /// <param name="EndTime"></param>
  47. /// <returns></returns>
  48. public Dictionary<string, JTL> GetStatistical(string BeginTime, string EndTime)
  49. {
  50. if (ViewState["rateData"] != null)
  51. {
  52. return (Dictionary<string, JTL>)ViewState["rateData"];
  53. }
  54. DateTime beginTime;
  55. DateTime endTime;
  56. string sql = "";
  57. Dictionary<string, JTL> myDic = new Dictionary<string, JTL>();
  58. JTL model = null;
  59. double callinRate = 0, calloutRate = 0;
  60. //int days = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
  61. int days = 7;
  62. if (BeginTime != "")
  63. beginTime = DateTime.Parse(BeginTime);
  64. else
  65. beginTime = DateTime.Parse(DateTime.Now.AddDays(-days).ToShortDateString());
  66. if (EndTime != "")
  67. endTime = DateTime.Parse(EndTime + " 23:59:59");
  68. else
  69. endTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " 23:59:59");
  70. sql += " and DATEDIFF(d,BeginTime,'" + beginTime.ToString("yyyy-MM-dd HH:mm:ss") + "')<=0";
  71. sql += " and DATEDIFF(d,BeginTime,'" + endTime.ToString("yyyy-MM-dd HH:mm:ss") + "')>=0";
  72. DataTable dt = new BLL.T_Call_CallRecords().GetList("1=1 " + sql).Tables[0]; //BusinessType=0代表ivr中选择了转人工,calltype=1代表呼入
  73. for (DateTime t = beginTime; t <= endTime; t = t.AddDays(1))
  74. {
  75. string key = t.ToString("{yyyyMMdd}");
  76. int callincount = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallType=0").Length;
  77. int callinCCount = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallType=0 and CallState=1").Length;
  78. int calloutCount = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallType=1 ").Length;
  79. int calloutCCount = dt.Select("begintime >='" + t.ToString() + "' and begintime<'" + t.AddDays(1).ToString() + "' and CallType=1 and CallState=1 ").Length;
  80. if (callincount != 0)
  81. {
  82. callinRate = double.Parse((callinCCount * 100).ToString()) / callincount;
  83. }
  84. else
  85. {
  86. callinRate = 0;
  87. }
  88. if (calloutCount != 0)
  89. {
  90. calloutRate = double.Parse((calloutCCount * 100).ToString()) / calloutCount;
  91. }
  92. else
  93. {
  94. calloutRate = 0;
  95. }
  96. if (!myDic.ContainsKey(key))
  97. {
  98. model = new JTL();
  99. model.CallinCount = callincount;
  100. model.CallinCCount = callinCCount;
  101. model.CallinRate = callinRate;
  102. model.CalloutCount = calloutCount;
  103. model.CalloutCCount = calloutCCount;
  104. model.CalloutRate = calloutRate;
  105. myDic.Add(key, model);
  106. }
  107. }
  108. ViewState["rateData"] = myDic;
  109. return myDic;
  110. }
  111. /// <summary>
  112. /// 获取表格统计数据
  113. /// </summary>
  114. /// <param name="SB"></param>
  115. /// <param name="BeginTime"></param>
  116. /// <param name="EndTime"></param>
  117. public void GetTabelData(StringBuilder SB, string BeginTime, string EndTime)
  118. {
  119. int CallinCount = 0, CallinCCount = 0, CalloutCount = 0, CalloutCCount = 0;
  120. double CallinRate = 0, CalloutRate = 0;
  121. foreach (var item in GetStatistical(BeginTime, EndTime))
  122. {
  123. SB.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  124. 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;\">" + item.Key.TrimStart('{').TrimEnd('}') + "</td>");
  125. 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;\">" + (item.Value).CallinCount + "</td>");
  126. 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;\">" + (item.Value).CallinCCount + "</td>");
  127. 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;\">" + (item.Value).CallinRate.ToString("F2") + "%</td>");
  128. 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;\">" + (item.Value).CalloutCount + "</td>");
  129. 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;\">" + (item.Value).CalloutCCount + "</td>");
  130. 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;\">" + (item.Value).CalloutRate.ToString("F2") + "%</td>");
  131. SB.Append("</tr>");
  132. CallinCount += item.Value.CallinCount;
  133. CallinCCount += item.Value.CallinCCount;
  134. CalloutCount += item.Value.CalloutCount;
  135. CalloutCCount += item.Value.CalloutCCount;
  136. }
  137. if (CallinCount != 0)
  138. {
  139. CallinRate = double.Parse((CallinCCount * 100).ToString()) / CallinCount;
  140. }
  141. else
  142. {
  143. CallinRate = 0;
  144. }
  145. if (CalloutCCount != 0)
  146. {
  147. CalloutRate = double.Parse((CalloutCount * 100).ToString()) / CalloutCCount;
  148. }
  149. else
  150. {
  151. CalloutRate = 0;
  152. }
  153. SB.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  154. 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;\">总计</td>");
  155. 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;\">" + CallinCount + "</td>");
  156. 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;\">" + CallinCCount + "</td>");
  157. 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;\">" + CallinRate.ToString("F2") + "%</td>");
  158. 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;\">" + CalloutCount + "</td>");
  159. 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;\">" + CalloutCCount + "</td>");
  160. 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;\">" + CalloutRate.ToString("F2") + "%</td>");
  161. SB.Append("</tr>");
  162. }
  163. #endregion
  164. #region 时段报表
  165. /// <summary>
  166. /// 生成表格的标题和统计字段
  167. /// </summary>
  168. /// <param name="TableTitle">表格的标题</param>
  169. /// <param name="TableHead">表格统计字段</param>
  170. /// <returns></returns>
  171. public StringBuilder CreateTableTitleAndHead1(string TableTitle, string daytime, string type, params object[] TableHead)
  172. {
  173. StringBuilder html = new StringBuilder();
  174. html.Append("<h1 style='font-size: 18px;font-weight: bold;color: #333333;text-align:center;width:100%;'><b>" + TableTitle + "</b></h1>");
  175. html.Append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" align='center'>");
  176. html.Append("<tr style=\"text-align: center;\">");
  177. for (int i = 0; i < TableHead.Length; i++)
  178. {
  179. //标题第一行
  180. 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>");
  181. }
  182. html.Append("</tr>");
  183. GetTabelData1(html, daytime, type);
  184. html.Append("</table>");
  185. return html;
  186. }
  187. /// <summary>
  188. /// 获取需要统计的数据
  189. /// </summary>
  190. /// <param name="BeginTime"></param>
  191. /// <param name="EndTime"></param>
  192. /// <returns></returns>
  193. public Dictionary<string, JTL> GetStatistical1(string daytime, string type)
  194. {
  195. if (ViewState["rateData1"] != null)
  196. {
  197. return (Dictionary<string, JTL>)ViewState["rateData1"];
  198. }
  199. DateTime beginTime;
  200. DateTime endTime;
  201. string sql = "";
  202. Dictionary<string, JTL> myDic = new Dictionary<string, JTL>();
  203. JTL model = null;
  204. double callinRate = 0, calloutRate = 0;
  205. //int days = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
  206. int min = 60; int ii = 12;
  207. if (type == "1")
  208. {
  209. min = 30;
  210. ii = 24;
  211. }
  212. if (daytime != "")
  213. beginTime = DateTime.Parse(daytime + " 00:00:01");
  214. else
  215. beginTime = DateTime.Parse(DateTime.Now.ToShortDateString() + " 00:00:01");
  216. sql += " and DATEDIFF(d,BeginTime,'" + beginTime.ToString("yyyy-MM-dd") + "')=0";
  217. DataTable dt = new BLL.T_Call_CallRecords().GetList("1=1 " + sql).Tables[0];
  218. for (DateTime t = DateTime.Parse(daytime + " 00:00:01"); t <= DateTime.Parse(daytime + " 23:59:59"); t = t.AddMinutes(min))
  219. {
  220. string key = t.AddSeconds(-1).ToString("HH:mm:ss") + "-" + t.AddMinutes(min).AddSeconds(-2).ToString("HH:mm:ss");
  221. int callincount = dt.Select("begintime >='" + t.AddSeconds(-1).ToString("yyyy-MM-dd HH:mm:ss") + "' and begintime<'" + t.AddMinutes(min).AddSeconds(-2).ToString("yyyy-MM-dd HH:mm:ss") + "' and CallType=0").Length;
  222. int callinCCount = dt.Select("begintime >='" + t.AddSeconds(-1).ToString("yyyy-MM-dd HH:mm:ss") + "' and begintime<'" + t.AddMinutes(min).AddSeconds(-2).ToString("yyyy-MM-dd HH:mm:ss") + "' and CallType=0 and CallState=1").Length;
  223. int calloutCount = dt.Select("begintime >='" + t.AddSeconds(-1).ToString("yyyy-MM-dd HH:mm:ss") + "' and begintime<'" + t.AddMinutes(min).AddSeconds(-2).ToString("yyyy-MM-dd HH:mm:ss") + "' and CallType=1 ").Length;
  224. int calloutCCount = dt.Select("begintime >='" + t.AddSeconds(-1).ToString("yyyy-MM-dd HH:mm:ss") + "' and begintime<'" + t.AddMinutes(min).AddSeconds(-2).ToString("yyyy-MM-dd HH:mm:ss") + "' and CallType=1 and CallState=1 ").Length;
  225. if (callincount != 0)
  226. {
  227. callinRate = double.Parse((callinCCount * 100).ToString()) / callincount;
  228. }
  229. else
  230. {
  231. callinRate = 0;
  232. }
  233. if (calloutCount != 0)
  234. {
  235. calloutRate = double.Parse((calloutCCount * 100).ToString()) / calloutCount;
  236. }
  237. else
  238. {
  239. calloutRate = 0;
  240. }
  241. if (!myDic.ContainsKey(key))
  242. {
  243. model = new JTL();
  244. model.CallinCount = callincount;
  245. model.CallinCCount = callinCCount;
  246. model.CallinRate = callinRate;
  247. model.CalloutCount = calloutCount;
  248. model.CalloutCCount = calloutCCount;
  249. model.CalloutRate = calloutRate;
  250. myDic.Add(key, model);
  251. }
  252. }
  253. ViewState["rateData1"] = myDic;
  254. return myDic;
  255. }
  256. /// <summary>
  257. /// 获取表格统计数据
  258. /// </summary>
  259. /// <param name="SB"></param>
  260. /// <param name="BeginTime"></param>
  261. /// <param name="EndTime"></param>
  262. public void GetTabelData1(StringBuilder SB, string daytime,string type)
  263. {
  264. int CallinCount = 0, CallinCCount = 0, CalloutCount = 0, CalloutCCount = 0;
  265. double CallinRate = 0, CalloutRate = 0;
  266. foreach (var item in GetStatistical1(daytime,type))
  267. {
  268. SB.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  269. 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;\">" + item.Key.TrimStart('{').TrimEnd('}') + "</td>");
  270. 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;\">" + (item.Value).CallinCount + "</td>");
  271. 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;\">" + (item.Value).CallinCCount + "</td>");
  272. 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;\">" + (item.Value).CallinRate.ToString("F2") + "%</td>");
  273. 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;\">" + (item.Value).CalloutCount + "</td>");
  274. 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;\">" + (item.Value).CalloutCCount + "</td>");
  275. 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;\">" + (item.Value).CalloutRate.ToString("F2") + "%</td>");
  276. SB.Append("</tr>");
  277. CallinCount += item.Value.CallinCount;
  278. CallinCCount += item.Value.CallinCCount;
  279. CalloutCount += item.Value.CalloutCount;
  280. CalloutCCount += item.Value.CalloutCCount;
  281. }
  282. if (CallinCount != 0)
  283. {
  284. CallinRate = double.Parse((CallinCCount * 100).ToString()) / CallinCount;
  285. }
  286. else
  287. {
  288. CallinRate = 0;
  289. }
  290. if (CalloutCCount != 0)
  291. {
  292. CalloutRate = double.Parse((CalloutCount * 100).ToString()) / CalloutCCount;
  293. }
  294. else
  295. {
  296. CalloutRate = 0;
  297. }
  298. SB.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  299. 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;\">总计</td>");
  300. 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;\">" + CallinCount + "</td>");
  301. 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;\">" + CallinCCount + "</td>");
  302. 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;\">" + CallinRate.ToString("F2") + "%</td>");
  303. 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;\">" + CalloutCount + "</td>");
  304. 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;\">" + CalloutCCount + "</td>");
  305. 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;\">" + CalloutRate.ToString("F2") + "%</td>");
  306. SB.Append("</tr>");
  307. }
  308. #endregion
  309. }
  310. /// <summary>
  311. /// 接通率统计辅助类
  312. /// </summary>
  313. [Serializable]
  314. public class JTL
  315. {
  316. public int CallinCount
  317. {
  318. get;
  319. set;
  320. }
  321. public int CallinCCount
  322. {
  323. get;
  324. set;
  325. }
  326. public double CallinRate
  327. {
  328. get;
  329. set;
  330. }
  331. public int CalloutCount
  332. {
  333. get;
  334. set;
  335. }
  336. public int CalloutCCount
  337. {
  338. get;
  339. set;
  340. }
  341. public double CalloutRate
  342. {
  343. get;
  344. set;
  345. }
  346. }
  347. }