2898 lines
119 KiB
C#
2898 lines
119 KiB
C#
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<SelectListItem>();
|
||
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<string>();
|
||
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("<span style='color:red'>{0}</span>", item["RECORDID"]));
|
||
}
|
||
var restd = string.Format("<a href=\"javascript:parent.ChildAddTab('{0}', '{1}', '')\">{2}</a>"
|
||
, "客户详细"
|
||
, "/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("<input id=\"BtnPlayer\" type=\"button\" value=\" 播 放 \" onclick=\"PalyRecord('{0}','DivPlayer{1}','{2}',{3})\" />", playurl, item["RECORDID"], cti == null ? "" : cti, Convert.ToInt64(item["RECORDID"]));
|
||
playcrl += string.Format("<div id=\"DivPlayer{0}\"></div><input type=\"hidden\" id=\"hidRecordUrl\" value=\"{1}\" />", 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<Dictionary<string, string>>();
|
||
if (!string.IsNullOrWhiteSpace(eidConfigStr))
|
||
{
|
||
var eidConfigs = Utility.JSONToObject<IList<UnCallRecordConfig>>(eidConfigStr);
|
||
|
||
foreach (var eidConfig in eidConfigs)
|
||
{
|
||
var allEid = new Dictionary<string, string>
|
||
{
|
||
{ "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<string>();
|
||
//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<decimal>();
|
||
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("<a href=\"javascript:parent.ChildAddTab('{0}', '{1}', '')\">{2}</a>"
|
||
//, "客户详细"
|
||
//, "/Csvr/CustomerInfo/CustomerDetail?resid=" + item["RESID"]
|
||
//, item["RESID"]);
|
||
var restd = string.Format("<a href=\"javascript:residInfo('{0}')\">{0}</a>", 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("<span style='color:red'>未回访</span>");
|
||
|
||
}
|
||
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("<span style='color:red'>未回访</span>");
|
||
//}
|
||
//else
|
||
//{
|
||
// table.AddCol("<span style='color:#390'>已回访</span>");
|
||
//}
|
||
}
|
||
if (item["ISHF"].ToString() == "0")
|
||
{
|
||
table.AddCol("<span style='color:red'>未回访</span>");
|
||
}
|
||
else if (item["ISHF"].ToString() == "1")
|
||
{
|
||
table.AddCol("<span style='color:#390'>已回访</span>");
|
||
}
|
||
else
|
||
{
|
||
table.AddCol("<span style='color:#01AAED'>回访失败</span>");
|
||
}
|
||
|
||
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("<input id=\"BtnPlayer\" type=\"button\" value=\" 播 放 \" onclick=\"PalyRecord('{0}','DivPlayer{1}','{2}',{3})\" />", playurl, recordid, cti == null ? "" : cti, Convert.ToInt64(recordid == "" ? "0" : recordid));
|
||
playcrl += string.Format("<div id=\"DivPlayer{0}\"></div><input type=\"hidden\" id=\"hidRecordUrl\" value=\"{1}\" />", 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);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 分配配置
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
private ValidationErrors errors = new ValidationErrors();
|
||
public ActionResult RecordConfig()
|
||
{
|
||
IList<UnCallRecordConfig> unCallRecordConfigs = new List<UnCallRecordConfig>();
|
||
var eidConfig = _BAS_PARAMETER_Q.GetModel_Patameter("UnCallRecordEidConfig");
|
||
if (eidConfig != null)
|
||
{
|
||
unCallRecordConfigs = Utility.JSONToObject<IList<UnCallRecordConfig>>(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();
|
||
}
|
||
/// <summary>
|
||
/// 提交
|
||
/// </summary>
|
||
/// <param name="Json"></param>
|
||
/// <returns></returns>
|
||
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<UnCallRecordConfig> unCallRecordConfigs = new List<UnCallRecordConfig>();
|
||
var eidConfig = _BAS_PARAMETER_Q.GetModel_Patameter("UnCallRecordEidConfig");
|
||
unCallRecordConfigs = Utility.JSONToObject<IList<UnCallRecordConfig>>(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);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 删除
|
||
/// </summary>
|
||
/// <param name="eid"></param>
|
||
/// <returns></returns>
|
||
public JsonResult RecordConfigDelete(decimal eid)
|
||
{
|
||
try
|
||
{
|
||
IList<UnCallRecordConfig> newList = new List<UnCallRecordConfig>();
|
||
IList<UnCallRecordConfig> unCallRecordConfigs = new List<UnCallRecordConfig>();
|
||
var eidConfig = _BAS_PARAMETER_Q.GetModel_Patameter("UnCallRecordEidConfig");
|
||
unCallRecordConfigs = Utility.JSONToObject<IList<UnCallRecordConfig>>(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);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 手动分配
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public ActionResult AllocationRecord(string pkids)
|
||
{
|
||
ViewBag.Ids = pkids;
|
||
return View();
|
||
}
|
||
/// <summary>
|
||
/// 手动分配
|
||
/// </summary>
|
||
/// <param name="ids"></param>
|
||
/// <param name="eid"></param>
|
||
/// <returns></returns>
|
||
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<SelectListItem>();
|
||
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("<a href=\"javascript:parent.ChildAddTab('{0}', '{1}', '')\">{2}</a>"
|
||
//, "客户详细"
|
||
//, "/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("<input id=\"BtnPlayer\" type=\"button\" value=\" 播 放 \" onclick=\"PalyRecord('{0}','DivPlayer{1}','{2}')\" />",
|
||
playurl, item["RECORDID"], cti == null ? "" : cti);
|
||
playcrl += string.Format("<div id=\"DivPlayer{0}\"></div><input type=\"hidden\" id=\"hidRecordUrl\" value=\"{1}\" />", 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;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取录音地址
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取录音地址
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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<CSVR_CALLRECORD>();
|
||
if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
|
||
{
|
||
list = ds.Tables[0].ToList<CSVR_CALLRECORD>();
|
||
}
|
||
|
||
//var coids = new List<string>();
|
||
//foreach (var item in list)
|
||
//{
|
||
// coids.Add(item.COID);
|
||
//}
|
||
//var memoContentList = _ordMemoContent.GetOrdMemoContentByIds(coids);
|
||
|
||
var data = new List<CallRecordView>();
|
||
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<CallRecordView>(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<WD_CallReportModel>();
|
||
|
||
var users = _CacheQ.GetUserList();
|
||
|
||
//日期查询
|
||
if (searchType == "1")
|
||
{
|
||
list = _CSVR_CALLDATAREPORT_BL.GetCallReport(ref pg, usercomboDto, V_STIME, V_ETIME).Tables[0].ToList<WD_CallReportModel>();
|
||
}
|
||
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<WD_CallReportModel>();
|
||
|
||
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 坐席监控
|
||
/// <summary>
|
||
/// 坐席监控
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取坐席列表
|
||
/// </summary>
|
||
private List<Agent> getAgentList()
|
||
{
|
||
List<Agent> alist = new List<Agent>();
|
||
var data = Utility.PostData("http://192.168.1.13:14021/Monitor/GetGroup?type=json", Encoding.UTF8);
|
||
var jdata = Utility.JSONToObject<List<dynamic>>(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<List<Agent>>(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;
|
||
}
|
||
/// <summary>
|
||
/// 艾讯坐席监控
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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<Agent> list = new List<Agent>();
|
||
|
||
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);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 坐席监控
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 坐席监控统计
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[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<List<agentc>>(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<WD_CallReportModel>();
|
||
|
||
if (searchType == "1")
|
||
{
|
||
list = _CSVR_CALLDATAREPORT_BL.GetCallReport(ref pager, usercomboDto, V_STIME, V_ETIME).Tables[0].ToList<WD_CallReportModel>();
|
||
}
|
||
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<WD_CallReportModel>();
|
||
|
||
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; }
|
||
}
|
||
|
||
}
|
||
}
|