市长热线演示版

DepartmentWorkOrder.aspx.cs 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  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 DepartmentWorkOrder : System.Web.UI.Page
  12. {
  13. protected string TableHtml = "";
  14. protected void Page_Load(object sender, EventArgs e)
  15. {
  16. OutputTable();
  17. }
  18. protected void btnConfirm_Click(object sender, EventArgs e)
  19. {
  20. OutputTable();
  21. }
  22. private void OutputTable()
  23. {
  24. //查询条件
  25. string starttime = txtStartTime.Text.Trim();
  26. string endtime = txtEndTime.Text.Trim();
  27. if (string.IsNullOrWhiteSpace(starttime)) { starttime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString("yyyy-MM-dd"); txtStartTime.Text = starttime; }
  28. if (string.IsNullOrWhiteSpace(endtime)) { endtime = DateTime.Today.ToString("yyyy-MM-dd"); txtEndTime.Text = endtime; }
  29. StringBuilder sb = new StringBuilder();
  30. //表名称
  31. sb.Append(createTableTitle("客服部工单分布"));
  32. //表列名
  33. sb.Append("<table border='0' cellpadding='0' cellspacing='0' width='100%' align='center'>");
  34. sb.Append(createTableHead(new string[] { "客服部名称", "工单数量", "总处理时间(小时)", "平均响应时间(小时)", "平均处理时间(小时)" }));
  35. //表内容
  36. sb.Append(createTableBody(starttime, endtime));
  37. sb.Append("</table>");
  38. TableHtml = sb.ToString();
  39. }
  40. private string createTableBody(string starttime, string endtime)
  41. {
  42. //存储数据的数据字典
  43. Dictionary<string, List<string>> body = new Dictionary<string, List<string>>();
  44. //这段时间已完成的报修工单
  45. string sql = string.Format("F_WORKORDERSTATEID=0 and F_WORKORDERTYPEID={0}", 16);//16为报修
  46. if (starttime != "")
  47. {
  48. sql += " AND F_STARTTIME>='" + starttime + " 00:00:00'";
  49. }
  50. if (endtime != "")
  51. {
  52. sql += " AND F_ENDTIME<='" + endtime + " 23:59:59'";
  53. }
  54. DataTable dtable = new BLL.T_Wo_WorkOrderBase().GetList(sql).Tables[0];
  55. //工单总数
  56. int allcount = dtable.Rows.Count;
  57. #region 遍历工单找到每个工单所属的部门,总接单和处理时间,总结单时间,总处理时间
  58. for (int i = 0; i < allcount; i++)
  59. {
  60. //处理这个工单工程师
  61. DataTable workorderbase = new BLL.T_Wo_WorkOrderBase().GetList("F_INSTANCEID=" + dtable.Rows[i]["F_INSTANCEID"]).Tables[0];
  62. if (workorderbase.Rows.Count > 0)
  63. {
  64. List<Model.T_Wo_WorkOrderConstructor> constructorlist =
  65. new BLL.T_Wo_WorkOrderConstructor().GetModelList("F_WORKORDERID=" + workorderbase.Rows[0]["F_WORKORDERID"]);
  66. if (constructorlist.Count > 0)
  67. {
  68. foreach (Model.T_Wo_WorkOrderConstructor constructor in constructorlist)
  69. {
  70. if (constructor.F_ISMAIN == 1)
  71. {
  72. int id = Convert.ToInt32(constructor.F_USERID);
  73. Model.T_Sys_UserAccount user = new BLL.T_Sys_UserAccount().GetModel(id);
  74. if (user != null)
  75. {
  76. Model.T_Sys_Department dept = new BLL.T_Sys_Department().GetModel(user.F_DeptId);
  77. if (dept != null)
  78. {
  79. string instanceid = dtable.Rows[i]["F_INSTANCEID"].ToString();
  80. //这个工单是某个部门的工程师处理的就存储起来,如果还有其他工单也是此部门处理的就增加1
  81. if (body.ContainsKey(dept.F_DeptName))
  82. {
  83. body[dept.F_DeptName][0] = (Convert.ToInt32(body[dept.F_DeptName][0]) + 1).ToString();
  84. body[dept.F_DeptName][1] = (Convert.ToInt32(body[dept.F_DeptName][1]) + Convert.ToInt32(getSumTime(instanceid, "6,7"))).ToString();
  85. body[dept.F_DeptName][2] = (Convert.ToInt32(body[dept.F_DeptName][2]) + Convert.ToInt32(getSumTime(instanceid, "6"))).ToString();
  86. body[dept.F_DeptName][3] = (Convert.ToInt32(body[dept.F_DeptName][3]) + Convert.ToInt32(getSumTime(instanceid, "7"))).ToString();
  87. }
  88. else
  89. {
  90. body.Add(dept.F_DeptName, new List<string>() { "1", getSumTime(instanceid, "6,7"), getSumTime(instanceid, "6"), getSumTime(instanceid, "7") });
  91. }
  92. }
  93. }
  94. }
  95. }
  96. }
  97. }
  98. }
  99. #endregion
  100. StringBuilder sb = new StringBuilder();
  101. //排序方法一
  102. var dicSort = from objDic in body orderby int.Parse(objDic.Value[0]) descending select objDic;
  103. #region 排序方法二
  104. //排序方法二
  105. //List<KeyValuePair<string, List<string>>> lst = new List<KeyValuePair<string, List<string>>>(body);
  106. //lst.Sort(delegate(KeyValuePair<string, List<string>> s1, KeyValuePair<string, List<string>> s2)
  107. //{
  108. // int s10 = int.Parse(s1.Value[0]);
  109. // int s20 = int.Parse(s2.Value[0]);
  110. // return s20.CompareTo(s10);
  111. //});
  112. //body.Clear();
  113. #endregion
  114. foreach (var kvp in dicSort)
  115. {
  116. List<string> Values = kvp.Value;
  117. Values[1] = GetTimeInfo((Convert.ToDouble(Values[1]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00"));
  118. Values[2] = GetTimeInfo((Convert.ToDouble(Values[2]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00"));
  119. Values[3] = GetTimeInfo((Convert.ToDouble(Values[3]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00"));
  120. string tdcolor = "#fff"; if (kvp.Key == "合计:") tdcolor = "#D5EDFE";
  121. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  122. sb.Append("<td class=\"formtabletitle1\" style=\"height: 25px;background-color: " + tdcolor + ";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;\">" + kvp.Key + "</td>");
  123. foreach (var value in Values)
  124. {
  125. sb.Append("<td class=\"formtabletitle1\" style=\"height: 25px;background-color: " + tdcolor + ";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;\">" + value + "</td>");
  126. }
  127. sb.Append("</tr>");
  128. }
  129. #region 合计
  130. //合计
  131. List<string> sum = new List<string>();
  132. long count = 0;
  133. double sumaveragetime = 0.0;
  134. double averagereceivetime = 0.0;
  135. double averagedealwithtime = 0.0;
  136. foreach (var key in body.Keys)
  137. {
  138. List<string> Values = body[key];
  139. count += Convert.ToInt32(Values[0]);
  140. sumaveragetime += Convert.ToDouble(Values[1]);
  141. averagereceivetime += Convert.ToDouble(Values[2]);
  142. averagedealwithtime += Convert.ToDouble(Values[3]);
  143. }
  144. sum.Add(count.ToString()); sum.Add(sumaveragetime.ToString());
  145. sum.Add(averagereceivetime.ToString()); sum.Add(averagedealwithtime.ToString());
  146. body.Clear();
  147. body.Add("合计:", sum);
  148. foreach (var key in body.Keys)
  149. {
  150. List<string> Values = body[key];
  151. Values[1] = (Convert.ToDouble(Values[1]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00");
  152. Values[2] = (Convert.ToDouble(Values[2]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00");
  153. Values[3] = (Convert.ToDouble(Values[3]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00");
  154. string tdcolor = "#fff"; if (key == "合计:") tdcolor = "#D5EDFE";
  155. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  156. sb.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: " + tdcolor + ";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>");
  157. foreach (var value in Values)
  158. {
  159. sb.Append("<td class=\"formtabletitle1\"style=\"height: 25px;background-color: " + tdcolor + ";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;\">" + value + "</td>");
  160. }
  161. sb.Append("</tr>");
  162. }
  163. #endregion
  164. return sb.ToString();
  165. }
  166. /// <summary>
  167. /// 时间转换(将秒转换为易读的时间)
  168. /// </summary>
  169. /// <param name="times">秒</param>
  170. /// <returns></returns>
  171. public string GetTimeInfo1(string times)
  172. {
  173. string res = "";
  174. try
  175. {
  176. double d = Convert.ToDouble(times);
  177. int t = Convert.ToInt32(d);
  178. if (t < 60)
  179. {
  180. res = "" + t + "秒";
  181. }
  182. else if (t < 3600)
  183. {
  184. res = "" + Convert.ToInt32(t / 60).ToString() + "分" + "" + Convert.ToInt32(t % 60).ToString() + "秒";
  185. }
  186. else if (t < 86400)
  187. {
  188. res = "" + Convert.ToInt32(t / 3600).ToString() + "时" + "" + Convert.ToInt32((t % 3600) / 60).ToString() + "分" + "" + Convert.ToInt32((t % 3600) % 60).ToString() + "秒";
  189. }
  190. else
  191. {
  192. res = "" + Convert.ToInt32(t / 86400).ToString() + "天" + "" + Convert.ToInt32((t % 86400) / 3600).ToString() + "时" + "" + Convert.ToInt32(((t % 86400) % 3600) / 60).ToString() + "分" + "" + Convert.ToInt32(((t % 86400) % 3600) % 60).ToString() + "秒";
  193. }
  194. }
  195. catch
  196. { }
  197. return res;
  198. }
  199. public string GetTimeInfo(string times)
  200. {
  201. string res = "";
  202. try
  203. {
  204. double d = Convert.ToDouble(times);
  205. res = (d / 3600).ToString("0.00");
  206. }
  207. catch
  208. { }
  209. return res;
  210. }
  211. private string getSumTime(string instanceid, string stateids)
  212. {
  213. string sqlwhere = "SELECT sum([F_ELAPSEDTIME]) FROM [T_Wo_WorkOrderHistory] WHERE F_INSTANCEID='" + instanceid + "' AND F_WORKORDERSTATEID IN (" + stateids + ")";
  214. DataTable dt = DBUtility.DbHelperSQL.Query(sqlwhere).Tables[0];
  215. long l = 0;
  216. long.TryParse(dt.Rows[0][0].ToString(), out l);
  217. return l.ToString();
  218. }
  219. private static void NewMethod(StringBuilder sb)
  220. {
  221. //表内容
  222. List<Model.T_Sys_Department> deptlist = new BLL.T_Sys_Department().GetModelList("F_DeptName LIKE '%客服部%'");
  223. foreach (Model.T_Sys_Department dept in deptlist)
  224. {
  225. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  226. 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;\">" + dept.F_DeptName + "</td>");
  227. 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;\">0</td>");
  228. 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;\">0</td>");
  229. 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;\">0</td>");
  230. 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;\">0</td>");
  231. sb.Append("</tr>");
  232. }
  233. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  234. 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;\">合计:</td>");
  235. 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;\">0</td>");
  236. 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;\">0</td>");
  237. 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;\">0</td>");
  238. 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;\">0</td>");
  239. sb.Append("</tr>");
  240. }
  241. /// <summary>
  242. /// 表名称
  243. /// </summary>
  244. /// <param name="title">表名</param>
  245. /// <returns></returns>
  246. protected string createTableTitle(string title)
  247. {
  248. StringBuilder sb = new StringBuilder();
  249. sb.Append("<h1 style='font-size: 18px; font-weight: bold; color: #333333; text-align: center;width: 100%;'><b>" + title + "</b></h1>");
  250. return sb.ToString();
  251. }
  252. /// <summary>
  253. /// 表头(表列名)
  254. /// </summary>
  255. /// <param name="head"></param>
  256. /// <returns></returns>
  257. protected string createTableHead(string[] head)
  258. {
  259. StringBuilder sb = new StringBuilder();
  260. 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;\">");
  261. for (int i = 0; i < head.Length; i++)
  262. {
  263. 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>");
  264. }
  265. sb.Append("</tr>");
  266. return sb.ToString();
  267. }
  268. protected void btnExport_Click(object sender, EventArgs e)
  269. {
  270. string fileName = "客服部工单分布报表" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
  271. Response.Clear();
  272. Response.Charset = "GB2312";
  273. Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
  274. Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName));
  275. Response.ContentType = "application/ms-excel";
  276. Response.Write(TableHtml);
  277. Response.End();
  278. }
  279. }
  280. }