ComplianceServer/oldcode/BLL/Res/RES_CUSTOMER_BL.cs

562 lines
24 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.Model.Enum;
using WX.CRM.BLL.Application.UserComBox;
using WX.CRM.Model.SSO;
using System.Text;
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)
{
//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 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);
}
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();
}
}
/// <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.CUSTOMERID) || cId.Contains(m.RESID));
}
else
queryData = queryData.Where(m => m.CUSTOMERID == null || m.CUSTOMERID == "");
List<RES_CUSTOMER> list = (from q in queryData
join d in db.RES_CUSTOMERDETAIL on q.RESID equals d.RESID
select new { RESID = q.RESID, CUSTOMERID = q.CUSTOMERID, RES_CUSTOMERDETAIL = d }
).ToList().Select
(c => new RES_CUSTOMER
{
RESID = c.RESID,
CUSTOMERID = c.CUSTOMERID,
RES_CUSTOMERDETAIL = c.RES_CUSTOMERDETAIL
}).OrderByDescending(m => m.CUSTOMERID).ToList();
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, LASTNUM3 = q.LASTNUM3, CUSTOMERID = q.CUSTOMERID, RES_CUSTOMERDETAIL = d, CTIME = q.CTIME,UMID=q.UMID }
)
//.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,
CUSTOMERID = c.CUSTOMERID,
LASTNUM3 = c.LASTNUM3,
RES_CUSTOMERDETAIL = c.RES_CUSTOMERDETAIL,
CTIME = c.CTIME,
UMID=c.UMID
}).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;//获取操作风格
}
}
}
}
public List<DeptMentReturnModel> GetUserDeptNameByEid(List<decimal?> eidList)
{
eidList = eidList.Distinct().ToList();
List<DeptMentReturnModel> res = new List<DeptMentReturnModel>();
try
{
var url = new CACHE_BL().GetValue_Parameter("ZxdCrmWebUrl");
url = $"{url}Api/SSO/GetDeptNameByEid";
var para = $"eidList={string.Join(",", eidList)}";
var data = Utility.GetData(url, para, Encoding.Default);
var apiData = Utility.ToObject<CRMApiData>(data);
res = apiData.Data;
}
catch (Exception ex)
{
LogHelper.Error($"获取SSO事业部失败{ex.Message}");
}
return res;
}
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) && n.UMID == null).ToList();
var suc = 0;
foreach (var mb in mobileList)
{
var resitem = resList.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;
suc++;
}
}
}
catch (Exception ex)
{
mb.UMID = "err";
if (resitem != null)
{
resitem.UMID = "err";
suc++;
}
LogHelper.Info($"手机号异常{mb.RESID}【{ex.Message}】");
}
}
db.SaveChanges();
}
return 0;
}
}
}
}