市长热线演示版

KnowledgeSediment.aspx.cs 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  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 KnowledgeSediment : System.Web.UI.Page
  12. {
  13. protected string TableHtml = null;
  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. string[,] tablebody = new string[,] {
  28. { "工程师姓名", "需要形成的数量", "完成的数量", "完成率" },
  29. { "工程师姓名", "需要形成的数量", "完成的数量", "完成率" },
  30. { "工程师姓名", "需要形成的数量", "完成的数量", "完成率" },
  31. { "工程师姓名", "需要形成的数量", "完成的数量", "完成率" },
  32. { "工程师姓名", "需要形成的数量", "完成的数量", "完成率" },
  33. { "合计:", "需要形成的总数量", "完成的总数量数量", "合计完成率" }};
  34. TableHtml = createTable(tabletitle, tablehead, starttime, endtime);
  35. }
  36. private string createTable(string title, string[] head, string starttime, string endtime)
  37. {
  38. StringBuilder sb = new StringBuilder();
  39. //表名称
  40. sb.Append(createTableTitle(title));
  41. //表列名
  42. sb.Append("<table border='0' cellpadding='0' cellspacing='0' width='100%' align='center'>");
  43. sb.Append(createTableHead(head));
  44. //表内容
  45. sb.Append(createTableBody(starttime, endtime));
  46. sb.Append("</table>");
  47. return sb.ToString();
  48. }
  49. /// <summary>
  50. /// 表名称
  51. /// </summary>
  52. /// <param name="title">表名</param>
  53. /// <returns></returns>
  54. protected string createTableTitle(string title)
  55. {
  56. StringBuilder sb = new StringBuilder();
  57. sb.Append("<h1 style='font-size: 18px; font-weight: bold; color: #333333; text-align: center;width: 100%;'><b>" + title + "</b></h1>");
  58. return sb.ToString();
  59. }
  60. /// <summary>
  61. /// 表头(表列名)
  62. /// </summary>
  63. /// <param name="head"></param>
  64. /// <returns></returns>
  65. protected string createTableHead(string[] head)
  66. {
  67. StringBuilder sb = new StringBuilder();
  68. 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;\">");
  69. for (int i = 0; i < head.Length; i++)
  70. {
  71. 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>");
  72. }
  73. sb.Append("</tr>");
  74. return sb.ToString();
  75. }
  76. /// <summary>
  77. /// 表内容
  78. /// </summary>
  79. /// <param name="body"></param>
  80. /// <returns></returns>
  81. private string createTableBody(string starttime, string endtime)
  82. {
  83. //存储数据的数据字典
  84. Dictionary<string, List<string>> body = new Dictionary<string, List<string>>();
  85. //这段时间已经结束的报修工单
  86. string sql = string.Format("F_WORKORDERSTATEID=0 and F_WORKORDERTYPEID={0}", 16);//16为报修
  87. if (starttime != "")
  88. {
  89. sql += " AND F_STARTTIME>='" + starttime + " 00:00:00'";
  90. }
  91. if (endtime != "")
  92. {
  93. sql += " AND F_ENDTIME<='" + endtime + " 23:59:59'";
  94. }
  95. DataTable dtable = new BLL.T_Wo_WorkOrderBase().GetList(sql).Tables[0];
  96. //这段时间工单总数
  97. int allcount = dtable.Rows.Count;
  98. //循环这段时间的工单,筛选出需要形成知识的工单
  99. #region 统计需要形成知识的数量
  100. for (int i = 0; i < allcount; i++)
  101. {
  102. string knowsql = "F_KNOWLEDGE is not null order by ID desc";
  103. var hisinfomodel1 = new BLL.T_Wo_WorkOrderHistoryInfo().GetModelList("F_INSTANCEID='"
  104. + dtable.Rows[i]["F_INSTANCEID"] + "' AND " + knowsql).FirstOrDefault();
  105. if (hisinfomodel1 != null)
  106. {
  107. //如果形成知识
  108. if (hisinfomodel1.F_KNOWLEDGE == 0)
  109. {
  110. //处理这个工单工程师
  111. DataTable workorderbase = new BLL.T_Wo_WorkOrderBase().GetList("F_INSTANCEID=" + dtable.Rows[i]["F_INSTANCEID"]).Tables[0];
  112. if (workorderbase.Rows.Count > 0)
  113. {
  114. List<Model.T_Wo_WorkOrderConstructor> constructorlist =
  115. new BLL.T_Wo_WorkOrderConstructor().GetModelList("F_WORKORDERID=" + workorderbase.Rows[0]["F_WORKORDERID"]);
  116. if (constructorlist.Count > 0)
  117. {
  118. foreach (Model.T_Wo_WorkOrderConstructor constructor in constructorlist)
  119. {
  120. int id = Convert.ToInt32(constructor.F_USERID);
  121. Model.T_Sys_UserAccount user = new BLL.T_Sys_UserAccount().GetModel(id);
  122. if (user != null)
  123. {
  124. if (constructor.F_ISMAIN == 1)
  125. {
  126. //这个工单是某个工程师处理的就存储起来,如果还有其他工单也是他处理的就增加1
  127. if (body.ContainsKey(user.F_UserName))
  128. {
  129. body[user.F_UserName][0] = (Convert.ToInt32(body[user.F_UserName][0]) + 1).ToString();
  130. }
  131. else
  132. {
  133. body.Add(user.F_UserName, new List<string>() { "1", "0", "0" });
  134. }
  135. }
  136. }
  137. }
  138. }
  139. }
  140. }
  141. }
  142. }
  143. #endregion
  144. //循环这段时间的工单,筛选出已经形成知识的工单
  145. #region 统计已经形成知识的数量
  146. for (int i = 0; i < allcount; i++)
  147. {
  148. //是否已经形成知识
  149. string alreadyknowsql = "F_ALREADYKNOWLEDGE is not null order by ID desc";
  150. var hisinfomodel2 = new BLL.T_Wo_WorkOrderHistoryInfo().GetModelList("F_INSTANCEID='"
  151. + dtable.Rows[i]["F_INSTANCEID"] + "' and " + alreadyknowsql).FirstOrDefault();
  152. if (hisinfomodel2 != null)
  153. {
  154. if (hisinfomodel2.F_ALREADYKNOWLEDGE == 0)
  155. {
  156. //处理这个工单工程师
  157. DataTable workorderbase = new BLL.T_Wo_WorkOrderBase().GetList("F_INSTANCEID=" + dtable.Rows[i]["F_INSTANCEID"]).Tables[0];
  158. if (workorderbase.Rows.Count > 0)
  159. {
  160. List<Model.T_Wo_WorkOrderConstructor> constructorlist =
  161. new BLL.T_Wo_WorkOrderConstructor().GetModelList("F_WORKORDERID=" + workorderbase.Rows[0]["F_WORKORDERID"]);
  162. if (constructorlist.Count > 0)
  163. {
  164. foreach (Model.T_Wo_WorkOrderConstructor constructor in constructorlist)
  165. {
  166. int id = Convert.ToInt32(constructor.F_USERID);
  167. Model.T_Sys_UserAccount user = new BLL.T_Sys_UserAccount().GetModel(id);
  168. if (user != null)
  169. {
  170. if (constructor.F_ISMAIN == 1)
  171. {
  172. //这个工单是某个工程师处理的就存储起来,如果还有其他工单也是他处理的就增加1
  173. if (body.ContainsKey(user.F_UserName))
  174. {
  175. body[user.F_UserName][1] = (Convert.ToInt32(body[user.F_UserName][1]) + 1).ToString();
  176. }
  177. else
  178. {
  179. body.Add(user.F_UserName, new List<string>() { "0", "1", "0" });
  180. }
  181. }
  182. }
  183. }
  184. }
  185. }
  186. }
  187. }
  188. }
  189. #endregion
  190. //打印表格
  191. StringBuilder sb = new StringBuilder();
  192. var dicSort = from objDic in body orderby int.Parse(objDic.Value[0]) descending select objDic;
  193. foreach (var kvp in dicSort)
  194. {
  195. List<string> Values = kvp.Value;
  196. string tdcolor = "#fff"; if (kvp.Key == "合计:") tdcolor = "#D5EDFE";
  197. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  198. 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>");
  199. foreach (var value in Values)
  200. {
  201. 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>");
  202. }
  203. sb.Append("</tr>");
  204. }
  205. #region 合计
  206. //合计
  207. List<string> sum = new List<string>();
  208. int knowsum = 0;
  209. int alreadyknowsum = 0;
  210. string p = "0.00%";
  211. foreach (string key in body.Keys)
  212. {
  213. knowsum += Convert.ToInt32(body[key][0]);
  214. alreadyknowsum += Convert.ToInt32(body[key][1]);
  215. if (body[key][0] == "0") body[key][2] = "0.00%";
  216. body[key][2] = (Convert.ToInt32(body[key][1]) * 1.0 / Convert.ToInt32(body[key][0])).ToString("0.00") + "%";
  217. }
  218. if (knowsum > 0) p = (alreadyknowsum * 1.0 / knowsum).ToString("0.00") + "%";
  219. sum.Add(knowsum.ToString()); sum.Add(alreadyknowsum.ToString()); sum.Add(p);
  220. body.Clear();
  221. body.Add("合计:", sum);
  222. foreach (var key in body.Keys)
  223. {
  224. List<string> Values = body[key];
  225. string tdcolor = "#fff"; if (key == "合计:") tdcolor = "#D5EDFE";
  226. sb.Append("<tr style=\"text-align: center;\" onmouseover=\"this.style.backgroundColor='#F6F6F6'\" onmouseout=\"this.style.backgroundColor='#ffffff'\">");
  227. 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>");
  228. foreach (var value in Values)
  229. {
  230. 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>");
  231. }
  232. sb.Append("</tr>");
  233. }
  234. #endregion
  235. return sb.ToString();
  236. }
  237. protected void btnConfirm_Click(object sender, EventArgs e)
  238. {
  239. OutputTable();
  240. }
  241. protected void btnExport_Click(object sender, EventArgs e)
  242. {
  243. string fileName = "知识沉淀情况报表" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
  244. Response.Clear();
  245. Response.Charset = "GB2312";
  246. Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
  247. Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName));
  248. Response.ContentType = "application/ms-excel";
  249. Response.Write(TableHtml);
  250. Response.End();
  251. }
  252. }
  253. }