ComplianceServer/oldcode/WEB/Controllers/Quality/ComplainCustomerController.cs

1158 lines
55 KiB
C#

using CRM.Core.DTO;
using CRM.Core.DTO.Ord;
using Ninject;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using WX.CRM.BLL.Base;
using WX.CRM.BLL.Res;
using WX.CRM.BLL.Util;
using WX.CRM.Common;
using WX.CRM.IBLL.Csvr;
using WX.CRM.IBLL.Ord;
using WX.CRM.IBLL.Qc;
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.Quality
{
public class ComplainCustomerController : BaseController
{
ValidationErrors errors = new ValidationErrors();
[Inject]
public IQC_COMPLAIN_SERVICEMEMO qc_Complain_ServiceMemo_BL { get; set; }
[Inject]
public IORD_MEMO_Q ord_memo_Q { get; set; }
[Inject]
public ICSVR_CALLRECORD CallRecord_BL { get; set; }
[Inject]
public ISecurityHelper sHelper { get; set; }
[Inject]
public IRES_CUSTOMERDETAIL _customerDetail { get; set; }
private readonly IQC_CUSTOMERCOMPLAIN complain;
private readonly IQC_CUSTOMERCOMPLAIN_Q complain_Q;
private readonly ICACHE_Q cache_Q_bll;
private readonly IQC_COMPLAINTDICT_Q _qc_complaintDict_Q;
private readonly IRES_CUSTOMER_Q res_Customer_Q_BL;
private readonly IORD_SERVICEMEMO_Q serviceMemoBiz_Q;
private readonly IQC_COMPLAIN_NOTICE _complainNotice;
private readonly IWX_SZZYORDER _order;
private RES_RESOURCEMOBILE_BL res_ResourceMobile_BL = new RES_RESOURCEMOBILE_BL();
public ComplainCustomerController(IQC_CUSTOMERCOMPLAIN _complain, IQC_CUSTOMERCOMPLAIN_Q _complain_Q, ICACHE_Q _cache_Q_bll, IQC_COMPLAINTDICT_Q qc_complaintDict_Q, IRES_CUSTOMER_Q res_Customer_Q_BL, IORD_SERVICEMEMO_Q serviceMemoBiz_Q, IQC_COMPLAIN_NOTICE complainNotice, IWX_SZZYORDER order)
{
this.complain = _complain;
this.complain_Q = _complain_Q;
this.cache_Q_bll = _cache_Q_bll;
_qc_complaintDict_Q = qc_complaintDict_Q;
this.res_Customer_Q_BL = res_Customer_Q_BL;
this.serviceMemoBiz_Q = serviceMemoBiz_Q;
this._complainNotice = complainNotice;
this._order = order;
}
#region
[AuthorizeRedirect(Roles = InitRights.CONST_投诉客户列表)]
public ActionResult Index()
{
ToolBar tool = new ToolBar();
//tool.AllowButton("Other1");
string[] toolbtn = new ToolButtonView().ToolButtonRight(InitRights., userRightId);
tool.AllowButton(toolbtn);
tool.AddOtherButton("Other2", "标记处理", "icon-add", "btnFlag_Click", true);
tool.AddOtherButton("Other3", "审核", "icon-check", "btnCheck_Click", true);
tool.AddOtherButton("Other5", "提交处理过程", "icon-edit", "btnUpdate_Click", true);
tool.AddOtherButton("Other4", "删除", "icon-remove", "btnDelete_Click", true);
tool.AddOtherButton("Other1", "导出", "icon-export", "btnExport_Click", false);
ViewBag.ToolBar = tool;
var pager = new Pager() { page = 1, rows = 10 };
var tableId = "tablist";
var tab = new Table(tableId);
tab.AddHiddenHeadCol("PKID", "PKID");
tab.AddHeadCol("RESID", "", "客户ID ");
tab.AddHeadCol("CUSTOMERNAME", "", "客户姓名");
tab.AddHeadCol("REASON", "", "投诉内容");
tab.AddHeadCol("LEVELNAME", "", "投诉级别");
tab.AddHeadCol("FROMTYPENAME", "", "投诉来源");
tab.AddHeadCol("STATUSNAME", "", "状态");
tab.AddHeadCol("GROUPNAME", "", "组别");
tab.AddHeadCol("SALESUSER", "", "申请人");
tab.AddHeadCol("CTIME", "", "投诉时间");
tab.AddHeadRow();
ViewBag.List = tab.GetTable() + Pagination.GetPage(pager, tableId, "5,8,10,15");
ViewBag.inneruserid = UserId;
ViewBag.userGroupId = userGroupId;
ViewBag.saleDeptId = saleDeptId;
ViewBag.roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId);
return View();
}
#endregion
#region
[HttpPost]
public JsonResult GetHtmlList(Pager pg, string columns,QueryUserComboDto usercomboDto)
{
string resid = Request["ResId"];
string stime = Request["STime"];
string etime = Request["ETime"];
string fromType = Request["ComplainFromType"];
string level = Request["ComplainLevel"];
string groupId = Request["groupId"];
decimal userId = Request["userId"].GetDecimal(0);
decimal? status = null;
if (!string.IsNullOrEmpty(Request["status"]))
{
status = decimal.Parse(Request["status"]);
}
DateTime? time1 = null;
DateTime? time2 = null;
if (!string.IsNullOrWhiteSpace(stime))
time1 = Convert.ToDateTime(stime);
if (!string.IsNullOrWhiteSpace(etime))
time2 = Convert.ToDateTime(etime).AddDays(1);
try
{
var list = complain_Q.GetList_CustomerComplain(ref pg, resid, fromType, level, status, time1, time2, usercomboDto);
Table tb = new Table(columns, true);
tb.gridPager = pg;
foreach (var model in list)
{
tb.AddHiddenCol(model.customerComplain.map_PKID);
var resid_Link = string.Format("<a href=\"javascript:parent.ChildAddTab('{0}', '{1}', '')\">{2}</a>"
, "客户详细"
, "/Csvr/CustomerInfo/CustomerDetail?resid=" + model.customerComplain.map_RESID
, model.customerComplain.map_RESID);
tb.AddCol(resid_Link);
tb.AddCol(model.CUSTOMERNAME);
tb.AddCol(model.customerComplain.map_REASON);
tb.AddCol(model.LEVELNAME);
tb.AddCol(model.FROMTYPENAME == "1" ? "电话投诉" : "微信投诉");
tb.AddCol(GetComplainStatus(model.customerComplain.map_STATUS));
tb.AddCol(InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(model.customerComplain.map_SALESID)));
tb.AddCol(InnerUserHelper.Instance.GetEidAndTrueName(model.customerComplain.map_SALESID));
tb.AddCol(model.customerComplain.map_CTIME);
tb.AddRow();
}
var json = new
{
totalPages = pg.totalPages,
totalRows = pg.totalRows,
rowsList = tb.GetRows()
};
return Json(json, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
LogHelper.Error("ComplainCustomerController【GetHtmlList】:" + ex.Message + ex.StackTrace);
return JsonHandler.ManageMessage(ex.Message, false);
}
}
#endregion
#region
[AuthorizeRedirect(Roles = InitRights.CONST_投诉客户列表)]
public ActionResult Add(string resid)
{
QC_CUSTOMERCOMPLAIN_Extend extend = new QC_CUSTOMERCOMPLAIN_Extend();
QC_CUSTOMERCOMPLAIN model = new QC_CUSTOMERCOMPLAIN();
if (!string.IsNullOrWhiteSpace(resid))
model.map_RESID = resid;
extend.customerComplain = model;
return View(extend);
}
[AuthorizeRedirect(Roles = InitRights.CONST_投诉客户列表)]
[HttpPost]
public JsonResult Add(QC_CUSTOMERCOMPLAIN_Extend model, decimal? recordId, string userIds)
{
if (ModelState.IsValid)
{
//LogHelper.Info("model:" + model.ToJson());
//LogHelper.Info("recordid:" + recordId.Value);
//return JsonHandler.ManageMessage("提交成功", true);
var complaintDict = _qc_complaintDict_Q.GetList_ComplaintDict().First(p => p.DICTVALUE == model.customerComplain.COMPLAINLEVEL);
if (complaintDict == null)
{
errors.Add("参数错误,请稍后再试!");
return JsonHandler.InsertMessage(errors, false);
}
var now = DateTime.Now;
model.customerComplain.PKID = new SEQUENCES_BL().Seq_base_get();
model.customerComplain.map_SALESID = UserId;
model.customerComplain.map_CTIME = now;
model.customerComplain.map_STATUS = -1;
model.customerComplain.UNHANDLEWARNTIME = now.AddHours(complaintDict.UNHANDLEWARN);
model.customerComplain.HANDLEWARNTIME = now.AddHours(complaintDict.HANDLEWARN);
model.customerComplain.COMPANYCODE = companyCode;
model.customerComplain.map_RECORDID = recordId;
var dto = new ComplainDto
{
pkid = model.customerComplain.PKID,
resid = model.customerComplain.RESID,
salesid = model.customerComplain.SALESID,
reason = model.customerComplain.REASON,
status = model.customerComplain.STATUS,
fromtype = model.customerComplain.FROMTYPE,
complainlevel = model.customerComplain.COMPLAINLEVEL,
ctime = model.customerComplain.CTIME,
utime = model.customerComplain.UTIME,
serverid = model.customerComplain.SERVERID,
filename = model.customerComplain.FILENAME,
recordid = model.customerComplain.RECORDID,
recorddate = model.customerComplain.RECORDDATE,
tradecode = model.customerComplain.TRADECODE,
deptauditpkid = model.customerComplain.DEPTAUDITPKID,
complianguid = model.customerComplain.COMPLIANGUID,
unhandlewarntime = model.customerComplain.UNHANDLEWARNTIME,
handlewarntime = model.customerComplain.HANDLEWARNTIME,
companycode = model.customerComplain.COMPANYCODE,
};
var url = cache_Q_bll.GetValue_Parameter(Parameter.Core_ZxdService_ComplainAdd);
var json = sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey);
var retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8);
var retmessage = WebHelper.JsonHelper.JsonDivertToObj<retMsg>(retmsg);
if (retmessage.result)
{
try
{
var ret = complain.Create(ref errors, model.customerComplain);
#region
var data = new List<QC_COMPLAIN_NOTICE>();
if (string.IsNullOrEmpty(userIds))
{
//先获取订单
var orderList = _order.GetList(p => p.RESID == model.customerComplain.RESID).OrderByDescending(p => p.ORDERID);
var order = orderList.FirstOrDefault();
if (order != null)
{
//获取下单人(下单人可能就是责任人,加入提醒)
data.Add(new QC_COMPLAIN_NOTICE()
{
PKID = new SEQUENCES_BL().Seq_base_get(),
INNERUSERID = order.INNERUSERID.Value,
EID = InnerUserHelper.Instance.GetEidByUserId(order.INNERUSERID.Value).Value,
TYPE = 1,
CONTENT = "有您的投诉信息,请尽快处理!",
CTIME = DateTime.Now,
ISLOOK = 0,
LOOKTIME = null,
COMPLAINID = model.customerComplain.PKID
});
//经理提醒
var gId = InnerUserHelper.Instance.GetGroupId(order.INNERUSERID);
var leader = cache_Q_bll.GetGroupleaders();
var group = leader.Where(p => p.INNERGROUPID == gId);
foreach (var item in group)
{
data.Add(new QC_COMPLAIN_NOTICE()
{
PKID = new SEQUENCES_BL().Seq_base_get(),
INNERUSERID = item.INNERUSERID,
EID = InnerUserHelper.Instance.GetEidByUserId(item.INNERUSERID).Value,
TYPE = 2,
CONTENT = "有投诉信息,点击查看",
CTIME = DateTime.Now,
ISLOOK = 0,
LOOKTIME = null,
COMPLAINID = model.customerComplain.PKID
});
}
//部门经理
var deptManageId = cache_Q_bll.GetDeptManager(gId);
if (deptManageId > 0)
{
data.Add(new QC_COMPLAIN_NOTICE()
{
PKID = new SEQUENCES_BL().Seq_base_get(),
INNERUSERID = deptManageId,
EID = InnerUserHelper.Instance.GetEidByUserId(deptManageId).Value,
TYPE = 3,
CONTENT = "客服提交了投诉信息,点击查看",
CTIME = DateTime.Now,
ISLOOK = 0,
LOOKTIME = null,
COMPLAINID = model.customerComplain.PKID
});
}
}
//通知合规人员
var users = cache_Q_bll.GetValue_Parameter(Model.Enum.Parameter.Sys_HG_Users);
if (!string.IsNullOrEmpty(users))
{
var userArr = users.Split(',');
foreach (var item in userArr)
{
data.Add(new QC_COMPLAIN_NOTICE()
{
PKID = new SEQUENCES_BL().Seq_base_get(),
INNERUSERID = decimal.Parse(item),
EID = InnerUserHelper.Instance.GetEidByUserId(decimal.Parse(item)).Value,
TYPE = 4,
CONTENT = "客服提交了投诉信息,点击查看",
CTIME = DateTime.Now,
ISLOOK = 0,
LOOKTIME = null,
COMPLAINID = model.customerComplain.PKID
});
}
}
}
else
{
//如果选了要通知的员工
var userList = userIds.Split(',');
foreach (var item in userList)
{
data.Add(new QC_COMPLAIN_NOTICE()
{
PKID = new SEQUENCES_BL().Seq_base_get(),
INNERUSERID = decimal.Parse(item),
EID = InnerUserHelper.Instance.GetEidByUserId(decimal.Parse(item)).Value,
TYPE = 4,
CONTENT = "客服提交了投诉信息,点击查看",
CTIME = DateTime.Now,
ISLOOK = 0,
LOOKTIME = null,
COMPLAINID = model.customerComplain.PKID
});
}
}
_complainNotice.AddList(data);
#endregion
#region
//var mobile = res_ResourceMobile_BL.GetNumberByResId(model.customerComplain.RESID);
//if (!string.IsNullOrEmpty(mobile))
//{
// var userEnterUrl = cache_Q_bll.GetValue_Parameter("userEnterUrl");
// if (!string.IsNullOrEmpty(userEnterUrl))
// {
// var rsp = Utility.PostAjaxData(userEnterUrl, new { mobile }.ToJson(), Encoding.UTF8);
// LogHelper.Info("rsp:" + rsp);
// var obj = JsonConvert.DeserializeAnonymousType(rsp, new { ret = -1, message = string.Empty });
// if (obj.ret == 0)
// {
// LogHelper.Info("调用成功,开始调用写标签接口");
// var handelLabelUrl = cache_Q_bll.GetValue_Parameter("handelLabelUrl");
// if (!string.IsNullOrEmpty(handelLabelUrl))
// {
// var para2 = new { tags = 0, appuserid = mobile };
// var rsp2 = Utility.PostAjaxData(handelLabelUrl, para2.ToJson(), Encoding.UTF8);
// var obj2 = JsonConvert.DeserializeAnonymousType(rsp2, new { ret = -1, message = string.Empty });
// LogHelper.Info(obj2.ToJson());
// }
// }
// else
// {
// return Json(new { ret = false, message = "已经注册过了!" }, JsonRequestBehavior.AllowGet);
// }
// }
//}
#endregion
}
catch (Exception xx)
{
LogHelper.Error("投诉记录添加到本地库异常:" + xx.ToString());
}
return JsonHandler.ManageMessage("提交成功", true);
}
else
return JsonHandler.ManageMessage("提交失败,请稍后重试或者联系管理员!", false);
}
else
{
return JsonHandler.ValidateFailMessage();
}
}
#endregion
#region
[AuthorizeRedirect(Roles = InitRights.CONST_投诉客户列表)]
public ActionResult Edit(string id, string tag, string resid)
{
QC_CUSTOMERCOMPLAIN_Extend extend = new QC_CUSTOMERCOMPLAIN_Extend();
QC_CUSTOMERCOMPLAIN model = new QC_CUSTOMERCOMPLAIN();
if (tag != "Add")
{
model = complain_Q.GetModel_CustomerComplain(Convert.ToDecimal(id));
var tableId = "tablist";
var tab = new Table(tableId);
tab.AddHeadCol("MEMOID", "", "工单Id ", false);
tab.AddHeadCol("RECOMPLAINLEVEL", "", "处理后等级", false);
tab.AddHeadCol("MEMO", "", "处理结果 ", false);
tab.AddHeadCol("INNERUSERID", "", "客服 ", false);
tab.AddHeadCol("CTIME", "", "时间 ", false);
tab.AddHeadCol("RECORDID", "", "录音ID", false);
tab.AddHeadRow();
Pager pager = new Pager { page = 1, rows = int.MaxValue };
var list = qc_Complain_ServiceMemo_BL.GetList(ref pager, model.PKID);
foreach (var item in list)
{
tab.AddCol(item.serviceMemo.MEMOID);
tab.AddCol(item.ComplainLevelName);
tab.AddCol(item.serviceMemo.MEMO);
tab.AddCol(InnerUserHelper.Instance.GetEidAndTrueName(item.serviceMemo.INNERUSERID));
tab.AddCol(item.serviceMemo.CTIME);
tab.AddCol(item.serviceMemo.RECORDID);
tab.AddRow();
}
ViewBag.complainServiceMemoList = tab.GetTable();
ViewBag.memoList = list.FirstOrDefault() != null ? list.FirstOrDefault().serviceMemo.MEMOID : string.Empty;
ViewBag.recordList = list.FirstOrDefault() != null ? list.FirstOrDefault().serviceMemo.RECORDID : string.Empty;
}
if (!string.IsNullOrWhiteSpace(resid))
model.map_RESID = resid;
extend.customerComplain = model;
return View(extend);
}
[AuthorizeRedirect(Roles = InitRights.CONST_投诉客户列表)]
[HttpPost]
public JsonResult Edit(QC_CUSTOMERCOMPLAIN_Extend model, string memoId, string recordId, string reComplainLevel, string memo)
{
if (ModelState.IsValid)
{
var tag = Request.Form["hid_tag"];
if (tag == "Add")
{
var complaintDict = _qc_complaintDict_Q.GetList_ComplaintDict().First(p => p.DICTVALUE == model.customerComplain.COMPLAINLEVEL);
if (complaintDict == null)
{
errors.Add("参数错误,请稍后再试!");
return JsonHandler.InsertMessage(errors, false);
}
var now = DateTime.Now;
model.customerComplain.PKID = new SEQUENCES_BL().Seq_base_get();
model.customerComplain.map_SALESID = UserId;
model.customerComplain.map_CTIME = now;
model.customerComplain.map_STATUS = -1;
model.customerComplain.UNHANDLEWARNTIME = now.AddHours(complaintDict.UNHANDLEWARN);
model.customerComplain.HANDLEWARNTIME = now.AddHours(complaintDict.HANDLEWARN);
model.customerComplain.COMPANYCODE = Utility.GetSettingByKey("DataClientCode");
var dto = new ComplainDto
{
pkid = model.customerComplain.PKID,
resid = model.customerComplain.RESID,
salesid = model.customerComplain.SALESID,
reason = model.customerComplain.REASON,
status = model.customerComplain.STATUS,
fromtype = model.customerComplain.FROMTYPE,
complainlevel = model.customerComplain.COMPLAINLEVEL,
ctime = model.customerComplain.CTIME,
utime = model.customerComplain.UTIME,
serverid = model.customerComplain.SERVERID,
filename = model.customerComplain.FILENAME,
recordid = model.customerComplain.RECORDID,
recorddate = model.customerComplain.RECORDDATE,
tradecode = model.customerComplain.TRADECODE,
deptauditpkid = model.customerComplain.DEPTAUDITPKID,
complianguid = model.customerComplain.COMPLIANGUID,
unhandlewarntime = model.customerComplain.UNHANDLEWARNTIME,
handlewarntime = model.customerComplain.HANDLEWARNTIME,
companycode = model.customerComplain.COMPANYCODE,
};
var url = cache_Q_bll.GetValue_Parameter(Parameter.Core_ZxdService_ComplainAdd);
var json = sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey);
var retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8);
var retmessage = WebHelper.JsonHelper.JsonDivertToObj<retMsg>(retmsg);
if (retmessage.result)
{
try
{
var ret = complain.Create(ref errors, model.customerComplain);
#region
var data = new List<QC_COMPLAIN_NOTICE>();
var leader = cache_Q_bll.GetGroupleaders();
var group = leader.Where(p => p.INNERGROUPID == userGroupId);
foreach (var item in group)
{
data.Add(new QC_COMPLAIN_NOTICE()
{
PKID = new SEQUENCES_BL().Seq_base_get(),
INNERUSERID = item.INNERUSERID,
EID = InnerUserHelper.Instance.GetEidByUserId(item.INNERUSERID).Value,
TYPE = 0,
CONTENT = "您的组员提交了投诉信息,请跟踪",
CTIME = DateTime.Now,
ISLOOK = 0,
LOOKTIME = null,
COMPLAINID = model.customerComplain.PKID
});
}
//查询是否需要通知合规人员
if (complaintDict.HGWARN == 1)
{
var users = cache_Q_bll.GetValue_Parameter(Model.Enum.Parameter.Sys_HG_Users);
if (!string.IsNullOrEmpty(users))
{
var userArr = users.Split(',');
foreach (var item in userArr)
{
data.Add(new QC_COMPLAIN_NOTICE()
{
PKID = new SEQUENCES_BL().Seq_base_get(),
INNERUSERID = decimal.Parse(item),
EID = InnerUserHelper.Instance.GetEidByUserId(decimal.Parse(item)).Value,
TYPE = 0,
CONTENT = "客服提交了投诉信息,请跟踪",
CTIME = DateTime.Now,
ISLOOK = 0,
LOOKTIME = null,
COMPLAINID = model.customerComplain.PKID
});
}
}
}
_complainNotice.AddList(data);
#endregion
}
catch (Exception xx)
{
LogHelper.Error("投诉记录添加到本地库异常:" + xx.ToString());
}
return JsonHandler.ManageMessage("提交成功", true);
}
else
return JsonHandler.ManageMessage("提交失败,请稍后重试或者联系管理员!", false);
}
//审核
else if (tag == "flow")
{
var serviceMemo = new QC_COMPLAIN_SERVICEMEMO
{
PKID = new SEQUENCES_BL().Seq_base_get(),
COMPLAINID = model.customerComplain.PKID,
CTIME = DateTime.Now,
INNERUSERID = UserId,
MEMO = memo,
MEMOID = memoId,
RECOMPLAINLEVEL = reComplainLevel,
RECORDID = recordId
};
var dto = new ComplainDetialDto
{
pkid = serviceMemo.PKID,
complainid = serviceMemo.COMPLAINID,
memoid = serviceMemo.MEMOID,
recomplainlevel = serviceMemo.RECOMPLAINLEVEL,
inneruserid = serviceMemo.INNERUSERID,
memo = serviceMemo.MEMO,
ctime = serviceMemo.CTIME,
recordid = serviceMemo.RECORDID
};
var url = cache_Q_bll.GetValue_Parameter(Parameter.Core_ZxdService_ComplainFlow);
var json = sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey);
var retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8);
var retmessage = WebHelper.JsonHelper.JsonDivertToObj<retMsg>(retmsg);
if (retmessage.result)
{
try
{
qc_Complain_ServiceMemo_BL.Add(serviceMemo);
model.customerComplain.map_UTIME = DateTime.Now;
complain.Check(ref errors, model.customerComplain);
//if(model.customerComplain.COMPLAINLEVEL != reComplainLevel)
//{
// //处理之后的等级不一样了,才重新打标签
// #region 打标签
// var mobile = res_ResourceMobile_BL.GetNumberByResId(model.customerComplain.RESID);
// if (!string.IsNullOrEmpty(mobile))
// {
// var handelLabelUrl = cache_Q_bll.GetValue_Parameter("handelLabelUrl");
// if (!string.IsNullOrEmpty(handelLabelUrl))
// {
// var rsp2 = Utility.HttpPostData(handelLabelUrl, "tags=0&deleteTags=0&appuserid=" + mobile, Encoding.UTF8);
// var obj2 = JsonConvert.DeserializeAnonymousType(rsp2, new { ret = -1, message = string.Empty });
// LogHelper.Info(obj2.ToJson());
// }
// }
// #endregion
//}
}
catch (Exception xx)
{
LogHelper.Error("投诉过程记录添加到本地库异常:" + xx.ToString());
}
return JsonHandler.ManageMessage("提交成功", true);
}
else
return JsonHandler.ManageMessage("提交失败,请稍后重试或者联系管理员!", false);
}
else
{
return JsonHandler.ManageMessage("参数错误!", false);
}
}
else
{
return JsonHandler.ValidateFailMessage();
}
}
#endregion
#region
[AuthorizeRedirect(Roles = InitRights.CONST_投诉客户列表)]
[HttpPost]
public JsonResult FlagStatus(decimal id, decimal? status)
{
var cp = complain_Q.GetModel_CustomerComplain(id);
if (cp == null)
{
return JsonHandler.ManageMessage("未找到数据,请重试!", false);
}
if (cp.STATUS == 1)
{
return JsonHandler.ManageMessage("该投诉已经解决,请确认!", false);
}
if (status.HasValue)
{
if (status.Value == 1)
{
var flow = qc_Complain_ServiceMemo_BL.Get(p => p.COMPLAINID == cp.PKID);
if (flow == null)
return JsonHandler.ManageMessage("客服还没提交投诉过程,不能确认!", false);
}
}
cp.STATUS = 0;
if (status.HasValue)
{
cp.STATUS = status.Value;
}
var dto = new ComplainStatusDto
{
pkid = id,
status = cp.STATUS
};
var url = cache_Q_bll.GetValue_Parameter(Parameter.Core_ZxdService_ComplainStatus);
var json = sHelper.createSignEncodingStr(dto.ToJson(), SecurityHelper.OrderClientIdKey);
var retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8);
var retmessage = WebHelper.JsonHelper.JsonDivertToObj<retMsg>(retmsg);
if (retmessage.result)
{
try
{
complain.Update(ref errors, cp);
}
catch (Exception xx)
{
LogHelper.Error("投诉更新状态到本地库异常:" + xx.ToString());
}
return JsonHandler.ManageMessage("操作成功", true);
}
else
return JsonHandler.ManageMessage("提交失败,请稍后重试或者联系管理员!", false);
}
#endregion
#region
[HttpGet]
public ActionResult Check(decimal id)
{
var model = new QC_CustomerComplain_Check_View();
var customerComplain = complain_Q.GetModel_CustomerComplain(id);
model.CustomerComplain = customerComplain;
var serviceMemoView = new QC_COMPLAIN_SERVICEMEMO_VIEW
{
MemoList = new List<ORD_MemoQuery>(),
RecordList = new List<CSVR_CALLRECORD>()
};
if (customerComplain.STATUS != -1)
{
var serviceMemo = qc_Complain_ServiceMemo_BL.Get(p => p.COMPLAINID.Value == customerComplain.PKID);
if (serviceMemo != null)
{
serviceMemoView.PKID = serviceMemo.PKID;
serviceMemoView.COMPLAINID = serviceMemo.COMPLAINID;
serviceMemoView.MEMOID = serviceMemo.MEMOID;
serviceMemoView.RECOMPLAINLEVEL = serviceMemo.RECOMPLAINLEVEL;
serviceMemoView.INNERUSERID = serviceMemo.INNERUSERID;
serviceMemoView.MEMO = serviceMemo.MEMO;
serviceMemoView.CTIME = serviceMemo.CTIME;
serviceMemoView.RECORDID = serviceMemo.RECORDID;
Pager pager = new Pager() { page = 1, rows = int.MaxValue };
var memoList = serviceMemoBiz_Q.GetList(ref pager, serviceMemo.MEMOID, null, null, 0, 0, new QueryUserComboDto(null, null, null, null));
serviceMemoView.MemoList = memoList;
var recordArr = serviceMemo.RECORDID.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(decimal.Parse).ToList();
var recordList = CallRecord_BL.GetList(p => recordArr.Contains(p.RECORDID.Value)).ToList();
serviceMemoView.RecordList = recordList;
}
}
model.ServiceMemo = serviceMemoView;
return View(model);
}
#endregion
#region
/// <summary>
/// 删除数据
/// </summary>
/// <param name="pkid"></param>
/// <returns></returns>
[AuthorizeRedirect(InitRights.CONST_投诉客户列表)]
public JsonResult Delete(string pkid)
{
if (string.IsNullOrWhiteSpace(pkid))
return JsonHandler.ManageMessage("参数错误", false);
bool result = complain.Delete(ref errors, Convert.ToDecimal(pkid));
return JsonHandler.DeleteMessage(errors, result);
}
#endregion
#region
//[AuthorizeToolBar(InitRights.CONST_客户列表, InitToolBar.CONST_Other1)]
public FileResult Export( QueryUserComboDto usercomboDto)
{
string resid = Request["ResId"];
string stime = Request["STime"];
string etime = Request["ETime"];
string fromType = Request["ComplainFromType"];
string level = Request["ComplainLevel"];
string groupId = Request["groupId"];
decimal userId = Request["userId"].GetDecimal(0);
decimal? status = null;
if (!string.IsNullOrEmpty(Request["status"]))
{
status = decimal.Parse(Request["status"]);
}
DateTime? time1 = null;
DateTime? time2 = null;
if (!string.IsNullOrWhiteSpace(stime))
time1 = Convert.ToDateTime(stime);
if (!string.IsNullOrWhiteSpace(etime))
time2 = Convert.ToDateTime(etime).AddDays(1);
Pager pg = new Pager() { rows = int.MaxValue, page = 1 };
string checkedFilds = PageRequest.GetQueryString("checkedFilds");
string checkedTitle = PageRequest.GetQueryString("checkedTitles");
var list = complain_Q.GetList_CustomerComplain(ref pg, resid, fromType, level, status, time1, time2, usercomboDto);
foreach (var model in list)
{
if (model.customerComplain.SALESID > 0)
{
model.GROUPNAME = InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(model.customerComplain.SALESID));
model.SALESUSER = InnerUserHelper.Instance.GetEidAndTrueName(model.customerComplain.SALESID);
}
model.STATUSNAME = model.customerComplain.STATUS == 1 ? "已审核" : "未审核";
}
return File(ExcelHelper.ExportListModelToExcel<QC_CUSTOMERCOMPLAIN_Extend>(list, "投诉客户列表", 60000, checkedFilds, checkedTitle, null), "application/ms-excel", PageRequest.GetDlownLoadName("投诉客户列表.xls"));
}
#endregion
#region
public ActionResult Detail(string customerId)
{
var pager = new Pager() { page = 1, rows = 10 };
var tableId = "tablist";
var tab = new Table(tableId);
tab.AddHeadCol("RESID", "", "客户ID");
tab.AddHeadCol("CUSTOMERNAME", "", "客户姓名");
tab.AddHeadCol("TRADECODE", "", "交易商代码 ");
tab.AddHeadCol("REASON", "", "投诉内容");
tab.AddHeadCol("LEVELNAME", "", "投诉级别", true);
tab.AddHeadCol("FROMTYPENAME", "", "投诉来源", true);
tab.AddHeadCol("STATUSNAME", "", "状态");
tab.AddHeadCol("SALESUSER", "", "申请人");
tab.AddHeadCol("CTIME", "", "投诉时间", true);
tab.AddHeadRow();
ViewBag.List = tab.GetTable() + Pagination.GetPage(pager, tableId, "5,8,10,15");
ViewBag.CustomerId = customerId;
return View();
}
public JsonResult GetDetailHtmlList(Pager pg, string columns)
{
string customerId = Request["customerId"];
try
{
var list = complain_Q.GetList_CustomerComplainByCustomerId(ref pg, customerId);
Table tb = new Table(columns, true);
tb.gridPager = pg;
foreach (var model in list)
{
tb.AddCol(model.customerComplain.map_RESID);
tb.AddCol(model.CUSTOMERNAME);
tb.AddCol(model.customerComplain.map_TRADECODE);
tb.AddCol(model.customerComplain.map_REASON);
tb.AddCol(model.LEVELNAME);
tb.AddCol(model.FROMTYPENAME);
tb.AddCol(model.customerComplain.map_STATUS == 1 ? "已审核" : "未审核");
tb.AddCol(InnerUserHelper.Instance.GetEidAndTrueName(model.customerComplain.map_SALESID));
tb.AddCol(model.customerComplain.map_CTIME);
tb.AddRow();
}
var json = new
{
totalPages = pg.totalPages,
totalRows = pg.totalRows,
rowsList = tb.GetRows()
};
return Json(json, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
LogHelper.Error("ComplainCustomerController【GetDetailHtmlList】:" + ex.Message + ex.StackTrace);
return JsonHandler.ManageMessage(ex.Message, false);
}
}
public FileResult ExportDetail()
{
string customerId = Request.QueryString["customerId"];
Pager pg = new Pager() { rows = int.MaxValue, page = 1 };
string checkedFilds = PageRequest.GetQueryString("checkedFilds");
string checkedTitle = PageRequest.GetQueryString("checkedTitles");
var list = complain_Q.GetList_CustomerComplainByCustomerId(ref pg, customerId);
foreach (var model in list)
{
if (model.customerComplain.SALESID > 0)
model.SALESUSER = InnerUserHelper.Instance.GetEidAndTrueName(model.customerComplain.SALESID);
model.STATUSNAME = model.customerComplain.STATUS == 1 ? "已审核" : "未审核";
}
return File(ExcelHelper.ExportListModelToExcel<QC_CUSTOMERCOMPLAIN_Extend>(list, "客户投诉明细", 60000, checkedFilds, checkedTitle, null), "application/ms-excel", PageRequest.GetDlownLoadName("客户投诉明细.xls"));
}
#endregion
#region
public ActionResult ResServiceMemoIndex()
{
return View();
}
public JsonResult GetResServiceMemoList(Pager pager, string columns, string ResId, string MemoType, decimal? pageType, string IsValid)
{
List<ORD_MemoQuery> list = new List<ORD_MemoQuery>();
#region
switch (Convert.ToInt32(MemoType))
{
case (int)WX.CRM.Model.Enum.EnumMemoType.:
list = ord_memo_Q.GetMemoListByResId(ref pager, ResId, WX.CRM.Model.Enum.EnumMemoType., IsValid);
break;
case (int)WX.CRM.Model.Enum.EnumMemoType.:
list = ord_memo_Q.GetMemoListByResId(ref pager, ResId, WX.CRM.Model.Enum.EnumMemoType., IsValid);
break;
case (int)WX.CRM.Model.Enum.EnumMemoType.:
list = ord_memo_Q.GetMemoListByResId(ref pager, ResId, WX.CRM.Model.Enum.EnumMemoType., IsValid);
break;
case (int)WX.CRM.Model.Enum.EnumMemoType.:
list = ord_memo_Q.GetMemoListByResId(ref pager, ResId, WX.CRM.Model.Enum.EnumMemoType., IsValid);
break;
case 7:
list = ord_memo_Q.GetAllMemoListByResId(int.MaxValue, ResId, IsValid);//获取所有工单
//list = redisFactory.LoadMemo(ResId, IsValid);
break;
}
#endregion
ICACHE_Q ui = DataCacheHelper.GetCache();
List<ORD_MEMOTYPE> memoTypeList = ui.GetList_MemoType(0);//缓存读取 工单大类数据
List<ORD_MEMOSUBTYPE> memoSubTypeList = ui.GetList_MemoSubType(0);//缓存读取 获取所有工单小类数据
List<ORD_MEMOSTYLE> styleList = DataCacheHelper.GetCache().GetList_MemoStyle();
Dictionary<int, string> Memo_Type = OperationUtil.GetDicFromEnum<WX.CRM.Model.Enum.EnumMemoType>();
ORD_MEMOTYPE memotype = null;
ORD_MEMOSUBTYPE memosubType = null;
var data = new List<ORD_MemoView>();
foreach (var item in list)
{
memotype = memoTypeList.FirstOrDefault(m => m.TYPEID == item.MEMOTYPEID);
memosubType = memoSubTypeList.FirstOrDefault(m => m.SUBTYPEID == item.MEMOSUBTYPEID);
var memo = new ORD_MemoView(item.MEMOID, memotype == null ? string.Empty : memotype.TYPENAME, memosubType == null ? string.Empty : memosubType.TYPENAME, item.STRCONTENT, InnerUserHelper.Instance.EidAndName(item.INNERUSERID), item.CTIME.Value.ToString());
data.Add(memo);
}
var json = new
{
total = pager.totalRows,
rows = data
};
return Json(json, JsonRequestBehavior.AllowGet);
}
#endregion
#region
public ActionResult ComplainServiceDetail(decimal complainId)
{
var tableId = "tablist";
var tab = new Table(tableId);
tab.AddHeadCol("MEMOID", "", "工单Id ", false);
tab.AddHeadCol("RECOMPLAINLEVEL", "", "处理后等级", false);
tab.AddHeadCol("MEMO", "", "处理结果 ", false);
tab.AddHeadCol("INNERUSERID", "", "客服 ", false);
tab.AddHeadCol("CTIME", "", "时间 ", false);
tab.AddHeadCol("RECORDID", "", "录音ID", false);
tab.AddHeadRow();
Pager pager = new Pager();
pager.page = 1;
pager.rows = 500;
var list = qc_Complain_ServiceMemo_BL.GetList(ref pager, complainId);
foreach (var item in list)
{
tab.AddCol(item.serviceMemo.MEMOID);
tab.AddCol(item.ComplainLevelName);
tab.AddCol(item.serviceMemo.MEMO);
tab.AddCol(InnerUserHelper.Instance.GetEidAndTrueName(item.serviceMemo.INNERUSERID));
tab.AddCol(item.serviceMemo.CTIME);
tab.AddCol(item.serviceMemo.RECORDID);
tab.AddRow();
}
ViewBag.complainServiceMemoList = tab.GetTable();
return View();
}
#endregion
#region
public ActionResult HgRecord(string resid)
{
ViewBag.resid = resid;
//Table tab = new WebHelper.Table("tablist");
//tab.isCheckbox = true;
//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.AddHeadRow();
//ViewBag.gridTable = tab.GetHead();
return View();
}
public JsonResult GetCsvrRecordList(string resid, string columns)
{
var resids = new List<string>();
var reslist = res_Customer_Q_BL.GetListByResId(resid);
if (reslist != null)
{
resids = reslist.Select(m => m.RESID).ToList();
}
var data = new List<ComplainView>();
var list = CallRecord_BL.GetListByResIds(resids);
if (list != null)
{
foreach (var item in list)
{
var strIsTran = "";
if (item.ISTRAN.ToString() == "1")
{
strIsTran = "(转接)";
}
var callType = string.Empty;
var serviceNumber = string.Empty;
var telnumberLast4 = string.Empty;
if (item.CALLTYPE == 1)
{
callType = "呼出" + strIsTran;
serviceNumber = item.SERVICENUMBER;
telnumberLast4 = item.TELNUMBERLAST4;
}
else
{
callType = "呼入" + strIsTran;
serviceNumber = item.TELNUMBERLAST4;
telnumberLast4 = item.SERVICENUMBER;
}
data.Add(new ComplainView(item.RECORDID.ToString(), item.RESID, callType, serviceNumber, telnumberLast4, item.TIMELENGTH.ToString(), item.TIMESTART.ToString(), InnerUserHelper.Instance.GetEidAndTrueName(InnerUserHelper.Instance.GetUserIdByEid(item.SALESEID))));
}
}
var json = new
{
rows = data
};
return Json(json, JsonRequestBehavior.AllowGet);
}
#endregion
#region
//public JsonResult SetTag(string evt, string resid)
//{
// if (string.IsNullOrEmpty(evt) && string.IsNullOrEmpty(resid))
// {
// return Json(new { ret = false, message = "参数错误!" }, JsonRequestBehavior.AllowGet);
// }
// var mobile = res_ResourceMobile_BL.GetNumberByResId(resid);
// if (string.IsNullOrEmpty(mobile))
// {
// return Json(new { ret = false, message = "参数错误!" }, JsonRequestBehavior.AllowGet);
// }
// if (evt == "add")
// {
// //var userEnterUrl = cache_Q_bll.GetValue_Parameter("userEnterUrl");
// //if (string.IsNullOrEmpty(userEnterUrl))
// //{
// // return Json(new { ret = false, message = "参数错误!" }, JsonRequestBehavior.AllowGet);
// //}
// //LogHelper.Info("url:" + userEnterUrl);
// //var rsp = Utility.HttpPostData(userEnterUrl, "mobile=" + mobile, Encoding.UTF8);
// //LogHelper.Info("rsp:" + rsp);
// //var obj = JsonConvert.DeserializeAnonymousType(rsp, new { ret = -1, message = string.Empty });
// //if (obj.ret == 0)
// //{
// // LogHelper.Info("调用成功,开始调用写标签接口");
// // var handelLabelUrl = cache_Q_bll.GetValue_Parameter("handelLabelUrl");
// // if (string.IsNullOrEmpty(handelLabelUrl))
// // {
// // return Json(new { ret = false, message = "参数错误!" }, JsonRequestBehavior.AllowGet);
// // }
// // var rsp2 = Utility.HttpPostData(handelLabelUrl, "tags=0&appuserid=" + mobile, Encoding.UTF8);
// // var obj2 = JsonConvert.DeserializeAnonymousType(rsp2, new { ret = -1, message = string.Empty });
// // if (obj2.ret == 0)
// // {
// var customerDetail = _customerDetail.Get(p => p.RESID == resid);
// if (customerDetail != null)
// {
// customerDetail.SPECIALMEMO = "风险";
// _customerDetail.Update(customerDetail);
// }
// // }
// // else
// // {
// // return Json(new { ret = false, message = "打标签失败!" }, JsonRequestBehavior.AllowGet);
// // }
// //}
// //else
// //{
// // return Json(new { ret = false, message = "已经注册过了!" }, JsonRequestBehavior.AllowGet);
// //}
// }
// else if (evt == "delete")
// {
// //var handelLabelUrl = cache_Q_bll.GetValue_Parameter("handelLabelUrl");
// //if (string.IsNullOrEmpty(handelLabelUrl))
// //{
// // return Json(new { ret = false, message = "参数错误!" }, JsonRequestBehavior.AllowGet);
// //}
// //var rsp2 = Utility.HttpPostData(handelLabelUrl, "deleteTags=0&appuserid=" + mobile, Encoding.UTF8);
// //var obj2 = JsonConvert.DeserializeAnonymousType(rsp2, new { ret = -1, message = string.Empty });
// //if (obj2.ret == 0)
// //{
// var customerDetail = _customerDetail.Get(p => p.RESID == resid);
// if (customerDetail != null)
// {
// customerDetail.SPECIALMEMO = null;
// _customerDetail.Update(customerDetail);
// }
// //}
// //else
// //{
// // return Json(new { ret = false, message = "打标签失败!" }, JsonRequestBehavior.AllowGet);
// //}
// }
// else
// {
// return Json(new { ret = false, message = "参数错误!" }, JsonRequestBehavior.AllowGet);
// }
// return Json(new { ret = true, message = "success" }, JsonRequestBehavior.AllowGet);
//}
#endregion
private string GetComplainStatus(decimal status)
{
if (status == -1)
return "未处理";
else if (status == 0)
return "处理中";
else if (status == 1)
return "已处理";
else return "未知";
}
public class ComplainView
{
public ComplainView(string rECORDID, string rESID, string cALLTYPE, string sERVICENUMBER, string tELNUMBERLAST4, string tIMELENGTH, string tIMESTART, string sALESEID)
{
RECORDID = rECORDID;
RESID = rESID;
CALLTYPE = cALLTYPE;
SERVICENUMBER = sERVICENUMBER;
TELNUMBERLAST4 = tELNUMBERLAST4;
TIMELENGTH = tIMELENGTH;
TIMESTART = tIMESTART;
SALESEID = sALESEID;
}
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 string TIMELENGTH { get; set; }
public string TIMESTART { get; set; }
public string SALESEID { get; set; }
}
public class Tag
{
public int tagid { get; set; }
public string starttime { get; set; }
public string endtime { get; set; }
}
}
}