UU跑腿标准版

ZuoXiManYiDu_20170608.aspx.cs 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  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.operationdata
  10. {
  11. public partial class ZuoXiManYiDu : System.Web.UI.Page
  12. {
  13. protected string TableHtml = "";
  14. protected void Page_Load(object sender, EventArgs e)
  15. {
  16. OutputTable();
  17. }
  18. private void OutputTable()
  19. {
  20. //查询条件
  21. string starttime = txtStartTime.Text.Trim();
  22. string endtime = txtEndTime.Text.Trim();
  23. if (string.IsNullOrWhiteSpace(starttime)) { starttime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString("yyyy-MM-dd"); txtStartTime.Text = starttime; }
  24. if (string.IsNullOrWhiteSpace(endtime)) { endtime = DateTime.Today.ToString("yyyy-MM-dd"); txtEndTime.Text = endtime; }
  25. string tabletitle = "坐席满意度评价情况报表";
  26. string[] tablehead = new string[] { "角色","工号","坐席姓名", "非常满意", "非常满意占比", "基本满意", "基本满意占比", "不满意", "不满意占比", "未评价", "未评价占比" };
  27. TableHtml = createTable(tabletitle, tablehead, starttime, endtime);
  28. }
  29. protected void btnConfirm_Click(object sender, EventArgs e)
  30. {
  31. OutputTable();
  32. }
  33. protected void btnExport_Click(object sender, EventArgs e)
  34. {
  35. string fileName = "坐席满意度评价情况报表" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
  36. Response.Clear();
  37. Response.Charset = "GB2312";
  38. Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
  39. Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName));
  40. Response.ContentType = "application/ms-excel";
  41. Response.Write(TableHtml);
  42. Response.End();
  43. }
  44. private string createTable(string title, string[] head, string starttime, string endtime)
  45. {
  46. StringBuilder sb = new StringBuilder();
  47. //表名称
  48. sb.Append(createTableTitle(title));
  49. //表列名
  50. sb.Append("<table border='0' cellpadding='0' cellspacing='0' width='100%' align='center'>");
  51. sb.Append(createTableHead(head));
  52. //表内容
  53. sb.Append(createTableBody(starttime, endtime));
  54. sb.Append("</table>");
  55. return sb.ToString();
  56. }
  57. /// <summary>
  58. /// 表名称
  59. /// </summary>
  60. /// <param name="title">表名</param>
  61. /// <returns></returns>
  62. protected string createTableTitle(string title)
  63. {
  64. StringBuilder sb = new StringBuilder();
  65. sb.Append("<h1 style='font-size: 18px; font-weight: bold; color: #333333; text-align: center;width: 100%;'><b>" + title + "</b></h1>");
  66. return sb.ToString();
  67. }
  68. /// <summary>
  69. /// 表头(表列名)
  70. /// </summary>
  71. /// <param name="head"></param>
  72. /// <returns></returns>
  73. protected string createTableHead(string[] head)
  74. {
  75. StringBuilder sb = new StringBuilder();
  76. 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;\">");
  77. for (int i = 0; i < head.Length; i++)
  78. {
  79. //if (i == 0) 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>");
  80. //else
  81. 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>");
  82. }
  83. sb.Append("</tr>");
  84. return sb.ToString();
  85. }
  86. /// <summary>
  87. /// 表体(内容)
  88. /// </summary>
  89. /// <param name="starttime"></param>
  90. /// <param name="endtime"></param>
  91. /// <returns></returns>
  92. private string createTableBody(string starttime, string endtime)
  93. {
  94. string time = "";
  95. if (starttime != null && starttime.Trim() != "")
  96. {
  97. time += " and CONVERT(varchar , BeginTime, 120)>=CONVERT(varchar , '" + starttime.Trim() + " 00:00:01', 120) ";
  98. }
  99. if (endtime != null && endtime.Trim() != "")
  100. {
  101. time += " and CONVERT(varchar , BeginTime, 120)<=CONVERT(varchar , '" + endtime.Trim() + " 23:59:59', 120) ";
  102. }
  103. //存储数据
  104. Dictionary<string, List<List<string>>> body = new Dictionary<string, List<List<string>>>();
  105. //坐席
  106. DataTable dtable = new BLL.T_Sys_UserAccount().GetList("F_RoleId in (1,4,28,29)").Tables[0];//客服坐席、班长坐席、售前坐席、投诉坐席
  107. int allcount = dtable.Rows.Count;
  108. for (int i = 0; i < allcount; i++)
  109. {
  110. int userid = Convert.ToInt32(dtable.Rows[i]["F_UserId"].ToString());
  111. List<string> bodyitem = new List<string>();
  112. string[] UNDN = getRoleNameAndUserName(userid);
  113. bodyitem.Add(UNDN[1]);
  114. bodyitem.Add(UNDN[2]);
  115. //bodyitem.Add(UNDN[3]);
  116. DataTable dt = new BLL.T_Call_CallRecords().GetList("UserId='" + userid + "'" + time).Tables[0];
  117. //1非常满意、2基本满意、3不满意、4未评价
  118. for (int j = 1; j <= 4; j++)
  119. {
  120. string[] cp = getMYDCountAndPercent(dt, j);
  121. bodyitem.AddRange(cp);
  122. }
  123. if (body.ContainsKey(UNDN[0]))
  124. {
  125. body[UNDN[0]].Add(bodyitem);
  126. }
  127. else
  128. {
  129. List<List<string>> bodylist = new List<List<string>>();
  130. bodylist.Add(bodyitem);
  131. body.Add(UNDN[0], bodylist);
  132. }
  133. }
  134. StringBuilder sb = new StringBuilder();
  135. foreach (string key in body.Keys)
  136. {
  137. bool bb = true;
  138. int count = body[key].Count;
  139. foreach (List<string> listiteam in body[key])
  140. {
  141. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  142. if (bb)
  143. {
  144. sb.Append("<td rowspan=\"" + count + "\" 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;\">" + key + "</td>");
  145. bb = false;
  146. }
  147. foreach (string item in listiteam)
  148. {
  149. 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 + "</td>");
  150. }
  151. sb.Append("</tr>");
  152. }
  153. }
  154. return sb.ToString();
  155. }
  156. private string createTableBody1(string starttime, string endtime)
  157. {
  158. //存储数据
  159. List<List<string>> body = new List<List<string>>();
  160. //坐席
  161. DataTable dtable = new BLL.T_Sys_UserAccount().GetList("F_RoleId in (1,4,28,29)").Tables[0];//客服坐席、班长坐席、售前坐席、投诉坐席
  162. int count = dtable.Rows.Count;
  163. for (int i = 0; i < count; i++)
  164. {
  165. //1非常满意、2基本满意、3不满意
  166. List<string> bodyitem = new List<string>();
  167. int userid = Convert.ToInt32(dtable.Rows[i]["F_UserId"].ToString());
  168. string sqlwhere = string.Format("UserId={0} AND EndTime>='{1}' AND EndTime<'{2}'", userid, starttime, endtime);
  169. DataTable dt = new BLL.T_Call_CallRecords().GetList(sqlwhere).Tables[0];
  170. string[] UNDN = getRoleNameAndUserName(userid);
  171. bodyitem.AddRange(UNDN);
  172. for (int j = 0; j < 4; j++)
  173. {
  174. string[] cp = getMYDCountAndPercent(dt, j);
  175. bodyitem.AddRange(cp);
  176. }
  177. body.Add(bodyitem);
  178. }
  179. body.Sort(new ListCompare());
  180. StringBuilder sb = new StringBuilder();
  181. foreach (var list in body)
  182. {
  183. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  184. foreach (var listiteam in list)
  185. {
  186. 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>");
  187. }
  188. sb.Append("</tr>");
  189. }
  190. return sb.ToString();
  191. }
  192. /// <summary>
  193. /// 每种满意度的个数和占比
  194. /// </summary>
  195. /// <param name="dt"></param>
  196. /// <param name="type"></param>
  197. /// <returns></returns>
  198. private string[] getMYDCountAndPercent(DataTable dt, int type)
  199. {
  200. int allcount = dt.Rows.Count;
  201. int typecount = 0;
  202. if (type == 4) typecount = dt.Select("MYD IS NULL").Count();
  203. else typecount = dt.Select("MYD=" + type).Count();
  204. string percent = "0.00";
  205. if (allcount > 0) percent = (typecount * 1.0 / allcount).ToString("0.00");
  206. return new string[] { typecount.ToString(), percent };
  207. }
  208. /// <summary>
  209. /// 通过UserId得到角色和姓名
  210. /// </summary>
  211. /// <param name="userid"></param>
  212. /// <returns></returns>
  213. private string[] getRoleNameAndUserName(int userid)
  214. {
  215. var user = new BLL.T_Sys_UserAccount().GetModel(userid);
  216. string[] resarr = new string[3];
  217. if (user != null)
  218. {
  219. var role = new BLL.T_Sys_RoleInfo().GetModel(user.F_RoleId);
  220. if (role != null)
  221. {
  222. resarr[0] = role.F_RoleName;
  223. }
  224. resarr[1] = user.F_UserCode;
  225. resarr[2] = user.F_UserName;
  226. //var dept = new BLL.T_Sys_Department().GetModel(user.F_DeptId);
  227. //if (dept != null)
  228. //{
  229. // resarr[3] = dept.F_DeptName;
  230. //}
  231. }
  232. return resarr;
  233. }
  234. }
  235. class ListCompare : IComparer<List<string>>
  236. {
  237. public int Compare(List<string> a, List<string> b)
  238. {
  239. return a[0].CompareTo(b[0]);
  240. }
  241. }
  242. }