TG.WXCRM.V4/BLL/Res/RES_CUSTOMER_BL.cs

1132 lines
49 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 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;
}
}
}
}