using Aop.Api.Domain; //using CRM.Core.DTO; //using CRM.Core.DTO.Res; using Newtonsoft.Json; using Ninject; using NPOI.HSSF.Record; using NPOI.SS.Formula.Functions; using StackExchange.Redis; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Data; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Web; using System.Web.Mvc; using System.Xml.Serialization; using WX.CRM.BLL.Soft; using WX.CRM.BLL.Util; using WX.CRM.BLL.Wx; using WX.CRM.Common; using WX.CRM.IBLL.Base; using WX.CRM.IBLL.Csvr; using WX.CRM.IBLL.Ord; using WX.CRM.IBLL.Quality; using WX.CRM.IBLL.Res; using WX.CRM.IBLL.Sms; using WX.CRM.IBLL.Soft; using WX.CRM.IBLL.Util; using WX.CRM.IBLL.WeWork; using WX.CRM.IBLL.Ww; using WX.CRM.IBLL.Wx; using WX.CRM.Model.DTO; using WX.CRM.Model.Entity; using WX.CRM.Model.Enum; using WX.CRM.Model.QueryMap; using WX.CRM.Model.Ww; using WX.CRM.WEB.ViewModel.Sale; using WX.CRM.WebHelper; using WX.CRM.WebHelper.RedisFactory; namespace WX.CRM.WEB.Controllers.Csvr { public class CustomerUCController : BaseController { private IRES_CUSTOMER _customer; private IORD_SPECIALMEMO_Q specialMemoBiz_Q; private IORD_SERVICEMEMO_Q serviceMemoBiz_Q; private IORD_SALEMEMO_Q saleMemoBiz_Q; private IORD_SPECIALMEMO specialMemoBiz; private IORD_SERVICEMEMO serviceMemoBiz; private IORD_SALEMEMO saleMemoBiz; private ICACHE_Q cacheQ; private IORD_PURPOSEMEMO_Q purposeMemoBiz_Q; private IORD_PURPOSEMEMO purposeMemoBiz; private IRES_CUSTOMERDETAIL_Q customerDetail_Q; private IRES_CUSTOMER_Q customer_Q; private IBAS_PROVINCE_Q provinceQ; private IBAS_CITY_Q cityQ; private ICSVR_RELATIONCUSTOMER_Q relationcustomer; private IRES_CUSTOMERUSER_Q customeruser_q; private readonly IRES_CUSTOMEREXTEND _customerExt; private readonly IRES_CUSTOMEREXTEND_Q _customerExtQ; private readonly ISOFT_USER _softUser; private readonly ISOFT_USER_Q _softUserQ; private ICSVR_CALLRECORD_Q csvr_callRecordQ; private IORD_MEMO_Q ord_memo_Q; private ISMS_BATCHMSG_Q batchMsg_Q; private readonly IWX_SZZYORDER _wxSzzyorder; private IWX_RCONTACT wxrcontact; [Inject] public ISOFT_REGANDORDERLINK soft_RegAndOrderLink_BL { get; set; } private GET_REGUSER _regUser = new GET_REGUSER(); private IRES_CUSTOMER res_Customer_BL; [Ninject.Inject] public IBAS_PARAMETER_Q _BAS_PARAMETER_Q { get; set; } [Inject] public ICSVR_CALLRECORD CSVR_CALLRECORD_BL { get; set; } [Inject] public ICSVR_CALLRECORD_Q _CSVR_CALLRECORD_Q { get; set; } //[Inject] //public IGJS_CUSTOMERCHECK_Q customerCheck_Q { get; set; } [Inject] public IQC_CUSTOMERCOMPLAIN_Q customerComplain_Q { get; set; } [Inject] public IRES_CALLOUTCUSTOMER _RES_CALLOUTCUSTOMER { get; set; } [Inject] public IWX_SZZYORDER2 _wxSzzyorder2 { get; set; } [Inject] public IWX_ORDEREXT wx_OrderExt_BL { get; set; } [Inject] public IWX_SZZYSUBPRODUCT wx_szzysubproduct { get; set; } [Inject] public IRES_MYALLOCATERES _myallocate { get; set; } [Inject] public IRES_DISTRIBUTE _distribute { get; set; } [Inject] public IWW_EXTUSER _wwExtUser { get; set; } [Inject] public IWW_EXTUSER_RESID _wwExtUserResId { get; set; } [Inject] public IWW_HHUSER _wwHhUser { get; set; } [Inject] public ISecurityHelper securityHelper { get; set; } [Inject] public IRES_CUSTOMER_RFM _rfm { get; set; } [Inject] public ICSVR_FAVORITECUSTOMER_Q _favoriteCustomer { get; set; } [Inject] public IRES_RESOURCEMOBILE_Q _resource { get; set; } public RedisFactory redisFactory = new RedisFactory(); private ValidationErrors errors = new ValidationErrors(); public CustomerUCController( IORD_SPECIALMEMO_Q _specialMemoBiz_Q, IORD_SERVICEMEMO_Q _serviceMemoBiz_Q, IORD_SALEMEMO_Q _saleMemoBiz_Q, IORD_PURPOSEMEMO_Q _purposeMemoBiz_Q, IRES_CUSTOMERDETAIL_Q _customerDetail_Q, ICACHE_Q _cacheQ, IRES_CUSTOMER_Q _customer_Q, IBAS_PROVINCE_Q _provinceQ, IBAS_CITY_Q _cityQ, IRES_CUSTOMERUSER_Q customerUserQ, ICSVR_RELATIONCUSTOMER_Q _relationcustomer, IRES_CUSTOMEREXTEND customerExt, IRES_CUSTOMEREXTEND_Q customerExtQ, ISOFT_USER softUser, ISOFT_USER_Q softUserQ, ICSVR_CALLRECORD_Q _csvr_callRecordQ, IORD_SPECIALMEMO _specialMemoBiz, IORD_SERVICEMEMO _serviceMemoBiz, IORD_SALEMEMO _saleMemoBiz, IORD_PURPOSEMEMO _purposeMemoBiz, IORD_MEMO_Q _ord_memo_Q, ISMS_BATCHMSG_Q _batchMsg_Q, IWX_SZZYORDER wxSzzyorder, IWX_RCONTACT _wxrcontact, IRES_CUSTOMER _customer, IRES_CUSTOMER res_Customer_BL ) { this._customer = _customer; this.specialMemoBiz_Q = _specialMemoBiz_Q; this.serviceMemoBiz_Q = _serviceMemoBiz_Q; this.saleMemoBiz_Q = _saleMemoBiz_Q; this.purposeMemoBiz_Q = _purposeMemoBiz_Q; this.customerDetail_Q = _customerDetail_Q; this.cacheQ = _cacheQ; this.customer_Q = _customer_Q; this.provinceQ = _provinceQ; this.cityQ = _cityQ; this.relationcustomer = _relationcustomer; this.customeruser_q = customerUserQ; this._customerExt = customerExt; this._customerExtQ = customerExtQ; this._softUser = softUser; this._softUserQ = softUserQ; this.csvr_callRecordQ = _csvr_callRecordQ; this.saleMemoBiz = _saleMemoBiz; this.specialMemoBiz = _specialMemoBiz; this.serviceMemoBiz = _serviceMemoBiz; this.purposeMemoBiz = _purposeMemoBiz; this.ord_memo_Q = _ord_memo_Q; this.batchMsg_Q = _batchMsg_Q; _wxSzzyorder = wxSzzyorder; this.wxrcontact = _wxrcontact; this.res_Customer_BL = res_Customer_BL; } // // GET: /CustomerUC/ #region 客户信息 public ActionResult FastMemo(CustomerInfo info) { ViewBag.CustomerInfo = info; var fastmemo = cacheQ.GetValue_Parameter("fastmemo"); ViewBag.fastmemo = fastmemo; return View(); } public ActionResult NewRisk(CustomerInfo info) { try { var umid = Request.QueryString["resid"]; var para = new { umid }; var url = $"http://hg.soft.dn8188.com/Compliance/GetTranUser"; //LogHelper.Info($"url=>{url}"); var rep = Utility.PostAjaxData(url, para.ToJson(), Encoding.UTF8); if (!string.IsNullOrEmpty(rep)) { var result = JsonConvert.DeserializeAnonymousType(rep, new { result = false, data = string.Empty }); if(result.result) { // 解析外层 JSON var userDetail = JsonConvert.DeserializeObject(result.data); // 解析 riskinfo 字段 var riskInfo = JsonConvert.DeserializeObject(userDetail.riskinfo); //LogHelper.Info($"riskInfo=>{riskInfo.ToJson()}"); ViewBag.Answer = riskInfo.answer; ViewBag.Level = string.IsNullOrEmpty(userDetail.risklevel) ? string.Empty : "C" + userDetail.risklevel; } } } catch (Exception ex) { LogHelper.Error(ex.ToString()); } return View(); } public ActionResult CustomerBaseInfoUC(CustomerInfo info) { //RES_CUSTOMER cData = new RES_CUSTOMER(); ViewBag.CustomerInfo = info; //try //{ //var resData = info.ResCustomerList.Where(p => p.RESID == info.CustomerId).FirstOrDefault(); RES_CUSTOMER cData = info.ResCustomerList.Where(p => p.RESID == info.CustomerId).FirstOrDefault(); if (cData == null) { RES_CUSTOMER rescustomer = customer_Q.getResCustomerByResId(info.CustomerId); //RES_CUSTOMER rescustomer = redisFactory.GetInfo_Rescustomer(info.CustomerId); string nresid = rescustomer == null ? "" : rescustomer.CUSTOMERID; Response.Redirect(Url.Action("ErrorView", "Error", new { message = string.Format("错误提示:{0},{1}客户信息合并出现问题,请重新申请合并!", info.CustomerId, nresid) })); } customer_Q.GetResCustomerOtherInfo(ref cData);//获取多余的字段 if (cData.RES_CUSTOMERDETAIL != null) { cData.map_ADDRESS_ALL = cityQ.GetAddressStr(cData.map_PROVINCEID, cData.map_CITY) + cData.map_ADDRESS;//地址获取 RES_CUSTOMERDETAIL model = cData.RES_CUSTOMERDETAIL; var modelNew = customerDetail_Q.GetModel_RES_CUSTOMERDETAIL(model.RESID); cData.map_CNAME = modelNew.CNAME; if (string.IsNullOrEmpty(cData.map_CNAME) && !string.IsNullOrEmpty(info.CustomerName)) { cData.map_CNAME = info.CustomerName; } //if (!string.IsNullOrEmpty(model.CNAME)) //{ // if (model.CNAME.Length > 4) // cData.map_CNAME = model.CNAME.Substring(0, 4); // else // cData.map_CNAME = model.CNAME; //} cData.map_PRIMARYNUMBERADDRESS = model.PRIMARYNUMBERADDRESS; cData.map_ResId = model.RESID; if (string.IsNullOrWhiteSpace(model.AMOUNTTYPEID)) { cData.map_AMOUNTTYPEID = ""; } else { var m = cacheQ.GetList_SubComType(ComType.CustomerZJL).FirstOrDefault(p => p.SUBTYPECODE == model.AMOUNTTYPEID); if (m != null) { cData.map_AMOUNTTYPEID = m.map_SUBTYPENAME; } } if (string.IsNullOrWhiteSpace(model.JOBTYPEID)) { cData.map_JOBTYPEID = ""; } else { var m = cacheQ.GetList_SubComType(ComType.CustomerZY).FirstOrDefault(p => p.SUBTYPECODE == model.JOBTYPEID); if (m != null) { cData.map_JOBTYPEID = m.map_SUBTYPENAME; } } cData.map_GENDER = model.GENDER == "m" ? "男" : "女"; cData.map_ADDRESS = model.ADDRESS; cData.isBound = model.ISBOUND;//是否绑定客服 var ZJL = cacheQ.GetList_SubComType(ComType.CustomerZJL).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); ViewBag.ZJL = ZJL; } //var residArr = info.ResCustomerList.Select(p => p.RESID).ToArray(); //var allocateList = _myallocate.GetList(p => residArr.Contains(p.RESID)); ViewBag.CustomerInfo = info; ViewBag.companyCode = companyCode;//公司编码 //ViewBag.allocateList = allocateList; ViewBag.userId = UserId; //ViewBag.rfm = _rfm.GetResCustomerRfm(residArr); //var favCustomer = _favoriteCustomer.GetModel_FavoriteCustomer(info.CustomerId, null); //try //{ // var cmsgetDept = _BAS_PARAMETER_Q.GetModel_Patameter("Cms_GetResDept"); // if (cmsgetDept != null) // { // var url = cmsgetDept.PARAVALUE; // var param = $"?appid=com.web&appuserid={info.CustomerId}"; // string jsonx = Utility.GetData(url, param, Encoding.UTF8); // LogHelper.Info("cms获取:" + url + param + ", ret:" + jsonx); // cmsresdeptRet ret = JsonHelper.JsonDivertToObj(jsonx); // if (ret.errcode == 0) // { // var ent = ret.data.Where(m => m.deptid != 1).OrderByDescending(m => m.ctime).FirstOrDefault(); // ViewBag.CmsDeptName = ent == null ? "未知" : ent.deptname; // } // } //} //catch (Exception e) //{ // LogHelper.Error(e.ToString()); //} //var comTypeList = DataCacheHelper.GetCache().GetList_SubComType(WX.CRM.Model.Enum.ComType.FavoritesCustType); //string favoritesCustType = string.Empty; //if (favCustomer != null) //{ // var comtypeInfo = comTypeList.FirstOrDefault(P => P.map_SUBTYPECODE == favCustomer.PARAKEY); // if (comtypeInfo != null) // { // favoritesCustType = comtypeInfo.map_SUBTYPENAME; // } //} //ViewBag.FavoritesCustType = favoritesCustType; //客户内外诉标签 try { var webapi = cacheQ.GetValue_Parameter("Hg_Core_WebApi"); //webapi = "https://localhost:7090"; var url = $"{webapi}/api/OutComplaint/ComplaintLabel"; var para = $"resId={info.CustomerId}"; var result = Utility.GetData(url, para, Encoding.UTF8); var data = result.ToObject>(); ViewBag.Complaint = data?.data; } catch (Exception ex) { LogHelper.Error(ex.ToString()); } //客户年龄,身份证地址,IP信息 //try //{ // var url = cacheQ.GetValue_Parameter(Parameter.Customer_DetailUrl); // if (!string.IsNullOrWhiteSpace(url)) // { // var para = $"appid=&appuserid=&fields=username,age,gender,id_province,id_city,id_area,ip,country,province,city&resid={info.CustomerId}"; // var result = Utility.GetData(url, para, Encoding.UTF8); // var data = result.ToObject>>(); // if (data.code == 0 && data.data != null) // { // var dto = data.data; // ViewBag.CName = dto.FirstOrDefault(x => x.name == "username")?.val; // ViewBag.Age = dto.FirstOrDefault(x => x.name == "age")?.val; // ViewBag.IdCardAddr = $"{dto.FirstOrDefault(x => x.name == "id_province")?.val}{dto.FirstOrDefault(x => x.name == "id_city")?.val}{dto.FirstOrDefault(x => x.name == "id_area")?.val}"; // ViewBag.IpAddr = $"{dto.FirstOrDefault(x => x.name == "province")?.val}{dto.FirstOrDefault(x => x.name == "city")?.val}"; // } // } //} //catch (Exception ex) //{ // LogHelper.Error(ex.ToString()); //} try { var url = "http://hg.soft.dn8188.com/Compliance/GetTranUser"; var para = new { umid = cData.UMID }; var rep = Utility.PostAjaxData(url, para.ToJson(), Encoding.UTF8); if (!string.IsNullOrEmpty(rep)) { var result = JsonConvert.DeserializeAnonymousType(rep, new { result = false, data = string.Empty }); if(result.result) { // 解析外层 JSON var userDetail = JsonConvert.DeserializeObject(result.data); // 解析 riskinfo 字段 var riskInfo = JsonConvert.DeserializeObject(userDetail.riskinfo); //姓名 cData.map_CNAME = userDetail.cname; //注册时间 cData.CTIME = string.IsNullOrEmpty(userDetail.regdate) ? cData.CTIME : Convert.ToDateTime(userDetail.regdate); if (!string.IsNullOrEmpty(userDetail.idcardno)) { //国籍 ViewBag.Nationality = IdCardHelper.GetNationality(userDetail.idcardno); //身份证类型 ViewBag.IdCardType = IdCardHelper.GetIdCardType(userDetail.idcardno); //身份证 ViewBag.IdCard = IdCardHelper.MaskIdCard(userDetail.idcardno); //出生年月 ViewBag.BirthDay = IdCardHelper.GetBirthDate(userDetail.idcardno).ToString(); //性别 cData.map_GENDER = IdCardHelper.GetGender(userDetail.idcardno); //年龄 cData.map_BIRTHDAYAREASTR = IdCardHelper.GetAge(userDetail.idcardno).ToString(); } //承受风险能力 cData.RES_CUSTOMERDETAIL.RISKTOLERANCE = string.IsNullOrEmpty(userDetail.risklevel) ? string.Empty : "C" + userDetail.risklevel; // 新增答案解析 var answers = riskInfo.answer.Split('|'); //学历 cData.map_JOBTYPEID = answers.Length > 18 ? GetAnswerText(19, answers[18]) : ""; //投资经验 cData.map_OpenrationTypeStr = answers.Length > 7 ? GetAnswerText(6, answers[7]) : ""; //资金量 cData.map_AMOUNTTYPEID = answers.Length > 3 ? GetAnswerText(4, answers[3]) : ""; //债务 ViewBag.ZaiWu = answers.Length > 2 ? GetAnswerText(3, answers[2]) : ""; //投资期限 ViewBag.QiXiang = answers.Length > 10 ? GetAnswerText(11, answers[10]) : ""; //品种 ViewBag.PinZhong = answers.Length > 11 ? GetAnswerText(12, answers[11]) : ""; //期望收益 ViewBag.QiWang = answers.Length > 13 ? GetAnswerText(14, answers[13]) : ""; //可承受的损失 ViewBag.ShunShi = answers.Length > 14 ? GetAnswerText(15, answers[14]) : ""; } } } catch (Exception ex) { LogHelper.Error(ex.ToString()); } return View(cData); } public ActionResult CustomerCheckUC(CustomerInfo info) { //List listTradeCode = info.GjsCustomerList.Select(m => m.TRADECODE).ToList(); //string tradeCodes = string.Join(",", listTradeCode); //List customerCheckList = customerCheck_Q.GetList_GjsCustomerCheckByTradecodes(listTradeCode); List listResId = info.ResCustomerList.Select(m => m.RESID).ToList(); List customerComplainList = customerComplain_Q.GetList_CustomerComplainByResIds(listResId); //QC_CUSTOMERCOMPLAIN_Extend customerComplain = null; //if (customerComplainList != null) //{ // customerComplain = customerComplainList.FirstOrDefault(); //} var isSH = false; var roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); if ((roleCodes.Contains("[SH]") || roleCodes.Contains("[GLY]"))) { isSH = true; } //ViewBag.customerCheckList = customerCheckList; ViewBag.customerComplain = customerComplainList; ViewBag.customerId = info.CustomerId; ViewBag.isSH = isSH; return View(); } public ActionResult CustomerCategoryUC(CustomerInfo info) { ViewBag.CustomerInfo = info; //List typeList = customerCategory.GetTypeList(info.CustomerId); //ViewBag.typeList = typeList; //string paraValue = ""; //DateTime? lossAmtDate = cacheQ.GetGjs_TradeCustomerTotalList().Where(m => info.GjsCustomerList.Select(p => p.TRADECODE).ToArray().Contains(m.TRADECODE)).Where(m => m.LOSSAMTDATE != null).Select(p => p.LOSSAMTDATE).OrderByDescending(d => d).FirstOrDefault(); //if (lossAmtDate != null) // paraValue = cacheQ.GetValue_Parameter(Model.Enum.Parameter.Gjs_LossAmt); //ViewBag.LossAmt = paraValue; //ViewBag.LossAmtDate = lossAmtDate; //List model2 = _gjsCustomercategoryQ.GetList_CustomerCategoryInfo(info); //ViewBag.GJS_CustomerCategoryInfoViewList = model2; return View(); } public ActionResult CustomerExtendUC(CustomerInfo info) { var list = _customerExtQ.GetList_CustomerExt(info.CustomerId); var SKtype = cacheQ.GetList_SubComType(ComType.CustomerExtendSK).ToList(); var Item = cacheQ.GetList_SubComType(ComType.CustomerExtendChoseItem).ToList(); //var resData = info.GjsCustomerList.Where(p => p.RESID == info.CustomerId).FirstOrDefault(); SKtype.AddRange(Item); foreach (var it in list) { BAS_SUBCOMTYPE subName = SKtype.Where(p => p.SUBTYPECODE == it.CUSTOMEREXTENDSUBTYPEID).FirstOrDefault(); if (it.CUSTOMEREXTENDTYPEID == "CustomerExtendSK") { it.CUSTOMEREXTENDSUBTYPEID = subName == null ? "" : subName.SUBTYPENAME; } else { it.CUSTOMEREXTENDSUBTYPEID = "看盘时间"; } } ViewBag.resid = info.CustomerId; ViewBag.List = list; //ViewBag.tradeCode = resData == null ? "" : resData.TRADECODE; ViewBag.tradeCode = ""; return View(); } public ActionResult ContactUC(CustomerInfo info) { var _CTI_CALLOUT_CUSTOMER = cacheQ.GetValue_Parameter("CTI_CALLOUT_CUSTOMER"); var _sys_Environment_DeptCode = cacheQ.GetValue_Parameter("Sys_Environment_DeptCode"); bool nedCallOutNum = true; //if (null != _sys_Environment_DeptCode) // nedCallOutNum = _sys_Environment_DeptCode == Sys_Environment_DeptCode.LVTD01.ToString() || // userRoleNames.Contains("VIP热线电话"); if (_CTI_CALLOUT_CUSTOMER != null && _CTI_CALLOUT_CUSTOMER.ToLower() == "true") _init_CallOutPara(info.RequsetResId, _sys_Environment_DeptCode, nedCallOutNum); else _init_CallOutNum(_sys_Environment_DeptCode, nedCallOutNum); string weixinzhushou = cacheQ.GetValue_Parameter("WeiXin_WebChatAssistant"); bool isShowwxzs = false; if (!string.IsNullOrEmpty(weixinzhushou) && weixinzhushou == "show") { isShowwxzs = true; } ViewBag.IsShowWeiXinZhuShou = isShowwxzs; ViewBag.resid = info.CustomerId; ViewBag.ResCustList = info.ResCustomerList; ViewBag.CustomerMoblieList = GetCustomerMoblieByResid(info.CustomerId); ViewBag.CanShowMoile = cacheQ.GetValue_Parameter(WX.CRM.Model.Enum.Parameter.Sys_CanShowResMobile); string roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); //升级客服角色 if (roleCodes.IndexOf("GJSSJKF") >= 0) { ViewBag.GJSSJKF = "1"; } var cti = _CSVR_CALLRECORD_Q.Sys_Environment_CTI_VER(); if (null != cti) { ViewBag.CTI_VER = Convert.ToInt32(cti); } ViewBag.DeptCode = _sys_Environment_DeptCode.ToUpper(); ViewBag.IsBC = nedCallOutNum.ToString().ToLower(); ViewBag.Eid = Eid; ViewBag.RoleCodes = roleCodes; ViewBag.IsFromHg = info.IsFromHg; return View(); } [HttpPost] public JsonResult RefreshCustomerMoblieByResid(string resid) { var host = cacheQ.GetValue_Parameter(Parameter.Hg_Internal_WebApi); var url = host + "/api/Customer/moblies"; var res = Utility.GetData(url, "resid=" + resid, Encoding.UTF8); var result = JsonHelper.JsonDivertToObj>>(res); if (result.Code == 0) { if (!result.Data.Any()) return Json(new { reslust = true, message = "无其他事业部号码可以获取" }); CreateCustomerMoblie(resid, result.Data); return Json(new { reslust = true, message = "获取成功!" }); } return Json(new { reslust = false, message = "获取失败" }); } private List GetCustomerMoblieByResid(string resid) { var host = cacheQ.GetValue_Parameter(Parameter.Hg_Internal_WebApi); var url = host + "/api/Customer/moblies"; var res = Utility.GetData(url, "resid=" + resid, Encoding.UTF8); var result = JsonHelper.JsonDivertToObj>>(res); if (result.Code == 0) { return result.Data; } return new List(); } private void CreateCustomerMoblie(string resid, List customers) { if (!customers.Any()) return; var users = customer_Q.GetListByResId(resid); foreach (var customer in customers.Where(x => !users.Select(y => y.RESID).Contains(x.Resid))) { string clientid = Utility.GetSettingByKey("CRMClientKey"); var mobile = sHelper.decyptData(clientid, customer.Mobile); res_Customer_BL.ResgisterCustomer(mobile, customer.Resid, "resetmobile"); var newCustomer = customer_Q.getResCustomerByResId(customer.Resid); newCustomer.CUSTOMERID = customer.CustomerId; res_Customer_BL.Update(ref errors, newCustomer); } } private void _init_CallOutPara(string resid, string _sys_Environment_DeptCode, bool nedCallOutNum) { var CallOutPhoneList = new List(); var CallOutPhoneDefault = new List(); var calloutPara = cacheQ.GetList_CallOutPara(); if (calloutPara == null || calloutPara.Count == 0) { return; } foreach (var callout in calloutPara) { if (callout.ISSHOW == 0)//网络号码 { CallOutPhoneList.Add(new System.Web.UI.WebControls.ListItem { Text = callout.CALLOUTNAME, Value = callout.CALLOUTNUM }); } else { var chk = _RES_CALLOUTCUSTOMER.IsCallOut(resid, callout.CALLOUTTYPE); if (chk) { CallOutPhoneList.Add(new System.Web.UI.WebControls.ListItem { Text = callout.CALLOUTNAME, Value = callout.CALLOUTNUM }); } } } ViewBag.CallOutPhoneDefault = CallOutPhoneDefault; ViewBag.CallOutPhone = CallOutPhoneList; } private void _init_CallOutNum(string _sys_Environment_DeptCode, bool nedCallOutNum) { var CallOutPhoneList = new List(); var CallOutPhoneDefault = new List(); #region VIP号码 string roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); var calloutpara = ""; //VIP热线坐席 if (roleCodes.IndexOf("VIPCall") > -1) { calloutpara = cacheQ.GetValue_Parameter("Sys_Environment_VIPCallOut"); } else { calloutpara = cacheQ.GetValue_Parameter("Sys_Environment_CallOut"); } /* * 参数表KEY=Sys_Environment_CallOut, 数据格式:7300|1,7333|9 * 含义:勾选框7300,7333,选不同参数发送不同号码,如选7300调用参数1。 * * 参数格式变更:7300|1,7333|9#7444#1 * 含义:7300|1,7333|9VIP号码,7444号码池号码,1默认号码。 */ int xx = 0; if (nedCallOutNum)//VIP号码#号码池号码 { if (calloutpara != null && !string.IsNullOrEmpty(calloutpara)) { var vipstr = calloutpara.Split('#');//取VIP号码 if (!string.IsNullOrEmpty(vipstr[0])) { foreach (var callout in (vipstr[0]).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))// 7300|1,7333|9 { xx++; //if (xx > 1 && roleCodes.IndexOf("[SH]") == -1 && roleCodes.IndexOf("[GJSGJKF]") == -1)//售后和主管才能有权选择 // break; var valAndText = callout.Split('|'); if (valAndText.Length == 2) { //if (roleCodes.IndexOf("[SH]") > -1 && xx==2) //{ // CallOutPhoneDefault.Add(valAndText[1]); //} CallOutPhoneList.Add(new System.Web.UI.WebControls.ListItem { Text = valAndText[0], Value = valAndText[1] }); } else { //if (roleCodes.IndexOf("[SH]") > -1 && xx == 2) //{ // CallOutPhoneDefault.Add(valAndText[0]); //} CallOutPhoneList.Add(new System.Web.UI.WebControls.ListItem { Text = valAndText[0], Value = valAndText[0] }); } } //CallOutPhoneDefault.Add(CallOutPhoneList.FirstOrDefault().Value); } } } #endregion VIP号码 #region 号码池 if (calloutpara != null && !string.IsNullOrEmpty(calloutpara)) { var vipstr = calloutpara.Split('#');//取号码池 if (vipstr.Length >= 2 && !string.IsNullOrEmpty(vipstr[1])) { foreach (var callout in (vipstr[1]).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { var valAndText = callout.Split('|'); if (valAndText.Length == 2) CallOutPhoneList.Add(new System.Web.UI.WebControls.ListItem { Text = valAndText[0], Value = valAndText[1] }); else CallOutPhoneList.Add(new System.Web.UI.WebControls.ListItem { Text = valAndText[0], Value = valAndText[0] }); } } } #endregion 号码池 #region 默认号码 if (calloutpara != null && !string.IsNullOrEmpty(calloutpara)) { var vipstr = calloutpara.Split('#');//取VIP号码 if (vipstr.Length == 3) { CallOutPhoneDefault.Add(vipstr[2]); } } #endregion 默认号码 ViewBag.CallOutPhoneDefault = CallOutPhoneDefault; ViewBag.CallOutPhone = CallOutPhoneList; } public ActionResult CustomerUserUC(CustomerInfo info) { //OldVersion List list = customeruser_q.GetListByCustomerId(info.CustomerId); var softuser = _softUserQ.GetUserList_userName(list.Select(m => m.USERNAME).ToArray()); var ResCustList = info.ResCustomerList; //redis版本 //var ResCustList = info.ResCustomerList; //string[] resids = ResCustList.Select(m => m.RESID).ToArray(); //List list = redisFactory.GetList_Rescustomer(info.CustomerId, resids); //var softuser = redisFactory.GetList_SoftUser(list.Select(m => m.USERNAME).Distinct().ToArray()); Dictionary dic = new Dictionary(); //foreach (var model in softuser) //{ // RES_CUSTOMERUSER customeruser = list.FirstOrDefault(p => p.USERNAME == model.USERNAME); // var rescustomer = ResCustList.FirstOrDefault(m => m.RESID == customeruser.RESID); // dic.Add(model.USERNAME, rescustomer); //} foreach (var model in list) { if (!dic.ContainsKey(model.USERNAME)) { var rescustomer = ResCustList.FirstOrDefault(m => m.RESID == model.RESID); dic.Add(model.USERNAME, rescustomer); } } ViewBag.SoftUser = softuser; ViewBag.ResId = info.CustomerId; ViewBag.UserNameList = string.Join(",", softuser.Select(m => m.USERNAME)); ViewBag.ResDic = dic; return View(); } [Inject] public ISecurityHelper sHelper { get; set; } [HttpPost] public JsonResult GetOtherUser(string resid, string softusername) { try { var url = cacheQ.GetValue_Parameter(Parameter.Core_ZxdService_GetOtherUser); var theModel = new Soft_User_GetCheckDTO() { companyCode = companyCode, eid = Convert.ToInt32(Eid), resid = resid, softusername = softusername }; string json = Newtonsoft.Json.JsonConvert.SerializeObject(theModel); json = sHelper.createSignEncodingStr(json, SecurityHelper.OrderClientIdKey);//数据参数加密 string retmsg = Utility.PostData(url + "?" + json, Encoding.UTF8);//实现中心点先入库 retmsg = sHelper.decyptData(SecurityHelper.OrderClientIdKey, retmsg); retMsgNew> result = Newtonsoft.Json.JsonConvert.DeserializeObject>>(retmsg); if (result.result) { foreach (var activeModel in result.data) { var _regUser = new GET_REGUSER(); //bl.RegUser(item.mobile,); _regUser.RegUser(activeModel.mobile, activeModel.regcampainid.ToString(), "", activeModel.username, activeModel.regdate, 0, activeModel.mobile, platform: activeModel.reglatform); } return Json(new { reslust = true, message = result.retmsg }); } else { return Json(new { reslust = false, message = result.retmsg }); } } catch (Exception e) { LogHelper.Error(e.ToString()); return Json(new { reslust = false, message = "系统错误" }); } } public ActionResult CustomerAddWxUserUC(CustomerInfo info) { ViewBag.WorkwxEid = Eid; ViewBag.ResId = info.CustomerId; ViewBag.RcontactList = wxrcontact.GetRcontactByResId(info.CustomerId); string roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId);//获取员工角色 ViewBag.RoleCodes = roleCodes; return View(); } [Inject] public IWw_huser _iww_hhuser_service { get; set; } #region 绑定企业微信 public ActionResult CustomerAddWWUserUC(CustomerInfo info) { List view = new List(); try { var userlist = _wwExtUserResId.GetList(p => p.RESID == info.CustomerId); foreach (var user in userlist) { if (user != null) { Ww_Extuser extuser = _iww_hhuser_service.ExtUserGet(user.USERID); //var extuser = _wwExtUser.Get(p => p.USERID == user.USERID); if (extuser != null) { var exinfo = extuser.exinfo.ToObject(); exinfo.corpid = extuser.corpid; foreach (var item in exinfo.follow_user) { var hhuser = _iww_hhuser_service.HHuser_Get(item.userid); WW_HHUSER_EID hheid = _iww_hhuser_service.GetModel(item.userid, exinfo.corpid); if (hheid != null) { item.saleeid = InnerUserHelper.Instance.GetEidAndNameByEid(hheid.EID, true); } else { item.saleeid = ""; } //var hhuser = _wwHhUser.Get(p => p.USERID == item.userid); if (hhuser != null) item.uname = hhuser.uname; item.bindtime = user.CTIME.ToString("yyyy-MM-dd HH:mm:ss"); item.remark = Utility.ReplaceMobile(item.remark); for (int i = 0; i < item.remark_mobiles.Count; i++) { item.remark_mobiles[i] = Utility.ReplaceMobile(item.remark_mobiles[i]); } } //extUserInfo = exinfo.ToJson(); view.Add(exinfo); } } } } catch (Exception ex) { LogHelper.Error(ex.ToString()); } ViewBag.extUserInfo = view.ToJson(); ViewBag.ResId = info.CustomerId; ViewBag.DeptCode = Utility.GetSettingOrNullByKey("DataClientCode"); ViewBag.WwMessage_Url = cacheQ.GetValue_Parameter("WwMessage_Url_Test"); ViewBag.companycode = companyCode;//公司ID return View(); } public JsonResult BindWwExtUser(string resId, string userId) { if (string.IsNullOrEmpty(userId)) { return Json(new { result = false, message = "请选择企业微信" }, JsonRequestBehavior.AllowGet); } if (string.IsNullOrEmpty(resId)) { return Json(new { result = false, message = "参数错误" }, JsonRequestBehavior.AllowGet); } bool ret = true; string message = "关联成功!"; try { ret = _wxSzzyorder.UpdateResIdByWwUserName(resId, userId); if (ret) { //_wxSzzyorder.UpdateIsBoundByResId(resId); var host = Utility.GetSettingOrNullByKey("DataSyncApiUrl"); var url = host + "/api/DataSync"; var data = new { resid = resId, userid = userId, deptcode = companyCode }; var para = new SYNC_PUSH_DTO() { bidatatype = "Server_WwextUserResid", deptcode = companyCode, jsontext = data.ToJson() }; var rep = Utility.PostAjaxData(url, para.ToJson(), Encoding.UTF8); var ret2 = Utility.JSONToObject(rep); if (!ret2.result) { LogHelper.Info("同步到中心点异常:" + para.ToJson()); message = "关联成功!同步到总部失败!"; } } } catch (Exception e) { ret = false; LogHelper.Info("异常:" + e.ToString()); message = "出现错误!"; } return Json(new { result = ret, message = message }, JsonRequestBehavior.AllowGet); } #endregion 绑定企业微信 public ActionResult CustomerLoginInfo(CustomerInfo info) { string loginInfoResId = info == null ? "" : info.CustomerId; return View((object)loginInfoResId); } public ActionResult CustomerOtherInfo(CustomerInfo info) { RES_CUSTOMER_Extend customer = new RES_CUSTOMER_Extend(); //try //{ if (info != null && !string.IsNullOrEmpty(info.CustomerId)) { var getCustomer = customer_Q.GetModel(info.CustomerId.Trim()); var amounttype = cacheQ.GetList_SubComType(ComType.CustomerZJL).FirstOrDefault(p => p.SUBTYPECODE == getCustomer.RES_CUSTOMERDETAIL.AMOUNTTYPEID); var customertype = cacheQ.GetList_SubComType(ComType.CustomerType).FirstOrDefault(p => p.SUBTYPECODE == getCustomer.RES_CUSTOMERDETAIL.CUSTOMERTYPEID); var jobtype = cacheQ.GetList_SubComType(ComType.CustomerZY).FirstOrDefault(p => p.SUBTYPECODE == getCustomer.RES_CUSTOMERDETAIL.JOBTYPEID); var OperationType = cacheQ.GetList_SubComType(ComType.CustomerCZXG).FirstOrDefault(p => p.SUBTYPECODE == getCustomer.RES_CUSTOMERDETAIL.OPERATIONTYPE); var customerfrom = cacheQ.GetList_SubComType(ComType.CustomerFrom).FirstOrDefault(p => p.SUBTYPECODE == getCustomer.CUSTOMERFROM); customer.RES_CUSTOMERDETAIL = new RES_CUSTOMERDETAIL(); if (getCustomer != null) { var province = provinceQ.GetProvince(getCustomer.map_PROVINCEID == null ? 1 : getCustomer.map_PROVINCEID.Value); var city = cityQ.GetCity(getCustomer.map_CITY == null ? 1 : getCustomer.map_CITY.Value); customer.map_ResId = getCustomer.map_ResId; customer.map_CACCOUNT = getCustomer.RES_CUSTOMERDETAIL.CACCOUNT; customer.map_CTIME = getCustomer.map_CTIME; customer.map_CNAME = getCustomer.map_CNAME; customer.map_GENDER = getCustomer.map_GENDER == "m" ? "男" : "女"; customer.map_EMAIL = getCustomer.map_EMAIL; customer.map_MSN = getCustomer.map_MSN; customer.map_FAX = getCustomer.map_FAX; customer.map_ADDRESS = getCustomer.map_ADDRESS; customer.map_AMOUNTTYPEID = amounttype == null ? "" : amounttype.SUBTYPENAME; customer.map_CUSTOMERTYPEID = customertype == null ? "" : customertype.SUBTYPENAME; customer.map_JOBTYPEID = jobtype == null ? "" : jobtype.SUBTYPENAME; customer.map_OPERATIONTYPE = OperationType == null ? "" : OperationType.SUBTYPENAME; customer.map_CUSTOMERFROM = customerfrom == null ? "" : customerfrom.SUBTYPENAME; customer.map_PROVINCE = province == null ? "" : province.NAME; customer.map_GETCITY = city == null ? "" : city.NAME; } } //} //catch (Exception ex) //{ // LogHelper.Error(ex.Message); //} return View(customer); } public ActionResult RelationCustomerUC(CustomerInfo info) { List list = new List(); try { if (info != null && !string.IsNullOrEmpty(info.CustomerId)) { list = relationcustomer.GetRelationByResId(info.CustomerId); } } catch (Exception ex) { LogHelper.Error(ex.Message); } // ViewBag.List = list; ViewBag.RelationResId = info.CustomerId; return View(list); } public ActionResult CustomerInfo(CustomerInfo info) { try { RES_CUSTOMER_Extend customer = new RES_CUSTOMER_Extend(); //try //{ if (info != null && !string.IsNullOrEmpty(info.CustomerId)) { var getCustomer = customer_Q.GetModel(info.CustomerId.Trim()); var amounttype = cacheQ.GetList_SubComType(ComType.CustomerZJL).FirstOrDefault(p => p.SUBTYPECODE == getCustomer.RES_CUSTOMERDETAIL.AMOUNTTYPEID); var customertype = cacheQ.GetList_SubComType(ComType.CustomerType).FirstOrDefault(p => p.SUBTYPECODE == getCustomer.RES_CUSTOMERDETAIL.CUSTOMERTYPEID); var jobtype = cacheQ.GetList_SubComType(ComType.CustomerZY).FirstOrDefault(p => p.SUBTYPECODE == getCustomer.RES_CUSTOMERDETAIL.JOBTYPEID); var OperationType = cacheQ.GetList_SubComType(ComType.CustomerCZXG).FirstOrDefault(p => p.SUBTYPECODE == getCustomer.RES_CUSTOMERDETAIL.OPERATIONTYPE); var customerfrom = cacheQ.GetList_SubComType(ComType.CustomerFrom).FirstOrDefault(p => p.SUBTYPECODE == getCustomer.CUSTOMERFROM); customer.RES_CUSTOMERDETAIL = new RES_CUSTOMERDETAIL(); if (getCustomer != null) { var province = provinceQ.GetProvince(getCustomer.map_PROVINCEID == null ? 1 : getCustomer.map_PROVINCEID.Value); var city = cityQ.GetCity(getCustomer.map_CITY == null ? 1 : getCustomer.map_CITY.Value); customer.map_ResId = getCustomer.map_ResId; customer.map_CACCOUNT = getCustomer.RES_CUSTOMERDETAIL.CACCOUNT; customer.map_CTIME = getCustomer.map_CTIME; customer.map_CNAME = getCustomer.RES_CUSTOMERDETAIL.CNAME; customer.map_GENDER = getCustomer.map_GENDER == "m" ? "男" : "女"; customer.map_EMAIL = getCustomer.RES_CUSTOMERDETAIL.EMAIL; customer.map_MSN = getCustomer.RES_CUSTOMERDETAIL.MSN; customer.map_FAX = getCustomer.RES_CUSTOMERDETAIL.FAX; customer.map_ADDRESS = getCustomer.RES_CUSTOMERDETAIL.ADDRESS; customer.map_AMOUNTTYPEID = amounttype == null ? "" : amounttype.SUBTYPENAME; customer.map_CUSTOMERTYPEID = customertype == null ? "" : customertype.SUBTYPENAME; customer.map_JOBTYPEID = jobtype == null ? "" : jobtype.SUBTYPENAME; customer.map_OPERATIONTYPE = OperationType == null ? "" : OperationType.SUBTYPENAME; customer.map_PROVINCE = province == null ? "" : province.NAME; customer.map_GETCITY = city == null ? "" : city.NAME; customer.map_CUSTOMERFROM = customer.map_CUSTOMERFROM; } } //} //catch (Exception ex) //{ // LogHelper.Error(ex.Message); //} return View(customer); } catch (Exception ex) { LogHelper.Error(ex); return View(); } } #endregion 客户信息 #region 工单信息 public ViewResult CustomerAllMemoUC(CustomerInfo info) { var deptCode = Utility.GetSettingOrNullByKey("DataClientCode"); ViewBag.DeptCode = deptCode; return View(info); } public JsonResult GetMemoQueryHtml(Pager pager, string ResId, string MemoType, decimal? pageType, string IsValid) { string isShowMobileOfContent = cacheQ.GetValue_Parameter(Model.Enum.Parameter.Sys_IsShowMobileOfContent); 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, "PACK_ORD_MEMO.ord_allmemo_get_new2");//获取所有工单 //list = redisFactory.LoadMemo(ResId, IsValid); break; } #endregion 获取数据 //获取事业部配置 var deptMapList = customer_Q.GetUserDeptNameByEid(list.Select(n => n.EID).ToList()); Table table = new Table("", true); table.gridPager = pager; 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(); var deptCode = Utility.GetSettingOrNullByKey("DataClientCode"); if (deptCode == "QBJZ") { Memo_Type = OperationUtil.GetDicFromEnum(); } ORD_MEMOTYPE memotype = null; ORD_MEMOSUBTYPE memosubType = null; var userMapping = cacheQ.GetAllCrmUser(); List containList = new List(); foreach (ORD_MemoQuery model in list) { var conStr = $"{model.MEMOID}_{model.STRCONTENT}_{model.CTIME.Value}"; if (containList.Contains(conStr)) { continue; } containList.Add(conStr); table.AddCol(double.Parse(model.MEMOID.ToString())); var eidMap = deptMapList.FirstOrDefault(n => n.Eid == model.EID); if (eidMap != null) { table.AddCol(eidMap.DeptName); } else { table.AddCol(model.COMPANYNAME); } if (pageType != null)//查看更多工单的,显示全部工单内容 { if (!string.IsNullOrEmpty(isShowMobileOfContent) && isShowMobileOfContent == "1") { table.AddCol(model.STRCONTENT); } else { table.AddCol(Utility.ReplaceMobile(model.STRCONTENT)); } } else { if (!string.IsNullOrEmpty(isShowMobileOfContent) && isShowMobileOfContent == "1") { table.AddCol(model.STRCONTENT, 20, model.STRCONTENT); } else { table.AddCol(Utility.ReplaceMobile(model.STRCONTENT), 20, Utility.ReplaceMobile(model.STRCONTENT)); } } if (MemoType == "7") { table.AddCol(Memo_Type[Convert.ToInt32(model.MEMO_TYPE)]); table.AddCol(Handler.MethodRsource.GetMemoBusinessName(Convert.ToInt32(model.MEMO_TYPE), Convert.ToInt32(model.BUSINESSID))); } memotype = memoTypeList.FirstOrDefault(m => m.TYPEID == model.MEMOTYPEID); table.AddCol(memotype == null ? "" : memotype.TYPENAME); memosubType = memoSubTypeList.FirstOrDefault(m => m.SUBTYPEID == model.MEMOSUBTYPEID); table.AddCol(memosubType == null ? "" : memosubType.TYPENAME); if (model.ExtMemoId.HasValue) { model.STRCONTENT = model.STRCONTENT + string.Format("更多", model.ExtMemoId.Value); } var userInfo = userMapping.FirstOrDefault(n => n.PKID == model.INNERUSERID); var userName = ""; if (userInfo != null) { userName = userInfo.EID + "-" + userInfo.UNAME; } table.AddCol(userName); //table.AddCol(InnerUserHelper.Instance.EidAndName(model.INNERUSERID)); if (model.CTIME.HasValue) table.AddCol(model.CTIME.Value.ToString("yyyy-MM-dd") + "
" + model.CTIME.Value.ToString("HH:mm:ss")); else table.AddCol(""); table.AddCol(GetTimeSpace(model.CALLTIME, model.CALLTIMEEND)); table.AddCol(model.COMPANYNAME.ToString()); if (model.COMPANYNAME == "合规") { table.AddCol(string.Format("修正", model.MEMOID)); } else { table.AddCol(""); } table.AddRow(GetStyle(styleList, model.MEMOSTYLEID)); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #region 获取短信 public JsonResult GetMessageHtml(Pager pg, string ResId, int? rn, DateTime? stime, DateTime? etime) { Table table = new Table("", true); table.gridPager = pg; var ds = batchMsg_Q.GetMessageList(ref pg, ResId, rn, stime, etime); foreach (System.Data.DataRow item in ds.Tables[0].Rows) { table.AddCol(item["RESID"]); table.AddCol(string.IsNullOrEmpty(item["EID"].ToString()) ? "" : item["EID"].ToString() + " - " + item["UNAME"].ToString()); //table.AddCol(PhoneHelper.FormatPhoneUserNameContent(item["MESSAGE"].ToString())); if (item["SUBTYPECODE"] == null) table.AddCol(PhoneHelper.FormatPhoneUserNameContent(item["MESSAGE"].ToString(), "")); else table.AddCol(PhoneHelper.FormatPhoneUserNameContent(item["MESSAGE"].ToString(), item["SUBTYPECODE"].ToString())); table.AddCol(item["SENDTIME"]); table.AddRow(); } var json = new { totalPages = pg.totalPages, totalRows = pg.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion 获取短信 #region 获取通话时间 public JsonResult UpdateNoCallTime(string MemoId) { bool result = false; try { decimal memoid = Convert.ToDecimal(MemoId); CSVR_CALLRECORD_BL.UpdateCallTime(memoid); result = true; } catch (Exception ex) { result = false; } var json = new { result = result }; return Json(json, JsonRequestBehavior.AllowGet); } public bool UpdateNoTime(List memoIds) { try { string Strmemoids = ""; if (memoIds.Count > 0) { foreach (var item in memoIds) { Strmemoids += item.MemoId + ","; } } Strmemoids = Strmemoids.Substring(0, Strmemoids.Length - 1); CSVR_CALLRECORD_BL.UpdateNoTimeBymemoids(Strmemoids); return true; } catch { return false; } } public class MemoIds { public Nullable MemoId { get; set; } public Nullable UserEid { get; set; } } #endregion 获取通话时间 private string GetStyle(List styleList, decimal? id) { if (id == null) return "style='color:black;'"; ORD_MEMOSTYLE style = styleList.Where(m => m.STYLEID == id.Value).FirstOrDefault(); if (style == null) return "style='color:black;'"; else return string.Format("style='color:{0};'", style.STYLECODE); } private string GetTimeSpace(DateTime? time1, DateTime? time2) { string timeStr = ""; if (time1 == null) timeStr += "--:--:--"; else timeStr += time1.Value.ToString("HH:mm:ss"); timeStr += "~
"; if (time2 == null) timeStr += "--:--:--"; else timeStr += time2.Value.ToString("HH:mm:ss"); return timeStr; } #endregion 工单信息 #region 获取营业部 工单 public ViewResult SaleDptAllMemoUC(CustomerInfo info) { return View(info); } public JsonResult GetSaleDeptMemoQueryHtml(Pager pager, string ResId, string MemoType, decimal? pageType, string IsValid) { string isShowMobileOfContent = cacheQ.GetValue_Parameter(Model.Enum.Parameter.Sys_IsShowMobileOfContent); List list = ord_memo_Q.GetTGAllMemoListByResId(int.MaxValue, ResId, IsValid);//获取所有工单 Table table = new Table("", true); table.gridPager = pager; 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; foreach (ORD_MemoQuery model in list) { table.AddCol(model.MEMOID); table.AddCol(Memo_Type[Convert.ToInt32(model.MEMO_TYPE)]); table.AddCol(Handler.MethodRsource.GetMemoBusinessName(Convert.ToInt32(model.MEMO_TYPE), Convert.ToInt32(model.BUSINESSID))); //memotype = memoTypeList.FirstOrDefault(m => m.TYPEID == model.MEMOTYPEID); //table.AddCol(memotype == null ? "" : memotype.TYPENAME); //memosubType = memoSubTypeList.FirstOrDefault(m => m.SUBTYPEID == model.MEMOSUBTYPEID); //table.AddCol(memosubType == null ? "" : memosubType.TYPENAME); if (pageType != null)//查看更多工单的,显示全部工单内容 { if (!string.IsNullOrEmpty(isShowMobileOfContent) && isShowMobileOfContent == "1") { table.AddCol(model.STRCONTENT); } else { table.AddCol(Utility.ReplaceMobile(model.STRCONTENT)); } } else { if (!string.IsNullOrEmpty(isShowMobileOfContent) && isShowMobileOfContent == "1") { table.AddCol(model.STRCONTENT, 20, model.STRCONTENT); } else { table.AddCol(Utility.ReplaceMobile(model.STRCONTENT), 20, Utility.ReplaceMobile(model.STRCONTENT)); } } //table.AddCol(InnerUserHelper.Instance.EidAndName(model.INNERUSERID)); table.AddCol(model.TGsalesName); if (model.CTIME.HasValue) table.AddCol(model.CTIME.Value.ToString("yyyy-MM-dd") + "
" + model.CTIME.Value.ToString("HH:mm:ss")); else table.AddCol(""); table.AddCol(GetTimeSpace(model.CALLTIME, model.CALLTIMEEND)); table.AddRow(GetStyle(styleList, model.MEMOSTYLEID)); } var json = new { totalPages = pager.totalPages, totalRows = pager.totalRows, rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion 获取营业部 工单 #region 订单信息 public ViewResult CustomerOrderUC(CustomerInfo info) { ViewBag.CustomerId = info.CustomerId; return View(); } public ViewResult CustomerModuleUC() { return View(); } #endregion 订单信息 #region 投顾订单信息 public ViewResult CustomerLevel2OrderUC(CustomerInfo info) { ViewBag.CustomerId = info.CustomerId; return View(); } #endregion 投顾订单信息 #region 活动信息 public ViewResult CustomerActivityUC(CustomerInfo info) { ViewBag.CustomerId = info.CustomerId; return View(); } #endregion 活动信息 #region 微信 public ViewResult CustomerWxUserUC(CustomerInfo info) { DataTable tab = null; try { ViewBag.WorkwxEid = Eid; string roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId);//获取员工角色 ViewBag.RoleCodes = roleCodes; tab = wxrcontact.GetChatUserByResId(info.CustomerId); } catch (Exception ex) { WX.CRM.Common.LogHelper.Error("【CustomerUCController.CustomerWxUserUC()】" + ex.Message + ex.StackTrace); } ViewBag.modelList = tab; return View(); } #endregion 微信 #region 销售线索 public ViewResult SalesLeadsUC(CustomerInfo info) { ViewBag.resid = info.CustomerId; return View(); } public JsonResult GetSalesLead(string resid) { var appid = Utility.GetSettingOrNullByKey("appid"); var appSecret = Utility.GetSettingOrNullByKey("appSecret"); var salesleadDto = new List(); List saleslead = new List(); try { var userlist = _wwExtUserResId.GetList(p => p.RESID == resid); foreach (var user in userlist) { if (user != null) { var extuser = _wwExtUser.Get(p => p.USERID == user.USERID); if (extuser != null) { var exinfo = extuser.EXINFO.ToObject(); exinfo.corpid = extuser.CORPID; string name = "企业微信"; if (exinfo.external_contact != null) { name = exinfo.external_contact.name; saleslead.Add(new Model.DTO.saleslead() { name = name, appid = exinfo.corpid, appuserid = exinfo.external_contact.external_userid }); } } } } List list = customeruser_q.GetListByCustomerId(resid); string deptId = ""; BAS_PARAMETER deptSetting = _BAS_PARAMETER_Q.GetModel_Patameter("SalesLeadsDeptSetting"); if (deptSetting != null && !string.IsNullOrEmpty(deptSetting.PARAVALUE)) { try { var saledeptList = deptSetting.PARAVALUE.ToObject>(); deptId = saledeptList.FirstOrDefault(n => n.DeptCode == saleDeptCode)?.DeptId; } catch (Exception e) { LogHelper.Error(e.ToString()); } } foreach (var item in list) { string name = PhoneHelper.FormatPhoneUserName(item.USERNAME); saleslead.Add(new Model.DTO.saleslead() { name = name, appid = "com.dongniu", appuserid = item.USERNAME, deptid = deptId, eid = Eid.ToString() }); } BAS_PARAMETER model = _BAS_PARAMETER_Q.GetModel_Patameter("ISVR_Saleclus_Get"); if (model != null && !string.IsNullOrEmpty(model.PARAVALUE)) { try { string httpurl = model.PARAVALUE; List customerlist = customer_Q.GetList_CustomerByResid(resid); IList mm = _resource.GetNumberByResIdList(customerlist.Select(m => m.RESID).ToList()); var objecb = new { mobiles = mm }; string retmss = Utility.PostAjaxData(httpurl, JsonHelper.ObjDivertToJson(objecb), Encoding.UTF8); var result = JsonHelper.JsonDivertToObj(retmss); if (result.iRet == 0 && result.list.Count > 0) { foreach (var item in result.list) { var en = saleslead.FirstOrDefault(m => m.appuserid == item.appuserid && m.appid == item.appid); if (en != null) { continue; } string myname = item.appuserid; if (item.appuserid.Length > 10) { myname = item.appuserid.Substring(0, 10) + "*****"; } saleslead.Add(new Model.DTO.saleslead() { name = myname, appid = item.appid, appuserid = item.appuserid, deptid = deptId, eid = Eid.ToString() }); } } } catch (Exception e) { LogHelper.Error(e.ToString()); } } // 加密数据进content WX.CRM.IBLL.Util.ISecurityHelper sHelper = new SecurityHelper(); var content = ""; var j = ""; var ext_flag = DateTimeTool.ConvertDateTimeLong(DateTime.Now); saleslead.ForEach(s => { //content = ""; //j = ""; //j = JsonConvert.SerializeObject(new saledsleadDesDto { appid = s.appid, appuserid = s.appuserid, deptid = s.deptid, eid = s.eid, ext_flag = ext_flag }); j = JsonConvert.SerializeObject(new { account = appid, password = appSecret, s.appid, s.appuserid, s.eid, time = ext_flag }); content = HttpUtility.UrlEncode(sHelper.encyptData("saleclue", j)); salesleadDto.Add(new saledsleadDto { linkUrl = string.Empty, name = s.name, content = content }); }); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return Json(new { result = false, message = "错误:" + ex.ToString() }, JsonRequestBehavior.AllowGet); } return Json(new { result = true, message = "succed", retmsg = saleslead }, JsonRequestBehavior.AllowGet); } #endregion 销售线索 #region 企业微信 public ViewResult CustomerQwUserUC(CustomerInfo info) { DataTable tab = null; try { ViewBag.WorkwxEid = Eid; string roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId);//获取员工角色 ViewBag.RoleCodes = roleCodes; tab = wxrcontact.GetChatQwByResId(info.CustomerId); } catch (Exception ex) { WX.CRM.Common.LogHelper.Error("【CustomerUCController.CustomerQwUserUC()】" + ex.Message + ex.StackTrace); } ViewBag.modelList = tab; return View(); } #endregion 企业微信 #region 证星订单 public ViewResult CustomerZxOrder(CustomerInfo info) { ViewBag.CustomerId = info.CustomerId; ViewBag.UserRoles = userRoleCodes; return View(info); } public JsonResult GetOrderListHtml(string resId, CustomerInfo info) { Table table = new Table("", true); string[] resids = customer_Q.GetAllResidByCustomerId(resId); List resIds = redisFactory.GetList_Rescustomer(resids, resId).Select(s => s.RESID).ToList(); var list = _wxSzzyorder.GetList(p => resIds.Contains(p.RESID)); //var list2 = _wxSzzyorder2.GetList(p => resIds.Contains(p.RESID)); foreach (WX_SZZYORDER model in list) { table.AddCol(model.ORDERID); table.AddCol(string.Format("{0}", model.SZZYORDERID.ToString())); table.AddCol(model.SUBPRODUCTNAME); table.AddCol(getOrderTypeStr(model.ORDERTYPE)); table.AddCol(getOrderStatusStr(model.ORDERSTATUS)); table.AddCol(model.CTIME); table.AddCol(model.OTIME); table.AddCol(model.NEEDPAY); table.AddCol(model.FINALPAY); table.AddCol(model.ARRIVALPAY); table.AddCol(model.ARRIVALTIME); table.AddCol(model.TEAMSERVE == 1 ? "分公司" : "总公司"); var link = string.Format(" 银行信息 {1}", model.ORDERID, model.ISOPEN == 1 ? string.Format(" 续费 ", model.ORDERID) : ""); table.AddCol(link); table.AddRow("onclick='selectRow(this)'"); } var json = new { rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } public JsonResult GetPrepaymentListHtml(string resId, CustomerInfo info) { Table table = new Table("", true); string[] resids = customer_Q.GetAllResidByCustomerId(resId); List resIds = redisFactory.GetList_Rescustomer(resids, resId).Select(s => s.RESID).ToList(); var list = new List(); if (resIds != null) { } foreach (SzzyPrepaymentResultData model in list) { table.AddCol(model.prepayment_id); table.AddCol(model.realname); table.AddCol(model.to_bank_name); table.AddCol(model.remit_time); table.AddCol(model.amount); table.AddCol(getPrepaymentStatusStr(model.status)); table.AddCol(model.order_id); table.AddCol(model.ctime); table.AddCol(model.expire_days); table.AddRow(); } var json = new { rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } public ViewResult CustomerCallRecord(CustomerInfo info) { ViewBag.CustomerId = info.CustomerId; CACHE_BL cache_BL = new CACHE_BL(); var audioUrl = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_HgListAudioList); ViewBag.audioUrl = audioUrl; return View(info); } public JsonResult GetRecordListHtml(string resId, CustomerInfo info) { Table table = new Table("", true); Pager pg = new Pager { page = 1, rows = 150 }; var list = CSVR_CALLRECORD_BL.GetCallRecord(ref pg, new Model.MAP.QueryUserComboDto(null, null, null, null), null, null, null, null, resId, null, -1, -1, "PACK_CSVR.CSVR_CALLRECORDQUERY_DETAIL"); List res = new List(); if (list != null && list.Tables[0] != null) { List containList = new List(); foreach (DataRow item in list.Tables[0].Rows) { var strIsTran = ""; AiAudioList model = new AiAudioList { RECORDID = item["RECORDID"] == DBNull.Value ? "" : item["RECORDID"].ToString(), strIsTran = strIsTran, TIMELENGTH = item["TIMELENGTH"] == DBNull.Value ? "" : item["TIMELENGTH"].ToString(), UNAME = item["UNAME"] + "-" + item["SALESEID"], Eid = string.IsNullOrWhiteSpace(item["SALESEID"].ToString()) ? 0 : Convert.ToDecimal(item["SALESEID"]), FileName = item["FileName"] == DBNull.Value ? "" : item["FileName"].ToString(), ServerID = item["ServerID"] == DBNull.Value ? "" : item["ServerID"].ToString(), OUTDEPT = item["OUTDEPT"] == DBNull.Value ? "" : item["OUTDEPT"].ToString(), COID = item["COID"] == DBNull.Value ? "" : item["COID"].ToString() }; if (item["ISTRAN"].ToString() == "1") { strIsTran = "(转接)"; } if (item["CALLTYPE"].ToString() == "1")//呼出 { model.strIsTran = "呼出" + strIsTran; model.SERVICENUMBER = item["SERVICENUMBER"].ToString(); model.TELNUMBERLAST4 = item["TELNUMBERLAST4"].ToString(); } else { model.strIsTran = "呼入" + strIsTran; model.SERVICENUMBER = item["TELNUMBERLAST4"].ToString(); model.TELNUMBERLAST4 = item["SERVICENUMBER"].ToString(); } if (item["TIMESTART"] != DBNull.Value) { model.TIMESTART = Convert.ToDateTime(item["TIMESTART"]); } if (item["TIMEEND"] != DBNull.Value) { model.TIMEEND = Convert.ToDateTime(item["TIMEEND"]); } if (item["COMPANYNAME"] != DBNull.Value) { model.CompanyName = Convert.ToString(item["COMPANYNAME"]); } model.isAiCall = false; var conStr = $"{model.RECORDID}_{model.TIMELENGTH}_{model.SERVICENUMBER}_{model.TELNUMBERLAST4}_{model.TIMESTART.ToString()}"; if (containList.Contains(conStr)) { continue; } containList.Add(conStr); res.Add(model); } } try { CACHE_BL cache_BL = new CACHE_BL(); var url = cache_BL.GetValue_Parameter(Parameter.Core_ZxdService_GetAiAudioRecord); var para = "page=1&limit=150&resId=" + resId; var retmsg = Utility.PostData(url + "?" + para, Encoding.UTF8); var retmessage = WebHelper.JsonHelper.JsonDivertToObj(retmsg); var aiAudioList = retmessage.retmsg; foreach (var audio in aiAudioList) { res.Add(new AiAudioList { RECORDID = audio.Id.ToString(), strIsTran = "呼出", SERVICENUMBER = audio.Robot, TELNUMBERLAST4 = audio.Phone, TIMELENGTH = audio.SvcTime.ToString(), TIMESTART = audio.StartTime.HasValue ? audio.StartTime.Value.AddHours(8) : audio.StartTime, TIMEEND = audio.EndTime.HasValue ? audio.EndTime.Value.AddHours(8) : audio.EndTime, UNAME = "机器人坐席", FileName = audio.FileName, CompanyName = "合规" }); } } catch (Exception ex) { LogHelper.Error("获取Ai录音错误" + ex.Message); } var t = res.Where(w => res.Where(w2 => w2.COID == w.COID).Count() > 1); // 拿出同COID下,录音id更小的(因为更小的是北一的数据) var t2 = t.GroupBy(g => g.COID).Select(s => new AiAudioList { COID = s.Key, RECORDID = s.Min(m => long.Parse(m.RECORDID)).ToString() }).ToList(); res = res.Where(r => t.FirstOrDefault(f => r.COID == f.COID) == null || (t.FirstOrDefault(f => r.COID == f.COID) != null && t.FirstOrDefault(f => r.COID == f.COID).RECORDID == r.RECORDID)).OrderByDescending(n => n.TIMESTART).Take(150).ToList(); //获取事业部配置 var deptMapList = customer_Q.GetUserDeptNameByEid(res.Select(n => n.Eid).ToList()); foreach (var item in res) { table.AddCol(item.RECORDID); if (deptMapList != null) { var eidMap = deptMapList.FirstOrDefault(n => n.Eid == item.Eid); if (eidMap != null) { table.AddCol(eidMap.DeptName); } else { table.AddCol(""); } } else { table.AddCol(""); } table.AddCol(item.strIsTran); table.AddCol(item.SERVICENUMBER);//主叫 table.AddCol(item.TELNUMBERLAST4);//被叫 table.AddCol(item.TIMELENGTH); table.AddCol(item.TIMESTART); table.AddCol(item.TIMEEND); table.AddCol(item.UNAME); table.AddCol(item.CompanyName); if (!item.isAiCall) { string cti; string outdept = string.Empty; if (item.OUTDEPT != "") { outdept = item.OUTDEPT; } string playurl = ""; string playcrl = ""; if (item.CompanyName == "合规") { playurl = _getCallRecordUrl(item.ServerID.ToString(), item.FileName, outdept, out cti); playcrl = string.Format("", playurl, item.RECORDID, cti == null ? "" : cti, Convert.ToInt64(item.RECORDID)); } else { playurl = _getOtherCallRecordUrl(item.CompanyName, item.FileName, out cti); playcrl = string.Format("", playurl, item.RECORDID, cti == null ? "" : cti, Convert.ToInt64(item.RECORDID)); } playcrl += string.Format("
", item.RECORDID, playurl); table.AddCol(playcrl); } else { var playcrl = string.Format("", item.FileName); playcrl += string.Format("", item.RECORDID); table.AddCol(playcrl); } table.AddRow(); } var json = new { rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } private string _getCallRecordUrl(string _ServerID, string _FileName, out string cti) { var playurl = ""; cti = ""; var _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord"); if (null != _IAD_localhostCallRecord) { var FuturesRecordServerUrl = _IAD_localhostCallRecord.PARAVALUE; playurl = FuturesRecordServerUrl + "?serverID=" + _ServerID + "&file=" + _FileName.Replace("\\", "/"); cti = _CSVR_CALLRECORD_Q.Sys_Environment_CTI_VER(); if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷移动坐席).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷固定坐席).ToString()) { var shjctiinterface = Utility.GetSettingByKey("shj"); playurl = shjctiinterface + "?action=record_download&filename=/var/spool/asterisk/monitor/" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.和声).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯).ToString()) { playurl = FuturesRecordServerUrl + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString()) { _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord_AX"); var filename = _FileName; if (null != _IAD_localhostCallRecord) { playurl = _IAD_localhostCallRecord.PARAVALUE + (filename.StartsWith("UP") ? "/home/" + filename : filename); playurl = playurl.Replace("\\", "/"); } } } return playurl; } private string _getCallRecordUrl(string _ServerID, string _FileName, string outdept, out string cti) { var playurl = ""; cti = ""; var _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord"); if (null != _IAD_localhostCallRecord) { var FuturesRecordServerUrl = _IAD_localhostCallRecord.PARAVALUE; playurl = FuturesRecordServerUrl + "?serverID=" + _ServerID + "&file=" + _FileName.Replace("\\", "/"); cti = _CSVR_CALLRECORD_Q.Sys_Environment_CTI_VER(); if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷移动坐席).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.深海捷固定坐席).ToString()) { var shjctiinterface = Utility.GetSettingByKey("shj"); playurl = shjctiinterface + "?action=record_download&filename=/var/spool/asterisk/monitor/" + _FileName.Replace("\\", "/"); } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.和声).ToString()) { playurl = FuturesRecordServerUrl + "?file=" + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯).ToString()) { playurl = FuturesRecordServerUrl + _FileName; } if (cti != null && cti == ((int)WX.CRM.Model.Enum.CTI_VER.艾讯new).ToString()) { _IAD_localhostCallRecord = _BAS_PARAMETER_Q.GetModel_Patameter("ICSR_IAD_localhostCallRecord_AX" + (string.IsNullOrEmpty(outdept) ? "" : ("_" + outdept))); var filename = _FileName; if (null != _IAD_localhostCallRecord) { playurl = _IAD_localhostCallRecord.PARAVALUE + (filename.StartsWith("UP") ? "/home/" + filename : filename); playurl = playurl.Replace("\\", "/"); } } } return playurl; } private string _getOtherCallRecordUrl(string companyName, string fileName, out string cti) { cti = ""; var recordSetting = _BAS_PARAMETER_Q.GetModel_Patameter("RecordSetting"); if (recordSetting != null && !string.IsNullOrWhiteSpace(recordSetting.PARAVALUE)) { var setting = recordSetting.PARAVALUE.ToObject>(); var obj = setting.FirstOrDefault(n => n.CompanyName == companyName); if (obj != null) { cti = _CSVR_CALLRECORD_Q.Sys_Environment_CTI_VER(); return $"{obj.Url}{fileName}"; } } return ""; } public ViewResult CustomerTDOrder(CustomerInfo info) { ViewBag.CustomerId = info.CustomerId; return View(info); } public ViewResult CustomerJZOrder(CustomerInfo info) { ViewBag.CustomerId = info.CustomerId; ViewBag.AllResIds = string.Join(",", info.ResCustomerList.Select(m => m.RESID).ToArray()); return View(info); } public ViewResult CustomerCommonOrder(CustomerInfo info) { ViewBag.CustomerId = info.CustomerId; return View(info); } public JsonResult GetTDOrderListHtml(string resId, CustomerInfo info) { Table table = new Table("", true); //string[] resids = customer_Q.GetAllResidByCustomerId(customerId); //List resIds = redisFactory.GetList_Rescustomer(resids, customerId).Select(s => s.RESID).ToList(); //var list = _wxSzzyorder.GetList(p => p.RESID == resId); string[] resids = customer_Q.GetAllResidByCustomerId(resId); List resIds = redisFactory.GetList_Rescustomer(resids, resId).Select(s => s.RESID).ToList(); var list = _wxSzzyorder.GetList(p => resIds.Contains(p.RESID)); foreach (WX_SZZYORDER model in list) { table.AddCol(model.ORDERID); table.AddCol(model.SZZYORDERID); table.AddCol(model.SUBPRODUCTNAME); table.AddCol(getOrderTypeStr(model.ORDERTYPE)); table.AddCol(getOrderStatusStr(model.ORDERSTATUS)); table.AddCol(model.CTIME); table.AddCol(model.OTIME); table.AddCol(model.NEEDPAY); table.AddCol(model.FINALPAY); table.AddCol(model.ARRIVALPAY); table.AddCol(model.ARRIVALTIME); table.AddRow("onclick='selectRow(this)'"); } var json = new { rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } public class userRet { public string orderid { set; get; } public string softwarename { set; get; } } public JsonResult GetJZOrderListHtml(string resId, CustomerInfo info, int type = 0) { Table table = new Table("", true); WX_SZZYORDER_BL bill = new WX_SZZYORDER_BL(); List containOrder = new List(); List filter = new List { "已开通","已升级","已退款","已到期" }; var res = bill.GetOrderListByHgCrm(resId); var zxdUsernameList = new List(); try { var orderidList = String.Join(";", res.Select(s => s.ORDERID)); var webapi = cacheQ.GetValue_Parameter("Zxd_CoreApiUrl"); var zxdurl = $"{webapi}Api/Customer/UsernamesByOrderid"; //var zxdurl = $"http://localhost:5244/Api/Customer/UsernamesByOrderid?orderidList={orderidList}"; var result = Utility.GetData(zxdurl, $"orderidList={orderidList}", Encoding.Default); zxdUsernameList = result.ToObject>>().data; } catch (Exception ex) { LogHelper.Error(ex.ToString()); } List containOrderList = new List(); foreach (var model in res) { if (containOrderList.Contains(model.ORDERID.ToString())) { continue; } containOrderList.Add(model.ORDERID.ToString()); var orderStr = $"{model.ORDERID}_{model.SUBPRODUCTNAME}_{model.CTIME}"; if (containOrder.Contains(orderStr)) { continue; } else { containOrder.Add(orderStr); } if (type != 1 && !filter.Contains(Convert.ToString(model.ORDERSTATUSNAME))) { continue; } var zxdUsername = zxdUsernameList.Find(z => z.orderid == model.ORDERID.ToString()); table.AddCol(model.ORDERID); table.AddCol(model.ChannelName); table.AddCol(model.SZZYORDERID); table.AddCol(model.SUBPRODUCTNAME); table.AddCol(model.PRODUCTCODE); table.AddCol(model.ORDERTYPE); table.AddCol(zxdUsername != null ? zxdUsername.softwarename : ""); table.AddCol(model.ORDERSTATUSNAME); table.AddCol(model.CTIME); table.AddCol(model.OTIME); table.AddCol(model.NEEDPAY); //table.AddCol(model.FINALPAY); table.AddCol(model.ARRIVALPAY); table.AddCol(model.OPENDAYS); table.AddCol(model.giftdays); table.AddCol(model.giftdays2); table.AddCol(model.contractctime); table.AddRow("onclick='selectRow(this)'"); } var json = new { rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } public JsonResult GetCommonOrderListHtml(string resId, CustomerInfo info) { Table table = new Table("", true); string[] resids = customer_Q.GetAllResidByCustomerId(resId); List resIds = redisFactory.GetList_Rescustomer(resids, resId).Select(s => s.RESID).ToList(); var list = _wxSzzyorder.GetList(p => resIds.Contains(p.RESID)); foreach (WX_SZZYORDER model in list) { table.AddCol(model.ORDERID); table.AddCol(model.SUBPRODUCTNAME); table.AddCol(getOrderTypeStr(model.ORDERTYPE)); table.AddCol(getOrderStatusStr(model.ORDERSTATUS)); table.AddCol(model.CTIME); table.AddCol(model.OTIME); table.AddCol(model.NEEDPAY); table.AddCol(model.FINALPAY); table.AddCol(model.ARRIVALPAY); table.AddRow("onclick='selectRow(this)'"); } var json = new { rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } public JsonResult GiveUp(string resid) { try { var response = _distribute.GiveUp(resid, UserId); return Json(new { result = true, msg = response }, JsonRequestBehavior.AllowGet); } catch (Exception ex) { LogHelper.Error(ex.ToString()); return Json(new { result = false, msg = string.Empty }, JsonRequestBehavior.AllowGet); } } private string getOrderTypeStr(decimal? orderType) { if (!orderType.HasValue) return ""; if (orderType == 1) { return "普通订单"; } else if (orderType == 2) { return "续费订单"; } else if (orderType == 3) { return "升级订单"; } else if (orderType == 4) { return "换课订单"; } else { return ""; } } private string getPrepaymentStatusStr(decimal? status) { if (!status.HasValue) return ""; if (status == 0) { return "初始(未确认)"; } else if (status == 1) { return "已确认"; } else if (status == 2) { return "已支付(已用于订单付款)"; } else if (status == 3) { return "已到期(三十天到期)"; } else if (status == 4) { return "已退款"; } else if (status == 5) { return "无效(汇款记录被拒绝)"; } else { return ""; } } private string getOrderStatusStr(string orderStatus) { if (orderStatus == "0") { return string.Format("下单失败"); } else if (orderStatus == "1") { return "未开通"; } else if (orderStatus == "2") { return "部分支付"; } else if (orderStatus == "3") { return "已支付"; } else if (orderStatus == "4") { return "已开通"; } else if (orderStatus == "5") { return "已到期"; } else if (orderStatus == "6") { return "已升级"; } else if (orderStatus == "7") { return "已退款"; } else if (orderStatus == "8") { return "已取消"; } else if (orderStatus == "9") { return "已关闭"; } else if (orderStatus == "10") { return "隐藏"; } else { return ""; } } #endregion 证星订单 #region 用户绑定手机 [HttpGet] public ActionResult BindUser(bool isAdd, string resid) { ViewBag.isAdd = isAdd; ViewBag.resid = resid; return View(); } public JsonResult BindUserSub(bool isAdd, string resid, string userIdType, string val) { try { ValidationErrors errors = new ValidationErrors(); string msg = isAdd ? "绑定成功!" : "解绑成功!"; var oldresid = resid; if (!string.IsNullOrEmpty(val)) { RES_CUSTOMER oldCustomer = new RES_CUSTOMER(); RES_CUSTOMER newCustomer = new RES_CUSTOMER(); switch (userIdType.ToLower()) { case "phone"://手机号 #region 手机号绑定与解绑 if (string.IsNullOrEmpty(val)) return Json(new { s = false, m = "联系号码不能为空" }); val = val.Trim().Replace("-", ""); if (val.StartsWith("1") && !Utility.ChekMobile(val))//如果是以1开头的,就必须按照手机号码格式 { return Json(new { s = false, m = "联系号码不正确" }); } else if (!Utility.CheckIsNum(val)) { return Json(new { s = false, m = "联系号码不正确" }); } var cNumber = val; var resId = ResUtil.CreateResId(cNumber); var customerFrom = "HMJ_CRM"; //来源标签,是否改成从配置表中取 if (!ExistsResId(cNumber)) { if (!isAdd) { return Json(new { s = true, m = "联系号码未注册,无法解绑!" }); } if (companyCode == "SHZZ") { customerFrom = "27100"; try { var userName = companyCode.ToLower() + cNumber.Substring(3, cNumber.Length - 3); var password = userName; var guid = Guid.NewGuid().ToString(); var ch = cacheQ.GetValue_Parameter("QRCodeCH"); if (soft_RegAndOrderLink_BL.HasUserName(userName)) { userName = companyCode.ToLower() + cNumber.Substring(3, cNumber.Length - 3) + guid.Substring(0, 4); } var res = soft_RegAndOrderLink_BL.RegToUP(userName, cNumber, ch, "P", guid, password, Eid); LogHelper.Info("注册返回结果:" + res.ToJson()); if (res.ret == 0) { _regUser.RegUser(cNumber, customerFrom, null, userName, DateTime.Now, 0, cNumber); } else { if (res.ret == -1108) { LogHelper.Info("自动注册软件用户已经存在!"); return Json(new { s = false, m = "注册失败,请重新再试!" }); } else if (res.ret == -1212) { var url = cacheQ.GetValue_Parameter("Core_ZxdService_SoftUserInfo"); if (!string.IsNullOrEmpty(url)) { var retmsg = Utility.PostData(url + "?ResId=" + resId, Encoding.UTF8); var retmessage = WebHelper.JsonHelper.JsonDivertToObj(retmsg); LogHelper.Info("retmessage:" + retmessage.ToJson()); if (retmessage.result) { userName = retmessage.retmsg; _regUser.RegUser(cNumber, customerFrom, null, userName, DateTime.Now, 0, cNumber); } else { LogHelper.Info("自动注册手机号已经存在!"); return Json(new { s = false, m = "注册失败,请重新再试!" }); } } } } } catch (Exception ee) { LogHelper.Error(ee.ToString()); } } } else { // 解绑 if (!isAdd) { newCustomer = customer_Q.getResCustomerByResId(resId); if (newCustomer.CUSTOMERID != resid) { return Json(new { s = false, m = "手机号未绑定当前资源,解绑失败!" }); } newCustomer.CUSTOMERID = resId; _customer.Update(ref errors, newCustomer); return Json(new { s = true, m = "解绑成功!" }); } else { newCustomer = customer_Q.getResCustomerByResId(resId); newCustomer.CUSTOMERID = resid; _customer.Update(ref errors, newCustomer); return Json(new { s = true, m = "绑定成功!" }); } } if (string.IsNullOrEmpty(oldresid))//根据旧的ID获取数据 { if (companyCode == "SHZZ") { customerFrom = "27100"; var userName = companyCode.ToLower() + cNumber.Substring(3, cNumber.Length - 3); var password = userName; var guid = Guid.NewGuid().ToString(); var ch = cacheQ.GetValue_Parameter("QRCodeCH"); if (soft_RegAndOrderLink_BL.HasUserName(userName)) { userName = companyCode.ToLower() + cNumber.Substring(3, cNumber.Length - 3) + guid.Substring(0, 4); } var res = soft_RegAndOrderLink_BL.RegToUP(userName, cNumber, ch, "P", guid, password, Eid); LogHelper.Info("注册返回结果:" + res.ToJson()); if (res.ret == 0) { _regUser.RegUser(cNumber, customerFrom, null, userName, DateTime.Now, 0, cNumber); } else { if (res.ret == -1108) { LogHelper.Info("自动注册软件用户已经存在!"); return Json(new { s = false, m = "注册失败,请重新再试!" }); } else if (res.ret == -1212) { var url = cacheQ.GetValue_Parameter("Core_ZxdService_SoftUserInfo"); if (!string.IsNullOrEmpty(url)) { var retmsg = Utility.PostData(url + "?ResId=" + resId, Encoding.UTF8); var retmessage = WebHelper.JsonHelper.JsonDivertToObj(retmsg); LogHelper.Info("retmessage:" + retmessage.ToJson()); if (retmessage.result) { userName = retmessage.retmsg; _regUser.RegUser(cNumber, customerFrom, null, userName, DateTime.Now, 0, cNumber); } else { LogHelper.Info("自动注册手机号已经存在!"); return Json(new { s = false, m = "注册失败,请重新再试!" }); } } } } } else { _customer.ResgisterCustomer(cNumber, resId, customerFrom); } _customer.HandlerSalerAddCustomer(resId, UserId); } else { var thedata = customerDetail_Q.GetModel_RES_CUSTOMERDETAIL(oldresid); var customerDetail = new RES_CUSTOMERDETAIL(); customerDetail.RESID = resId; customerDetail.QQ = thedata.QQ; customerDetail.ADDRESS = thedata.ADDRESS; customerDetail.AMOUNTTYPEID = thedata.AMOUNTTYPEID; customerDetail.CITYID = thedata.CITYID; customerDetail.CNAME = thedata.CNAME; customerDetail.CUSTOMERTYPEID = thedata.CUSTOMERTYPEID; customerDetail.EMAIL = thedata.EMAIL; customerDetail.FAX = thedata.FAX; customerDetail.GENDER = thedata.GENDER; customerDetail.JOBTYPEID = thedata.JOBTYPEID; customerDetail.MSN = thedata.MSN; customerDetail.OPERATIONTYPE = thedata.OPERATIONTYPE; customerDetail.PRIMARYNUMBERADDRESS = thedata.PRIMARYNUMBERADDRESS; customerDetail.PROVINCEID = thedata.PROVINCEID; var xmls = new XmlSerializer(typeof(RES_CUSTOMERDETAIL)); var sw = new StringWriter(); xmls.Serialize(sw, customerDetail); _customer.ResgisterCustomer(cNumber, resId, customerFrom, sw.ToString()); oldCustomer = customer_Q.getResCustomerByResId(oldresid); newCustomer = customer_Q.getResCustomerByResId(resId); newCustomer.CUSTOMERID = oldCustomer.CUSTOMERID; _customer.Update(ref errors, newCustomer); _customer.HandlerSalerAddCustomer(resId, UserId); } #endregion 手机号绑定与解绑 break; case "resid"://客户id #region 客户id绑定与解绑 // 绑定 if (isAdd) { newCustomer = customer_Q.getResCustomerByResId(val); newCustomer.CUSTOMERID = resid; _customer.Update(ref errors, newCustomer); return Json(new { s = true, m = "绑定成功!" }); } var newResId = val; newCustomer = customer_Q.getResCustomerByResId(newResId); if (newCustomer == null) { return Json(new { s = false, m = "客户id不存在绑定关系!" }); } if (newCustomer.RESID == newCustomer.CUSTOMERID)//自己就是主号码 { var CustomerList = customer_Q.GetListByResId(newResId);//找到所有号码 var otherList = CustomerList.Where(m => m.RESID != newResId); var newCustomerId = otherList.OrderByDescending(m => m.CTIME).First();// foreach (var item in otherList) { item.CUSTOMERID = newCustomerId.RESID; _customer.Update(ref errors, item); //更新新id } } //解绑当前客户id newCustomer.CUSTOMERID = newCustomer.RESID; _customer.Update(ref errors, newCustomer); return Json(new { s = true, m = "解绑成功!" }); #endregion 客户id绑定与解绑 default: return Json(new { s = false, m = "未知客户信息!" }); } } else { msg = userIdType == "phone" ? "手机号不能为空!" : "客户id不能为空!"; return Json(new { s = false, m = msg }); } return Json(new { s = true, m = msg }); } catch (Exception ex) { return Json(new { s = false, m = ex.Message }); } } /// /// 客户ID是否存在,存在true,不存在false /// /// 传入手机号码 /// private bool ExistsResId(string mobile) { var resId = ResUtil.CreateResId(mobile); var model = customer_Q.getResCustomerByResId(resId); if (model == null) return false; return true; } #endregion 用户绑定手机 public class WwExtUserView { public External_Contact external_contact { get; set; } public List follow_user { get; set; } public string corpid { get; set; } } public class External_Contact { public string external_userid { get; set; } public string name { get; set; } //public int type { get; set; } //public string avatar { get; set; } } public class Follow_User { public string saleeid { get; set; } public string userid { get; set; } public string remark { get; set; } public string description { get; set; } public long createtime { get; set; } public string bindtime { get; set; } public List remark_mobiles { get; set; } public string uname { get; set; } } /// /// 销售组部分配置参数 /// public class SalesLeadSetting { public string DeptCode { get; set; } public string DeptId { get; set; } public string DeptName { get; set; } } public class AiAudioList { public string RECORDID { get; set; } public decimal? Eid { get; set; } public string strIsTran { get; set; } public string SERVICENUMBER { get; set; } public string TELNUMBERLAST4 { get; set; } public string TIMELENGTH { get; set; } public DateTime? TIMESTART { get; set; } public DateTime? TIMEEND { get; set; } public string UNAME { get; set; } public string ServerID { get; set; } public string FileName { get; set; } public string OUTDEPT { get; set; } public string COID { get; set; } public bool isAiCall { get; set; } = true; public string CompanyName { get; set; } } public class RecordSetting { public string CompanyName { get; set; } public string Url { get; set; } } public class WxTranUserDetailDto { public string softusername { get; set; } public string umid { get; set; } public string cname { get; set; } public string idcardno { get; set; } public string lastnum3 { get; set; } public string regdate { get; set; } public string szzyorderid { get; set; } public string risklevel { get; set; } public string exptime { get; set; } public string riskinfo { get; set; } } public class RiskInfoDto { public int ret { get; set; } public string name { get; set; } public string idCard { get; set; } public string answer { get; set; } public long createTime { get; set; } public string key { get; set; } public string style { get; set; } public int index { get; set; } public string version { get; set; } public string expTime { get; set; } public RiskTypeDto riskType { get; set; } public int verifyType { get; set; } public int auditStatus { get; set; } public string auditRemark { get; set; } public string businesstype { get; set; } public int paperId { get; set; } } public class RiskTypeDto { public int min { get; set; } public int max { get; set; } public string des { get; set; } public string name { get; set; } public string level { get; set; } } private string GetAnswerText(int questionId, string answerCode) { if (constantPaper.uprisk.question.TryGetValue(3, out var questionList) && questionId - 1 < questionList.Count) { var question = questionList[questionId - 1]; var answer = question.answer.FirstOrDefault(a => a.pos == answerCode); return answer?.text ?? string.Empty; } return string.Empty; } private static readonly ConstantPaper constantPaper = RiskPaperConstants.ConstantPaper; } public class CustomerMoblieDto { public string CustomerId { get; set; } public string Resid { get; set; } public string Mobile { get; set; } public string CompanyName { get; set; } public string CompanyCode { get; set; } public bool IsPrimarynum { get; set; } public string Lastnum3 { get; set; } } public class Soft_User_GetCheckDTO { public string resid { get; set; } public string softusername { get; set; } public string companyCode { get; set; } public int eid { get; set; } } public class Soft_User_GetModelDTO { /// /// 手机号码 /// public string mobile { get; set; } public string username { get; set; } public string userpass { get; set; } public decimal? regcampainid { get; set; } public string reglatform { get; set; } public DateTime? activetime { get; set; } public string activeresid { get; set; } public DateTime? ctime { get; set; } public DateTime? regdate { get; set; } public string resid { get; set; } public string ip { get; set; } } public class retMsgNew { public bool result { get; set; } public int retcode { get; set; } public T data { get; set; } public string retmsg { get; set; } } public class retMsg { public bool result { get; set; } public int retcode { get; set; } public string retmsg { get; set; } } public class SYNC_PUSH_DTO { public string jsontext { get; set; } public string bidatatype { get; set; } public string deptcode { get; set; } public int? isbatch { get; set; } } public class AiAudioRecordDto { public bool result { get; set; } public int retcode { get; set; } public List retmsg { get; set; } } public class AiAudioRecord { public decimal Id { get; set; } public string Robot { get; set; } public string Phone { get; set; } public int? SvcTime { get; set; } public DateTime? StartTime { get; set; } public DateTime? EndTime { get; set; } public string FileName { get; set; } } public class ConstantPaper { public UPRisk uprisk { get; set; } = new UPRisk(); } public class UPRisk { public Dictionary> question { get; set; } = new Dictionary>(); } public class Question { public string title { get; set; } public List answer { get; set; } public Dictionary score { get; set; } public bool special { get; set; } } public class Answer { public string text { get; set; } public string pos { get; set; } } }