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] [AuthorizeRedirect(Roles = InitRights.CONST_投诉客户列表)] 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("{2}" , "客户详细" , "/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); if (retmessage.result) { try { var ret = complain.Create(ref errors, model.customerComplain); #region var data = new List(); 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); if (retmessage.result) { try { var ret = complain.Create(ref errors, model.customerComplain); #region var data = new List(); 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); 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); 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(), RecordList = new List() }; 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,null, 0, 0, null, 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 删除 /// /// 删除数据 /// /// /// [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)] [AuthorizeRedirect(Roles = InitRights.CONST_投诉客户列表)] 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(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(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 list = new List(); #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 memoTypeList = ui.GetList_MemoType(0);//缓存读取 工单大类数据 List memoSubTypeList = ui.GetList_MemoSubType(0);//缓存读取 获取所有工单小类数据 List styleList = DataCacheHelper.GetCache().GetList_MemoStyle(); Dictionary Memo_Type = OperationUtil.GetDicFromEnum(); ORD_MEMOTYPE memotype = null; ORD_MEMOSUBTYPE memosubType = null; var data = new List(); 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(); var reslist = res_Customer_Q_BL.GetListByResId(resid); if (reslist != null) { resids = reslist.Select(m => m.RESID).ToList(); } var data = new List(); 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; } } } }