Нет описания

ZuoXiTongHuaController.cs 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  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. // [Authority]
  13. public class ZuoXiTongHuaController : BaseController
  14. {
  15. //坐席日通话时长
  16. //获取表头
  17. public ActionResult GetColumnList()
  18. {
  19. ActionResult res = NoToken("未知错误,请重新登录");
  20. String[] str = { "坐席人员", "通话总时长(小时)", "呼出通话总时长(小时)"
  21. , "呼出通话占比", "呼入通话总时长", "呼入通话占比"
  22. ,"平均日呼入通话时长(小时)","平均日呼出通话时长(小时)"
  23. };
  24. res = Success("获取坐席日通话时长统计表头成功", str);
  25. return res;
  26. }
  27. //获取数据
  28. public ActionResult GetDataList(string stime, string endtime, string dpt)
  29. {
  30. ActionResult res = NoToken("未知错误,请重新登录");
  31. DataTable dtNew = new DataTable();
  32. dtNew = getData(stime, endtime, dpt);
  33. #region
  34. //#region
  35. //DataColumn dc1 = new DataColumn("坐席人员");
  36. //DataColumn dc2 = new DataColumn("通话总时长");
  37. //DataColumn dc3 = new DataColumn("呼出通话总时长");
  38. //DataColumn dc4 = new DataColumn("呼出通话占比");
  39. //DataColumn dc5 = new DataColumn("呼入通话总时长");
  40. //DataColumn dc6 = new DataColumn("呼入通话占比");
  41. //DataColumn dc7 = new DataColumn("平均日呼入通话时长");
  42. //DataColumn dc8 = new DataColumn("平均日呼出通话时长");
  43. //dtNew.Columns.Add(dc1);
  44. //dtNew.Columns.Add(dc2);
  45. //dtNew.Columns.Add(dc3);
  46. //dtNew.Columns.Add(dc4);
  47. //dtNew.Columns.Add(dc5);
  48. //dtNew.Columns.Add(dc6);
  49. //dtNew.Columns.Add(dc7);
  50. //dtNew.Columns.Add(dc8);
  51. //#endregion
  52. //string sqltimeCallRecords = "";
  53. //if (stime != null && stime.Trim() != "")
  54. //{
  55. // sqltimeCallRecords += " and CONVERT(varchar , TalkStartTime, 120)>=CONVERT(varchar , '" + stime.Trim() + " 00:00:01', 120) ";
  56. //}
  57. //if (endtime != null && endtime.Trim() != "")
  58. //{
  59. // sqltimeCallRecords += " and CONVERT(varchar , TalkStartTime, 120)<=CONVERT(varchar , '" + endtime.Trim() + " 23:59:59', 120) ";
  60. //}
  61. //double zong1 = 0;
  62. //double zong2 = 0;
  63. //double zong3 = 0;
  64. //double day = 0;
  65. //Double sumshuchu = 0;
  66. //Double sumshuru = 0;
  67. //if (stime != null && endtime != null && endtime.Trim() != "" && stime.Trim() != "")
  68. //{
  69. // TimeSpan time = Convert.ToDateTime(endtime) - Convert.ToDateTime(stime);
  70. // day = time.Days + 1;
  71. //}
  72. //DataTable dt = new DataTable();
  73. //string sql = "SELECT *,(SELECT sum(TalkLongTime) FROM T_Call_CallRecords where UserId=T_Sys_UserAccount.F_Userid " + sqltimeCallRecords + ") as counts from T_Sys_UserAccount where F_RoleId in(1,28,29) order by counts desc ";
  74. //dt = DbHelperSQL.Query(sql).Tables[0];
  75. //for (int i = 0; i < dt.Rows.Count; i++)
  76. //{
  77. // DataRow drNew = dtNew.NewRow();
  78. // sql = "SELECT (SELECT sum(TalkLongTime) FROM T_Call_CallRecords where UserId=" + dt.Rows[i]["F_UserId"].ToString() + "" + sqltimeCallRecords + ") as sums,";
  79. // sql += "(SELECT sum(TalkLongTime) FROM T_Call_CallRecords where UserId=" + dt.Rows[i]["F_UserId"].ToString() + " and CallType=0" + sqltimeCallRecords + ") as sumshuru,";
  80. // sql += "(SELECT sum(TalkLongTime) FROM T_Call_CallRecords where UserId=" + dt.Rows[i]["F_UserId"].ToString() + " and CallType=1" + sqltimeCallRecords + ") as sumshuchu";
  81. // DataTable dt1 = new DataTable();
  82. // dt1 = DbHelperSQL.Query(sql).Tables[0];
  83. // if (dt1.Rows[0]["sums"] == null || dt1.Rows[0]["sums"].ToString() == "" || dt1.Rows[0]["sums"].ToString() == "0")
  84. // {
  85. // continue;
  86. // }
  87. // drNew["坐席人员"] = dt.Rows[i]["F_UserName"].ToString();
  88. // drNew["通话总时长"] = (Convert.ToDouble(dt1.Rows[0]["sums"]) / 3600).ToString("f2");
  89. // Double sums = 0;
  90. // if (dt1.Rows[0]["sums"] != null && dt1.Rows[0]["sums"].ToString() != "")
  91. // {
  92. // zong1 += Convert.ToInt32(dt1.Rows[0]["sums"]);
  93. // sums = Convert.ToInt32(dt1.Rows[0]["sums"]);
  94. // }
  95. // if (dt1.Rows[0]["sumshuchu"] == null || dt1.Rows[0]["sumshuchu"].ToString() == "")
  96. // {
  97. // drNew["呼出通话总时长"] = "0";
  98. // }
  99. // else
  100. // {
  101. // drNew["呼出通话总时长"] = (Convert.ToDouble(dt1.Rows[0]["sumshuchu"]) / 3600).ToString("f2");
  102. // }
  103. // sumshuchu = 0;
  104. // if (dt1.Rows[0]["sumshuchu"] != null && dt1.Rows[0]["sumshuchu"].ToString() != "")
  105. // {
  106. // zong2 += Convert.ToInt32(dt1.Rows[0]["sumshuchu"]);
  107. // sumshuchu = Convert.ToInt32(dt1.Rows[0]["sumshuchu"]);
  108. // }
  109. // if (sums == 0)
  110. // {
  111. // drNew["呼出通话占比"] = "0.00" + "%";
  112. // }
  113. // else
  114. // {
  115. // drNew["呼出通话占比"] = (sumshuchu / sums * 100).ToString("f2") + "%";
  116. // }
  117. // if (dt1.Rows[0]["sumshuru"] == null || dt1.Rows[0]["sumshuru"].ToString() == "")
  118. // {
  119. // drNew["呼入通话总时长"] = "0";
  120. // }
  121. // else
  122. // {
  123. // drNew["呼入通话总时长"] = (Convert.ToDouble(dt1.Rows[0]["sumshuru"]) / 3600).ToString("f2");
  124. // }
  125. // sumshuru = 0;
  126. // if (dt1.Rows[0]["sumshuru"] != null && dt1.Rows[0]["sumshuru"].ToString() != "")
  127. // {
  128. // zong3 += Convert.ToInt32(dt1.Rows[0]["sumshuru"]);
  129. // sumshuru = Convert.ToInt32(dt1.Rows[0]["sumshuru"]);
  130. // }
  131. // if (sums == 0)
  132. // {
  133. // drNew["呼入通话占比"] = "0.00" + "%";
  134. // }
  135. // else
  136. // {
  137. // drNew["呼入通话占比"] = (sumshuru / sums * 100).ToString("f2") + "%";
  138. // }
  139. // drNew["平均日呼入通话时长"] = (sumshuru / day / 3600).ToString("f2");
  140. // drNew["平均日呼出通话时长"] = (sumshuchu / day / 3600).ToString("f2");
  141. // dtNew.Rows.Add(drNew);
  142. //}
  143. //DataRow drzj = dtNew.NewRow();
  144. //drzj["坐席人员"] = "总计";
  145. //drzj["通话总时长"] = (zong1 / 3600).ToString("f2");
  146. //drzj["呼出通话总时长"] = (zong2 / 3600).ToString("f2");
  147. //if (zong1 == 0 || zong2 == 0)
  148. //{
  149. // drzj["呼出通话占比"] = "0.00" + "%";
  150. //}
  151. //else
  152. //{
  153. // drzj["呼出通话占比"] = (Convert.ToDouble(zong2 / zong1) * 100).ToString("f2") + "%";
  154. //}
  155. //drzj["呼入通话总时长"] = (zong3 / 3600).ToString("f2");
  156. //if (zong1 == 0 || zong3 == 0)
  157. //{
  158. // drzj["呼入通话占比"] = "0.00" + "%";
  159. //}
  160. //else
  161. //{
  162. // drzj["呼入通话占比"] = (Convert.ToDouble(zong3 / zong1) * 100).ToString("f2") + "%";
  163. //}
  164. //drzj["平均日呼入通话时长"] = (zong3 / day / 3600).ToString("f2");
  165. //drzj["平均日呼出通话时长"] = (zong2 / day / 3600).ToString("f2");
  166. //dtNew.Rows.Add(drzj);
  167. #endregion
  168. res = Success("获取坐席日通话时长统计数据成功", dtNew);
  169. return res;
  170. }
  171. //导出数据
  172. public ActionResult ExptList(string stime, string endtime, string dpt)
  173. {
  174. ActionResult res = NoToken("未知错误,请重新登录");
  175. if (Request.IsAuthenticated)
  176. {
  177. NPOIHelper npoi = new NPOIHelper();
  178. DataTable dt = getData(stime, endtime, dpt);
  179. if (npoi.ExportToExcel("坐席日通话时长数据", dt) == "")
  180. {
  181. return Success("导出成功");
  182. }
  183. else
  184. {
  185. return Error("导出失败");
  186. }
  187. }
  188. return res;
  189. }
  190. /// <summary>
  191. /// 2018-05-03 lihai 修改用户条件
  192. /// </summary>
  193. /// <param name="stime"></param>
  194. /// <param name="endtime"></param>
  195. /// <returns></returns>
  196. private DataTable getData(string stime, string endtime, string dpt)
  197. {
  198. DataTable dtNew = new DataTable();
  199. #region
  200. DataColumn dc1 = new DataColumn("坐席人员");
  201. DataColumn dc2 = new DataColumn("通话总时长");
  202. DataColumn dc3 = new DataColumn("呼出通话总时长");
  203. DataColumn dc4 = new DataColumn("呼出通话占比");
  204. DataColumn dc5 = new DataColumn("呼入通话总时长");
  205. DataColumn dc6 = new DataColumn("呼入通话占比");
  206. DataColumn dc7 = new DataColumn("平均日呼入通话时长");
  207. DataColumn dc8 = new DataColumn("平均日呼出通话时长");
  208. dtNew.Columns.Add(dc1);
  209. dtNew.Columns.Add(dc2);
  210. dtNew.Columns.Add(dc3);
  211. dtNew.Columns.Add(dc4);
  212. dtNew.Columns.Add(dc5);
  213. dtNew.Columns.Add(dc6);
  214. dtNew.Columns.Add(dc7);
  215. dtNew.Columns.Add(dc8);
  216. #endregion
  217. string sqltimeCallRecords = "";
  218. if (stime != null && stime.Trim() != "")
  219. {
  220. sqltimeCallRecords += " and CONVERT(varchar , BeginTime, 120)>=CONVERT(varchar , '" + stime.Trim() + " 00:00:01', 120) ";
  221. }
  222. if (endtime != null && endtime.Trim() != "")
  223. {
  224. sqltimeCallRecords += " and CONVERT(varchar , BeginTime, 120)<=CONVERT(varchar , '" + endtime.Trim() + " 23:59:59', 120) ";
  225. }
  226. double zong1 = 0;
  227. double zong2 = 0;
  228. double zong3 = 0;
  229. double day = 0;
  230. Double sumshuchu = 0;
  231. Double sumshuru = 0;
  232. if (stime != null && endtime != null && endtime.Trim() != "" && stime.Trim() != "")
  233. {
  234. TimeSpan time = Convert.ToDateTime(endtime) - Convert.ToDateTime(stime);
  235. day = time.Days + 1;
  236. }
  237. DataTable dt = new DataTable();
  238. //2018-05-03 lihai 修改用户条件
  239. //string sql = "SELECT *,(SELECT sum(TalkLongTime) FROM T_Call_CallRecords where UserId=T_Sys_UserAccount.F_Userid " + sqltimeCallRecords + ") as counts from T_Sys_UserAccount where F_RoleId in(1,28,29) order by counts desc ";
  240. //2018-07-06 lihai 部门搜索条件
  241. var sqlUser = "";
  242. if (!string.IsNullOrEmpty(dpt))
  243. {
  244. sqlUser += $" AND F_DeptId = {dpt} ";
  245. }
  246. string sql = "SELECT *,(SELECT sum(TalkLongTime) FROM T_Call_CallRecords where UserId=T_Sys_UserAccount.F_Userid " + sqltimeCallRecords + ") as counts from T_Sys_UserAccount where f_seatFlag=1 and F_WorkNumber!='' " + sqlUser + " order by counts desc ";
  247. dt = DbHelperSQL.Query(sql).Tables[0];
  248. for (int i = 0; i < dt.Rows.Count; i++)
  249. {
  250. DataRow drNew = dtNew.NewRow();
  251. sql = "SELECT (SELECT sum(TalkLongTime) FROM T_Call_CallRecords where UserId=" + dt.Rows[i]["F_UserId"].ToString() + "" + sqltimeCallRecords + ") as sums,";
  252. sql += "(SELECT sum(TalkLongTime) FROM T_Call_CallRecords where UserId=" + dt.Rows[i]["F_UserId"].ToString() + " and CallType=0" + sqltimeCallRecords + ") as sumshuru,";
  253. sql += "(SELECT sum(TalkLongTime) FROM T_Call_CallRecords where UserId=" + dt.Rows[i]["F_UserId"].ToString() + " and CallType=1" + sqltimeCallRecords + ") as sumshuchu";
  254. DataTable dt1 = new DataTable();
  255. dt1 = DbHelperSQL.Query(sql).Tables[0];
  256. object sumsobj = 0;
  257. if (dt1.Rows[0]["sums"] == null || dt1.Rows[0]["sums"].ToString() == "" || dt1.Rows[0]["sums"].ToString() == "0")
  258. {
  259. //continue;
  260. }
  261. else {
  262. sumsobj = dt1.Rows[0]["sums"];
  263. }
  264. drNew["坐席人员"] = dt.Rows[i]["F_UserName"].ToString();
  265. //drNew["通话总时长"] = (Convert.ToDouble(dt1.Rows[0]["sums"]) / 3600).ToString("f2");
  266. //drNew["通话总时长"] = (Convert.ToDouble(sumsobj) / 3600).ToString("0.0000");
  267. drNew["通话总时长"] = CallCenter.Utility.DateTimeConvert.parseTimeSeconds(Convert.ToInt32(sumsobj), 0);
  268. Double sums = 0;
  269. if (sumsobj != null && sumsobj.ToString() != "")
  270. {
  271. zong1 += Convert.ToInt32(sumsobj);
  272. sums = Convert.ToInt32(sumsobj);
  273. }
  274. if (dt1.Rows[0]["sumshuchu"] == null || dt1.Rows[0]["sumshuchu"].ToString() == "")
  275. {
  276. drNew["呼出通话总时长"] = "0";
  277. }
  278. else
  279. {
  280. //drNew["呼出通话总时长"] = (Convert.ToDouble(dt1.Rows[0]["sumshuchu"]) / 3600).ToString("0.0000");
  281. drNew["呼出通话总时长"] = CallCenter.Utility.DateTimeConvert.parseTimeSeconds(Convert.ToInt32(dt1.Rows[0]["sumshuchu"]), 0);
  282. }
  283. sumshuchu = 0;
  284. if (dt1.Rows[0]["sumshuchu"] != null && dt1.Rows[0]["sumshuchu"].ToString() != "")
  285. {
  286. zong2 += Convert.ToInt32(dt1.Rows[0]["sumshuchu"]);
  287. sumshuchu = Convert.ToInt32(dt1.Rows[0]["sumshuchu"]);
  288. }
  289. if (sums == 0)
  290. {
  291. drNew["呼出通话占比"] = "0.00" + "%";
  292. }
  293. else
  294. {
  295. drNew["呼出通话占比"] = (sumshuchu / sums * 100).ToString("f2") + "%";
  296. }
  297. if (dt1.Rows[0]["sumshuru"] == null || dt1.Rows[0]["sumshuru"].ToString() == "")
  298. {
  299. drNew["呼入通话总时长"] = "0";
  300. }
  301. else
  302. {
  303. //drNew["呼入通话总时长"] = (Convert.ToDouble(dt1.Rows[0]["sumshuru"]) / 3600).ToString("0.0000");
  304. drNew["呼入通话总时长"] = CallCenter.Utility.DateTimeConvert.parseTimeSeconds(Convert.ToInt32(dt1.Rows[0]["sumshuru"]), 0);
  305. }
  306. sumshuru = 0;
  307. if (dt1.Rows[0]["sumshuru"] != null && dt1.Rows[0]["sumshuru"].ToString() != "")
  308. {
  309. zong3 += Convert.ToInt32(dt1.Rows[0]["sumshuru"]);
  310. sumshuru = Convert.ToInt32(dt1.Rows[0]["sumshuru"]);
  311. }
  312. if (sums == 0)
  313. {
  314. drNew["呼入通话占比"] = "0.00" + "%";
  315. }
  316. else
  317. {
  318. drNew["呼入通话占比"] = (sumshuru / sums * 100).ToString("f2") + "%";
  319. }
  320. if (day == 0)
  321. {
  322. drNew["平均日呼入通话时长"] = "0";
  323. drNew["平均日呼出通话时长"] = "0";
  324. }
  325. else
  326. {
  327. //drNew["平均日呼入通话时长"] = (sumshuru / day ).ToString("0.0000");
  328. //drNew["平均日呼出通话时长"] = (sumshuchu / day).ToString("0.0000");
  329. drNew["平均日呼入通话时长"] = CallCenter.Utility.DateTimeConvert.parseTimeSeconds(Convert.ToInt32(sumshuru / day), 0);
  330. drNew["平均日呼出通话时长"] = CallCenter.Utility.DateTimeConvert.parseTimeSeconds(Convert.ToInt32(sumshuchu / day), 0);
  331. }
  332. dtNew.Rows.Add(drNew);
  333. }
  334. DataRow drzj = dtNew.NewRow();
  335. drzj["坐席人员"] = "总计";
  336. //drzj["通话总时长"] = (zong1 / 3600).ToString("0.0000");
  337. //drzj["呼出通话总时长"] = (zong2 / 3600).ToString("0.0000");
  338. drzj["通话总时长"] = CallCenter.Utility.DateTimeConvert.parseTimeSeconds(Convert.ToInt32(zong1), 0);
  339. drzj["呼出通话总时长"] = CallCenter.Utility.DateTimeConvert.parseTimeSeconds(Convert.ToInt32(zong2), 0);
  340. if (zong1 == 0 || zong2 == 0)
  341. {
  342. drzj["呼出通话占比"] = "0.00" + "%";
  343. }
  344. else
  345. {
  346. drzj["呼出通话占比"] = (Convert.ToDouble(zong2 / zong1) * 100).ToString("f2") + "%";
  347. }
  348. //drzj["呼入通话总时长"] = (zong3 / 3600).ToString("0.0000");
  349. drzj["呼入通话总时长"] = CallCenter.Utility.DateTimeConvert.parseTimeSeconds(Convert.ToInt32(zong3), 0);
  350. if (zong1 == 0 || zong3 == 0)
  351. {
  352. drzj["呼入通话占比"] = "0.00" + "%";
  353. }
  354. else
  355. {
  356. drzj["呼入通话占比"] = (Convert.ToDouble(zong3 / zong1) * 100).ToString("f2") + "%";
  357. }
  358. if (day == 0)
  359. {
  360. drzj["平均日呼入通话时长"] = "0";
  361. drzj["平均日呼出通话时长"] = "0";
  362. }
  363. else
  364. {
  365. //drzj["平均日呼入通话时长"] = (zong3 / day / 3600).ToString("0.0000");
  366. //drzj["平均日呼出通话时长"] = (zong2 / day / 3600).ToString("0.0000");
  367. drzj["平均日呼入通话时长"] = CallCenter.Utility.DateTimeConvert.parseTimeSeconds(Convert.ToInt32(zong3 / day), 0);
  368. drzj["平均日呼出通话时长"] = CallCenter.Utility.DateTimeConvert.parseTimeSeconds(Convert.ToInt32(zong2 / day), 0);
  369. }
  370. dtNew.Rows.Add(drzj);
  371. return dtNew;
  372. }
  373. }
  374. }