ComplianceServer/oldcode/WEB/Controllers/Res/CustomerController.cs

652 lines
28 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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

//using 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<ListItem>() { 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>(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>(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<ListItem>() { 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<string> 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<string> 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<ResTraceView>();
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<SelectListItem> 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<SelectListItem> 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);
}
/// <summary>
/// 客户ID是否存在存在true不存在false
/// </summary>
/// <param name="mobile">传入手机号码</param>
/// <returns></returns>
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是否存在
/// <summary>
/// 初始化手机号
/// </summary>
/// <returns></returns>
[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; }
}
}
}