1132 lines
49 KiB
C#
1132 lines
49 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Data.Entity.Infrastructure;
|
||
using System.Linq;
|
||
using WX.CRM.BLL.Util;
|
||
using WX.CRM.Common;
|
||
using WX.CRM.DAL.Res;
|
||
using WX.CRM.IBLL.Res;
|
||
using WX.CRM.Model.Entity;
|
||
using WX.CRM.Model.Enum;
|
||
using WX.CRM.Model.MAP;
|
||
using WX.CRM.BLL.Application.UserComBox;
|
||
using CRM.Core.DTO.Res;
|
||
using WX.CRM.IBLL.Wx;
|
||
using System.Text;
|
||
using CRM.Core.DTO;
|
||
using WX.CRM.BLL.Wx;
|
||
using System.Data.Entity.Migrations;
|
||
using System.Data.Entity;
|
||
using System.Diagnostics;
|
||
|
||
namespace WX.CRM.BLL.Res
|
||
{
|
||
public class RES_CUSTOMER_BL : IRES_CUSTOMER, IRES_CUSTOMER_Q
|
||
{
|
||
private CUSTOMER_DAL custDal = new CUSTOMER_DAL();
|
||
|
||
public RES_CUSTOMER GetModel(string id)
|
||
{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
id = id.Trim();
|
||
var q = db.RES_CUSTOMER.Join(
|
||
db.RES_CUSTOMERDETAIL.Where(p => p.RESID == id)
|
||
, c => c.RESID
|
||
, d => d.RESID
|
||
, (c, d) => new { RESID = c.RESID, LASTNUM3 = c.LASTNUM3, CUSTOMERID = c.CUSTOMERID, CTIME = c.CTIME, CUSTOMERFROM = c.CUSTOMERFROM, RES_CUSTOMERDETAIL = d }
|
||
).FirstOrDefault();
|
||
return new RES_CUSTOMER() { RESID = q.RESID, LASTNUM3 = q.LASTNUM3, CUSTOMERID = q.CUSTOMERID, CTIME = q.CTIME, CUSTOMERFROM = q.CUSTOMERFROM, RES_CUSTOMERDETAIL = q.RES_CUSTOMERDETAIL };
|
||
}
|
||
}
|
||
|
||
public WX.CRM.Model.Entity.RES_CUSTOMER getResCustomerByResId(string resId)
|
||
{
|
||
if (string.IsNullOrWhiteSpace(resId))
|
||
{
|
||
return null;
|
||
}
|
||
//var redis = new RedisHelper();
|
||
//var customer = redis.Get<RES_CUSTOMER>("RES_CUSTOMER:" + resId);
|
||
//if (customer == null)
|
||
//{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
resId = resId.Trim();
|
||
WX.CRM.Model.Entity.RES_CUSTOMER entry = db.RES_CUSTOMER.FirstOrDefault(m => m.RESID == resId || m.UMID == resId);
|
||
//var result = redis.AddToCache<RES_CUSTOMER>("RES_CUSTOMER:" + resId, entry);
|
||
//LogHelper.Info("RES_CUSTOMER:" + resId);
|
||
return entry;
|
||
}
|
||
//}
|
||
//else
|
||
//{
|
||
// LogHelper.Info("读取缓存数据customer:" + customer.RESID + "," + customer.RES_CUSTOMERDETAIL.RESID);
|
||
// return customer;
|
||
//}
|
||
}
|
||
|
||
public WX.CRM.Model.Entity.RES_CUSTOMER getResCustomerByUmid(string umid)
|
||
{
|
||
if (string.IsNullOrWhiteSpace(umid))
|
||
{
|
||
return null;
|
||
}
|
||
//var redis = new RedisHelper();
|
||
//var customer = redis.Get<RES_CUSTOMER>("RES_CUSTOMER:" + resId);
|
||
//if (customer == null)
|
||
//{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
umid = umid.Trim();
|
||
WX.CRM.Model.Entity.RES_CUSTOMER entry = db.RES_CUSTOMER.FirstOrDefault(m => m.UMID == umid || m.RESID == umid);
|
||
//var result = redis.AddToCache<RES_CUSTOMER>("RES_CUSTOMER:" + resId, entry);
|
||
//LogHelper.Info("RES_CUSTOMER:" + resId);
|
||
return entry;
|
||
}
|
||
//}
|
||
//else
|
||
//{
|
||
// LogHelper.Info("读取缓存数据customer:" + customer.RESID + "," + customer.RES_CUSTOMERDETAIL.RESID);
|
||
// return customer;
|
||
//}
|
||
}
|
||
|
||
public List<RES_CUSTOMER> GetListByResId(string resId)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
resId = resId.Trim();
|
||
var customerId = db.RES_CUSTOMER.FirstOrDefault(p => p.RESID == resId).CUSTOMERID;
|
||
var list = db.RES_CUSTOMER.Where(m => m.CUSTOMERID == customerId).ToList();
|
||
return list;
|
||
}
|
||
}
|
||
|
||
public int ResgisterCustomer(string CNumber, string ResId, string CustomerFrom, string customerDetailXml = null, string v_umid = "")
|
||
{
|
||
if (string.IsNullOrWhiteSpace(v_umid))
|
||
{
|
||
v_umid = new CACHE_BL().GetUMid(CNumber);
|
||
}
|
||
return custDal.NewResgisterCustomer(CNumber, ResId, v_umid, CustomerFrom, customerDetailXml);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 资源分配接口
|
||
/// </summary>
|
||
/// <param name="ResId"></param>
|
||
/// <param name="CustomerFrom"></param>
|
||
/// <param name="assignType">1、手机号资源(默认)2、企业微信有unionid资源
|
||
/// 3、企业微信无unionid资源,如果后期获取到了unionid将新增一条有unionid的</param>
|
||
/// <returns></returns>
|
||
public int ResAllocationCustomer(ResAllocationDto postData)
|
||
{
|
||
var resId = string.Empty;
|
||
var assignType = 1;
|
||
if (postData.AssignType == 1)
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(postData.Unionid))
|
||
{
|
||
resId = postData.Unionid;
|
||
assignType = 2;
|
||
}
|
||
else
|
||
{
|
||
resId = postData.Appuserid;
|
||
assignType = 3;
|
||
}
|
||
}
|
||
if (string.IsNullOrWhiteSpace(resId))
|
||
{
|
||
throw new Exception("数据异常不存在resId");
|
||
}
|
||
using (var db = new crmContext())
|
||
{
|
||
var dbRes = db.RES_CUSTOMER.Where(n => n.RESID == resId).FirstOrDefault();
|
||
if (assignType == 1 && dbRes == null)
|
||
{
|
||
LogHelper.Error($"不存在的号码资源{resId}");
|
||
throw new Exception($"不存在的号码资源{resId}");
|
||
}
|
||
//新增
|
||
if (dbRes == null)
|
||
{
|
||
//插入资源统计表
|
||
CACHE_RES_RESOURCE_COUNT ressourceCount = new CACHE_RES_RESOURCE_COUNT
|
||
{
|
||
RESID = resId,
|
||
};
|
||
db.CACHE_RES_RESOURCE_COUNT.Add(ressourceCount);
|
||
RES_CUSTOMER customer = new RES_CUSTOMER
|
||
{
|
||
RESID = resId.ToString(),
|
||
CUSTOMERID = resId.ToString(),
|
||
CTIME = DateTime.Now,
|
||
CUSTOMERFROM = postData.CampaignId,
|
||
TYPE = assignType
|
||
};
|
||
db.RES_CUSTOMER.Add(customer);
|
||
RES_CUSTOMERDETAIL customerDetail = new RES_CUSTOMERDETAIL
|
||
{
|
||
RESID = resId
|
||
};
|
||
db.RES_CUSTOMERDETAIL.Add(customerDetail);
|
||
}
|
||
if (assignType != 1)
|
||
{
|
||
var qw = db.RES_CUSTOMERQW.FirstOrDefault(n => n.RESID == resId);
|
||
if (qw == null)
|
||
{
|
||
qw = new RES_CUSTOMERQW
|
||
{
|
||
RESID = resId,
|
||
APPID = postData.Appid.Replace("_1", ""),
|
||
APPUSERID = postData.Appuserid,
|
||
CTIME = DateTime.Now,
|
||
CUSTOMERFROM = postData.CampaignId,
|
||
CREATETIME = DateTime.Now,
|
||
HHUSERID = postData.Hhuserid,
|
||
SCENE = postData.Scene,
|
||
SCENENAME = postData.SceneName,
|
||
SCENETYPE = postData.SceneType,
|
||
SCENETYPENAME = postData.SceneTypeName
|
||
};
|
||
db.RES_CUSTOMERQW.Add(qw);
|
||
}
|
||
else
|
||
{
|
||
qw.HHUSERID = postData.Hhuserid;
|
||
qw.SCENE = postData.Scene;
|
||
qw.SCENENAME = postData.SceneName;
|
||
qw.SCENETYPE = postData.SceneType;
|
||
qw.SCENETYPENAME = postData.SceneTypeName;
|
||
/* qw.APPID = postData.Appid.Replace("_1", "");
|
||
qw.APPUSERID = postData.Appuserid;*/
|
||
}
|
||
if (postData.Eid.HasValue)
|
||
{
|
||
var qwEid = db.RES_CUSTOMERQW_EID.FirstOrDefault(n => n.RESID == resId);
|
||
var innerUser = db.BAS_INNERUSER.FirstOrDefault(n => n.EID == postData.Eid);
|
||
if (qwEid == null)
|
||
{
|
||
qwEid = new RES_CUSTOMERQW_EID
|
||
{
|
||
RESID = resId,
|
||
APPID = postData.Appid.Replace("_1", ""),
|
||
APPUSERID = postData.Appuserid,
|
||
CTIME = DateTime.Now,
|
||
INNERUSERID = innerUser?.PKID,
|
||
EID = postData.Eid,
|
||
UTIME = DateTime.Now
|
||
};
|
||
db.RES_CUSTOMERQW_EID.Add(qwEid);
|
||
}
|
||
else
|
||
{
|
||
qwEid.EID = postData.Eid;
|
||
qwEid.UTIME = DateTime.Now;
|
||
qwEid.INNERUSERID = innerUser?.PKID;
|
||
}
|
||
}
|
||
BindWwUserName(resId, postData.Appuserid);
|
||
}
|
||
db.SaveChanges();
|
||
}
|
||
return 1;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 绑定企业微信
|
||
/// </summary>
|
||
/// <param name="resId"></param>
|
||
/// <param name="userId"></param>
|
||
private void BindWwUserName(string resId, string userId)
|
||
{
|
||
var ret = new WX_SZZYORDER_BL().UpdateResIdByWwUserName(resId, userId);
|
||
if (ret)
|
||
{
|
||
var host = Utility.GetSettingOrNullByKey("DataSyncApiUrl");
|
||
var companyCode = Utility.GetSettingOrNullByKey("DataClientCode");
|
||
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<retMsg>(rep);
|
||
if (!ret2.result)
|
||
{
|
||
LogHelper.Info("同步到中心点异常:" + para.ToJson());
|
||
}
|
||
}
|
||
}
|
||
|
||
public void BindCustomerQw(string resId, string userId)
|
||
{
|
||
try
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var customer = db.RES_CUSTOMERDETAIL.FirstOrDefault(x => x.RESID == userId);
|
||
if (customer != null) customer.CUSTOMERTYPEID = resId;
|
||
var qw = db.RES_CUSTOMERQW.FirstOrDefault(n => n.APPUSERID == userId && n.RESID == resId);
|
||
var qwNew = db.RES_CUSTOMERQW.FirstOrDefault(n => n.APPUSERID == userId);
|
||
if (qw == null && qwNew != null)
|
||
{
|
||
qw = new RES_CUSTOMERQW();
|
||
qw.APPUSERID = userId;
|
||
qw.APPID = qwNew.APPID;
|
||
qw.RESID = resId;
|
||
qw.CTIME = DateTime.Now;
|
||
qw.CREATETIME = qwNew.CREATETIME;
|
||
qw.HHUSERID = qwNew.HHUSERID;
|
||
qw.CUSTOMERFROM = qwNew.CUSTOMERFROM;
|
||
qw.SCENE = qwNew.SCENE;
|
||
qw.SCENENAME = qwNew.SCENENAME;
|
||
qw.SCENETYPE = qwNew.SCENETYPE;
|
||
qw.SCENETYPENAME = qwNew.SCENETYPENAME;
|
||
db.RES_CUSTOMERQW.Add(qw);
|
||
}
|
||
db.SaveChanges();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Error($"插入RES_CUSTOMERQW失败{ex.Message}");
|
||
}
|
||
}
|
||
|
||
public void BindCustomerResid(string resId, string userId)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var customer = db.RES_CUSTOMER.FirstOrDefault(m => m.RESID == userId && m.TYPE != 1);
|
||
var mainCust = db.RES_CUSTOMER.FirstOrDefault(n => n.RESID == resId);
|
||
if (customer != null)
|
||
{
|
||
customer.CUSTOMERID = resId;
|
||
customer.CUSTOMERMID = mainCust?.UMID;
|
||
db.SaveChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
public void UnBindCustomerQw(string resId, string userId)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var customer = db.RES_CUSTOMERDETAIL.FirstOrDefault(x => x.RESID == userId);
|
||
if (customer != null) customer.CUSTOMERTYPEID = userId;
|
||
var qw = db.RES_CUSTOMERQW.FirstOrDefault(n => n.APPUSERID == userId && n.RESID == resId);
|
||
if (qw != null)
|
||
{
|
||
db.RES_CUSTOMERQW.Remove(qw);
|
||
}
|
||
db.SaveChanges();
|
||
}
|
||
}
|
||
|
||
public RES_CUSTOMERQW QueryCustomerQwByUnionId(string unionid)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var qw = db.RES_CUSTOMERQW.FirstOrDefault(n => n.RESID == unionid || n.APPUSERID == unionid);
|
||
return qw;
|
||
}
|
||
}
|
||
|
||
public IList<string> QueryKFuseridByEid(decimal? eid)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var res = db.WW_HHUSER_EID.Where(n => n.EID == eid).Select(m => m.USERID);
|
||
return res.ToList();
|
||
}
|
||
}
|
||
|
||
public string FindResidByExtUser(string extUserid)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var qw = db.RES_CUSTOMER.FirstOrDefault(n => n.RESID == extUserid && n.TYPE != 1 && n.RESID != n.CUSTOMERID);
|
||
if (qw != null)
|
||
return qw.CUSTOMERID;
|
||
else return "";
|
||
}
|
||
}
|
||
|
||
public int InitCustomerqw(IList<RES_CUSTOMERQW> list)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
foreach (var cust in list.GroupBy(m => m.RESID))
|
||
{
|
||
var resid = cust.Key.ToString();
|
||
//插入资源统计表
|
||
CACHE_RES_RESOURCE_COUNT ressourceCount = new CACHE_RES_RESOURCE_COUNT
|
||
{
|
||
RESID = resid,
|
||
};
|
||
if (!db.CACHE_RES_RESOURCE_COUNT.Any(m => m.RESID == resid))
|
||
db.CACHE_RES_RESOURCE_COUNT.Add(ressourceCount);
|
||
RES_CUSTOMER customer = new RES_CUSTOMER
|
||
{
|
||
RESID = resid,
|
||
CUSTOMERID = resid,
|
||
CTIME = DateTime.Now,
|
||
CUSTOMERFROM = "查找客户写入",
|
||
TYPE = 3 //
|
||
};
|
||
if (!db.RES_CUSTOMER.Any(m => m.RESID == resid))
|
||
db.RES_CUSTOMER.Add(customer);
|
||
RES_CUSTOMERDETAIL customerDetail = new RES_CUSTOMERDETAIL
|
||
{
|
||
RESID = resid
|
||
};
|
||
if (!db.RES_CUSTOMERDETAIL.Any(m => m.RESID == resid))
|
||
db.RES_CUSTOMERDETAIL.Add(customerDetail);
|
||
|
||
if (!db.RES_CUSTOMERQW.Any(m => m.RESID == resid))
|
||
db.RES_CUSTOMERQW.Add(cust.First());
|
||
}
|
||
|
||
return db.SaveChanges();
|
||
}
|
||
}
|
||
|
||
public int CrossDBResgisterCustomer(string CNumber, string ResId, string CustomerFrom, string customerDetailXml = null)
|
||
{
|
||
return custDal.CrossDBResgisterCustomer(CNumber, ResId, CustomerFrom, customerDetailXml);
|
||
}
|
||
|
||
public List<WX.CRM.Model.Entity.RES_CUSTOMER> getResByResIds(string[] resIds)
|
||
{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
return db.RES_CUSTOMER.Where(p => resIds.Contains(p.RESID)).ToList();
|
||
}
|
||
}
|
||
|
||
public List<WX.CRM.Model.Entity.RES_CUSTOMER> getResByUmids(string[] umids)
|
||
{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
return db.RES_CUSTOMER.Where(p => umids.Contains(p.UMID)).ToList();
|
||
}
|
||
}
|
||
|
||
public string GetUMIDByResid(string resid)
|
||
{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
var RES_CUSTOMER = db.RES_CUSTOMER.Where(m => m.RESID == resid.Trim() || m.UMID == resid.Trim()).FirstOrDefault();
|
||
return RES_CUSTOMER.UMID;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取实体
|
||
/// </summary>
|
||
/// <param name="id"></param>
|
||
/// <returns></returns>
|
||
public string GetResidByUMID(string UMID)
|
||
{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
var RES_CUSTOMER = db.RES_CUSTOMER.Where(m => m.UMID == UMID.Trim() || m.RESID == UMID.Trim()).FirstOrDefault();
|
||
return RES_CUSTOMER?.RESID;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据客户ID查找对应的所有客户ID
|
||
/// </summary>
|
||
/// <param name="customerid"></param>
|
||
/// <returns></returns>
|
||
public List<RES_CUSTOMER> GetList_Customer(string customerid)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var queryData = db.RES_CUSTOMER.AsQueryable();
|
||
if (!string.IsNullOrEmpty(customerid))
|
||
{
|
||
string[] cId = customerid.Split(',');
|
||
queryData = queryData.Where(m => cId.Contains(m.UMID) || cId.Contains(m.CUSTOMERMID) || cId.Contains(m.CUSTOMERID) || cId.Contains(m.RESID));
|
||
}
|
||
else
|
||
queryData = queryData.Where(m => m.CUSTOMERID == null || m.CUSTOMERID == "");
|
||
LogHelper.Info($"查询出{customerid}");
|
||
var queryList = (from q in queryData
|
||
join d in db.RES_CUSTOMERDETAIL on q.RESID equals d.RESID
|
||
select new { RESID = q.RESID, UMID = q.UMID, CUSTOMERMID = q.CUSTOMERMID, CUSTOMERID = q.CUSTOMERID, RES_CUSTOMERDETAIL = d }
|
||
).ToList();
|
||
List<RES_CUSTOMER> list = new List<RES_CUSTOMER>();
|
||
foreach (var item in queryList)
|
||
{
|
||
RES_CUSTOMER res = new RES_CUSTOMER
|
||
{
|
||
RESID = item.UMID,
|
||
CUSTOMERID = item.CUSTOMERMID,
|
||
RES_CUSTOMERDETAIL = item.RES_CUSTOMERDETAIL
|
||
};
|
||
if (res.RESID == null)
|
||
{
|
||
var cust = db.RES_CUSTOMER.FirstOrDefault(n => n.RESID == item.CUSTOMERID);
|
||
res.RESID = item.RESID;
|
||
}
|
||
list.Add(res);
|
||
}
|
||
LogHelper.Info($"查询出{list.ToJson()}");
|
||
return list;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据客户ID查找对应的所有客户ID
|
||
/// </summary>
|
||
/// <param name="customerid"></param>
|
||
/// <returns></returns>
|
||
public List<RES_CUSTOMER> GetList_CustomerByResid(string Resid)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var queryData = db.RES_CUSTOMER.AsQueryable();
|
||
if (!string.IsNullOrEmpty(Resid))
|
||
{
|
||
string trimResid = Resid.Trim();
|
||
queryData = queryData.Where(m => m.RESID == trimResid);
|
||
}
|
||
else
|
||
return new List<RES_CUSTOMER>();
|
||
|
||
List<RES_CUSTOMER> list = (from q in db.RES_CUSTOMER
|
||
join f in queryData on q.CUSTOMERID equals f.CUSTOMERID
|
||
join d in db.RES_CUSTOMERDETAIL on q.RESID equals d.RESID
|
||
select new { RESID = q.RESID, UMID = q.UMID, CUSTOMERMID = q.CUSTOMERMID, LASTNUM3 = q.LASTNUM3, CUSTOMERID = q.CUSTOMERID, RES_CUSTOMERDETAIL = d, CTIME = q.CTIME, TYPE = q.TYPE }
|
||
)
|
||
//.Union
|
||
//(from q in queryData
|
||
// join d in db.RES_CUSTOMERDETAIL on q.RESID equals d.RESID
|
||
// join n in db.RES_RESOURCENUMBER on d.RESID equals n.RESID
|
||
// select new { RESID = q.RESID, CUSTOMERID = q.CUSTOMERID, RES_CUSTOMERDETAIL = d,RES_RESOURCEMOBILE=new RES_RESOURCEMOBILE(),RES_RESOURCENUMBER = n }
|
||
// )
|
||
.ToList().Select
|
||
(c => new RES_CUSTOMER
|
||
{
|
||
RESID = c.RESID,
|
||
UMID = c.UMID,
|
||
CUSTOMERMID = c.CUSTOMERMID,
|
||
CUSTOMERID = c.CUSTOMERID,
|
||
LASTNUM3 = c.LASTNUM3,
|
||
RES_CUSTOMERDETAIL = c.RES_CUSTOMERDETAIL,
|
||
CTIME = c.CTIME,
|
||
TYPE = c.TYPE
|
||
}).OrderByDescending(m => m.RES_CUSTOMERDETAIL.ISPRIMARYNUM).ToList();
|
||
return list;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据客户ID查找对应的所有客户ID
|
||
/// </summary>
|
||
/// <param name="customerid"></param>
|
||
/// <returns></returns>
|
||
public List<RES_CUSTOMER> GetList_CustomerByUMID(string umid)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var queryData = db.RES_CUSTOMER.AsQueryable();
|
||
if (!string.IsNullOrEmpty(umid))
|
||
{
|
||
string trimResid = umid.Trim();
|
||
queryData = queryData.Where(m => m.UMID == trimResid);
|
||
}
|
||
else
|
||
return new List<RES_CUSTOMER>();
|
||
|
||
List<RES_CUSTOMER> list = (from q in db.RES_CUSTOMER
|
||
join f in queryData on q.CUSTOMERID equals f.CUSTOMERID
|
||
join d in db.RES_CUSTOMERDETAIL on q.RESID equals d.RESID
|
||
select new { RESID = q.RESID, UMID = q.UMID, CUSTOMERMID = q.CUSTOMERMID, LASTNUM3 = q.LASTNUM3, CUSTOMERID = q.CUSTOMERID, RES_CUSTOMERDETAIL = d, CTIME = q.CTIME, TYPE = q.TYPE }
|
||
)
|
||
//.Union
|
||
//(from q in queryData
|
||
// join d in db.RES_CUSTOMERDETAIL on q.RESID equals d.RESID
|
||
// join n in db.RES_RESOURCENUMBER on d.RESID equals n.RESID
|
||
// select new { RESID = q.RESID, CUSTOMERID = q.CUSTOMERID, RES_CUSTOMERDETAIL = d,RES_RESOURCEMOBILE=new RES_RESOURCEMOBILE(),RES_RESOURCENUMBER = n }
|
||
// )
|
||
.ToList().Select
|
||
(c => new RES_CUSTOMER
|
||
{
|
||
RESID = c.RESID,
|
||
UMID = c.UMID,
|
||
CUSTOMERMID = c.CUSTOMERMID,
|
||
CUSTOMERID = c.CUSTOMERID,
|
||
LASTNUM3 = c.LASTNUM3,
|
||
RES_CUSTOMERDETAIL = c.RES_CUSTOMERDETAIL,
|
||
CTIME = c.CTIME,
|
||
TYPE = c.TYPE
|
||
}).OrderByDescending(m => m.RES_CUSTOMERDETAIL.ISPRIMARYNUM).ToList();
|
||
return list;
|
||
}
|
||
}
|
||
|
||
#region 修改
|
||
|
||
public bool Update(ref ValidationErrors errors, WX.CRM.Model.Entity.RES_CUSTOMER model)
|
||
{
|
||
//Model.Entity.RES_CUSTOMER obj = new RES_CUSTOMER()
|
||
//{
|
||
// RESID = model.RESID,
|
||
// CUSTOMERID = model.CUSTOMERID
|
||
//};
|
||
try
|
||
{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
WX.CRM.Model.Entity.RES_CUSTOMER customer = db.RES_CUSTOMER.FirstOrDefault(m => m.RESID == model.RESID);
|
||
|
||
// Model.Entity.RES_CUSTOMERDETAIL detail = db.RES_CUSTOMERDETAIL.FirstOrDefault(p => p.RESID.Trim() == model.RESID.Trim());
|
||
|
||
// db.RES_CUSTOMER.Attach(obj);
|
||
// db.Entry(customer).CurrentValues.SetValues(model);
|
||
|
||
customer.CUSTOMERID = model.CUSTOMERID;
|
||
|
||
WX.CRM.Model.Entity.RES_CUSTOMERDETAIL entry = db.RES_CUSTOMERDETAIL.FirstOrDefault(m => m.RESID == model.RESID);
|
||
entry.ISPRIMARYNUM = 0;
|
||
//db.Entry<Model.Entity.RES_CUSTOMER>(customer).State = EntityState.Modified;
|
||
|
||
//entry.RES_CUSTOMERDETAIL = detail;
|
||
|
||
db.SaveChanges();
|
||
return true;
|
||
}
|
||
}
|
||
catch (DbUpdateException ex)
|
||
{
|
||
LogHelper.Error(ex.Message);
|
||
errors.Add(ex.Message);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
#endregion 修改
|
||
|
||
public List<string> ResIDNoOutboundFilter(ref ValidationErrors errors, DataTable tab, string importId, DateTime stime, DateTime etime, decimal t_type, string slt_Open, string slt_NotOpen)
|
||
{
|
||
try
|
||
{
|
||
return new CUSTOMER_DAL().ResIDNoOutboundFilter(tab, importId, stime, etime, t_type, slt_Open, slt_NotOpen);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Error(ex.Message);
|
||
errors.Add(ex.Message);
|
||
return new List<string>();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据导入resid进行条件过滤
|
||
/// </summary>
|
||
/// <param name="tab">资源数据</param>
|
||
/// <param name="importId">导入id</param>
|
||
/// <param name="stime">过滤开始时间</param>
|
||
/// <param name="etime">过滤结束时间</param>
|
||
/// <param name="checkType_hid">选项ID</param>
|
||
/// <param name="subType_hid">工单过滤类型ID</param>
|
||
/// <returns></returns>
|
||
public List<string> res_GetFilterImportRes(ref ValidationErrors errors, DataTable tab, string importId, DateTime? stime, DateTime? etime, string checkType_hid, string subType_hid)
|
||
{
|
||
try
|
||
{
|
||
return new CUSTOMER_DAL().res_GetFilterImportRes(tab, importId, stime, etime, checkType_hid, subType_hid);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Error(ex.Message);
|
||
errors.Add(ex.Message);
|
||
return new List<string>();
|
||
}
|
||
}
|
||
|
||
public List<string> GetResChoiceExpor(ref ValidationErrors errors, string resStime, string resEtime, int checkWeixin, int checkOrder, string memoSubType, string memoStime, string memoEtime)
|
||
{
|
||
try
|
||
{
|
||
DataSet ds = new CUSTOMER_DAL().GetResChoiceExpor(resStime, resEtime, checkWeixin, checkOrder, memoSubType, memoStime, memoEtime);
|
||
if (ds != null && ds.Tables[0].Rows.Count > 0)
|
||
{
|
||
return ds.Tables[0].ToList<RES_CUSTOMER>().Select(m => m.RESID).ToList();
|
||
}
|
||
return new List<string>();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Error(ex.Message);
|
||
errors.Add(ex.Message);
|
||
return new List<string>();
|
||
}
|
||
}
|
||
|
||
public List<string> GetResIdByMemoChoiceExport(ref ValidationErrors errors, DateTime? memoStime, DateTime? memoEtime, decimal? memoType1, decimal? memoType2, decimal? group1, decimal? group2)
|
||
{
|
||
try
|
||
{
|
||
DataSet ds = new CUSTOMER_DAL().GetResIdByMemoChoiceExport(memoStime, memoEtime, memoType1, memoType2, group1, group2);
|
||
if (ds != null && ds.Tables[0].Rows.Count > 0)
|
||
{
|
||
return ds.Tables[0].ToList<RES_CUSTOMER>().Select(m => m.RESID).ToList();
|
||
}
|
||
return new List<string>();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Error(ex.Message);
|
||
errors.Add(ex.Message);
|
||
return new List<string>();
|
||
}
|
||
}
|
||
|
||
public DataSet Res_GetHowDayNoCCall(DateTime v_resStartTime, DateTime v_resEndTime, DateTime v_whStartTime, DateTime v_whEndTime)
|
||
{
|
||
return new CUSTOMER_DAL().Res_GetHowDayNoCCall(v_resStartTime, v_resEndTime, v_whStartTime, v_whEndTime);
|
||
}
|
||
|
||
public void res_customerdetial_log(string ip, string resid, decimal inneruserid, decimal eid)
|
||
{
|
||
new CUSTOMER_DAL().res_customerdetial_log(ip, resid, inneruserid, eid);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据客户ID查找 客户列表
|
||
/// </summary>
|
||
/// <param name="CustomerIds"></param>
|
||
/// <returns></returns>
|
||
public DataTable GetList_CustomerByResIds(string CustomerIds)
|
||
{
|
||
var dal = new CUSTOMER_DAL();
|
||
return dal.Res_GetCustomerByResIds(CustomerIds);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 判断该资源是否能够查看手机号码
|
||
/// </summary>
|
||
/// <param name="v_resid">客户ID</param>
|
||
/// <param name="v_userid">员工ID</param>
|
||
/// <param name="v_roleCodes">权限码</param>
|
||
/// <returns></returns>
|
||
public DataTable CheckResidCanShowMobile(string v_resid, decimal v_userid, string v_roleCodes)
|
||
{
|
||
return new CUSTOMER_DAL().CheckResidCanShowMobile(v_resid, v_userid, v_roleCodes);
|
||
}
|
||
|
||
public DataTable GetOpenAccountRes()
|
||
{
|
||
var dal = new CUSTOMER_DAL();
|
||
return dal.GetOpenAccountRes();
|
||
}
|
||
|
||
#region 资源效果分析
|
||
|
||
public DataTable Res_ResourceEffectAnalysis(ref Pager pg, DateTime? p_sd1, DateTime? p_sd2, decimal restypeId, decimal activityId, QueryUserComboDto usercomboDto)
|
||
{
|
||
string orderSql = " ";
|
||
if (pg.sort != "null" && pg.sort != null)
|
||
{
|
||
if (pg.sort != "restypename" && pg.sort != "resNumber" && pg.sort != "activityname")
|
||
orderSql = " order by " + '"' + pg.sort + '"' + " " + pg.order;
|
||
else if (pg.sort == "restypename")
|
||
orderSql = " order by restypeid " + pg.order;
|
||
else if (pg.sort == "activityname")
|
||
orderSql = " order by activityid " + pg.order;
|
||
else
|
||
orderSql = " order by " + pg.sort + " " + pg.order;
|
||
}
|
||
if (!string.IsNullOrWhiteSpace(usercomboDto.deptId))
|
||
{
|
||
UserServices userservices = new UserServices();
|
||
List<decimal> deptIDS = new List<decimal>();
|
||
List<decimal> gidS = new List<decimal>();
|
||
userservices.GetAllDeptIDOrGidByDeptStr(usercomboDto.deptId, ref deptIDS, ref gidS);//获取所有的组别和gid
|
||
usercomboDto.deptId = string.Join(",", deptIDS);
|
||
}
|
||
var ds = custDal.Res_ResourceEffectAnalysis(ref pg, p_sd1, p_sd2, orderSql, restypeId, activityId, usercomboDto);
|
||
pg.totalRows = int.Parse(ds.Tables[0].Rows[0][0].ToString());
|
||
//DataTable dtSort = null;
|
||
|
||
#region 排序
|
||
|
||
//if (pg.order != "null" && pg.sort != "null" && pg.order != null && pg.sort != null)
|
||
//{
|
||
// DataView dvSort = new DataView(ds.Tables[1]);
|
||
// if (pg.sort == "openNumber")
|
||
// dvSort.Sort = "开户数" + " " + pg.order;
|
||
// else if (pg.sort == "signNumber")
|
||
// dvSort.Sort = "签约数" + " " + pg.order;
|
||
// else if (pg.sort == "activeNumber")
|
||
// dvSort.Sort = "激活数" + " " + pg.order;
|
||
// else if (pg.sort == "restypename")
|
||
// dvSort.Sort = "资源类型ID" + " " + pg.order;
|
||
// else if (pg.sort == "jihuoNumber")
|
||
// dvSort.Sort = "激活工单" + " " + pg.order;
|
||
// else if (pg.sort == "yixiangNumber")
|
||
// dvSort.Sort = "意向工单" + " " + pg.order;
|
||
// else if (pg.sort == "kaihuNumber")
|
||
// dvSort.Sort = "开户订单" + " " + pg.order;
|
||
// else if (pg.sort == "resNumber")
|
||
// dvSort.Sort = "资源总数" + " " + pg.order;
|
||
// dtSort = dvSort.ToTable();
|
||
//}
|
||
//else
|
||
// dtSort = ds.Tables[1];
|
||
|
||
#endregion 排序
|
||
|
||
//dtSort = PagerUtil.SetPager(dtSort, ref pg);
|
||
//DataSet dsResult = new DataSet();
|
||
//DataTable dt2 = ds.Tables[2].Copy();
|
||
//dsResult.Tables.Add(dtSort);
|
||
//dsResult.Tables.Add(dt2);
|
||
//return dsResult;
|
||
|
||
if (ds.Tables[1].Rows.Count > 0)
|
||
{
|
||
DataRow dr2 = ds.Tables[2].Rows[0];
|
||
DataRow dr1 = ds.Tables[1].NewRow();
|
||
for (int i = 0; i < ds.Tables[2].Columns.Count; i++)
|
||
{
|
||
dr1[i] = dr2[i];
|
||
}
|
||
ds.Tables[1].Rows.Add(dr1);
|
||
}
|
||
return ds.Tables[1];
|
||
}
|
||
|
||
public DataTable Res_ResourceOrderList(DateTime? sd1, DateTime? sd2, decimal restypeId, decimal activityId, string groupId, string inneruserId)
|
||
{
|
||
var ds = custDal.Res_ResourceOrderList(sd1, sd2, restypeId, activityId, groupId, inneruserId);
|
||
if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
|
||
{
|
||
return ds.Tables[0];
|
||
}
|
||
return null;
|
||
}
|
||
|
||
#endregion 资源效果分析
|
||
|
||
//根据customerid查找 resids
|
||
public string[] GetAllResidByCustomerId(string CustomerId)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
return db.RES_CUSTOMER.Where(m => m.CUSTOMERID == CustomerId).Select(m => m.RESID).ToArray();
|
||
}
|
||
}
|
||
|
||
public void HandlerSalerAddCustomer(string resId, decimal userId)
|
||
{
|
||
custDal.HandlerSalerAddCustomer(resId, userId);
|
||
}
|
||
|
||
public DataTable ResTrace(string resId)
|
||
{
|
||
return custDal.ResTrace(resId);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 客户基础信息中获取其他信息
|
||
/// </summary>
|
||
public void GetResCustomerOtherInfo(ref RES_CUSTOMER cData)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
DateTime nowt = DateTime.Now;
|
||
string manresid = cData.RESID;
|
||
var xx = db.WX_SZZYORDER.Where(m => m.RESID == manresid && m.ISOPEN == 1 && m.ENDTIME > nowt).Select(m => m.SUBPRODUCTNAME).Distinct();//已开通,未到期的产品,并去重
|
||
if (xx.Count() > 0)
|
||
{
|
||
cData.map_OrderStr = string.Join(",", xx);//获取订单所有类型
|
||
}
|
||
|
||
var cache = db.CACHE_ORD_MEMO.Where(m => m.RESID == manresid).OrderByDescending(m => m.CTIME).FirstOrDefault();
|
||
if (cache != null)
|
||
{
|
||
var fuwuid = db.BAS_INNERUSER.FirstOrDefault(m => m.PKID == cache.INNERUSERID);
|
||
if (fuwuid != null)
|
||
cData.map_LastSericeStaff = string.Format("{0}-{1}", fuwuid.EID, fuwuid.UNAME);//获取最后服务人员
|
||
}
|
||
var rfm = db.RES_CUSTOMER_RFM.FirstOrDefault(M => M.RESID == manresid);
|
||
if (rfm != null)
|
||
{
|
||
cData.map_LastLoginTime = rfm.LASTLOGINTIME.HasValue ? rfm.LASTLOGINTIME.Value.ToString("yyyy-MM-dd HH:mm:ss") : "";//获取最后登陆时间
|
||
}
|
||
|
||
if (!string.IsNullOrEmpty(cData.RES_CUSTOMERDETAIL.BIRTHDAYAREA))
|
||
{
|
||
string are = cData.RES_CUSTOMERDETAIL.BIRTHDAYAREA;
|
||
var agearea = new CACHE_BL().GetList_SubComType(ComType.CustomerNL).FirstOrDefault(m => m.SUBTYPECODE == are);
|
||
if (agearea != null)
|
||
{
|
||
cData.map_BIRTHDAYAREASTR = agearea.SUBTYPENAME;//获取年龄段
|
||
}
|
||
}
|
||
|
||
if (!string.IsNullOrEmpty(cData.RES_CUSTOMERDETAIL.OPERATIONTYPE))
|
||
{
|
||
string are = cData.RES_CUSTOMERDETAIL.OPERATIONTYPE;
|
||
var agearea = new CACHE_BL().GetList_SubComType(ComType.CustomerCZXG).FirstOrDefault(m => m.SUBTYPECODE == are);
|
||
if (agearea != null)
|
||
{
|
||
cData.map_OpenrationTypeStr = agearea.SUBTYPENAME;//获取操作风格
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 优质客户列表
|
||
/// </summary>
|
||
/// <param name="pager"></param>
|
||
/// <param name="resid"></param>
|
||
/// <param name="minPrice"></param>
|
||
/// <param name="maxPrice"></param>
|
||
/// <returns></returns>
|
||
public List<BestCustomerViewModel> GetBestCustomer(Pager pager, BestCustomerQueryDto dto)
|
||
{
|
||
List<BestCustomerViewModel> res = new List<BestCustomerViewModel>();
|
||
using (var db = new crmContext())
|
||
{
|
||
var query = db.RES_CUSTOMER_BEST.AsQueryable();
|
||
/* if (!string.IsNullOrWhiteSpace(dto.resId))
|
||
{
|
||
query = query.Where(n => n.RESID == dto.resId);
|
||
}*/
|
||
//已开通+已升级+已到期+已退款
|
||
var finshStatus = new List<string> { "220", "90", "210", "80" };
|
||
var orderQuery = db.WX_SZZYORDER.Where(n => finshStatus.Contains(n.ORDERSTATUS));
|
||
List<decimal> ALLdeptIDS = new List<decimal>();
|
||
List<decimal> ALLgidS = new List<decimal>();
|
||
if (!string.IsNullOrEmpty(dto.deptId))
|
||
{
|
||
var depts = OperationUtil.ConvertToDecimal(dto.deptId.Split(','));
|
||
UserServices userservices = new UserServices(new CACHE_BL());
|
||
foreach (var item in depts)
|
||
{
|
||
List<decimal> deptIDS = new List<decimal>();
|
||
List<decimal> gidS = new List<decimal>();
|
||
userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid
|
||
ALLdeptIDS.AddRange(deptIDS);
|
||
ALLgidS.AddRange(gidS);
|
||
}
|
||
}
|
||
if (dto.userId.HasValue)
|
||
{
|
||
query = query.Where(m => m.CREATEID == dto.userId);
|
||
}
|
||
if (!string.IsNullOrEmpty(dto.groupIds))
|
||
{
|
||
var _groupids = OperationUtil.ConvertToDecimal(dto.groupIds.Split(','));
|
||
query = (from a in query
|
||
join b in db.BAS_INNERUSERGROUP on a.CREATEID equals b.INNERUSERID
|
||
where _groupids.Contains(b.GID.Value)
|
||
select a);
|
||
}
|
||
else if (!string.IsNullOrEmpty(dto.deptId))
|
||
{
|
||
var depts = OperationUtil.ConvertToDecimal(dto.deptId.Split(','));
|
||
query = (from a in query
|
||
join b in db.BAS_INNERUSERGROUP on a.CREATEID equals b.INNERUSERID
|
||
where ALLdeptIDS.Contains(b.DEPTID.Value) || ALLgidS.Contains(b.GID.Value)
|
||
select a);
|
||
}
|
||
var priceQuery = from n in query
|
||
join o in orderQuery
|
||
on n.RESID equals o.RESID into temp
|
||
from tmp in temp.DefaultIfEmpty()
|
||
group tmp by new { n.RESID, n.REMARK, n.CTIME, n.CREATEID } into g
|
||
select new
|
||
{
|
||
resId = g.Key.RESID,
|
||
remark = g.Key.REMARK,
|
||
ctime = g.Key.CTIME,
|
||
sumCount = g.Where(s => s != null).Count(),
|
||
sumPrice = g.Sum(q => q.NEEDPAY),
|
||
cuserid = g.Key.CREATEID
|
||
//order = g.Select(s=>string.Join(",",s.ORDERID))
|
||
};
|
||
if (dto.minPrice.HasValue)
|
||
{
|
||
priceQuery = priceQuery.Where(n => n.sumPrice >= dto.minPrice);
|
||
}
|
||
if (dto.maxPrice.HasValue)
|
||
{
|
||
priceQuery = priceQuery.Where(n => n.sumPrice <= dto.maxPrice);
|
||
}
|
||
if (dto.maxPrice.HasValue || dto.minPrice.HasValue)
|
||
{
|
||
var residfilter = priceQuery.Select(n => n.resId).Distinct().ToList();
|
||
query = query.Where(n => residfilter.Contains(n.RESID));
|
||
}
|
||
var resQuery = from n in priceQuery
|
||
join r in db.RES_CUSTOMER
|
||
on n.resId equals r.RESID
|
||
join d in db.RES_CUSTOMERDETAIL
|
||
on n.resId equals d.RESID
|
||
join i in db.BAS_INNERUSER
|
||
on n.cuserid equals i.PKID into temp
|
||
from tmp in temp.DefaultIfEmpty()
|
||
join g in db.BAS_INNERUSERGROUP
|
||
on n.cuserid equals g.INNERUSERID into temp2
|
||
from tmp2 in temp2.DefaultIfEmpty()
|
||
join sale in db.BAS_SALESDEPARTMENT
|
||
on tmp2.DEPTID equals sale.SALEDEPTID into temp3
|
||
from tmp3 in temp3.DefaultIfEmpty()
|
||
join gn in db.BAS_INNERGROUP
|
||
on tmp2.GID equals gn.GID into temp4
|
||
from tmp4 in temp4.DefaultIfEmpty()
|
||
select new BestCustomerViewModel
|
||
{
|
||
UMID = r.UMID,
|
||
ResId = r.RESID,
|
||
Remark = n.remark,
|
||
Ctime = n.ctime,
|
||
SumCount = n.sumCount,
|
||
SumPrice = n.sumPrice,
|
||
Name = d.CNAME,
|
||
Group = tmp4.GNAME,
|
||
DeptName = tmp3.DEPTNAME,
|
||
Eid = tmp.EID,
|
||
UserName = tmp.UNAME
|
||
};
|
||
if (!string.IsNullOrWhiteSpace(dto.resId))
|
||
{
|
||
resQuery = resQuery.Where(n => n.ResId == dto.resId);
|
||
}
|
||
resQuery = resQuery.OrderByDescending(n => n.Ctime);
|
||
PagerUtil.SetPager<BestCustomerViewModel>(ref resQuery, ref pager);
|
||
res = resQuery.ToList();
|
||
var resids = res.Select(n => n.ResId).ToList();
|
||
var allcustomer = from a in db.RES_CUSTOMER
|
||
join b in db.RES_CUSTOMER
|
||
on a.CUSTOMERID equals b.CUSTOMERID
|
||
where resids.Contains(a.RESID)
|
||
join c in db.WW_EXTUSER_RESID
|
||
on b.RESID equals c.RESID
|
||
select new
|
||
{
|
||
resId = a.RESID,
|
||
otherResId = b.RESID,
|
||
userId = c.USERID
|
||
};
|
||
var allResList = allcustomer.ToList();
|
||
foreach (var item in res)
|
||
{
|
||
var userids = allResList.Where(n => n.resId == item.ResId);
|
||
if (userids.Count() > 0)
|
||
{
|
||
item.wx_userIds = string.Join(";", userids.Select(n => n.userId));
|
||
}
|
||
}
|
||
|
||
return res;
|
||
}
|
||
}
|
||
|
||
public RES_CUSTOMER_BEST GetBestCustomerById(string id)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
return db.RES_CUSTOMER_BEST.FirstOrDefault(n => n.RESID == id);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 重置CustomerId
|
||
/// </summary>
|
||
/// <param name="resid"></param>
|
||
public void ResetCustomerId(string resid)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var one = db.RES_CUSTOMER.FirstOrDefault(n => n.RESID == resid);
|
||
if (one != null)
|
||
{
|
||
one.CUSTOMERID = resid;
|
||
one.CUSTOMERMID = one.UMID;
|
||
db.SaveChanges();
|
||
}
|
||
}
|
||
}
|
||
|
||
public int InitPhone()
|
||
{
|
||
string clientid = Utility.GetSettingByKey("CRMClientKey");
|
||
WX.CRM.IBLL.Util.ISecurityHelper sHelper = new SecurityHelper();
|
||
CACHE_BL cACHE_BL = new CACHE_BL();
|
||
using (var db = new crmContext())
|
||
{
|
||
while (true)
|
||
{
|
||
var mobileList = db.RES_RESOURCEMOBILE.Where(n => n.UMID == null).Take(500).ToList();
|
||
if (mobileList.Count == 0)
|
||
{
|
||
break;
|
||
}
|
||
var resids = mobileList.Select(n => n.RESID).ToList();
|
||
var resList = db.RES_CUSTOMER.Where(n => resids.Contains(n.RESID)).ToList();
|
||
var detailList = db.RES_CUSTOMERDETAIL.Where(n => resids.Contains(n.RESID)).ToList();
|
||
var suc = 0;
|
||
foreach (var mb in mobileList)
|
||
{
|
||
var resitem = resList.FirstOrDefault(n => n.RESID == mb.RESID);
|
||
var ditem = detailList.FirstOrDefault(n => n.RESID == mb.RESID);
|
||
try
|
||
{
|
||
var phone = sHelper.decyptData(clientid, mb.MOBILE);
|
||
LogHelper.Info($"解密出手机号【{phone}】;");
|
||
Stopwatch stopWatch = new Stopwatch();
|
||
stopWatch.Start();
|
||
var umid = cACHE_BL.GetUMid(phone);
|
||
stopWatch.Stop();
|
||
LogHelper.Info($"获取手机号耗时{stopWatch.ElapsedMilliseconds}");
|
||
if (umid != null)
|
||
{
|
||
mb.UMID = umid;
|
||
if (resitem != null)
|
||
{
|
||
resitem.UMID = umid;
|
||
resitem.CUSTOMERMID = umid;
|
||
suc++;
|
||
}
|
||
if (ditem != null)
|
||
{
|
||
ditem.UMID = umid;
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
mb.UMID = "err";
|
||
if (resitem != null)
|
||
{
|
||
resitem.UMID = "err";
|
||
suc++;
|
||
}
|
||
LogHelper.Info($"手机号异常{mb.RESID}【{ex.Message}】");
|
||
}
|
||
}
|
||
db.SaveChanges();
|
||
}
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
} |