Нет описания

CallBusyController.cs 5.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using CallCenter.Utility;
  2. using CallCenterApi.DB;
  3. using CallCenterApi.Interface.Controllers.Base;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.Linq;
  8. using System.Web;
  9. using System.Web.Mvc;
  10. namespace CallCenterApi.Interface.Controllers.report
  11. {
  12. public class CallBusyController : BaseController
  13. {
  14. // 置忙统计表
  15. //获取表头
  16. public ActionResult GetColumnList()
  17. {
  18. return Success("获取置忙统计报表表头成功", getcol());
  19. }
  20. //获取数据
  21. public ActionResult GetDataList(string stime, string endtime)
  22. {
  23. DataTable dtNew = new DataTable();
  24. dtNew = getData(stime, endtime);
  25. return Success("获取置忙统计报表数据成功", dtNew);
  26. }
  27. //导出数据
  28. public ActionResult ExptList(string stime, string endtime)
  29. {
  30. if (Request.IsAuthenticated)
  31. {
  32. NPOIHelper npoi = new NPOIHelper();
  33. DataTable dt = getData(stime, endtime);
  34. if (npoi.ExportToExcel("置忙统计表", dt, getcol()) == "")
  35. {
  36. return Success("导出成功");
  37. }
  38. else
  39. {
  40. return Error("导出失败");
  41. }
  42. }
  43. return NoToken("未知错误,请重新登录");
  44. }
  45. private string[] getcol()
  46. {
  47. String[] str = { "工号", "姓名", "在线时长", "置忙次数", "置忙时长", "置忙/在线时间比" };
  48. return str;
  49. }
  50. private DataTable getData(string stime, string endtime)
  51. {
  52. DataTable dtNew = new DataTable();
  53. #region
  54. DataColumn dc1 = new DataColumn("工号");
  55. DataColumn dc2 = new DataColumn("姓名");
  56. DataColumn dc3 = new DataColumn("在线时长");
  57. DataColumn dc4 = new DataColumn("置忙次数");
  58. DataColumn dc5 = new DataColumn("置忙时长");
  59. DataColumn dc6 = new DataColumn("时间比");
  60. dtNew.Columns.Add(dc1);
  61. dtNew.Columns.Add(dc2);
  62. dtNew.Columns.Add(dc3);
  63. dtNew.Columns.Add(dc4);
  64. dtNew.Columns.Add(dc5);
  65. dtNew.Columns.Add(dc6);
  66. #endregion
  67. int SummaryOnlineTotalTime = 0;
  68. int CallNoTotalData = 0;
  69. int CallNoTotalSummaryTime = 0;
  70. #region 时间搜索
  71. string sqllog = "", sqlzm = "";
  72. if (!string.IsNullOrWhiteSpace(stime))
  73. {
  74. sqlzm += " and DATEDIFF(d,F_OptOn,'" + stime + "')<=0";
  75. sqllog += " and datediff(d,F_LoginOutDate,'" + stime + "')<=0";
  76. }
  77. if (!string.IsNullOrWhiteSpace(endtime))
  78. {
  79. sqlzm += " and DATEDIFF(d,F_OptOn,'" + endtime + "')>=0";
  80. sqllog += " and datediff(d,F_LoginOutDate,'" + endtime + "')>=0";
  81. }
  82. #endregion
  83. #region 根据条件获取所需数据
  84. var userAccountList = new BLL.T_Sys_UserAccount().GetModelList("F_DeleteFlag=0 AND F_SeatRight=0");
  85. DataTable dtno = DbHelperSQL.Query("select F_OptTime as TalkNoTotalTime,* from T_Sys_CallOptLogs where F_State=2 and F_OptBy in (select F_UserId from T_Sys_UserAccount where F_DeleteFlag=0 AND F_SeatRight=0)" + sqlzm).Tables[0];
  86. DataTable dtLoginLog = DbHelperSQL.Query("SELECT ISNULL(DATEDIFF(s,F_LoginDate,F_LoginOutDate),0) as SummaryOnLine,* FROM dbo.T_Sys_LoginLogs where F_LoginId in (select F_UserId from T_Sys_UserAccount where F_DeleteFlag=0 and F_SeatRight=0) " + sqllog + " ORDER BY F_LoginDate DESC ").Tables[0];
  87. #endregion
  88. foreach (Model.T_Sys_UserAccount item in userAccountList)
  89. {
  90. #region 计算所需数据
  91. int CallNoNum = dtno.AsEnumerable().Count(dr => dr.Field<int>("F_OptBy") == item.F_UserId);
  92. int CallNoTotalTime = dtno.AsEnumerable().Where(dr => dr.Field<int>("F_OptBy") == item.F_UserId).Sum(dri => dri.Field<int>("TalkNoTotalTime"));
  93. int SummaryOnlineTime = dtLoginLog.AsEnumerable().Where(dr => dr.Field<int>("F_LoginId") == item.F_UserId).Sum(dri => dri.Field<int>("SummaryOnLine"));
  94. SummaryOnlineTotalTime += SummaryOnlineTime;
  95. CallNoTotalData += CallNoNum;
  96. CallNoTotalSummaryTime += CallNoTotalTime;
  97. #endregion
  98. #region 数据提交到dt
  99. DataRow drNew = dtNew.NewRow();
  100. drNew["工号"] = item.F_UserCode;
  101. drNew["姓名"] = item.F_UserName;
  102. drNew["在线时长"] = DateTimeConvert.parseTimeSeconds(SummaryOnlineTime, 1);
  103. drNew["置忙次数"] = CallNoNum;
  104. drNew["置忙时长"] = DateTimeConvert.parseTimeSeconds(CallNoTotalTime, 1);
  105. drNew["时间比"] = SummaryOnlineTime == 0 ? "-" : (CallNoTotalTime / decimal.Parse(SummaryOnlineTime.ToString()) * 100).ToString("f") + "%";
  106. dtNew.Rows.Add(drNew);
  107. #endregion
  108. }
  109. #region 合计
  110. DataRow drtotal = dtNew.NewRow();
  111. drtotal["工号"] = "总计";
  112. drtotal["姓名"] = "";
  113. drtotal["在线时长"] = DateTimeConvert.parseTimeSeconds(SummaryOnlineTotalTime, 1);
  114. drtotal["置忙次数"] = CallNoTotalData;
  115. drtotal["置忙时长"] = DateTimeConvert.parseTimeSeconds(CallNoTotalSummaryTime, 1);
  116. drtotal["时间比"] = SummaryOnlineTotalTime == 0 ? "-" : (CallNoTotalSummaryTime / decimal.Parse(SummaryOnlineTotalTime.ToString()) * 100).ToString("f") + "%";
  117. dtNew.Rows.Add(drtotal);
  118. #endregion
  119. return dtNew;
  120. }
  121. }
  122. }