using Ninject; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Web.Mvc; using WX.CRM.BLL.Base; using WX.CRM.Common; using WX.CRM.IBLL.Base; using WX.CRM.IBLL.Csvr; using WX.CRM.IBLL.IPSC; using WX.CRM.IBLL.Ord; using WX.CRM.IBLL.Quality; using WX.CRM.IBLL.Res; using WX.CRM.IBLL.Util; using WX.CRM.IBLL.Wx; using WX.CRM.Model.DTO; using WX.CRM.Model.Entity; using WX.CRM.Model.Enum; using WX.CRM.Model.MAP; using WX.CRM.Model.QueryMap; using WX.CRM.WebHelper; namespace WX.CRM.WEB.Controllers.Ord { public class CallRecordController : BaseController { [Ninject.Inject] public ICSVR_CALLRECORD _CSVR_CALLRECORD_BL { get; set; } public ICSVR_CALLRECORD_Q CSVR_CALLRECORD_Q { get; set; } public ICSVR_RECORDSHARED recordShared { get; set; } [Inject] public ICSVR_RECORDSHARED_Q _recordSharedQ { get; set; } [Ninject.Inject] public ICSVR_CALLDATAREPORT _CSVR_CALLDATAREPORT_BL { get; set; } [Ninject.Inject] public IBAS_PARAMETER_Q _BAS_PARAMETER_Q { get; set; } [Ninject.Inject] public IBAS_PARAMETER _PARAMETER { get; set; } public IBAS_PARAMETER_Q BAS_PARAMETER_BL { get; set; } [Inject] public IIPSC_Q _IIPSC_Q { get; set; } [Inject] public IBAS_INNERUSER_Q _BAS_INNERUSER_Q { get; set; } [Inject] public ICSVR_CALLSTATIS _CSVR_CALLSTATIS { get; set; } [Inject] public IBAS_INNERGROUP_Q _BAS_INNERGROUP_Q { get; set; } [Inject] public IBAS_LOGINLOG_Q _BAS_LOGINLOG_Q { get; set; } [Inject] public IORD_SERVICEMEMO_Q _OrdServicememoQ { get; set; } [Inject] public ICSVR_HGRECORD _Hgrecord { get; set; } [Inject] public ICSVR_HGRECORD_Q _Hgrecord_Q { get; set; } [Inject] public ICACHE_Q _CacheQ { get; set; } [Inject] public ICSVR_CALLRECORD_Q _CSVR_CALLRECORD_Q { get; set; } [Inject] public IBAS_COMTYPE_Q bas_ComType_Q_BL { get; set; } [Inject] public IWX_MESSAGECOMPLIANCE wx_MessageCompliance_BL { get; set; } [Inject] public IORD_MEMOCONTENT_Q _ordMemoContent { get; set; } [Inject] public IQC_CUSTOMERCOMPLAIN_Q _qcCustomerComplain { get; set; } [Inject] public ICSVR_CALLRECORD_QC _callrecodQc { get; set; } [Inject] public IAutoDial _autodial { get; set; } ValidationErrors error = new ValidationErrors(); bool isL2 = false; bool isBC = false; public CallRecordController(IBAS_PARAMETER_Q __BAS_PARAMETER_BL, ICSVR_CALLRECORD_Q _CSVR_CALLRECORD_Q, ICSVR_RECORDSHARED _recordShared) { BAS_PARAMETER_BL = __BAS_PARAMETER_BL; CSVR_CALLRECORD_Q = _CSVR_CALLRECORD_Q; recordShared = _recordShared; isBC = BAS_PARAMETER_BL.GetModel_Patameter("Sys_Environment_DeptCode").PARAVALUE == Sys_Environment_DeptCode.BCCF01.ToString();// } #region 录音查询 [AuthorizeRedirect(Roles = InitRights.CONST_录音查询)] public ActionResult CallRecordList() { ToolBar tb = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.录音查询, userRightId); ; tb.AllowButton(toolbtn); tb.AddOtherButton("Other1", "添加优秀录音", "icon-flag", "Excellent_Add", true); tb.AddOtherButton("Other2", "添加违规录音", "icon-flag", "Violation_Add", true); tb.AddOtherButton("Other3", "添加合规录音", "icon-flag", "HqRecord_Add", true); tb.AddOtherButton("Other4", "添加升级违规录音", "icon-flag", "ComplainRecord_Add", true); var d = "CallRecord_Download"; if (saleDeptCode == "NJDM01") { d = "CallRecord_Download1"; } tb.AddOtherButton("Other5", "录音下载", "icon-flag", d, true); tb.AddOtherButton("Other6", "录音恢复", "icon-flag", "CallRecord_ReStore", true); tb.AddOtherButton("Other7", "查看录音路径", "icon-flag", "CallRecord_ShowURL", true); tb.AddOtherButton("Other8", "标记已听", "icon-flag", "CallRecord_Checked", true); tb.AddOtherButton("Other9", "导出", "icon-export", "export_click", true); ViewBag.ToolBar = tb; Pager pg = new Pager() { page = 1, rows = 10 }; WebHelper.Table tab = new WebHelper.Table("tablist"); tab.AddHiddenHeadCol("PKID", "PKID"); tab.AddHiddenHeadCol("FileName", "FileName"); tab.AddHeadCol("RECORDID", "", "编号"); tab.AddHeadCol("RESID", "", "客户ID"); tab.AddHeadCol("CALLTYPE", "", "呼叫类型"); tab.AddHeadCol("SERVICENUMBER", "", "主叫号码"); tab.AddHeadCol("TELNUMBERLAST4", "", "被叫号码"); tab.AddHeadCol("TIMELENGTH", "", "时长(秒)"); tab.AddHeadCol("TIMESTART", "", "开始时间"); tab.AddHeadCol("TIMEEND", "", "结束时间"); tab.AddHeadCol("SALESEID", "", "受理人"); tab.AddHeadCol("MEMOCONTENT", "", "工单"); tab.AddHeadCol("", "", "播放"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pg, "tablist", "5,8,10,15"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; var roles = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); if (roles.Contains("[BMZG]") || roles.Contains("[lylb]")) { ViewBag.roleCodes = "[GLY]"; } else { ViewBag.roleCodes = roles; } var list = bas_ComType_Q_BL.GetList().Where(m => m.map_TYPECODE.Contains("MessageCompliance")).OrderBy(m => m.map_TYPECODE).ToList(); var bigTypeList = new List(); if (list != null) { foreach (var m in list) { bigTypeList.Add(new SelectListItem { Text = m.map_TYPENAME, Value = m.map_TYPECODE }); } } ViewBag.BigTypeList = bigTypeList; return View(); } public ActionResult Get_CallRecordListHtml(Pager pg, FormCollection form, QueryUserComboDto usercomboDto, string columns) { WebHelper.Table table = new WebHelper.Table(columns, true); string RecordPara = form["RecordPara"]; string V_RESID = form["RESID"]; string V_RECORDID = form["RECORDID"]; if (RecordPara == "rResid") { if (string.IsNullOrEmpty(V_RESID)) return JsonHandler.ManageMessage("客户Id不能为空", false); } if (RecordPara == "rRecordid") { if (string.IsNullOrEmpty(V_RECORDID)) return JsonHandler.ManageMessage("录音Id不能为空", false); decimal recordid; if (!decimal.TryParse(V_RECORDID, out recordid)) return JsonHandler.ManageMessage("录音Id格式错误", false); } //string V_DEPTID = form["saleDeptId"]; //string V_GROUPID = form["groupId"]; //string V_USERID = form["userId"]; //if (base.userRoleNames.Any(obj => obj.IndexOf("测试") > -1)) //{ // V_DEPTID = ""; // V_GROUPID = ""; // V_USERID = ""; //} DateTime? V_STIME = null; DateTime? V_ETIME = null; int? V_MAXLENGTH = null; int? V_MINLENGHT = null; string V_ISSINGLERESID = form["IsSingleResId"]; string V_ISSINGLERECORDID = form["IsSingleRecordId"]; decimal V_CALLTYPE = form["CallType"].GetDecimal(-1); decimal V_ISCHECKED = form["IsChecked"].GetDecimal(-1); DateTime dt; if (!string.IsNullOrEmpty(form["STIME"]) && DateTime.TryParse(form["STIME"], out dt)) { V_STIME = dt; } if (!string.IsNullOrEmpty(form["ETIME"]) && DateTime.TryParse(form["ETIME"], out dt)) { V_ETIME = dt; } int tint; if (!string.IsNullOrEmpty(form["MINLENGTH"]) && int.TryParse(form["MINLENGTH"], out tint)) { V_MINLENGHT = tint; } if (!string.IsNullOrEmpty(form["MAXLENGTH"]) && int.TryParse(form["MAXLENGTH"], out tint)) { V_MAXLENGTH = tint; } var list = _CSVR_CALLRECORD_BL.GetCallRecord(ref pg, usercomboDto, V_STIME, V_ETIME, V_MAXLENGTH, V_MINLENGHT, V_RESID, V_RECORDID, V_CALLTYPE, V_ISCHECKED); table.gridPager = pg; var coids = new List(); foreach (DataRow item in list.Tables[0].Rows) { coids.Add(item["COID"].ToString()); } var memoContentList = _ordMemoContent.GetOrdMemoContentByIds(coids); foreach (DataRow item in list.Tables[0].Rows) { var coid = item["COID"].ToString(); table.AddHiddenCol(item["PKID"]); table.AddHiddenCol(item["FileName"]); if (item["ISCHECKED"] == null || string.IsNullOrWhiteSpace(item["ISCHECKED"].ToString()) || item["ISCHECKED"].ToString() == "0") { table.AddCol(item["RECORDID"]); } else { table.AddCol(string.Format("{0}", item["RECORDID"])); } var restd = string.Format("{2}" , "客户详细" , "/Csvr/CustomerInfo/CustomerDetail?resid=" + item["RESID"] , item["RESID"]); table.AddCol(restd); var strIsTran = ""; if (item["ISTRAN"].ToString() == "1") { strIsTran = "(转接)"; } if (item["CALLTYPE"].ToString() == "1")//呼出 { table.AddCol("呼出" + strIsTran); table.AddCol(item["SERVICENUMBER"]);//主叫 table.AddCol(item["TELNUMBERLAST4"]);//被叫 } else { table.AddCol("呼入" + strIsTran); table.AddCol(item["TELNUMBERLAST4"]);//被叫 table.AddCol(item["SERVICENUMBER"]);//主叫 } table.AddCol(item["TIMELENGTH"]); table.AddCol(item["TIMESTART"]); table.AddCol(item["TIMEEND"]); table.AddCol(item["UNAME"] + "-" + item["SALESEID"]); if (memoContentList.ContainsKey(coid)) { foreach (var pair in memoContentList) { if (pair.Key == coid) { table.AddCol(pair.Value.STRCONTENT); } } } else { table.AddCol(""); } string cti; string outdept = string.Empty; if (item["OUTDEPT"] != DBNull.Value) { outdept = item["OUTDEPT"].ToString(); } string playurl = _getCallRecordUrl(item["ServerID"].ToString(), item["FileName"].ToString(), outdept, out cti); var playcrl = string.Format("", playurl, item["RECORDID"], cti == null ? "" : cti, Convert.ToInt64(item["RECORDID"])); playcrl += string.Format("
", item["RECORDID"], playurl); table.AddCol(playcrl); table.AddRow(); } var json = new { totalPages = pg.totalPages, totalRows = pg.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } [HttpGet] //[AuthorizeRedirect(Roles = InitRights.CONST_录音查询)] public ActionResult UnCallRecordList() { Pager pg = new Pager() { page = 1, rows = 10 }; WebHelper.Table tab = new WebHelper.Table("tablist"); tab.isCheckbox = true; tab.AddHiddenHeadCol("PKID", "PKID"); tab.AddHiddenHeadCol("FileName", "FileName"); tab.AddHiddenHeadCol("RECORDID", "");//, "编号"); tab.AddHeadCol("UMID", "", "客户ID"); tab.AddHeadCol("DEPTNAME", "", "事业部"); tab.AddHiddenHeadCol("CALLTYPE", "");//, "呼叫类型"); tab.AddHiddenHeadCol("SERVICENUMBER", "");//, "主叫号码"); //tab.AddHeadCol("OFFICIALNUMBER", "", "官网号码"); //tab.AddHeadCol("TELNUMBERLAST4", "", "被叫号码"); tab.AddHeadCol("TIMESTART", "", "进线时间"); //tab.AddHeadCol("SALESEID", "", "受理人"); tab.AddHeadCol("memotime", "", "工单最后时间"); tab.AddHeadCol("memocontent", "", "工单内容"); //tab.AddHeadCol("inneruser", "", "最后联系人"); //tab.AddHeadCol("group", "", "组别"); tab.AddHeadCol("ENAME", "", "分配回访人"); tab.AddHeadCol("ISHF", "", "是否回访"); tab.AddHeadCol("RE_TIMESTART", "", "回访时间"); tab.AddHeadCol("RE_TIMELENGTH", "", "回访时长(秒)"); tab.AddHeadCol("LY", "", "录音"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pg, "tablist", "10,20,50"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); var eidConfigStr = _CacheQ.GetValue_Parameter("UnCallRecordEidConfig"); var allEids = new List>(); if (!string.IsNullOrWhiteSpace(eidConfigStr)) { var eidConfigs = Utility.JSONToObject>(eidConfigStr); foreach (var eidConfig in eidConfigs) { var allEid = new Dictionary { { "name", eidConfig.ENAME }, { "value", eidConfig.EID.ToString() } }; allEids.Add(allEid); } } ViewBag.AllEids = Utility.ToJson(allEids); return View(); } [HttpPost] public JsonResult UnCallRecordList(Pager pg, FormCollection form, QueryUserComboDto usercomboDto, string columns) { try { WebHelper.Table table = new WebHelper.Table(columns, true); string RecordPara = form["RecordPara"]; string V_RESID = form["RESID"]; string V_UMID = form["UMID"]; string V_RECORDID = form["RECORDID"]; if (RecordPara == "rResid") { if (string.IsNullOrEmpty(V_RESID)) return JsonHandler.ManageMessage("客户Id不能为空", false); } if (RecordPara == "rUMID") { if (string.IsNullOrEmpty(V_UMID)) return JsonHandler.ManageMessage("客户Id不能为空", false); } if (RecordPara == "rRecordid") { if (string.IsNullOrEmpty(V_RECORDID)) return JsonHandler.ManageMessage("录音Id不能为空", false); decimal recordid; if (!decimal.TryParse(V_RECORDID, out recordid)) return JsonHandler.ManageMessage("录音Id格式错误", false); } //string V_DEPTID = form["saleDeptId"]; //string V_GROUPID = form["groupId"]; //string V_USERID = form["userId"]; //if (base.userRoleNames.Any(obj => obj.IndexOf("测试") > -1)) //{ // V_DEPTID = ""; V_GROUPID = ""; V_USERID = ""; //} DateTime? V_STIME = null; DateTime? V_ETIME = null; int? V_MAXLENGTH = null; int? V_MINLENGHT = null; string V_ISSINGLERESID = form["IsSingleResId"]; string V_ISSINGLERECORDID = form["IsSingleRecordId"]; decimal V_CALLTYPE = form["CallType"].GetDecimal(-1); decimal V_ISCHECKED = form["IsChecked"].GetDecimal(-1); string V_EIDS = form["eids"]; DateTime dt; if (!string.IsNullOrEmpty(form["STIME"]) && DateTime.TryParse(form["STIME"], out dt)) { V_STIME = dt; } if (!string.IsNullOrEmpty(form["ETIME"]) && DateTime.TryParse(form["ETIME"], out dt)) { V_ETIME = dt; } int tint; if (!string.IsNullOrEmpty(form["MINLENGTH"]) && int.TryParse(form["MINLENGTH"], out tint)) { V_MINLENGHT = tint; } if (!string.IsNullOrEmpty(form["MAXLENGTH"]) && int.TryParse(form["MAXLENGTH"], out tint)) { V_MAXLENGTH = tint; } var list = _CSVR_CALLRECORD_BL.GetUnCallRecord(ref pg, usercomboDto, V_STIME, V_ETIME, V_MAXLENGTH, V_MINLENGHT, V_RESID, V_UMID, V_RECORDID, V_CALLTYPE, V_ISCHECKED, V_EIDS); //var coids = new List(); //foreach (DataRow item in list.Tables[0].Rows) //{ // if (!string.IsNullOrEmpty(item["COID"].ToString())) // coids.Add(item["COID"].ToString()); //} //var memoContentList = _ordMemoContent.GetOrdMemoContentByIds(coids); var contentIds = new List(); foreach (DataRow item in list.Tables[0].Rows) { if (!string.IsNullOrEmpty(item["MEMOCONTENTID"].ToString())) contentIds.Add(decimal.Parse(item["MEMOCONTENTID"].ToString())); } var memoContentList = _ordMemoContent.GetOrdMemoContent(contentIds); table.gridPager = pg; table.isCheckbox = true; foreach (System.Data.DataRow item in list.Tables[0].Rows) { var coid = item["COID"].ToString(); table.AddHiddenCol(item["PKID"]); table.AddHiddenCol(item["FileName"]); table.AddHiddenCol(item["RECORDID"]); //var restd = string.Format("{2}" //, "客户详细" //, "/Csvr/CustomerInfo/CustomerDetail?resid=" + item["RESID"] //, item["RESID"]); var restd = string.Format("{0}", item["UMID"]); table.AddCol(restd); table.AddCol(item["DEPTNAME"]); if (item["CALLTYPE"].ToString() == "1")//呼出 { table.AddHiddenCol("呼出"); table.AddHiddenCol(item["SERVICENUMBER"]);//主叫 //table.AddCol(item["OFFICIALNUMBER"]); //table.AddCol(item["TELNUMBERLAST4"]);//被叫 } else { table.AddHiddenCol("呼入"); table.AddHiddenCol(item["TELNUMBERLAST4"]);//被叫 //table.AddCol(item["OFFICIALNUMBER"]); //table.AddCol(item["SERVICENUMBER"]);//主叫 } // table.AddCol(item["TIMELENGTH"]); table.AddCol(item["TIMESTART"]); //table.AddCol(item["UNAME"] + "-" + item["SALESEID"]); //最后工单时间 table.AddCol(item["memotime"]); //工单内容 //if (memoContentList.ContainsKey(coid)) //{ // foreach (var pair in memoContentList) // { // if (pair.Key == coid) // { // table.AddCol(pair.Value.STRCONTENT); // } // } //} //else //{ // table.AddCol(""); //} if (item["MEMOCONTENTID"] != null && item["MEMOCONTENTID"].ToString() != "") table.AddCol(memoContentList.FirstOrDefault(x => x.CONTENTID == decimal.Parse(item["MEMOCONTENTID"].ToString()))?.STRCONTENT); else table.AddCol(""); DateTime? memotime = null; if (!(item["memotime"] == null || item["memotime"] == DBNull.Value || item["memotime"].ToString() == "")) { memotime = DateTime.Parse(item["memotime"].ToString()); } if (memotime == null) { //table.AddCol(""); //table.AddCol(""); //table.AddCol(item["EID"] + "-" + item["ENAME"]); table.AddCol(item["ENAME"]); //table.AddCol("未回访"); } else { //table.AddCol(InnerUserHelper.Instance.EidAndName(decimal.Parse(item["inneruserid"].ToString()))); //table.AddCol(InnerUserHelper.Instance.GetUsername(decimal.Parse(item["inneruserid"].ToString()))); //table.AddCol(InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(decimal.Parse(item["inneruserid"].ToString())))); //table.AddCol(item["EID"] + "-" + item["ENAME"]); table.AddCol(item["ENAME"]); var timestart = DateTime.Parse(item["TIMESTART"].ToString()); //if (timestart > memotime) //{ // table.AddCol("未回访"); //} //else //{ // table.AddCol("已回访"); //} } if (item["ISHF"].ToString() == "0") { table.AddCol("未回访"); } else if (item["ISHF"].ToString() == "1") { table.AddCol("已回访"); } else { table.AddCol("回访失败"); } table.AddCol(item["RE_TIMESTART"]); table.AddCol(item["RE_TIMELENGTH"]); #region 回拨录音 string cti; string outdept = item["RE_OUTDEPT"].ToString(); var recordid = item["RE_RECORDID"].ToString(); var fileName = item["RE_FileName"].ToString(); if (!string.IsNullOrEmpty(fileName)) { string playurl = _getCallRecordUrl(item["RE_ServerID"].ToString(), fileName, outdept, out cti); var playcrl = string.Format("", playurl, recordid, cti == null ? "" : cti, Convert.ToInt64(recordid == "" ? "0" : recordid)); playcrl += string.Format("
", recordid, playurl); table.AddCol(playcrl); } else { table.AddCol(""); } #endregion table.AddRow(); } var json = new { totalPages = pg.totalPages, totalRows = pg.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return JsonHandler.ManageMessage("系统错误,请稍后重试", false); } } /// /// 分配配置 /// /// private ValidationErrors errors = new ValidationErrors(); public ActionResult RecordConfig() { IList unCallRecordConfigs = new List(); var eidConfig = _BAS_PARAMETER_Q.GetModel_Patameter("UnCallRecordEidConfig"); if (eidConfig != null) { unCallRecordConfigs = Utility.JSONToObject>(eidConfig.PARAVALUE); } else { BAS_PARAMETER model = new BAS_PARAMETER(); model.map_CTIME = DateTime.Now; model.map_UTIME = DateTime.Now; model.map_CREATEUSER = UserId; model.map_UPDATEUSER = UserId; var ret = _PARAMETER.Create_Parameter(ref errors, model); if (ret) CacheHelper.Remove("cache_Parameter_getList"); } ViewBag.dataList = unCallRecordConfigs.OrderBy(m => m.SORT).ToList(); return View(); } /// /// 提交 /// /// /// public JsonResult RecordConfigSubmit(string eidStr, int sort, int status, string type) { try { decimal eid = 0; if (!decimal.TryParse(eidStr, out eid)) { return Json(new { s = false, m = "请输入正确的EID" }, JsonRequestBehavior.AllowGet); } UnCallRecordConfig target = new UnCallRecordConfig(); IList unCallRecordConfigs = new List(); var eidConfig = _BAS_PARAMETER_Q.GetModel_Patameter("UnCallRecordEidConfig"); unCallRecordConfigs = Utility.JSONToObject>(eidConfig.PARAVALUE).OrderBy(m => m.SORT).ToList(); switch (type.ToLower()) { case "add": if (unCallRecordConfigs.Any(m => m.EID == eid)) { return Json(new { s = false, m = "已经存在:" + eid }, JsonRequestBehavior.AllowGet); } var innerUser = _BAS_INNERUSER_Q.getInnerUserByEid(eid); if (innerUser == null) { return Json(new { s = false, m = "不存在eid:" + eid }, JsonRequestBehavior.AllowGet); } UnCallRecordConfig newConfig = new UnCallRecordConfig(); newConfig.EID = eid; newConfig.ENAME = innerUser.UNAME; newConfig.SORT = unCallRecordConfigs.Any() ? (unCallRecordConfigs.Max(m => m.SORT) + 1) : 1; newConfig.STATUS = status; unCallRecordConfigs.Add(newConfig); break; case "change": target = unCallRecordConfigs.FirstOrDefault(m => m.EID == eid); if (target == null) { return Json(new { s = false, m = "更新" + eid + "前,数据不存在!" }, JsonRequestBehavior.AllowGet); } target.STATUS = status; target.SORT = sort; break; case "sort-up": target = unCallRecordConfigs.FirstOrDefault(m => m.EID == eid); var pre = unCallRecordConfigs.Where(m => m.SORT < sort).LastOrDefault();//获取前一个 if (target == null || pre == null) { return Json(new { s = true }, JsonRequestBehavior.AllowGet);//不更新不报错 } sort = pre.SORT; pre.SORT = target.SORT; target.SORT = sort;//交换序号 break; case "sort-down": target = unCallRecordConfigs.FirstOrDefault(m => m.EID == eid); var next = unCallRecordConfigs.Where(m => m.SORT > sort).FirstOrDefault();//获取前一个 if (target == null || next == null) { return Json(new { s = true }, JsonRequestBehavior.AllowGet);//不更新不报错 } sort = next.SORT; next.SORT = target.SORT; target.SORT = sort;//交换序号 break; } eidConfig.PARAVALUE = JsonHelper.ObjDivertToJson(unCallRecordConfigs); var ret = _PARAMETER.Update_Parameter(ref errors, eidConfig);//更新 if (ret) { CacheHelper.Remove("cache_Parameter_getList"); return Json(new { s = true }, JsonRequestBehavior.AllowGet); } else { return Json(new { s = false, m = "操作失败!" }, JsonRequestBehavior.AllowGet); } } catch (Exception ex) { return Json(new { s = false, m = ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 删除 /// /// /// public JsonResult RecordConfigDelete(decimal eid) { try { IList newList = new List(); IList unCallRecordConfigs = new List(); var eidConfig = _BAS_PARAMETER_Q.GetModel_Patameter("UnCallRecordEidConfig"); unCallRecordConfigs = Utility.JSONToObject>(eidConfig.PARAVALUE); newList = unCallRecordConfigs.Where(m => m.EID != eid).ToList(); eidConfig.PARAVALUE = JsonHelper.ObjDivertToJson(newList); var ret = _PARAMETER.Update_Parameter(ref errors, eidConfig);//更新 if (ret) { CacheHelper.Remove("cache_Parameter_getList"); return Json(new { s = true }, JsonRequestBehavior.AllowGet); } else { return Json(new { s = false, m = "操作失败!" }, JsonRequestBehavior.AllowGet); } } catch (Exception ex) { return Json(new { s = false, m = ex.Message }, JsonRequestBehavior.AllowGet); } } /// /// 手动分配 /// /// public ActionResult AllocationRecord(string pkids) { ViewBag.Ids = pkids; return View(); } /// /// 手动分配 /// /// /// /// public JsonResult AllocationEid(string ids, string eidStr) { try { decimal eid = 0; if (!decimal.TryParse(eidStr, out eid)) { return Json(new { s = false, m = "请输入正确的EID" }, JsonRequestBehavior.AllowGet); } var innerUser = _BAS_INNERUSER_Q.getInnerUserByEid(eid); if (innerUser == null) { return Json(new { s = false, m = "不存在eid:" + eid }, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(ids)) { return Json(new { s = false, m = "请选择未接记录!" }, JsonRequestBehavior.AllowGet); } _CSVR_CALLRECORD_BL.ReAllocationRecord(eid, innerUser.UNAME, ids); return Json(new { s = true }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { return Json(new { s = false, m = ex.Message }, JsonRequestBehavior.AllowGet); } } [AuthorizeRedirect(Roles = InitRights.CONST_订单录音查询)] public ActionResult OrderCallRecordList() { ToolBar tb = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.订单录音查询, userRightId); ; tb.AllowButton(toolbtn); ViewBag.ToolBar = tb; Pager pg = new Pager() { page = 1, rows = 10 }; WebHelper.Table tab = new WebHelper.Table("tablist"); tab.AddHiddenHeadCol("PKID", "PKID"); tab.AddHiddenHeadCol("FileName", "FileName"); tab.AddHeadCol("RECORDID", "", "编号"); tab.AddHeadCol("RESID", "", "客户ID"); tab.AddHeadCol("CALLTYPE", "", "呼叫类型"); tab.AddHeadCol("SERVICENUMBER", "", "主叫号码"); tab.AddHeadCol("TELNUMBERLAST4", "", "被叫号码"); tab.AddHeadCol("TIMELENGTH", "", "时长(秒)"); tab.AddHeadCol("TIMESTART", "", "开始时间"); tab.AddHeadCol("SALESEID", "", "受理人"); tab.AddHeadCol("", "", "播放"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pg, "tablist", "5,8,10,15"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); var list = bas_ComType_Q_BL.GetList().Where(m => m.map_TYPECODE.Contains("MessageCompliance")).OrderBy(m => m.map_TYPECODE).ToList(); var bigTypeList = new List(); if (list != null) { foreach (var m in list) { bigTypeList.Add(new SelectListItem { Text = m.map_TYPENAME, Value = m.map_TYPECODE }); } } ViewBag.BigTypeList = bigTypeList; return View(); } public ActionResult Get_OrderCallRecordListHtml(Pager pg, FormCollection form, string columns) { WebHelper.Table table = new WebHelper.Table(columns, true); string RecordPara = form["RecordPara"]; string V_RESID = form["RESID"]; string V_RECORDID = form["RECORDID"]; if (RecordPara == "rResid") { if (string.IsNullOrEmpty(V_RESID)) return JsonHandler.ManageMessage("客户Id不能为空", false); } if (RecordPara == "rRecordid") { if (string.IsNullOrEmpty(V_RECORDID)) return JsonHandler.ManageMessage("录音Id不能为空", false); decimal recordid; if (!decimal.TryParse(V_RECORDID, out recordid)) return JsonHandler.ManageMessage("录音Id格式错误", false); } string V_DEPTID = form["saleDeptId"]; string V_GROUPID = form["groupId"]; string V_USERID = form["userId"]; if (base.userRoleNames.Any(obj => obj.IndexOf("测试") > -1)) { V_DEPTID = ""; V_GROUPID = ""; V_USERID = ""; } DateTime? V_STIME = null; DateTime? V_ETIME = null; int? V_MAXLENGTH = null; int? V_MINLENGHT = null; string V_ISSINGLERESID = form["IsSingleResId"]; string V_ISSINGLERECORDID = form["IsSingleRecordId"]; decimal V_CALLTYPE = form["CallType"].GetDecimal(-1); DateTime dt; if (!string.IsNullOrEmpty(form["STIME"]) && DateTime.TryParse(form["STIME"], out dt)) { V_STIME = dt; } if (!string.IsNullOrEmpty(form["ETIME"]) && DateTime.TryParse(form["ETIME"], out dt)) { V_ETIME = dt; } int tint; if (!string.IsNullOrEmpty(form["MINLENGTH"]) && int.TryParse(form["MINLENGTH"], out tint)) { V_MINLENGHT = tint; } if (!string.IsNullOrEmpty(form["MAXLENGTH"]) && int.TryParse(form["MAXLENGTH"], out tint)) { V_MAXLENGTH = tint; } var list = _CSVR_CALLRECORD_BL.GetOrderCallRecord(ref pg, V_DEPTID, V_GROUPID, V_USERID, V_STIME, V_ETIME, V_MAXLENGTH, V_MINLENGHT, V_RESID, V_RECORDID, V_CALLTYPE); table.gridPager = pg; foreach (System.Data.DataRow item in list.Tables[0].Rows) { table.AddHiddenCol(item["PKID"]); table.AddHiddenCol(item["FileName"]); table.AddCol(item["RECORDID"]); //var restd = string.Format("{2}" //, "客户详细" //, "/Csvr/CustomerInfo/CustomerDetail?resid=" + item["RESID"] //, item["RESID"]); table.AddCol(item["RESID"]); var strIsTran = ""; if (item["ISTRAN"].ToString() == "1") { strIsTran = "(转接)"; } if (item["CALLTYPE"].ToString() == "1")//呼出 { table.AddCol("呼出" + strIsTran); table.AddCol(item["SERVICENUMBER"]);//主叫 table.AddCol(item["TELNUMBERLAST4"]);//被叫 } else { table.AddCol("呼入" + strIsTran); table.AddCol(item["TELNUMBERLAST4"]);//被叫 table.AddCol(item["SERVICENUMBER"]);//主叫 } table.AddCol(item["TIMELENGTH"]); table.AddCol(item["TIMESTART"]); table.AddCol(item["UNAME"] + "-" + item["SALESEID"]); string cti; string outdept = string.Empty; if (item["OUTDEPT"] != DBNull.Value) { outdept = item["OUTDEPT"].ToString(); } string playurl = _getCallRecordUrl(item["ServerID"].ToString(), item["FileName"].ToString(), outdept, out cti); var playcrl = string.Format("", playurl, item["RECORDID"], cti == null ? "" : cti); playcrl += string.Format("
", item["RECORDID"], playurl); table.AddCol(playcrl); table.AddRow(); } var json = new { totalPages = pg.totalPages, totalRows = pg.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } public ActionResult CallRecordDownload(string url, string filename) { var sc = ScLiu(url); if (sc != null) { return File(sc, "application/octet-stream", filename); } return Content("文件不存在!"); } public JsonResult CheckCallRecord(decimal pkid) { var model = _CSVR_CALLRECORD_BL.Get(m => m.PKID == pkid); if (model == null) { return JsonHandler.ManageMessage("录音记录不存在", false); } try { model.ISCHECKED = 1; var flag = _CSVR_CALLRECORD_BL.Update(model); if (flag) { return JsonHandler.ManageMessage("操作成功", true); } else { return JsonHandler.ManageMessage("操作失败", false); } } catch (Exception ex) { return JsonHandler.ManageMessage(ex.Message, false); } } public Stream ScLiu(string path) { using (System.IO.MemoryStream memStream = new System.IO.MemoryStream()) { WebClient webClient = new WebClient(); var obj = webClient.OpenRead(path); return obj; } } /// /// 获取录音地址 /// /// private string _getCallRecordUrl(string _ServerID, string _FileName, out string cti) { var playurl = ""; cti = ""; var _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord"); if (null != _IAD_localhostCallRecord) { var FuturesRecordServerUrl = _IAD_localhostCallRecord.PARAVALUE; playurl = FuturesRecordServerUrl + "?serverID=" + _ServerID + "&file=" + _FileName.Replace("\\", "/"); cti = _CSVR_CALLRECORD_Q.Sys_Environment_CTI_VER(); if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷移动坐席).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷固定坐席).ToString()) { var shjctiinterface = Utility.GetSettingByKey("shj"); playurl = shjctiinterface + "?action=record_download&filename=/var/spool/asterisk/monitor/" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.和声).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯).ToString()) { playurl = FuturesRecordServerUrl + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString()) { _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord_AX"); var filename = _FileName; if (null != _IAD_localhostCallRecord) { playurl = _IAD_localhostCallRecord.PARAVALUE + (filename.StartsWith("UP") ? "/home/" + filename : filename); playurl = playurl.Replace("\\", "/"); } } } return playurl; } /// /// 获取录音地址 /// /// private string _getCallRecordUrl(string _ServerID, string _FileName, string outdept, out string cti) { var playurl = ""; cti = ""; var _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord"); if (null != _IAD_localhostCallRecord) { var FuturesRecordServerUrl = _IAD_localhostCallRecord.PARAVALUE; playurl = FuturesRecordServerUrl + "?serverID=" + _ServerID + "&file=" + _FileName.Replace("\\", "/"); cti = _CSVR_CALLRECORD_Q.Sys_Environment_CTI_VER(); if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷移动坐席).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷固定坐席).ToString()) { var shjctiinterface = Utility.GetSettingByKey("shj"); playurl = shjctiinterface + "?action=record_download&filename=/var/spool/asterisk/monitor/" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.和声).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯).ToString()) { playurl = FuturesRecordServerUrl + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString()) { _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord_AX" + (string.IsNullOrEmpty(outdept) ? "" : ("_" + outdept))); var filename = _FileName; if (null != _IAD_localhostCallRecord) { playurl = _IAD_localhostCallRecord.PARAVALUE + (filename.StartsWith("UP") ? "/home/" + filename : filename); playurl = playurl.Replace("\\", "/"); } } } return playurl; } [AuthorizeToolBar(InitRights.CONST_录音查询, InitToolBar.CONST_Other9)] public FileResult CallRecordExport(QueryUserComboDto usercomboDto, string columns) { string RecordPara = Request["RecordPara"]; string V_RESID = Request["RESID"]; string V_RECORDID = Request["RECORDID"]; //string V_DEPTID = form["saleDeptId"]; string V_GROUPID = form["groupId"]; string V_USERID = form["userId"]; //if (base.userRoleNames.Any(obj => obj.IndexOf("测试") > -1)) //{ // V_DEPTID = ""; V_GROUPID = ""; V_USERID = ""; //} DateTime? V_STIME = null; DateTime? V_ETIME = null; int? V_MAXLENGTH = null; int? V_MINLENGHT = null; string V_ISSINGLERESID = Request["IsSingleResId"]; string V_ISSINGLERECORDID = Request["IsSingleRecordId"]; decimal V_CALLTYPE = Request["CallType"].GetDecimal(-1); decimal V_ISCHECKED = Request["IsChecked"].GetDecimal(-1); DateTime dt; if (!string.IsNullOrEmpty(Request["STIME"]) && DateTime.TryParse(Request["STIME"], out dt)) { V_STIME = dt; } if (!string.IsNullOrEmpty(Request["ETIME"]) && DateTime.TryParse(Request["ETIME"], out dt)) { V_ETIME = dt; } int tint; if (!string.IsNullOrEmpty(Request["MINLENGTH"]) && int.TryParse(Request["MINLENGTH"], out tint)) { V_MINLENGHT = tint; } if (!string.IsNullOrEmpty(Request["MAXLENGTH"]) && int.TryParse(Request["MAXLENGTH"], out tint)) { V_MAXLENGTH = tint; } string checkedFilds = PageRequest.GetQueryString("checkedFilds"); checkedFilds = checkedFilds.Replace("[]", "").Replace("[MEMOCONTENT]", ""); string checkedTitles = PageRequest.GetQueryString("checkedTitles"); checkedTitles = checkedTitles.Replace(",播放", "").Replace(",工单", ""); Pager pager = new Pager() { page = 1, rows = int.MaxValue }; var ds = _CSVR_CALLRECORD_BL.GetCallRecord(ref pager, usercomboDto, V_STIME, V_ETIME, V_MAXLENGTH, V_MINLENGHT, V_RESID, V_RECORDID, V_CALLTYPE, V_ISCHECKED); var list = new List(); if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { list = ds.Tables[0].ToList(); } //var coids = new List(); //foreach (var item in list) //{ // coids.Add(item.COID); //} //var memoContentList = _ordMemoContent.GetOrdMemoContentByIds(coids); var data = new List(); foreach (var item in list) { var info = new CallRecordView() { RECORDID = item.RECORDID.ToString(), RESID = item.RESID, CALLTYPE = item.CALLTYPE.ToString() == "1" ? "呼出" : "呼入", //SERVICENUMBER = item.SERVICENUMBER, //TELNUMBERLAST4 = item.TELNUMBERLAST4, TIMELENGTH = Convert.ToInt32(item.TIMELENGTH), TIMESTART = item.TIMESTART.ToString(), TIMEEND = item.TIMEEND.ToString(), SALESEID = InnerUserHelper.Instance.EidAndName(InnerUserHelper.Instance.GetUserIdByEid(Convert.ToDecimal(item.SALESEID))) }; if (item.CALLTYPE == 1) { info.SERVICENUMBER = item.SERVICENUMBER; info.TELNUMBERLAST4 = item.TELNUMBERLAST4; } else { info.SERVICENUMBER = item.TELNUMBERLAST4; info.TELNUMBERLAST4 = item.SERVICENUMBER; } //if(memoContentList.ContainsKey(item.COID)) //{ // var tmp = memoContentList.FirstOrDefault(p => p.Key == item.COID).Value; // if (tmp != null) // { // info.MEMOCONTENT = tmp.STRCONTENT; // } //} data.Add(info); } return File(ExcelHelper.ExportListModelToExcel(data, "录音列表", 60000, checkedFilds, checkedTitles, null), "application/ms-excel", PageRequest.GetDlownLoadName("录音列表.xls")); } public string CallRecordDataFormart(string key, object value) { string formartValue = string.Empty; switch (key) { case "CALLTYPE": formartValue = value.ToString() == "1" ? "呼出" : "呼入"; break; case "SALESEID": formartValue = InnerUserHelper.Instance.EidAndName(InnerUserHelper.Instance.GetUserIdByEid(Convert.ToDecimal(value))).ToString(); break; default: formartValue = string.Format("{0}", value); break; } return formartValue; } #region 添加共享录音 [HttpPost] public JsonResult RecordAdd(string Memo, string RecordTypeId, decimal Pkid, string AddTypeId, string BigType, string SubType, string Result) { CSVR_RECORDSHARED sharedModel = new CSVR_RECORDSHARED(); CSVR_CALLRECORD entity = CSVR_CALLRECORD_Q.GetModel_CallRecord(Pkid); WX_MESSAGECOMPLIANCE compliance = null; if (entity != null) { var saleUserId = InnerUserHelper.Instance.GetUserIdByEid(entity.SALESEID); sharedModel.RECORDID = entity.RECORDID; sharedModel.MEMO = Memo; sharedModel.CTIME = DateTime.Now; sharedModel.FILENAME = entity.FILENAME; sharedModel.INNERUSERID = UserId; sharedModel.RECORDSHAREDTYPE = Convert.ToDecimal(AddTypeId); if (string.IsNullOrWhiteSpace(RecordTypeId)) { sharedModel.RECORDTYPEID = 0; } else { sharedModel.RECORDTYPEID = Convert.ToDecimal(RecordTypeId); } sharedModel.RESID = entity.RESID; sharedModel.SALESEID = entity.SALESEID; sharedModel.SERVERID = entity.SERVERID; sharedModel.SERVICENUMBER = entity.SERVICENUMBER; sharedModel.TELNUMBERLAST4 = entity.TELNUMBERLAST4; sharedModel.TIMEEND = entity.TIMEEND; sharedModel.TIMELENGTH = entity.TIMELENGTH; sharedModel.TIMESTART = entity.TIMESTART; sharedModel.BIGTYPE = BigType; sharedModel.SUBTYPE = SubType; sharedModel.SALESUSERID = saleUserId; compliance = new WX_MESSAGECOMPLIANCE { PKID = new SEQUENCES_BL().Seq_base_get(), CTIME = DateTime.Now, OPERATORID = UserId, BIGTYPE = BigType, SUBTYPE = SubType, TYPE = 2, INNERUSERID = saleUserId, RECORDID = entity.RECORDID, SERVERID = entity.SERVERID, FILENAME = entity.FILENAME, RESID = entity.RESID, ORIGINALTIME = entity.CTIME, REMARK = Memo, RESULT = Result }; //进行合规扣款判断 /* 一类违规:首次罚款500元,二次再犯直接给予辞退,或移交司法机关;如该单已成交,同时要扣除此单业绩 二类违规:首次罚款300元,二次再犯罚款500元;第三次给予辞退;如该单已成交,同时要扣除此单业绩 三类违规:首次罚款200元,二次(或二次以上)再犯罚款300元;如该单已成交,扣除此单业绩(超额订单直接退回用户)。 四类违规:给予200元现金处罚; */ if (compliance.BIGTYPE == "MessageComplianceA") { var complianceBlist = wx_MessageCompliance_BL.GetList(m => m.BIGTYPE == "MessageComplianceA" && m.INNERUSERID == saleUserId).ToList(); if (complianceBlist == null) { compliance.PENALTY = 500; } else { if (complianceBlist.Count == 0) { compliance.PENALTY = 500; } else { compliance.PENALTY = 0; } } } else if (compliance.BIGTYPE == "MessageComplianceB") { var complianceBlist = wx_MessageCompliance_BL.GetList(m => m.BIGTYPE == "MessageComplianceB" && m.INNERUSERID == saleUserId).ToList(); if (complianceBlist != null) { if (complianceBlist.Count >= 2) { compliance.PENALTY = 0; } else if (complianceBlist.Count == 1) { compliance.PENALTY = 500; } else if (complianceBlist.Count == 0) { compliance.PENALTY = 300; } } else { compliance.PENALTY = 300; } } else if (compliance.BIGTYPE == "MessageComplianceC") { var complianceBlist = wx_MessageCompliance_BL.GetList(m => m.BIGTYPE == "MessageComplianceC" && m.INNERUSERID == saleUserId).ToList(); if (complianceBlist == null) { compliance.PENALTY = 200; } else { if (complianceBlist.Count == 0) { compliance.PENALTY = 200; } else { compliance.PENALTY = 300; } } } else if (compliance.BIGTYPE == "MessageComplianceD") { compliance.PENALTY = 200; } else { compliance.PENALTY = 0; } } var flag = recordShared.Create_RecordShared(ref error, sharedModel); //标记原录音检查过 entity.ISCHECKED = 1; _CSVR_CALLRECORD_BL.Update(entity); //写入WX_MESSAGECOMPLIANCE表 if (flag && compliance != null) { var res = wx_MessageCompliance_BL.Get(m => m.RECORDID == compliance.RECORDID); if (res == null) { flag = wx_MessageCompliance_BL.Add(compliance) > 0; } } return JsonHandler.InsertMessage(error, flag); } [HttpPost] public JsonResult RecordGoodAdd(string Memo, string RecordTypeId, decimal Pkid, string AddTypeId) { CSVR_RECORDSHARED sharedModel = new CSVR_RECORDSHARED(); CSVR_CALLRECORD entity = CSVR_CALLRECORD_Q.GetModel_CallRecord(Pkid); if (entity != null) { var saleUserId = InnerUserHelper.Instance.GetUserIdByEid(entity.SALESEID); sharedModel.RECORDID = entity.RECORDID; sharedModel.MEMO = Memo; sharedModel.CTIME = DateTime.Now; sharedModel.FILENAME = entity.FILENAME; sharedModel.INNERUSERID = UserId; sharedModel.RECORDSHAREDTYPE = Convert.ToDecimal(AddTypeId); sharedModel.RECORDTYPEID = Convert.ToDecimal(RecordTypeId); sharedModel.RESID = entity.RESID; sharedModel.SALESEID = entity.SALESEID; sharedModel.SERVERID = entity.SERVERID; sharedModel.SERVICENUMBER = entity.SERVICENUMBER; sharedModel.TELNUMBERLAST4 = entity.TELNUMBERLAST4; sharedModel.TIMEEND = entity.TIMEEND; sharedModel.TIMELENGTH = entity.TIMELENGTH; sharedModel.TIMESTART = entity.TIMESTART; sharedModel.SALESUSERID = saleUserId; } else { return JsonHandler.ManageMessage("录音不存在!", false); } var flag = recordShared.Create_RecordShared(ref error, sharedModel); if (flag) { entity.ISCHECKED = 1; _CSVR_CALLRECORD_BL.Update(entity); } return JsonHandler.InsertMessage(error, flag); } #endregion #region 添加合规录音(订单合规回访) [HttpPost] public ActionResult HGRecordAdd(decimal pkid, string memoid, decimal recordid) { string msg = ""; decimal? _memoid = memoid.GetDecimal(); if (!_memoid.HasValue) return JsonHandler.ManageMessage("服务工单Id错误", false); var servicesModel = _OrdServicememoQ.GetHgServiceModel(_memoid.Value); if (null == servicesModel) return JsonHandler.ManageMessage("服务工单Id不存在,请确认", false); CSVR_HGRECORD hgModel = _Hgrecord_Q.GetHgrecord(recordid, 1, null, null); if (null == hgModel) { CSVR_CALLRECORD entity = CSVR_CALLRECORD_Q.GetModel_CallRecord(pkid); if (entity != null) { hgModel = new CSVR_HGRECORD(); hgModel.RECORDID = entity.RECORDID; hgModel.CTIME = DateTime.Now; hgModel.SERVERID = entity.SERVERID; hgModel.FILENAME = entity.FILENAME; hgModel.INNERUSERID = UserId; hgModel.RESID = entity.RESID; hgModel.SALESEID = entity.SALESEID; hgModel.SERVICENUMBER = entity.SERVICENUMBER; hgModel.TELNUMBERLAST4 = entity.TELNUMBERLAST4; hgModel.TIMEEND = entity.TIMEEND; hgModel.TIMELENGTH = entity.TIMELENGTH; hgModel.TIMESTART = entity.TIMESTART; hgModel.MEMOID = _memoid; hgModel.RECORDTYPE = 1; bool isDown = this.download(entity.FILENAME, entity.SERVERID); if (isDown) { hgModel.ISDOWN = 1; msg = "录音下载成功"; } else { hgModel.ISDOWN = 0; msg = "录音下载失败"; } _Hgrecord.Create(hgModel); return JsonHandler.ManageMessage("记录添加成功," + msg, true); } else { return JsonHandler.ManageMessage("录音记录错误,请联系管理员", false); } } else if (hgModel.ISDOWN == 0) { bool isDown = this.download(hgModel.FILENAME, hgModel.SERVERID); if (isDown) { hgModel.ISDOWN = 1; _Hgrecord.Update(hgModel); return JsonHandler.ManageMessage("添加成功", true); } return JsonHandler.ManageMessage("录音下载失败", false); } else { return JsonHandler.ManageMessage("记录已添加,无需重复操作", false); } } #endregion #region 添加投诉录音 [HttpPost] public JsonResult ComplainRecordAdd(decimal pkid, decimal recordId) { string msg = ""; CSVR_HGRECORD hgModel = _Hgrecord_Q.GetHgrecord(recordId, 2, null, null); if (null == hgModel) { CSVR_CALLRECORD entity = CSVR_CALLRECORD_Q.GetModel_CallRecord(pkid); if (entity != null) { hgModel = new CSVR_HGRECORD(); hgModel.RECORDID = entity.RECORDID; hgModel.CTIME = DateTime.Now; hgModel.SERVERID = entity.SERVERID; hgModel.FILENAME = entity.FILENAME; hgModel.INNERUSERID = UserId; hgModel.RESID = entity.RESID; hgModel.SALESEID = entity.SALESEID; hgModel.SERVICENUMBER = entity.SERVICENUMBER; hgModel.TELNUMBERLAST4 = entity.TELNUMBERLAST4; hgModel.TIMEEND = entity.TIMEEND; hgModel.TIMELENGTH = entity.TIMELENGTH; hgModel.TIMESTART = entity.TIMESTART; hgModel.MEMOID = 0; hgModel.RECORDTYPE = 2; bool isDown = this.download(entity.FILENAME, entity.SERVERID); if (isDown) { hgModel.ISDOWN = 1; msg = "录音下载成功"; } else { hgModel.ISDOWN = 0; msg = "录音下载失败"; } _Hgrecord.Create(hgModel); //标记原录音检查过 entity.ISCHECKED = 1; _CSVR_CALLRECORD_BL.Update(entity); return JsonHandler.ManageMessage("记录添加成功," + msg, true); } else { return JsonHandler.ManageMessage("录音记录错误,请联系管理员", false); } } else if (hgModel.ISDOWN == 0) { bool isDown = this.download(hgModel.FILENAME, hgModel.SERVERID); if (isDown) { hgModel.ISDOWN = 1; _Hgrecord.Update(hgModel); return JsonHandler.ManageMessage("添加成功", true); } return JsonHandler.ManageMessage("录音下载失败", false); } else { return JsonHandler.ManageMessage("记录已添加,无需重复操作", false); } } #endregion #region 质检录音 public JsonResult GetRecordQC(decimal recordid) { var model = _callrecodQc.Get(p => p.CALLRECORDID == recordid); return Json(new { model }, JsonRequestBehavior.AllowGet); } [HttpPost] public JsonResult RecordQcSave(decimal recordId, string qcType, string qcTypeName, string qcSubType, string qcSubTypeName, string qcContnet) { try { var model = _callrecodQc.Get(p => p.CALLRECORDID == recordId); if (model == null) { _callrecodQc.Add(new CSVR_CALLRECORD_QC() { CALLRECORDID = recordId, QCTYPE = qcType, QCTYPENAME = qcTypeName, QCSUBTYPE = qcSubType, QCSUBTYPENAME = qcSubTypeName, QCCONTENT = qcContnet, CTIME = DateTime.Now }); } else { model.QCTYPE = qcType; model.QCTYPENAME = qcTypeName; model.QCSUBTYPE = qcSubType; model.QCSUBTYPENAME = qcSubTypeName; model.QCCONTENT = qcContnet; _callrecodQc.Update(model); } return Json(new { result = true }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return Json(new { result = false }, JsonRequestBehavior.AllowGet); } } #endregion private bool download(string file, string serverID) { string server = string.Empty; string _localurl = "\\HQRecordFile\\"; string _IAD_localhostCallRecord = _CacheQ.GetValue_Parameter("ICSR_IAD_localhostCallRecord"); try { string cti = _CSVR_CALLRECORD_Q.Sys_Environment_CTI_VER(); if (cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷固定坐席).ToString() || cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷移动坐席).ToString()) { server = Utility.PostData(_IAD_localhostCallRecord + "?file=" + file, Encoding.UTF8); } else if (cti == ((int)WX.CRM.Model.Enum.CTI_VER.和声).ToString()) { string _file = file.Replace("\\", "/"); server = Utility.PostData(_IAD_localhostCallRecord + "?file=" + _file, Encoding.UTF8); } else if (cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString()) { string _cti; server = _getCallRecordUrl(serverID, file, out _cti); } else { string _file = file.Replace("\\", "/"); server = Utility.PostData(_IAD_localhostCallRecord + "?serverID=" + serverID + "&file=" + _file, Encoding.UTF8); } string setpath = _CacheQ.GetValue_Parameter("hgDownPath"); setpath = string.IsNullOrEmpty(setpath) ? null : setpath; string dirBasepath = FileUnit.GetBaseDirectory(); dirBasepath = dirBasepath.Substring(0, dirBasepath.IndexOf("\\", System.StringComparison.Ordinal)); string localurl = (setpath ?? dirBasepath) + _localurl + file; string d = localurl.Substring(0, localurl.LastIndexOf("\\", System.StringComparison.Ordinal)); if (cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString() && localurl.LastIndexOf("/", System.StringComparison.Ordinal) > 0) { d = localurl.Substring(0, localurl.LastIndexOf("/", System.StringComparison.Ordinal)); } if (!Directory.Exists(d)) { Directory.CreateDirectory(d); } var isOLD = file.StartsWith("UP"); server = server.Replace("\\", "").Replace("\"", ""); string remoteUri = server; if (isOLD) { remoteUri = server + "/home/" + file; } Uri downUri = new Uri(remoteUri); HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(downUri); using (Stream inputStream = hwr.GetResponse().GetResponseStream()) { using (FileStream flieStream = new FileStream(localurl, FileMode.Create)) { inputStream.CopyTo(flieStream); } } return true; } catch (Exception ex) { LogHelper.Error(ex); return false; } } #endregion #region 组别坐席统计 [AuthorizeRedirect(Roles = InitRights.CONST_组别坐席统计)] public ActionResult CallReport() { ToolBar tb = new ToolBar(); string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights.组别坐席统计, userRightId); // tb.AllowButton("Other1", "Other2", "Other3"); tb.AllowButton(toolbtn); tb.AddOtherButton("Other1", "导出", "icon-export", "Export_Click", true); tb.AddOtherButton("Other2", "", "", "", true); tb.AddOtherButton("Other3", "高级查询条件", "icon-search", "AdvanceSearch", true); ViewBag.ToolBar = tb; Pager pager = new Pager() { page = 1, rows = int.MaxValue }; WebHelper.Table tab = new WebHelper.Table("tablist"); //string searchType = Request.Form["SearchType"]; tab.AddHeadCol("wd", "", "维度"); tab.AddHeadCol("Groupname", "", "组别"); tab.AddHeadCol("SALESEID", "", "工号"); tab.AddHeadCol("UNAME", "", "姓名"); var x = 5; tab.AddHeadCol("TOTALCALL", "", "外呼次数(总)", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("TOTAL_UN_COUNT", "", "未接通", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("TOTAL_COUT", "", "已接通", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("TOTAL_COUNT_MOBILE", "", "外呼号码数", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; //tab.AddHeadCol("TIMELEN_COUT", "", "外呼总时长(分)", true); //tab.AddHeadCol("TOTAL_CIN", "", "接听次数", true); //tab.AddHeadCol("TIMELEN_CIN", "", "接听总时长(分)", true); tab.AddHeadCol("TOTALTIME", "", "通话总时长(分)", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("AVGCALL", "", "均通话时长", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); x++; tab.AddHeadCol("JT", "", "接通率(%)", "sortTable('tablist'," + x + ",'float');", "cursor:pointer"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead(); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_组别坐席统计)] public ActionResult Get_CallReportHtml(FormCollection form, QueryUserComboDto usercomboDto) { WebHelper.Table table = new WebHelper.Table("", true); int page = 1; if (form["page"] != null && !int.TryParse(form["page"], out page)) { page = 1; } string InitDatetime = "实时查询"; string searchType = Request.Form["SearchType"]; var isDisMiss = Request["isdismiss"]; var dayType = form["dayType"]; DateTime? V_STIME = null; DateTime? V_ETIME = null; DateTime dt; if (!string.IsNullOrEmpty(form["STIME"]) && DateTime.TryParse(form["STIME"], out dt)) { V_STIME = dt; } if (!string.IsNullOrEmpty(form["ETIME"]) && DateTime.TryParse(form["ETIME"], out dt)) { V_ETIME = dt; } Pager pg = new Pager() { page = 1, rows = 10 }; var list = new List(); var users = _CacheQ.GetUserList(); //日期查询 if (searchType == "1") { list = _CSVR_CALLDATAREPORT_BL.GetCallReport(ref pg, usercomboDto, V_STIME, V_ETIME).Tables[0].ToList(); } else { int wd = 1; if (!string.IsNullOrEmpty(dayType)) { wd = Convert.ToInt32(dayType); } list = _CSVR_CALLDATAREPORT_BL.Get_CallReport(ref pg, wd, usercomboDto, ref InitDatetime); } var data = new List(); foreach (var item in list) { var eid = Convert.ToInt32(item.SALESEID); var user = users.Find(p => p.EID == eid); if (user == null) { continue; } if (isDisMiss == "0" && user.ISDISMISS == 1) { //list.Remove(item); continue; } if (isDisMiss == "1" && user.ISDISMISS == 0) { //list.Remove(item); continue; } data.Add(item); } foreach (var item in data) { var eid = Convert.ToInt32(item.SALESEID); var user = users.Find(p => p.EID == eid); table.AddCol(item.WD == 0 ? GetWD(dayType) : GetWD(item.WD.ToString())); table.AddCol(item.Groupname); table.AddCol(item.SALESEID); table.AddCol(item.UNAME + (user.ISDISMISS == 1 ? "(离职)" : "")); table.AddCol(Convert.ToInt32(item.TOTAL_UN_COUNT) + Convert.ToInt32(item.TOTAL_COUT)); table.AddCol(item.TOTAL_UN_COUNT); table.AddCol(item.TOTAL_COUT); table.AddCol(item.TOTAL_COUNT_MOBILE); //table.AddCol(item.TIMELEN_COUT); //table.AddCol(item.TOTAL_CIN); //table.AddCol(item.TIMELEN_CIN); table.AddCol(item.TotalTime); if (Convert.ToInt32(item.TOTAL_COUT) > 0) { table.AddCol(Math.Round(Convert.ToDecimal(item.TotalTime) / Convert.ToInt32(item.TOTAL_COUT), 2)); } else { table.AddCol("0"); } if ((Convert.ToInt32(item.TOTAL_UN_COUNT) + Convert.ToInt32(item.TOTAL_COUT)) > 0) { var t0 = Convert.ToInt32(item.TOTAL_COUT); var t1 = (Convert.ToInt32(item.TOTAL_UN_COUNT) + Convert.ToInt32(item.TOTAL_COUT)); var t2 = t0 / t1; table.AddCol(string.Format("{0:P}", Convert.ToDecimal(item.TOTAL_COUT) / (Convert.ToDecimal(item.TOTAL_UN_COUNT) + Convert.ToDecimal(item.TOTAL_COUT)))); } else { table.AddCol("0%"); } table.AddRow(); } if (data.Any()) { table.AddCol("合计:"); table.AddCol(""); table.AddCol(""); table.AddCol(""); table.AddCol(Convert.ToInt32(data.Sum(p => p.TOTAL_UN_COUNT)) + Convert.ToInt32(data.Sum(p => p.TOTAL_COUT))); table.AddCol(data.Sum(p => p.TOTAL_UN_COUNT)); table.AddCol(data.Sum(p => p.TOTAL_COUT)); table.AddCol(data.Sum(p => p.TOTAL_COUNT_MOBILE)); table.AddCol(data.Sum(p => p.TotalTime)); if (Convert.ToDecimal(data.Sum(p => p.TOTAL_COUT)) > 0) { table.AddCol(Math.Round(Convert.ToDecimal(data.Sum(p => p.TotalTime)) / Convert.ToDecimal(data.Sum(p => p.TOTAL_COUT)), 2)); } else { table.AddCol("0"); } if ((Convert.ToInt32(data.Sum(p => p.TOTAL_UN_COUNT)) + Convert.ToInt32(data.Sum(p => p.TOTAL_COUT))) > 0) { table.AddCol(string.Format("{0:P}", Convert.ToDecimal(data.Sum(p => p.TOTAL_COUT)) / (Convert.ToDecimal(data.Sum(p => p.TOTAL_UN_COUNT)) + Convert.ToDecimal(data.Sum(p => p.TOTAL_COUT))))); } else { table.AddCol("0%"); } table.AddFootRow(); } var json = new { rowsList = table.GetRows(), foot = table.GetFoot(), initTime = InitDatetime }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion #region 员工坐席统计 public ActionResult UserCallReport() { ToolBar tb = new ToolBar(); ViewBag.ToolBar = tb; Pager pager = new Pager() { page = 1, rows = int.MaxValue }; WebHelper.Table tab = new WebHelper.Table("tablist"); tab.AddHeadCol("WD", "", "维度", true); tab.AddHeadCol("Groupname", "", "组别"); tab.AddHeadCol("SALESEID", "", "工号"); tab.AddHeadCol("UNAME", "", "姓名"); tab.AddHeadCol("TOTAL_UN_COUNT", "", "外呼次数(未接通)", true); tab.AddHeadCol("TOTAL_COUT", "", "外呼次数(已接通)", true); tab.AddHeadCol("TOTAL_COUNT_MOBILE", "", "外呼号码数", true); tab.AddHeadCol("TIMELEN_COUT", "", "外呼总时长(分)", true); tab.AddHeadCol("TOTAL_CIN", "", "接听次数", true); tab.AddHeadCol("TIMELEN_CIN", "", "接听总时长(分)", true); tab.AddHeadCol("TOTALTIME", "", "通话总时长(分)", true); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pager, "tablist", "20,30,40"); ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); return View(); } public ActionResult Get_UserCallReportHtml(FormCollection form) { WebHelper.Table table = new WebHelper.Table("", true); int page = 1; if (form["page"] != null && !int.TryParse(form["page"], out page)) { page = 1; } string dayType = form["dayType"]; int wd = 1; if (!string.IsNullOrEmpty(dayType)) { wd = Convert.ToInt32(dayType); } Pager pg = new Pager() { page = 1, rows = 10 }; var list = _CSVR_CALLDATAREPORT_BL.Get_UserCallReport(ref pg, Convert.ToInt32(Eid)); if (form["order"] != "asc") { switch (form["sort"]) { case "WD": list = list.OrderByDescending(p => p.WD).ToList(); break; case "TOTAL_COUT": list = list.OrderByDescending(p => p.TIMELEN_COUT).ToList(); break; case "TOTAL_COUNT_MOBILE": list = list.OrderByDescending(p => p.TOTAL_COUNT_MOBILE).ToList() ; break; case "TIMELEN_COUT": list = list.OrderByDescending(p => p.TIMELEN_COUT).ToList(); break; case "TOTAL_CIN": list = list.OrderByDescending(p => p.TOTAL_CIN).ToList(); break; case "TIMELEN_CIN": list = list.OrderByDescending(p => p.TIMELEN_CIN).ToList(); break; case "TOTALTIME": list = list.OrderByDescending(p => p.TotalTime).ToList(); break; case "TOTAL_UN_COUNT": list = list.OrderByDescending(p => p.TOTAL_UN_COUNT).ToList() ; break; } } else { switch (form["sort"]) { case "WD": list = list.OrderBy(p => p.WD).ToList(); break; case "TOTAL_COUT": list = list.OrderBy(p => p.TIMELEN_COUT).ToList(); break; case "TOTAL_COUNT_MOBILE": list = list.OrderBy(p => p.TOTAL_COUNT_MOBILE).ToList() ; break; case "TIMELEN_COUT": list = list.OrderBy(p => p.TIMELEN_COUT).ToList(); break; case "TOTAL_CIN": list = list.OrderBy(p => p.TOTAL_CIN).ToList(); break; case "TIMELEN_CIN": list = list.OrderBy(p => p.TIMELEN_CIN).ToList(); break; case "TOTALTIME": list = list.OrderBy(p => p.TotalTime).ToList(); break; case "TOTAL_UN_COUNT": list = list.OrderByDescending(p => p.TOTAL_UN_COUNT).ToList() ; break; } } foreach (var item in list) { table.AddCol(GetWD(item.WD.ToString())); table.AddCol(item.Groupname); table.AddCol(item.SALESEID); table.AddCol(item.UNAME); table.AddCol(item.TOTAL_UN_COUNT); table.AddCol(item.TOTAL_COUT); table.AddCol(item.TOTAL_COUNT_MOBILE); table.AddCol(item.TIMELEN_COUT); table.AddCol(item.TOTAL_CIN); table.AddCol(item.TIMELEN_CIN); table.AddCol(item.TotalTime); table.AddRow(); } var json = new { rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion #region 自动外呼坐席统计 [AuthorizeRedirect(Roles = InitRights.CONST_自动外呼统计)] public ActionResult AutodialDayRpt() { ToolBar tb = new ToolBar(); ViewBag.ToolBar = tb; Pager pager = new Pager() { page = 1, rows = int.MaxValue }; WebHelper.Table tab = new WebHelper.Table("tablist"); tab.AddHeadCol("SALESEID", "", "工号"); tab.AddHeadCol("NAME", "", "NAME"); tab.AddHeadCol("Groupname", "", "组别"); tab.AddHeadCol("timelength", "", "时长"); tab.AddHeadCol("ncount", "", "接通数"); tab.AddHeadCol("jtl", "", "接通率"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead(); return View(); } [AuthorizeRedirect(Roles = InitRights.CONST_自动外呼统计)] public ActionResult GetAutodialDayRptHtml(Pager pager, string columns, DateTime stime, DateTime etime) { Table table = new Table(columns, true); table.gridPager = pager; DataTable tab = _autodial.GetAutoDialDayReport(stime, etime.AddDays(1)); int sumlength = 0; int sumcount = 0; int ajietonglv = 0; foreach (DataRow row in tab.Rows) { int eid = Convert.ToInt32(row["eid"]); if (eid == 0) { table.AddCol("未知"); table.AddCol(""); table.AddCol(""); } else { decimal userid = InnerUserHelper.Instance.GetUserIdByEid(eid); table.AddCol(eid); table.AddCol(InnerUserHelper.Instance.GetTrueNameByUserid(userid)); table.AddCol(InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(userid))); } int timelength = Convert.ToInt32(row["timelength"]); sumlength += timelength; table.AddCol(timelength); int ncount = Convert.ToInt32(row["ncount"]); if (eid != 0) { ajietonglv += ncount; } sumcount += ncount; table.AddCol(ncount); table.AddCol(""); table.AddRow(); } table.AddCol("合计:"); table.AddCol(""); table.AddCol(""); table.AddCol(sumlength); table.AddCol(sumcount); double d = 100 * Convert.ToDouble(ajietonglv) / Convert.ToDouble(sumcount); table.AddCol(string.Format("{0}%", Math.Round(d, 2))); table.AddRow(); var json = new { rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion #region 坐席监控 /// /// 坐席监控 /// /// public ActionResult AgentMonitor(string strFJH) { var cti = _CSVR_CALLRECORD_Q.Sys_Environment_CTI_VER(); if (isL2 || cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString()) Response.Redirect("/CallRecord/AXAgentMonitor"); ViewBag.CtiInterface = Utility.GetSettingByKey("shj"); ViewBag.strFJH = strFJH; if (isL2 || isBC)//L2 { Pager pg = new Pager() { page = 1, rows = 10 }; WebHelper.Table tab = new WebHelper.Table("tablist"); tab.AddHeadCol("username", "", "姓名"); tab.AddHeadCol("username", "", "销售组", "sortTable('tablist',2);", "cursor:pointer"); tab.AddHeadCol("agentid", "", "分机"); tab.AddHeadCol("state", "", "分机状态", "sortTable('tablist',4);", "cursor:pointer"); tab.AddHeadCol("worktype", "", "工作状态", "sortTable('tablist',5);", "cursor:pointer"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pg, "tablist", "5,8,10,15"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); } ViewBag.isBC = isL2 || isBC; return View(); } public ActionResult Get_AgentMonitorListHtml(Pager pg, FormCollection form) { WebHelper.Table table = new WebHelper.Table("", true); table.gridPager = pg; //var list = _IIPSC_Q.Get_IVR_Moniter(); var list = getAgentList(); var userlist = _BAS_INNERUSER_Q.GetList_Group(); var grouplist = _BAS_INNERGROUP_Q.GetList(); if (!string.IsNullOrEmpty(form["groupId"])) { userlist = userlist.Where(obj => obj.map_GID == Convert.ToDecimal(form["groupId"])).ToList(); } if (!string.IsNullOrEmpty(form["userId"])) { userlist = userlist.Where(obj => obj.PKID == Convert.ToDecimal(form["userId"])).ToList(); } if (!string.IsNullOrEmpty(form["fjh"])) { list = list.Where(obj => obj.agentid.ToString() == form["fjh"]).ToList(); } foreach (var item in userlist) { var agent = list.FirstOrDefault(obj => obj.userid == item.EID);//list.Tables[0].Select("userid='" + item.EID + "'"); if (string.IsNullOrEmpty(form["fjh"]) || (!string.IsNullOrEmpty(form["fjh"]) && agent != null)) { table.AddCol(item.UNAME); var g = grouplist.FirstOrDefault(obj => obj.GID == item.map_GID); if (null != g) { table.AddCol(g.GNAME); } else table.AddCol(""); if (null != agent) { table.AddCol(agent.agentid); table.AddCol(GetAgentState(agent.state.ToString())); table.AddCol(GetWorkState(agent.worktype.ToString())); } else { table.AddCol(""); table.AddCol(""); table.AddCol(""); } table.AddRow(); } } var json = new { totalPages = pg.totalPages, totalRows = pg.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } /// /// 获取坐席列表 /// private List getAgentList() { List alist = new List(); var data = Utility.PostData("http://192.168.1.13:14021/Monitor/GetGroup?type=json", Encoding.UTF8); var jdata = Utility.JSONToObject>(data); var groups = jdata.Select(item => item["GroupId"]); foreach (var @group in groups) { string url = string.Format("http://192.168.1.13:14021/Monitor/GetAgent?GroupId={0}&type=json", @group); var Agentdata = Utility.PostData(url, Encoding.UTF8); alist.AddRange(Utility.JSONToObject>(Agentdata));//&&item.telestate==1 } return alist; } private string GetAgentState(string state) { string _st = ""; switch (state) { case "-1": _st = "离线"; break; case "0": _st = "在线"; break; case "1": _st = "被闭塞"; break; case "2": _st = "暂停"; break; case "3": _st = "离开"; break; case "4": _st = "空闲"; break; case "5": _st = "振铃"; break; case "6": _st = "工作"; break; case "7": _st = "工作暂停"; break; default: break; } return _st; } private string GetWorkState(string state) { string _wt = ""; switch (state) { case "0": _wt = "未使用"; break; case "1": _wt = "呼入"; break; case "2": _wt = "转接"; break; case "3": _wt = "手动电脑呼出"; break; case "4": _wt = "手动电话键盘呼出"; break; case "5": _wt = "咨询"; break; case "6": _wt = "执行流程"; break; case "7": _wt = "强插"; break; case "8": _wt = "监听"; break; case "9": _wt = "保持"; break; case "10": _wt = "忙碌"; break; case "11": _wt = "离开"; break; case "12": _wt = "文书处理"; break; case "13": _wt = "暂停"; break; case "14": _wt = "暂停"; break; case "15": _wt = "暂停"; break; case "16": _wt = "暂停"; break; case "17": _wt = "暂停"; break; default: break; } return _wt; } /// /// 艾讯坐席监控 /// /// public ActionResult AXAgentMonitor(string strFJH) { ViewBag.CtiInterface = Utility.GetSettingByKey("shj"); var cti = _CSVR_CALLRECORD_Q.Sys_Environment_CTI_VER(); if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString()) ViewBag.CtiInterface = "http://" + Utility.GetSettingByKey("shj") + "/"; ViewBag.strFJH = strFJH; Pager pg = new Pager() { page = 1, rows = 10 }; Table tab = new Table("tablist"); tab.AddHeadCol("username", "", "姓名"); tab.AddHeadCol("eid", "", "工号", "sortTable('tablist',2,'int');", "cursor:pointer"); tab.AddHeadCol("username", "", "销售组", "sortTable('tablist',3);", "cursor:pointer"); tab.AddHeadCol("agentid", "", "分机"); tab.AddHeadCol("state", "", "状态", "sortTable('tablist',5);", "cursor:pointer"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pg, "tablist", "5,8,10,15"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); ViewBag.ShowPageMonitor = isL2 || isBC; return View(); } public ActionResult Get_AXAgentMonitorListHtml(Pager pg, FormCollection form, string columns) { Table table = new Table(columns, true); table.gridPager = pg; List list = new List(); var userlist = _BAS_INNERUSER_Q.GetList_Group(); var grouplist = _BAS_INNERGROUP_Q.GetList(); if (!string.IsNullOrEmpty(form["groupId"])) { userlist = userlist.Where(obj => obj.map_GID == Convert.ToDecimal(form["groupId"])).ToList(); } if (!string.IsNullOrEmpty(form["userId"])) { userlist = userlist.Where(obj => obj.PKID == Convert.ToDecimal(form["userId"])).ToList(); } var todayloginlist = _BAS_LOGINLOG_Q.GetTodayLoginLogLst(); foreach (var item in userlist) { table.AddCol(item.UNAME); table.AddCol(item.EID); var g = grouplist.FirstOrDefault(obj => obj.GID == item.map_GID); if (null != g) { table.AddCol(g.GNAME); } else table.AddCol(""); var user = todayloginlist.Where(obj => obj.LOGINEID == item.EID).OrderByDescending(obj => obj.LOGINTIME).FirstOrDefault(); if (null != user) table.AddCol(user.TELNUM); else table.AddCol(""); var agent = list.FirstOrDefault(obj => obj.userid == item.EID);//list.Tables[0].Select("userid='" + item.EID + "'"); if (null != agent) { table.AddCol(GetAgentState(agent.state.ToString())); } else { table.AddCol(""); } table.AddRow(); } var json = new { totalPages = pg.totalPages, totalRows = pg.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } /// /// 坐席监控 /// /// public ActionResult AXAgentList(string strFJH) { ViewBag.CtiInterface = Utility.GetSettingByKey("shj"); var cti = _CSVR_CALLRECORD_Q.Sys_Environment_CTI_VER(); if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString()) ViewBag.CtiInterface = "http://" + Utility.GetSettingByKey("shj") + "/"; ViewBag.strFJH = strFJH; Pager pg = new Pager() { page = 1, rows = 10 }; Table tab = new Table("tablist"); tab.AddHeadCol("username", "", "姓名"); tab.AddHeadCol("eid", "", "工号"); tab.AddHeadCol("username", "", "销售组", "sortTable('tablist',2);", "cursor:pointer"); tab.AddHeadCol("agentid", "", "分机"); tab.AddHeadCol("state", "", "状态", "sortTable('tablist',4);", "cursor:pointer"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pg, "tablist", "5,8,10,15"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); return View(); } public ActionResult Get_AXAgentListHtml(Pager pg, FormCollection form, string columns) { Table table = new Table(columns, true); table.gridPager = pg; var userlist = _BAS_INNERUSER_Q.GetList_Group(); var grouplist = _BAS_INNERGROUP_Q.GetList(); if (!string.IsNullOrEmpty(form["groupId"])) { userlist = userlist.Where(obj => obj.map_GID == Convert.ToDecimal(form["groupId"])).ToList(); } if (!string.IsNullOrEmpty(form["userId"])) { userlist = userlist.Where(obj => obj.PKID == Convert.ToDecimal(form["userId"])).ToList(); } var todayloginlist = _BAS_LOGINLOG_Q.GetTodayLoginLogLst(); foreach (var user in userlist) { var todaylogin = todayloginlist.Where(obj => obj.LOGINEID == user.EID).OrderByDescending(obj => obj.LOGINTIME).FirstOrDefault(); if (null == todaylogin) continue; if (null != user) table.AddCol(user.UNAME); else table.AddCol(""); table.AddCol(user.EID); if (null != user) { var g = grouplist.FirstOrDefault(obj => obj.GID == user.map_GID); if (null != g) { table.AddCol(g.GNAME); } else table.AddCol(""); } else table.AddCol(""); if (null != todaylogin) table.AddCol(todaylogin.TELNUM); else table.AddCol(""); table.AddCol(""); table.AddRow(); } var json = new { totalPages = pg.totalPages, totalRows = pg.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } /// /// 坐席监控统计 /// /// [AuthorizeRedirect(Roles = InitRights.CONST_坐席监控)] public ActionResult AgentMonitorReport() { ViewBag.CtiInterface = "http://" + Utility.GetSettingByKey("shj") + "/"; Pager pg = new Pager() { page = 1, rows = 10 }; WebHelper.Table tab = new WebHelper.Table("tablist"); tab.AddHeadCol("username", "", "销售组"); tab.AddHeadCol("agentid0", "", "坐席数", "sortTable('tablist',2, 'int');", "cursor:pointer"); tab.AddHeadCol("agentid1", "", "工作数量", "sortTable('tablist',3, 'int');", "cursor:pointer"); tab.AddHeadCol("agentid2", "", "工作占比"); tab.AddHeadCol("agentid3", "", "空闲数量", "sortTable('tablist',5, 'int');", "cursor:pointer"); tab.AddHeadCol("agentid4", "", "空闲占比"); tab.AddHeadCol("agentid5", "", "离线数量", "sortTable('tablist',7, 'int');", "cursor:pointer"); tab.AddHeadCol("agentid6", "", "离线占比"); tab.AddHeadCol("agentid7", "", "在线数量", "sortTable('tablist',9, 'int');", "cursor:pointer"); tab.AddHeadCol("agentid8", "", "在线占比"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetHead() + Pagination.GetPage(pg, "tablist", "5,8,10,15"); ViewBag.inneruserid = UserId; ViewBag.userGroupId = userGroupId; ViewBag.saleDeptId = saleDeptId; ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); ViewBag.isBC = isL2 || isBC; return View(); } public class agentc { public string state { get; set; } public int tel { get; set; } } [AuthorizeRedirect(Roles = InitRights.CONST_坐席监控)] public ActionResult Get_AgentMonitorReportHtml(Pager pg, FormCollection form) { WebHelper.Table table = new WebHelper.Table("", true); table.gridPager = pg; var res = form["res"]; if (string.IsNullOrEmpty(res)) { return Json(null, JsonRequestBehavior.AllowGet); } var resagent = JsonHelper.JsonDivertToObj>(res); //var agentlist = _IIPSC_Q.Get_IVR_Moniter().Tables[0]; var userlist = _BAS_INNERUSER_Q.GetList_Group(); var grouplist = _BAS_INNERGROUP_Q.GetList(); var q = from agent in resagent join user in userlist on agent.tel equals user.map_FJH select new { gid = user.map_GID, state = agent.state }; var total = q.Count(); foreach (var item in grouplist) { table.AddCol(item.GNAME);//销售组 var c0 = q.Count(obj => obj.gid == item.GID);//坐席数 table.AddCol(c0); var c1 = q.Count(obj => obj.gid == item.GID && (obj.state == "CALLING" || obj.state == "RINGING" || obj.state == "Available (On Demand)"));//工作数量 table.AddCol(c1); if (c0 != 0) table.AddCol((c1 * 100.0 / c0).ToString("f2") + "%"); else table.AddCol(""); var c2 = q.Count(obj => obj.gid == item.GID && obj.state == "Available");//空闲 table.AddCol(c2); if (c0 != 0) table.AddCol((c2 * 100.0 / c0).ToString("f2") + "%"); else table.AddCol(""); var c3 = q.Count(obj => obj.gid == item.GID && (obj.state == "Logged Out" || obj.state == "On Break"));//离线 table.AddCol(c3); if (c0 != 0) table.AddCol((c3 * 100.0 / c0).ToString("f2") + "%"); else table.AddCol(""); var c4 = c1 + c2;//在线 table.AddCol(c4); if (c0 != 0) table.AddCol((c4 * 100.0 / c0).ToString("f2") + "%"); else table.AddCol(""); table.AddRow(); } table.AddCol("合计"); table.AddCol(total); var t1 = q.Count(obj => (obj.state == "CALLING" || obj.state == "RINGING" || obj.state == "Available (On Demand)"));//工作 table.AddCol(t1); if (total != 0) table.AddCol((t1 * 100.0 / total).ToString("f2") + "%"); else table.AddCol(""); var t2 = q.Count(obj => obj.state == "Available");//空闲 table.AddCol(t2); if (total != 0) table.AddCol((t2 * 100.0 / total).ToString("f2") + "%"); else table.AddCol(""); var t3 = q.Count(obj => obj.state == "Logged Out" || obj.state == "On Break");//离线 table.AddCol(t3);//空闲 if (total != 0) table.AddCol((t3 * 100.0 / total).ToString("f2") + "%"); else table.AddCol(""); var t4 = t1 + t2;//在线 table.AddCol(t4); if (total != 0) table.AddCol((t4 * 100.0 / total).ToString("f2") + "%"); else table.AddCol(""); table.AddRow(); var json = new { totalPages = pg.totalPages, totalRows = pg.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion #region 导出 public FileResult Export(QueryUserComboDto usercomboDto) { var isDisMiss = Request["isdismiss"]; DateTime? V_STIME = null; DateTime? V_ETIME = null; DateTime dt; if (!string.IsNullOrEmpty(Request["STime"]) && DateTime.TryParse(Request["STime"], out dt)) { V_STIME = dt; } if (!string.IsNullOrEmpty(Request["ETime"]) && DateTime.TryParse(Request["ETime"], out dt)) { V_ETIME = dt; } Pager pager = new Pager() { rows = int.MaxValue, page = 1 }; string searchType = Request["SearchType"].Substring(0, 1); string checkedFilds = PageRequest.GetQueryString("checkedFilds"); string checkedTitle = PageRequest.GetQueryString("checkedTitles"); var users = _CacheQ.GetUserList(); var list = new List(); if (searchType == "1") { list = _CSVR_CALLDATAREPORT_BL.GetCallReport(ref pager, usercomboDto, V_STIME, V_ETIME).Tables[0].ToList(); } else { string InitDatetime = ""; string dayType = Request["dayType"]; int wd = 1; if (!string.IsNullOrEmpty(dayType)) { wd = Convert.ToInt32(dayType); } list = _CSVR_CALLDATAREPORT_BL.Get_CallReport(ref pager, wd, usercomboDto, ref InitDatetime); } var data = new List(); foreach (var item in list) { var eid = Convert.ToInt32(item.SALESEID); var user = users.Find(p => p.EID == eid); if (user == null) { continue; } if (isDisMiss == "0" && user.ISDISMISS == 1) { continue; } if (isDisMiss == "1" && user.ISDISMISS == 0) { continue; } if (user.ISDISMISS == 1) { item.UNAME += "(离职)"; } item.TOTALCALL = Convert.ToInt32(item.TOTAL_UN_COUNT) + Convert.ToInt32(item.TOTAL_COUT); if (item.TOTAL_COUT > 0) { item.AVGCALL = Math.Round(Convert.ToDecimal(item.TotalTime) / Convert.ToInt32(item.TOTAL_COUT), 2); } else { item.AVGCALL = 0; } if ((Convert.ToInt32(item.TOTAL_UN_COUNT) + Convert.ToInt32(item.TOTAL_COUT)) > 0) { var t0 = Convert.ToInt32(item.TOTAL_COUT); var t1 = (Convert.ToInt32(item.TOTAL_UN_COUNT) + Convert.ToInt32(item.TOTAL_COUT)); var t2 = t0 / t1; item.JT = string.Format("{0:P}", Convert.ToDecimal(item.TOTAL_COUT) / (Convert.ToDecimal(item.TOTAL_UN_COUNT) + Convert.ToDecimal(item.TOTAL_COUT))); } else { item.JT = "0%"; } data.Add(item); } return File(ExcelHelper.ExportListModelToExcel(data, "坐席统计", 5000, checkedFilds, checkedTitle, null), "application/ms-excel", PageRequest.GetDlownLoadName("坐席统计.xls")); } public FileResult StatisExport(QueryUserComboDto usercomboDto) { //string V_DEPTID = Request["saleDeptId"]; //string V_GROUPID = Request["groupId"]; //string V_USERID = Request["userId"]; DateTime? V_STIME = null; DateTime? V_ETIME = null; DateTime dt; if (!string.IsNullOrEmpty(Request["STime"]) && DateTime.TryParse(Request["STime"], out dt)) { V_STIME = dt; } if (!string.IsNullOrEmpty(Request["ETime"]) && DateTime.TryParse(Request["ETime"], out dt)) { V_ETIME = dt; } Pager pager = new Pager() { rows = int.MaxValue, page = 1 }; string checkedFilds = PageRequest.GetQueryString("checkedFilds"); string checkedTitle = PageRequest.GetQueryString("checkedTitles"); var list = _CSVR_CALLDATAREPORT_BL.GetCallReport(ref pager, usercomboDto, V_STIME, V_ETIME); list.Tables[0].Columns.RemoveAt(3); list.Tables[0].Columns.RemoveAt(3); list.Tables[0].Columns.RemoveAt(3); list.Tables[0].Columns.RemoveAt(3); list.Tables[0].Columns.RemoveAt(3); list.Tables[0].Columns.Add("SATISFACTION1"); list.Tables[0].Columns.Add("SATISFACTION2"); list.Tables[0].Columns.Add("SATISFACTION3"); list.Tables[0].Columns.Add("SATISFACTION4"); list.Tables[0].Columns.Add("SATISFACTION5"); DataTable satisfaction = _CSVR_CALLSTATIS.GetList(V_STIME, V_ETIME); foreach (DataRow item in list.Tables[0].Rows) { var satisfactionR = satisfaction.Select("saleseid=" + item["SALESEID"].ToString()); if (isL2 && satisfactionR != null && satisfactionR.Length == 1) { Double cnt1 = Convert.ToDouble(satisfactionR[0]["SATISFACTION1"]), cnt2 = Convert.ToDouble(satisfactionR[0]["SATISFACTION2"]), cnt3 = Convert.ToDouble(satisfactionR[0]["SATISFACTION3"]), cnt4 = Convert.ToDouble(satisfactionR[0]["SATISFACTION4"]); item["SATISFACTION1"] = cnt1; item["SATISFACTION2"] = cnt2; item["SATISFACTION3"] = cnt3; if (cnt1 + cnt2 + cnt3 != 0) { item["SATISFACTION4"] = ((cnt1 / (cnt1 + cnt2 + cnt3)).ToString("P")); item["SATISFACTION5"] = (((cnt1 + cnt2) / (cnt1 + cnt2 + cnt3)).ToString("P")); } } } //ExcelHelper.ExportDataTableToExcel(list.Tables[0], "坐席统计.xls", "坐席统计"); return File(ExcelHelper.ExportDataTableToExcel(list.Tables[0], "坐席满意率统计", checkedFilds, HeadFormat, null), "application/ms-excel", PageRequest.GetDlownLoadName("坐席满意率统计.xls")); } #endregion #region 录音恢复 public ActionResult CallRecordReStore() { try { string resid = Request["resid"], start = Request["start"], end = Request["end"]; DateTime? dtstart = null, dtend = null; DateTime dttmp; if (DateTime.TryParse(start, out dttmp)) dtstart = dttmp; else start = ""; if (DateTime.TryParse(end, out dttmp)) dtend = dttmp; else end = ""; if (string.IsNullOrEmpty(resid)) return JsonHandler.ManageMessage("客户ID不能为空!", false); if (string.IsNullOrEmpty(start)) return JsonHandler.ManageMessage("开始时间不能为空!", false); if (string.IsNullOrEmpty(end)) return JsonHandler.ManageMessage("结束时间不能为空!", false); int nRecord = _CSVR_CALLRECORD_BL.RestoreCallRecord(resid, dtstart, dtend); return JsonHandler.ManageMessage("成功恢复" + nRecord + "条通话记录!", true); } catch (Exception ex) { LogHelper.Error(ex); return JsonHandler.ManageMessage("通话记录恢复失败!", false); } } #endregion public string HeadFormat(string key) { string formartValue = string.Empty; switch (key) { case "GROUPNAME": formartValue = "组别"; break; case "SALESEID": formartValue = "工号"; break; case "UNAME": formartValue = "姓名"; break; case "TOTAL_COUT": formartValue = "外呼次数"; break; case "TOTAL_COUNT_MOBILE": formartValue = "外呼号码数"; break; case "TIMELEN_COUT": formartValue = "外呼总时长(分)"; break; case "TOTAL_CIN": formartValue = "接听次数"; break; case "TIMELEN_CIN": formartValue = "接听总时长(分)"; break; case "TOTALTIME": formartValue = "通话总时长(分)"; break; case "SATISFACTION1": formartValue = "非常满意"; break; case "SATISFACTION2": formartValue = "满意"; break; case "SATISFACTION3": formartValue = "不满意"; break; case "SATISFACTION4": formartValue = "非常满意率"; break; case "SATISFACTION5": formartValue = "满意率"; break; default: formartValue = string.Format("{0}", key); break; } return formartValue; } public string GetWD(string key) { string formartValue = string.Empty; switch (key) { case "1": formartValue = "当天"; break; case "2": formartValue = "本周"; break; case "3": formartValue = "本月"; break; default: formartValue = string.Format("{0}", key); break; } return formartValue; } private class Agent { public int agentch { get; set; } public string agentgroupid { get; set; } public string agentgroupname { get; set; } public int agentid { get; set; } public string calledno { get; set; } public string callingno { get; set; } public string hostname { get; set; } public int is_signon { get; set; } public DateTime logontimelen { get; set; } public string phoneno { get; set; } public int state { get; set; } public DateTime statetimelen { get; set; } public int telemode { get; set; } public DateTime telestaetetimelen { get; set; } public int telestate { get; set; } public int userid { get; set; } public string username { get; set; } public int workch { get; set; } public int worktype { get; set; } } private class CallRecordView { public string RECORDID { get; set; } public string RESID { get; set; } public string CALLTYPE { get; set; } public string SERVICENUMBER { get; set; } public string TELNUMBERLAST4 { get; set; } public int TIMELENGTH { get; set; } public string TIMESTART { get; set; } public string TIMEEND { get; set; } public string SALESEID { get; set; } public string MEMOCONTENT { get; set; } } } }