//using CRM.Core.DTO; using Ninject; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Web.Mvc; using System.Web.UI; using System.Web.UI.WebControls; using System.Xml.Serialization; using WX.CRM.BLL.Soft; using WX.CRM.Common; using WX.CRM.IBLL.Base; using WX.CRM.IBLL.RedisBL; using WX.CRM.IBLL.Res; using WX.CRM.IBLL.Soft; using WX.CRM.IBLL.Util; using WX.CRM.Model.Entity; using WX.CRM.Model.Enum; using WX.CRM.WEB.Controllers; using WX.CRM.WebHelper; namespace WX.CRM.WEB.Areas.Res.Controllers { public class CustomerController : BaseController { private readonly IRES_CUSTOMER _customer; private readonly IRES_CUSTOMER_Q _customerQ; private readonly ICACHE_Q _cacheQ; private readonly IBAS_PROVINCE_Q _provinceQ; private readonly IBAS_CITY_Q _cityQ; private readonly IRES_ACTIVITY_Q _activityQ; private readonly IRES_CUSTOMERDETAIL _customerdetail; private readonly IRES_CUSTOMERDETAIL_Q _customerdetailQ; //private readonly IRES_CUSTOMERDETAIL_REDIS customerDetailRedisBiz; private ICUSTOMER_REDIS customerRedisBL; [Inject] public ISOFT_REGANDORDERLINK soft_RegAndOrderLink_BL { get; set; } private GET_REGUSER _regUser = new GET_REGUSER(); public CustomerController(IRES_CUSTOMER customer , IRES_CUSTOMER_Q customerQ , ICACHE_Q cacheQ , IBAS_PROVINCE_Q provinceQ , IBAS_CITY_Q cityQ , IRES_ACTIVITY_Q activityQ , IRES_CUSTOMERDETAIL customerdetail , IRES_CUSTOMERDETAIL_Q customerdetailQ //,IRES_CUSTOMERDETAIL_REDIS _customerDetailRedisBiz , ICUSTOMER_REDIS _customerRedisBL) { _customer = customer; _customerQ = customerQ; _cacheQ = cacheQ; _provinceQ = provinceQ; _cityQ = cityQ; _activityQ = activityQ; _customerdetail = customerdetail; _customerdetailQ = customerdetailQ; //this.customerDetailRedisBiz = _customerDetailRedisBiz; this.customerRedisBL = _customerRedisBL; } private ValidationErrors errors = new ValidationErrors(); private WebHelper.RedisFactory.RedisFactory redisFactory = new WebHelper.RedisFactory.RedisFactory(); #region 新增 [HttpGet] public ActionResult Create(string resid) { var genders = new List() { new ListItem() { Text = "男", Value = "m" }, new ListItem() { Text = "女", Value = "f" } }; var KHLX = _cacheQ.GetList_SubComType(ComType.CustomerType).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); var ZJL = _cacheQ.GetList_SubComType(ComType.CustomerZJL).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); var ZY = _cacheQ.GetList_SubComType(ComType.CustomerZY).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); var CZXG = _cacheQ.GetList_SubComType(ComType.CustomerCZXG).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); //var KHLY = _cacheQ.GetList_SubComType(ComType.CustomerFrom).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); //var KHLY = _activityQ.GetList() ViewBag.Gender = genders; ViewBag.KHLX = KHLX; ViewBag.ZJL = ZJL; ViewBag.ZY = ZY; ViewBag.CZXG = CZXG; //ViewBag.KHLY = KHLY; ViewBag.Province = GetProvince(0); ViewBag.City = GetCity(0); RES_CUSTOMER resData = new RES_CUSTOMER(); resData.RES_CUSTOMERDETAIL = new RES_CUSTOMERDETAIL(); resData.RES_CUSTOMERDETAIL.RESID = resid; return View(resData); } [HttpPost] public ActionResult Create(RES_CUSTOMER customer) { try { if (string.IsNullOrEmpty(customer.map_MOBILE)) return JsonHandler.ManageMessage("联系号码不能为空", false); customer.map_MOBILE = customer.map_MOBILE.Trim().Replace("-", ""); if (customer.map_MOBILE.StartsWith("1"))//如果是以1开头的,就必须按照手机号码格式 { if (!Utility.ChekMobile(customer.map_MOBILE)) { return JsonHandler.ManageMessage("联系号码不正确", false); } } else { if (!Utility.CheckIsNum(customer.map_MOBILE)) { return JsonHandler.ManageMessage("联系号码不正确", false); } } if (!ModelState.IsValid) return JsonHandler.ValidateFailMessage(); var cNumber = customer.map_MOBILE; var resId = ResUtil.CreateResId(cNumber); var customerFrom = "HMJ_CRM"; //来源标签,是否改成从配置表中取 var oldresid = customer.map_ResId; //LogHelper.Info("customer.map_MOBILE:" + customer.map_MOBILE); if (ExistsResId(customer.map_MOBILE)) { //LogHelper.Info("companyCode:" + companyCode); 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("自动注册软件用户已经存在!"); errors.Add("注册失败,请重新再试!"); return JsonHandler.InsertMessage(errors, false); } 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("自动注册手机号已经存在!"); errors.Add("注册失败,请重新再试!"); return JsonHandler.InsertMessage(errors, false); } } } } } catch (Exception ee) { LogHelper.Error(ee.ToString()); } } return JsonHandler.ManageMessage("联系号码已经存在", true); } 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("自动注册软件用户已经存在!"); errors.Add("注册失败,请重新再试!"); return JsonHandler.InsertMessage(errors, false); } 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("自动注册手机号已经存在!"); errors.Add("注册失败,请重新再试!"); return JsonHandler.InsertMessage(errors, false); } } } } } else { var customerDetail = customer.RES_CUSTOMERDETAIL; var xmls = new XmlSerializer(typeof(RES_CUSTOMERDETAIL)); var sw = new StringWriter(); xmls.Serialize(sw, customerDetail); _customer.ResgisterCustomer(cNumber, resId, customerFrom, sw.ToString()); } _customer.HandlerSalerAddCustomer(resId, UserId); } else { var thedata = _customerdetailQ.GetModel_RES_CUSTOMERDETAIL(oldresid); var customerDetail = customer.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()); //var oldCustomer = _customerQ.GetModel(oldresid); //var newCustomer = _customerQ.GetModel(resId); var oldCustomer = _customerQ.getResCustomerByResId(oldresid); var newCustomer = _customerQ.getResCustomerByResId(resId); newCustomer.CUSTOMERID = oldCustomer.CUSTOMERID; _customer.Update(ref errors, newCustomer); //if (companyCode == "DNZZ" || companyCode == "QBJY") //{ _customer.HandlerSalerAddCustomer(resId, UserId); //} } #region 中心点注册 try { var zxdapi = System.Configuration.ConfigurationManager.AppSettings["ZxdCoreApi"]; var curl = $@"{zxdapi}Api/Customer/CreateCustomer"; LogHelper.Info($"Url:{curl}?MOBILE={cNumber}&ResId={resId}&CustomerFrom={customerFrom}"); var resJson = Utility.GetData(curl, $@"MOBILE={cNumber}&ResId={resId}&CustomerFrom={customerFrom}", Encoding.UTF8); LogHelper.Info($"Res:{resJson}"); } catch (Exception ex) { LogHelper.Error(ex); } #endregion 中心点注册 return JsonHandler.InsertMessage(errors, true); } catch (Exception ex) { LogHelper.Error(ex); return JsonHandler.InsertMessage(errors, false); //throw; } } #endregion 新增 #region 编辑 [HttpGet] public ActionResult Edit(string resid) { var genders = new List() { new ListItem() { Text = "男", Value = "m" }, new ListItem() { Text = "女", Value = "f" } }; var KHLX = _cacheQ.GetList_SubComType(ComType.CustomerType).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); var ZJL = _cacheQ.GetList_SubComType(ComType.CustomerZJL).OrderBy(m => m.SUBTYPECODE).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); var ZY = _cacheQ.GetList_SubComType(ComType.CustomerZY).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); var CZXG = _cacheQ.GetList_SubComType(ComType.CustomerCZXG).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); var category = _cacheQ.GetList_SubComType(ComType.CustomerCategory).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPENAME }).ToList(); var NL = _cacheQ.GetList_SubComType(ComType.CustomerNL).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); category.Insert(0, new SelectListItem() { Text = string.Empty, Value = string.Empty }); ViewBag.Gender = genders; ViewBag.KHLX = KHLX; ViewBag.ZJL = ZJL; ViewBag.ZY = ZY; ViewBag.CZXG = CZXG; ViewBag.category = category; ViewBag.NL = NL; WX.CRM.Model.Entity.RES_CUSTOMERDETAIL model = null; RES_CUSTOMER customer = new RES_CUSTOMER(); if (resid == null) { model = new RES_CUSTOMERDETAIL(); ViewBag.Province = GetProvince(0); ViewBag.City = GetCity(0); } else { model = _customerdetailQ.GetModel_RES_CUSTOMERDETAIL(resid);//OldVersion //model = redisFactory.GetInfo_Rescustomerdetail(resid); customer.RES_CUSTOMERDETAIL = model; customer.map_QQ = model.QQ; customer.map_ADDRESS = model.ADDRESS; customer.map_AMOUNTTYPEID = model.AMOUNTTYPEID; customer.map_CITY = model.CITYID; //customer.map_CNAME = model.CNAME; if (!string.IsNullOrEmpty(model.CNAME)) { var roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); if (!(roleCodes.Contains("[SH]") || roleCodes.Contains("[GLY]"))) { if (model.CNAME.Length > 10) customer.map_CNAME = model.CNAME.Substring(0, 10); else customer.map_CNAME = model.CNAME; } else { customer.map_CNAME = model.CNAME; } } customer.map_CUSTOMERTYPEID = model.CUSTOMERTYPEID; customer.map_EMAIL = model.EMAIL; customer.map_FAX = model.FAX; customer.map_GENDER = model.GENDER; customer.map_JOBTYPEID = model.JOBTYPEID; customer.map_MSN = model.MSN; customer.map_OPERATIONTYPE = model.OPERATIONTYPE; customer.map_PRIMARYNUMBERADDRESS = model.PRIMARYNUMBERADDRESS; customer.map_PROVINCEID = model.PROVINCEID; customer.RESID = resid; if (model.PROVINCEID.HasValue) { int provinceid = Convert.ToInt32(model.PROVINCEID); ViewBag.Province = GetProvince(provinceid); ViewBag.City = GetCity(provinceid); } else { ViewBag.Province = GetProvince(0); ViewBag.City = GetCity(0); } } return View(customer); } [HttpPost] public ActionResult Edit(RES_CUSTOMER customer) { if (!ModelState.IsValid) return JsonHandler.ValidateFailMessage(); var roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); if (!(roleCodes.Contains("[SH]") || roleCodes.Contains("[GLY]"))) { if (!string.IsNullOrEmpty(customer.map_CNAME)) { if (customer.map_CNAME.Length > 10) { return JsonHandler.ManageMessage("客户姓名不能大于10个字", false); } } } string[] resids = _customerQ.GetAllResidByCustomerId(customer.RESID); List resIds = redisFactory.GetList_Rescustomer(resids, customer.RESID).Select(s => s.RESID).ToList(); bool result = false; if (resids != null) { foreach (var resId in resIds) { customer.RESID = resId; result = _customerdetail.Update(ref errors, customer); } } return JsonHandler.UpdateMessage(errors, result); } #endregion 编辑 #region 设置资金量 #region 编辑 [HttpGet] public ActionResult SetZJL(string resid) { var ZJL = _cacheQ.GetList_SubComType(ComType.CustomerZJL).Select(item => new SelectListItem() { Text = item.SUBTYPENAME, Value = item.SUBTYPECODE }).ToList(); ViewBag.ZJL = ZJL; WX.CRM.Model.Entity.RES_CUSTOMERDETAIL model = null; RES_CUSTOMERDETAIL customer = new RES_CUSTOMERDETAIL(); if (resid == null) { model = new RES_CUSTOMERDETAIL(); throw new Exception("信息错误!"); } else { customer = _customerdetailQ.GetModel_RES_CUSTOMERDETAIL(resid);//OldVersion } return View(customer); } [HttpPost] public ActionResult SaveZJL(RES_CUSTOMERDETAIL customer) { if (!ModelState.IsValid) return JsonHandler.ValidateFailMessage(); var roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); string[] resids = _customerQ.GetAllResidByCustomerId(customer.RESID); List resIds = redisFactory.GetList_Rescustomer(resids, customer.RESID).Select(s => s.RESID).ToList(); bool result = false; if (resids != null) { foreach (var resId in resIds) { result = _customerdetail.UpdateZJL(ref errors, new RES_CUSTOMERDETAIL() { RESID = resId, AMOUNTTYPEID = customer.AMOUNTTYPEID }); } } return JsonHandler.UpdateMessage(errors, result); } #endregion 编辑 #endregion 设置资金量 #region 客户流转线索 [HttpGet] [AuthorizeRedirect(Roles = InitRights.CONST_客户流转线索)] public ActionResult Trace() { WebHelper.Table tab = new WebHelper.Table("tablist"); tab.AddHeadCol("GroupName", "", "销售组"); tab.AddHeadCol("Eid", "", "员工"); tab.AddHeadCol("ResId", "", "客户ID"); tab.AddHeadCol("Act", "", "事件"); tab.AddHeadCol("Remark", "", "说明"); tab.AddHeadCol("CTime", "", "操作时间"); tab.AddHeadRow(); ViewBag.gridTable = tab.GetTable(); return View(); } [HttpPost] [AuthorizeRedirect(Roles = InitRights.CONST_客户流转线索)] public JsonResult Trace(string columns, string resId) { WebHelper.Table table = new WebHelper.Table(columns, true); var dt = _customerQ.ResTrace(resId); var list = dt.ToList(); foreach (var item in list) { table.AddCol(InnerUserHelper.Instance.GetGroupName(InnerUserHelper.Instance.GetGroupId(InnerUserHelper.Instance.GetUserIdByEid(item.Eid)))); table.AddCol(InnerUserHelper.Instance.EidAndName(InnerUserHelper.Instance.GetUserIdByEid(item.Eid))); table.AddCol(item.ResId); table.AddCol(item.Act); table.AddCol(item.Remark); table.AddCol(item.CTime); table.AddRow(); } var json = new { rowsList = table.GetRows() }; return Json(json, JsonRequestBehavior.AllowGet); } #endregion 客户流转线索 #region 引用方法集合 private IEnumerable GetProvince(int id) { var list = _provinceQ.GetList(); list.Insert(0, new BAS_PROVINCE { ID = 0, NAME = "--请选择省--" }); return list.Select(item => item.ID == id ? new SelectListItem() { Text = item.NAME, Value = item.ID.ToString(), Selected = true } : new SelectListItem() { Text = item.NAME, Value = item.ID.ToString() }).ToList(); } private IEnumerable GetCity(int id) { var list = _cityQ.GetListByProvince(id); if (id == 0) { list.Insert(0, new BAS_CITY { PROVINCEID = 0, ID = 0, NAME = "--请选择市--" }); } return list.Select(item => new SelectListItem() { Text = item.NAME, Value = item.ID.ToString() }).ToList(); } public JsonResult JsonCity(int id) { var list = GetCity(id); return Json(list, JsonRequestBehavior.AllowGet); } public JsonResult CheckMobile(string mobile) { bool result = ExistsResId(mobile); return JsonHandler.ManageMessage("手机号码已经存在", result); } /// /// 客户ID是否存在,存在true,不存在false /// /// 传入手机号码 /// private bool ExistsResId(string mobile) { var resId = ResUtil.CreateResId(mobile); var model = _customerQ.getResCustomerByResId(resId); if (model == null) return false; return true; } [HttpPost] public JsonResult RemovePrimaryNumber(string resid) { try { var resdata = new RES_CUSTOMERDETAIL(); resdata = _customerdetailQ.GetModel_RES_CUSTOMERDETAIL(resid); //resdata = redisFactory.GetInfo_Rescustomerdetail(resid); if (resdata.ISPRIMARYNUM != 1) { return JsonHandler.ManageMessage("非主号码不能解除!", false); } resdata.ISPRIMARYNUM = 0; resdata.RESID = resid; bool result = _customerdetail.UpdateStatus(ref errors, resdata); return JsonHandler.UpdateMessage(errors, result); } catch (Exception ex) { LogHelper.Error("删除主号码!" + ex.Message); return JsonHandler.ManageMessage("删除主号码失败!", false); } } #endregion 引用方法集合 #region 检查Resid是否存在 [OutputCache(Location = OutputCacheLocation.None, NoStore = true)] public JsonResult CheckRESID() { string ResId = Request.QueryString[Request.QueryString.GetKey(0)]; bool isValidate = false; if (!string.IsNullOrWhiteSpace(ResId)) { var user = _customerQ.getResCustomerByResId(ResId); if (user != null) isValidate = true; } return Json(isValidate, JsonRequestBehavior.AllowGet); } #endregion 检查Resid是否存在 /// /// 初始化手机号 /// /// [HttpGet] public JsonResult InitPhone() { var success = _customer.InitPhone(); var json = new { success = $"成功了{success}" }; return Json(json, JsonRequestBehavior.AllowGet); } private class ResTraceView { public string GroupName { get; set; } public decimal Eid { get; set; } public string ResId { get; set; } public string Act { get; set; } public string Remark { get; set; } public DateTime CTime { get; set; } } public class retMsg { public bool result { get; set; } public int retcode { get; set; } public string retmsg { get; set; } } } }