TG.WXCRM.V4/WEB/Controllers/Csvr/CallRecordController.cs

2656 lines
106 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.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; }
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; }
private ValidationErrors error = new ValidationErrors();
private bool isL2 = false;
private 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("CNAME", "", "客户");
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();
}
[AuthorizeRedirect(Roles = InitRights.CONST_录音查询)]
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"];
string V_CNAME = form["CNAME"];
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);
}
if (RecordPara == "rCname")
{
if (string.IsNullOrEmpty(V_CNAME))
return JsonHandler.ManageMessage("客户不能为空", 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_CNAME, 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["UMID"]
, item["UMID"]);
table.AddCol(restd);
table.AddCol(item["CNAME"]);
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.AddHiddenHeadCol("PKID", "PKID");
tab.AddHiddenHeadCol("FileName", "FileName");
tab.AddHeadCol("RECORDID", "", "编号");
tab.AddHeadCol("UMID", "", "客户ID");
tab.AddHeadCol("CALLTYPE", "", "呼叫类型");
tab.AddHeadCol("SERVICENUMBER", "", "主叫号码");
tab.AddHeadCol("TELNUMBERLAST4", "", "被叫号码");
tab.AddHeadCol("TIMELENGTH", "", "时长(秒)");
tab.AddHeadCol("TIMESTART", "", "开始时间");
tab.AddHeadCol("SALESEID", "", "受理人");
tab.AddHeadCol("memotime", "", "工单最后时间");
tab.AddHeadCol("inneruser", "", "最后联系人");
tab.AddHeadCol("group", "", "组别");
tab.AddHeadCol("ISHF", "", "是否回访");
//tab.AddHeadCol("", "", "播放");
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);
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_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.GetUnCallRecord(ref pg, usercomboDto, V_STIME, V_ETIME, V_MAXLENGTH, V_MINLENGHT, V_RESID, V_RECORDID, V_CALLTYPE, V_ISCHECKED);
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["UMID"]
, item["UMID"]);
table.AddCol(restd);
if (item["CALLTYPE"].ToString() == "1")//呼出
{
table.AddCol("呼出");
table.AddCol(item["SERVICENUMBER"]);//主叫
table.AddCol(item["TELNUMBERLAST4"]);//被叫
}
else
{
table.AddCol("呼入");
table.AddCol(item["TELNUMBERLAST4"]);//被叫
table.AddCol(item["SERVICENUMBER"]);//主叫
}
table.AddCol(item["TIMELENGTH"]);
table.AddCol(item["TIMESTART"]);
table.AddCol(item["UNAME"] + "" + item["SALESEID"]);
table.AddCol(item["memotime"]);
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("<span style='color:red'>未回访</span>");
}
else
{
table.AddCol(InnerUserHelper.Instance.EidAndName(decimal.Parse(item["inneruserid"].ToString())));
table.AddCol(InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(decimal.Parse(item["inneruserid"].ToString()))));
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>");
}
}
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);
}
}
[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_CNAME = Request["CNAME"];
//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_CNAME, V_CALLTYPE, V_ISCHECKED);
var list = new List<CSVR_CALLRECORD_View>();
if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
{
list = ds.Tables[0].ToList<CSVR_CALLRECORD_View>();
}
//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.UMID,
CALLTYPE = item.CALLTYPE.ToString() == "1" ? "呼出" : "呼入",
//SERVICENUMBER = item.SERVICENUMBER,
//TELNUMBERLAST4 = item.TELNUMBERLAST4,
CNAME = item.CNAME,
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)//
{
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", "10000");
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
[AuthorizeRedirect(Roles = InitRights.CONST_自动外呼统计)]
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"));
}
[AuthorizeRedirect(Roles = InitRights.CONST_自动外呼统计)]
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 CNAME { 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; }
}
private class CSVR_CALLRECORD_View : CSVR_CALLRECORD
{
public string CNAME { get; set; }
public string UMID { get; set; }
}
}
}