市长热线演示版

CallInPerson.aspx.cs 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  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.dataanalysis
  10. {
  11. public partial class CallInPerson : System.Web.UI.Page
  12. {
  13. protected string TableHtml = null;
  14. protected void Page_Load(object sender, EventArgs e)
  15. {
  16. #region Demo
  17. //PrintTable();
  18. //string[] head = { "日期", "工单量", "一线技术员工单量", "一线技术员工占比", "代理技术员工单量", "代理技术员占比", "客户工单量", "客户占比"};
  19. //string[,] body = new string[30, 8];
  20. //for (int i = 0; i < 30; i++)
  21. //{
  22. // for (int j = 0; j < 8; j++)
  23. // {
  24. // if (j == 0)
  25. // {
  26. // body[i, j] = "2015/4/" + (i + 1).ToString();
  27. // }
  28. // else body[i, j] = "";
  29. // }
  30. //}
  31. //string[] sumiteam = { "合计:", "工单总量", "一线技术员工单总量", "一线技术员工占比", "代理技术员工单总量", "代理技术员占比", "客户工单总量", "客户占比" };
  32. //StringBuilder sb = new StringBuilder();
  33. //sb.Append(createTableTitle("来电人员工单分布"));
  34. //sb.Append(createTable1(head, body, sumiteam));
  35. //TableHtml = sb.ToString();
  36. #endregion
  37. OutputTable();
  38. }
  39. private void OutputTable()
  40. {
  41. //查询条件
  42. string starttime = txtStartTime.Text.Trim();
  43. if (string.IsNullOrWhiteSpace(starttime))
  44. { starttime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString("yyyy-MM-dd"); txtStartTime.Text = starttime; }
  45. string endtime = txtEndTime.Text.Trim();
  46. if (string.IsNullOrWhiteSpace(endtime)) { endtime = DateTime.Today.ToString("yyyy-MM-dd"); txtEndTime.Text = endtime; }
  47. string[] head = { "日期", "工单量", "一线技术员工单量", "一线技术员工占比", "代理技术员工单量", "代理技术员占比", "客户工单量", "客户占比" };
  48. TableHtml = createTable("来电人员性质工单分布", head, starttime, endtime);
  49. }
  50. private string createTable(string title, string[] head, string starttime, string endtime)
  51. {
  52. StringBuilder sb = new StringBuilder();
  53. sb.Append(createTableTitle(title));
  54. sb.Append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" align='center'>");
  55. sb.Append(createTableHead(head));
  56. sb.Append(createTableBody(starttime, endtime));
  57. sb.Append("</table>");
  58. return sb.ToString();
  59. }
  60. /// <summary>
  61. /// 表名称
  62. /// </summary>
  63. /// <param name="title">表名</param>
  64. /// <returns></returns>
  65. protected string createTableTitle(string title)
  66. {
  67. StringBuilder sb = new StringBuilder();
  68. sb.Append("<h1 style='font-size: 18px; font-weight: bold; color: #333333; text-align: center;width: 100%;'><b>" + title + "</b></h1>");
  69. return sb.ToString();
  70. }
  71. private string createTableHead(string[] head)
  72. {
  73. StringBuilder sb = new StringBuilder();
  74. sb.Append("<tr style=\"text-align: center;\">");
  75. for (int i = 0; i < head.Length; i++)
  76. {
  77. sb.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;\">" + head[i] + "</td>");
  78. }
  79. sb.Append("</tr>");
  80. return sb.ToString();
  81. }
  82. private string createTableBody(string starttime, string endtime)
  83. {
  84. //收集数据
  85. List<List<string>> body = new List<List<string>>();
  86. for (DateTime dt = Convert.ToDateTime(starttime); dt <= Convert.ToDateTime(endtime); dt = dt.AddDays(1))
  87. {
  88. List<string> bodyiteam = new List<string>();
  89. bodyiteam.Add(dt.ToShortDateString());
  90. string sql = string.Format(" F_WORKORDERTYPEID={0}", 16);
  91. sql += " AND F_STARTTIME>='" + dt.ToShortDateString() + " 00:00:00'";
  92. sql += " AND F_STARTTIME<='" + dt.ToShortDateString() + " 23:59:59'";
  93. // sql += " AND F_ENDTIME IS NOT NULL AND F_ENDTIME !=''";
  94. DataTable dtable = new BLL.T_Wo_WorkOrderBase().GetList(sql).Tables[0];
  95. //今天的总工单量
  96. int todaycount = dtable.Rows.Count;
  97. bodyiteam.Add(todaycount.ToString());
  98. List<Model.T_Sys_DictionaryValue> modellist = new BLL.T_Sys_DictionaryValue().GetModelList("F_DictionaryFlag='bxrxz'");//所有报修人性质
  99. foreach (var model in modellist)
  100. {
  101. //这种性质的报修人的工单量
  102. int thistypecount = 0;
  103. //这种性质的报修人的工单百分比
  104. string percent = null;
  105. if (model.F_Name == "一线技术员")
  106. thistypecount = dtable.Select("F_STANDARDADDRESS='" + model.F_Name + "' OR F_STANDARDADDRESS IS NULL OR F_STANDARDADDRESS=''").Length;
  107. else thistypecount = dtable.Select("F_STANDARDADDRESS='" + model.F_Name + "'").Length;
  108. if (todaycount == 0) percent = "0.00%";
  109. else percent = (thistypecount * 1.0 / todaycount * 100).ToString("0.00") + "%";
  110. bodyiteam.Add(thistypecount.ToString());
  111. bodyiteam.Add(percent);
  112. }
  113. dtable.Dispose();
  114. body.Add(bodyiteam);
  115. }
  116. //打印表格
  117. StringBuilder sb = new StringBuilder();
  118. for (int i = 0; i < body.Count;i++ )
  119. {
  120. if (body[i][1] != "0")
  121. {
  122. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  123. foreach (var listiteam in body[i])
  124. {
  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;\">" + listiteam + "</td>");
  126. }
  127. sb.Append("</tr>");
  128. }
  129. }
  130. //合计数据
  131. List<string> sum = new List<string>();
  132. sum = getSumCountAndPercent(starttime, endtime, 16);
  133. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  134. for (int j = 0; j < sum.Count; j++)
  135. {
  136. sb.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;\">" + sum[j] + "</td>");
  137. }
  138. sb.Append("</tr>");
  139. return sb.ToString();
  140. }
  141. private List<string> getSumCountAndPercent(string starttime, string endtime, int type)
  142. {
  143. List<string> sum = new List<string>();
  144. sum.Add("合计:");
  145. string sql = string.Format(" F_WORKORDERTYPEID={0}", type);
  146. if (starttime != "")
  147. {
  148. sql += " AND F_STARTTIME>='" + starttime + " 00:00:00'";
  149. }
  150. if (endtime != "")
  151. {
  152. sql += " AND F_STARTTIME<='" + endtime + " 23:59:59'";
  153. }
  154. DataTable dt = new BLL.T_Wo_WorkOrderBase().GetList(sql).Tables[0];
  155. //工单总数
  156. int allcount = dt.Rows.Count;
  157. sum.Add(allcount.ToString());
  158. List<Model.T_Sys_DictionaryValue> modellist = new BLL.T_Sys_DictionaryValue().GetModelList("F_DictionaryFlag='bxrxz'");//所有报修人性质
  159. foreach (var model in modellist)
  160. {
  161. int count = 0;
  162. if (model.F_Name == "一线技术员")
  163. count = dt.Select("F_STANDARDADDRESS is null or F_STANDARDADDRESS='' or F_STANDARDADDRESS='" + model.F_Name + "'").Length;
  164. else count = dt.Select("F_STANDARDADDRESS='" + model.F_Name + "'").Length;
  165. string average = "0.00%";
  166. if (allcount != 0) average = (count * 1.0 / allcount * 100).ToString("0.00") + "%";
  167. sum.Add(count.ToString());
  168. sum.Add(average);
  169. }
  170. dt.Dispose();
  171. return sum;
  172. }
  173. protected void btnConfirm_Click(object sender, EventArgs e)
  174. {
  175. //PrintTable();
  176. OutputTable();
  177. }
  178. private void PrintTable()
  179. {
  180. //查询条件
  181. string starttime = txtStartTime.Text.Trim();
  182. if (string.IsNullOrWhiteSpace(starttime))
  183. starttime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToShortDateString();
  184. string endtime = txtEndTime.Text.Trim();
  185. if (string.IsNullOrWhiteSpace(endtime)) endtime = DateTime.Today.AddDays(-1).ToShortDateString();
  186. //工单总数
  187. int workordercount = getWorkOrderCount(starttime, endtime, 16);
  188. //打印表
  189. List<Model.T_Sys_DictionaryValue> modellist = new BLL.T_Sys_DictionaryValue().GetModelList("F_DictionaryFlag='bxrxz'");
  190. //表列名
  191. List<string> head = new List<string>();
  192. head.Add("");
  193. foreach (var model in modellist)
  194. head.Add(model.F_Name);
  195. head.Add("其他");
  196. //表主体(最多支持10种性质的报修人,即:可以在报修人性质字典中添加10种性质的报修人)
  197. string[,] body = new string[,] { { "工单数量", "", "", "", "", "", "", "", "", "", "", ""},
  198. { "工单占比", "", "", "", "", "", "", "", "", "", "", ""} };
  199. for (int i = 0; i < head.Count; i++)
  200. {
  201. if (head[i] != "")
  202. {
  203. //各种性质报修人的工单数和百分比
  204. string[] cp = getWorkOrderCountAndPercent(starttime, endtime, 16, head[i]);
  205. body[0, i] = cp[0];
  206. body[1, i] = cp[1];
  207. }
  208. }
  209. string[] sumiteam = new string[] { "工单总数", workordercount.ToString() };
  210. StringBuilder sb = new StringBuilder();
  211. sb.Append(createTableTitle("来电人员工单分布"));
  212. sb.Append(createTable(head.ToArray(), body, sumiteam));
  213. TableHtml = sb.ToString();
  214. }
  215. /// <summary>
  216. /// 工单总数量
  217. /// </summary>
  218. /// <returns></returns>
  219. private int getWorkOrderCount(string starttime, string endtime, int type)
  220. {
  221. string sql = string.Format("F_WORKORDERTYPEID={0}", type);
  222. if (starttime != "")
  223. {
  224. sql += " AND F_STARTTIME>='" + starttime + " 00:00:00'";
  225. }
  226. if (endtime != "")
  227. {
  228. sql += " AND F_STARTTIME<='" + endtime + " 23:59:59'";
  229. }
  230. return new BLL.T_Wo_WorkOrderBase().GetList(sql).Tables[0].Rows.Count;
  231. }
  232. /// <summary>
  233. /// 不同来电人性质的工单数及百分率
  234. /// </summary>
  235. /// <param name="starttime">开始时间</param>
  236. /// <param name="endtime">结束时间</param>
  237. /// <param name="type">工单类型</param>
  238. /// <param name="callinpersontype">来电人性质</param>
  239. /// <returns></returns>
  240. private string[] getWorkOrderCountAndPercent(string starttime, string endtime, int type, string callinpersontype)
  241. {
  242. string sql = string.Format(" F_WORKORDERTYPEID={0}", type);
  243. if (starttime != "")
  244. {
  245. sql += " AND F_STARTTIME>='" + starttime + " 00:00:00'";
  246. }
  247. if (endtime != "")
  248. {
  249. sql += " AND F_STARTTIME<='" + endtime + " 23:59:59'";
  250. }
  251. DataTable dt = new BLL.T_Wo_WorkOrderBase().GetList(sql).Tables[0];
  252. //工单总数
  253. int allcount = dt.Rows.Count;
  254. string[] arr = new string[2];
  255. int count = 0;
  256. if (callinpersontype == "一线技术员")
  257. count = dt.Select("F_STANDARDADDRESS is null or F_STANDARDADDRESS='' or F_STANDARDADDRESS='" + callinpersontype + "'").Length;
  258. else count = dt.Select("F_STANDARDADDRESS='" + callinpersontype + "'").Length;
  259. dt.Dispose();
  260. arr[0] = count.ToString();
  261. arr[1] = (count * 1.0 / allcount * 100).ToString("0.00") + "%";
  262. return arr;
  263. }
  264. /// <summary>
  265. /// 表头(表列名)
  266. /// </summary>
  267. /// <param name="head">列名数组</param>
  268. /// <returns></returns>
  269. protected string createTable(string[] head, string[,] body, string[] sumiteam)
  270. {
  271. StringBuilder sb = new StringBuilder();
  272. sb.Append("<table border='0' cellpadding='0' cellspacing='0' width='100%' align='center'>");
  273. sb.Append("<tr 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;\">");
  274. for (int i = 0; i < head.Length; i++)
  275. {
  276. sb.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;\">" + head[i] + "</td>");
  277. }
  278. sb.Append("</tr>");
  279. sb.Append(createTableBody(head, body, sumiteam));
  280. sb.Append("</table>");
  281. return sb.ToString();
  282. }
  283. /// <summary>
  284. /// 表纵轴和横轴的名称
  285. /// </summary>
  286. /// <param name="dimensionname">数组长度为2。 dimensionname[0]:横轴名 dimensionname[1]:纵轴名</param>
  287. /// <returns></returns>
  288. private string createDimensionName(string[] dimensionname)
  289. {
  290. StringBuilder sb = new StringBuilder();
  291. sb.Append("<table style=\"width: 100%; height=100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">");
  292. for (int i = 0; i < dimensionname.Length; i++)
  293. {
  294. sb.Append("<tr>");
  295. for (int j = 0; j < dimensionname.Length; j++)
  296. {
  297. if (i == 0 && j != 0)
  298. sb.Append("<td>" + dimensionname[i] + "</td>");
  299. else if (i != 0 && j == 0)
  300. sb.Append("<td>" + dimensionname[i] + "</td>");
  301. else
  302. sb.Append("<td></td>");
  303. }
  304. sb.Append("</tr>");
  305. }
  306. sb.Append("</table>");
  307. return sb.ToString();
  308. }
  309. private string createTableBody(string[] head, string[,] body, string[] sumiteam)
  310. {
  311. StringBuilder sb = new StringBuilder();
  312. for (int i = 0; i < body.GetLength(0); i++)
  313. {
  314. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  315. for (int j = 0; j < head.Length; j++)
  316. {
  317. 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;\">" + body[i, j] + "</td>");
  318. }
  319. sb.Append("</tr>");
  320. }
  321. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  322. for (int j = 0; j < sumiteam.Length; j++)
  323. {
  324. if (j > 0)
  325. sb.Append("<td colspan=\"" + (head.Length - 1) + "\" 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;\">" + sumiteam[j] + "</td>");
  326. else 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;\">" + sumiteam[j] + "</td>");
  327. }
  328. sb.Append("</tr>");
  329. return sb.ToString();
  330. }
  331. protected string createTable1(string[] head, string[,] body, string[] sumiteam)
  332. {
  333. StringBuilder sb = new StringBuilder();
  334. sb.Append("<table border='0' cellpadding='0' cellspacing='0' width='100%' align='center'>");
  335. sb.Append("<tr 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;\">");
  336. for (int i = 0; i < head.Length; i++)
  337. {
  338. sb.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;\">" + head[i] + "</td>");
  339. }
  340. sb.Append("</tr>");
  341. sb.Append(createTableBody1(head, body, sumiteam));
  342. sb.Append("</table>");
  343. return sb.ToString();
  344. }
  345. private string createTableBody1(string[] head, string[,] body, string[] sumiteam)
  346. {
  347. StringBuilder sb = new StringBuilder();
  348. for (int i = 0; i < body.GetLength(0); i++)
  349. {
  350. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  351. for (int j = 0; j < head.Length; j++)
  352. {
  353. 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;\">" + body[i, j] + "</td>");
  354. }
  355. sb.Append("</tr>");
  356. }
  357. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  358. for (int j = 0; j < sumiteam.Length; j++)
  359. {
  360. sb.Append("<td class=\"formtabletitle1\" style=\"height: 25px;background-color: #E4D354;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;\">" + sumiteam[j] + "</td>");
  361. }
  362. sb.Append("</tr>");
  363. return sb.ToString();
  364. }
  365. protected void btnExport_Click(object sender, EventArgs e)
  366. {
  367. string fileName = "来电人员工单分布报表" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
  368. Response.Clear();
  369. Response.Charset = "GB2312";
  370. Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
  371. Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName));
  372. Response.ContentType = "application/ms-excel";
  373. Response.Write(TableHtml);
  374. Response.End();
  375. }
  376. }
  377. }