using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Text; using System.Data; namespace HySoft.BaseCallCenter.Web.reportmanage.dataanalysis { public partial class BasicEngineerWorkOrder : System.Web.UI.Page { protected string TableHtml = null; protected void Page_Load(object sender, EventArgs e) { OutputTable(); } protected void btnExport_Click(object sender, EventArgs e) { string fileName = "一线工程师工单分布报表" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls"; Response.Clear(); Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName)); Response.ContentType = "application/ms-excel"; Response.Write(TableHtml); Response.End(); } private void OutputTable() { //查询条件 string starttime = txtStartTime.Text.Trim(); string endtime = txtEndTime.Text.Trim(); if (string.IsNullOrWhiteSpace(starttime)) { starttime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString("yyyy-MM-dd"); txtStartTime.Text = starttime; } if (string.IsNullOrWhiteSpace(endtime)) { endtime = DateTime.Today.ToString("yyyy-MM-dd"); txtEndTime.Text = endtime; } string tabletitle = "一线工程师工单分布"; string[] tablehead = new string[] { "客服部名称", "一线工程师姓名", "工单数量", "总处理时间(小时)", "平均响应时间(小时)", "平均处理时间(小时)" }; TableHtml = createTable(tabletitle, tablehead, starttime, endtime); } protected string createTable(string title, string[] head, string starttime, string endtime) { StringBuilder sb = new StringBuilder(); //表名称 sb.Append(createTableTitle(title)); //表列名 sb.Append(""); sb.Append(createTableHead(head)); sb.Append(createTableBody(starttime, endtime)); sb.Append("
"); return sb.ToString(); } /// /// 表名称 /// /// 表名 /// protected string createTableTitle(string title) { StringBuilder sb = new StringBuilder(); sb.Append("

" + title + "

"); return sb.ToString(); } /// /// 表头(表列名) /// /// /// protected string createTableHead(string[] head) { StringBuilder sb = new StringBuilder(); sb.Append(""); for (int i = 0; i < head.Length; i++) { sb.Append("" + head[i] + ""); } sb.Append(""); return sb.ToString(); } /// /// 表内容 /// /// /// protected string createTableBody(string starttime, string endtime) { //存储数据的数据字典 Dictionary>> body = new Dictionary>>(); Dictionary>> newbody = new Dictionary>>(); //这段时间已完成的报修工单 string sql = string.Format("F_WORKORDERSTATEID=0 and F_WORKORDERTYPEID={0}", 16);//16为报修 if (starttime != "") { sql += " AND F_STARTTIME>='" + starttime + " 00:00:00'"; } if (endtime != "") { sql += " AND F_ENDTIME<='" + endtime + " 23:59:59'"; } DataTable dtable = new BLL.T_Wo_WorkOrderBase().GetList(sql).Tables[0]; //工单总数 int allcount = dtable.Rows.Count; #region 遍历工单找到每个工单所属的部门,总接单和处理时间,总结单时间,总处理时间 for (int i = 0; i < allcount; i++) { //处理这个工单工程师 DataTable workorderbase = dtable.Select("F_INSTANCEID=" + dtable.Rows[i]["F_INSTANCEID"]).CopyToDataTable(); if (workorderbase.Rows.Count > 0) { List constructorlist = new BLL.T_Wo_WorkOrderConstructor().GetModelList("F_WORKORDERID=" + workorderbase.Rows[0]["F_WORKORDERID"]); if (constructorlist.Count > 0) { foreach (Model.T_Wo_WorkOrderConstructor constructor in constructorlist) { if (constructor.F_ISMAIN == 1) { int id = Convert.ToInt32(constructor.F_USERID); Model.T_Sys_UserAccount user = new BLL.T_Sys_UserAccount().GetModel(id); if (user != null) { if (user.F_RoleId == 30) { string instanceid = dtable.Rows[i]["F_INSTANCEID"].ToString(); string[] UNDN = getUserNameAndDeptName(user.F_UserId); if (body.ContainsKey(UNDN[1])) { if (body[UNDN[1]].ContainsKey(user.F_UserId)) { body[UNDN[1]][user.F_UserId][0] = (Convert.ToInt32(body[UNDN[1]][user.F_UserId][0]) + 1).ToString(); body[UNDN[1]][user.F_UserId][1] = (Convert.ToInt32(body[UNDN[1]][user.F_UserId][1]) + Convert.ToInt32(getSumTime(instanceid, "6,7"))).ToString(); body[UNDN[1]][user.F_UserId][2] = (Convert.ToInt32(body[UNDN[1]][user.F_UserId][2]) + Convert.ToInt32(getSumTime(instanceid, "6"))).ToString(); body[UNDN[1]][user.F_UserId][3] = (Convert.ToInt32(body[UNDN[1]][user.F_UserId][3]) + Convert.ToInt32(getSumTime(instanceid, "7"))).ToString(); } else { body[UNDN[1]].Add(user.F_UserId, new List() { "1", getSumTime(instanceid, "6,7"), getSumTime(instanceid, "6"), getSumTime(instanceid, "7") }); } } else { Dictionary> bodylist = new Dictionary>(); bodylist.Add(user.F_UserId, new List() { "1", getSumTime(instanceid, "6,7"), getSumTime(instanceid, "6"), getSumTime(instanceid, "7") }); body.Add(UNDN[1], bodylist); } } } } } } } } #endregion StringBuilder sb = new StringBuilder(); #region 部门合计 foreach (var keys in body.Keys) { Dictionary> Values = body[keys]; Dictionary> newValues = new Dictionary>(); List sum = new List() { "0", "0", "0", "0" }; foreach (var kv in Values) { List values = kv.Value; sum[0] = (int.Parse(sum[0]) + int.Parse(values[0])).ToString(); sum[1] = (int.Parse(sum[1]) + int.Parse(values[1])).ToString(); sum[2] = (int.Parse(sum[2]) + int.Parse(values[2])).ToString(); sum[3] = (int.Parse(sum[3]) + int.Parse(values[3])).ToString(); newValues.Add(kv.Key, kv.Value); } newValues.Add(-1, sum); newbody.Add(keys, newValues); } #endregion #region 按部门排序 var KeysValues = from objDic in newbody orderby int.Parse(objDic.Value[-1][0]) descending select objDic; foreach (var keyvalue in KeysValues) { #region 打印表格--排序 Dictionary> bodyValues = keyvalue.Value; int count = bodyValues.Count; bool bb = true; var Values = from objDic in bodyValues orderby int.Parse(objDic.Value[0]) descending select objDic; foreach (var kv in Values) { List values = kv.Value; values[1] = GetTimeInfo((Convert.ToInt32(values[1]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00")); values[2] = GetTimeInfo((Convert.ToInt32(values[2]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00")); values[3] = GetTimeInfo((Convert.ToInt32(values[3]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00")); if (kv.Key != -1) { sb.Append(""); if (bb) { sb.Append("" + keyvalue.Key + ""); bb = false; } string[] undn = getUserNameAndDeptName(kv.Key); sb.Append("" + undn[0] + ""); foreach (var v in values) { sb.Append("" + v + ""); } sb.Append(""); } } #endregion } #endregion #region 未按部门排序 //foreach (var keys in body.Keys) //{ // #region 打印表格--排序 // Dictionary> bodyValues = body[keys]; // int count = bodyValues.Count; // bool bb = true; // var Values = from objDic in bodyValues orderby int.Parse(objDic.Value[0]) descending select objDic; // foreach (var kv in Values) // { // List values = kv.Value; // values[1] = GetTimeInfo((Convert.ToInt32(values[1]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00")); // values[2] = GetTimeInfo((Convert.ToInt32(values[2]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00")); // values[3] = GetTimeInfo((Convert.ToInt32(values[3]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00")); // sb.Append(""); // if (bb) // { // sb.Append("" + keys + ""); // bb = false; // } // string[] undn = getUserNameAndDeptName(kv.Key); // sb.Append("" + undn[0] + ""); // foreach (var v in values) // { // sb.Append("" + v + ""); // } // sb.Append(""); // } // #endregion // #region 打印表格--未排序 // //Dictionary> Values = body[keys]; // //int count = Values.Count; // //bool bb = true; // //foreach (var k in Values.Keys) // //{ // // List values = Values[k]; // // values[1] = (Convert.ToInt32(values[1]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00"); // // values[2] = (Convert.ToInt32(values[2]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00"); // // values[3] = (Convert.ToInt32(values[3]) * 1.0 / Convert.ToInt32(values[0])).ToString("0.00"); // // sb.Append(""); // // if (bb) // // { // // sb.Append("" + keys + ""); // // bb = false; // // } // // string[] undn = getUserNameAndDeptName(k); // // sb.Append("" + undn[0] + ""); // // foreach (var v in values) // // { // // sb.Append("" + v + ""); // // } // // sb.Append(""); // //} // #endregion //} #endregion return sb.ToString(); } protected string createTableBody1(string starttime, string endtime) { //存储数据的数据字典 Dictionary> body = new Dictionary>(); //这段时间已完成的报修工单 string sql = string.Format("F_WORKORDERSTATEID=0 and F_WORKORDERTYPEID={0}", 16);//16为报修 if (starttime != "") { sql += " AND F_STARTTIME>='" + starttime + " 00:00:00'"; } if (endtime != "") { sql += " AND F_ENDTIME<='" + endtime + " 23:59:59'"; } DataTable dtable = new BLL.T_Wo_WorkOrderBase().GetList(sql).Tables[0]; //工单总数 int allcount = dtable.Rows.Count; #region 遍历工单找到每个工单所属的部门,总接单和处理时间,总结单时间,总处理时间 for (int i = 0; i < allcount; i++) { //处理这个工单工程师 DataTable workorderbase = new BLL.T_Wo_WorkOrderBase().GetList("F_INSTANCEID=" + dtable.Rows[i]["F_INSTANCEID"]).Tables[0]; if (workorderbase.Rows.Count > 0) { List constructorlist = new BLL.T_Wo_WorkOrderConstructor().GetModelList("F_WORKORDERID=" + workorderbase.Rows[0]["F_WORKORDERID"]); if (constructorlist.Count > 0) { foreach (Model.T_Wo_WorkOrderConstructor constructor in constructorlist) { if (constructor.F_ISMAIN == 1) { int id = Convert.ToInt32(constructor.F_USERID); Model.T_Sys_UserAccount user = new BLL.T_Sys_UserAccount().GetModel(id); if (user != null) { if (user.F_RoleId == 30) { string instanceid = dtable.Rows[i]["F_INSTANCEID"].ToString(); //这个工单是某个部门的工程师处理的就存储起来,如果还有其他工单也是此部门处理的就增加1 if (body.ContainsKey(user.F_UserId)) { body[user.F_UserId][0] = (Convert.ToInt32(body[user.F_UserId][0]) + 1).ToString(); body[user.F_UserId][1] = (Convert.ToInt32(body[user.F_UserId][1]) + Convert.ToInt32(getSumTime(instanceid, "6,7"))).ToString(); body[user.F_UserId][2] = (Convert.ToInt32(body[user.F_UserId][2]) + Convert.ToInt32(getSumTime(instanceid, "6"))).ToString(); body[user.F_UserId][3] = (Convert.ToInt32(body[user.F_UserId][3]) + Convert.ToInt32(getSumTime(instanceid, "7"))).ToString(); } else { body.Add(user.F_UserId, new List() { "1", getSumTime(instanceid, "6,7"), getSumTime(instanceid, "6"), getSumTime(instanceid, "7"), getUserNameAndDeptName(user.F_UserId)[1] }); } } } } } } } } #endregion StringBuilder sb = new StringBuilder(); foreach (var key in body.Keys) { List Values = body[key]; Values[1] = (Convert.ToInt32(Values[1]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00"); Values[2] = (Convert.ToInt32(Values[2]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00"); Values[3] = (Convert.ToInt32(Values[3]) * 1.0 / Convert.ToInt32(Values[0])).ToString("0.00"); sb.Append(""); sb.Append("" + Values[4] + ""); sb.Append("" + getUserNameAndDeptName(key)[0] + ""); for (int i = 0; i < Values.Count(); i++) { if (i == 4) continue; sb.Append("" + Values[i] + ""); } sb.Append(""); } return sb.ToString(); } /// /// 时间转换(将秒转换为易读的时间) /// /// 秒 /// public string GetTimeInfo(string times) { string res = ""; try { double d = Convert.ToDouble(times); res = (d / 3600).ToString("0.00"); } catch { } return res; } private string getSumTime(string instanceid, string stateids) { string sqlwhere = "SELECT sum([F_ELAPSEDTIME]) FROM [T_Wo_WorkOrderHistory] WHERE F_INSTANCEID='" + instanceid + "' AND F_WORKORDERSTATEID IN (" + stateids + ")"; DataTable dt = DBUtility.DbHelperSQL.Query(sqlwhere).Tables[0]; long l = 0; long.TryParse(dt.Rows[0][0].ToString(), out l); return l.ToString(); } private string[] getUserNameAndDeptName(int userid) { var user = new BLL.T_Sys_UserAccount().GetModel(userid); string[] resarr = new string[2]; if (user != null) { resarr[0] = user.F_UserName; var dept = new BLL.T_Sys_Department().GetModel(user.F_DeptId); if (dept != null) { resarr[1] = dept.F_DeptName; } } return resarr; } protected void btnConfirm_Click(object sender, EventArgs e) { OutputTable(); } } }