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:" + 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:" + 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:" + 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:" + resId, entry); //LogHelper.Info("RES_CUSTOMER:" + resId); return entry; } //} //else //{ // LogHelper.Info("读取缓存数据customer:" + customer.RESID + "," + customer.RES_CUSTOMERDETAIL.RESID); // return customer; //} } public List 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); } /// /// 资源分配接口 /// /// /// /// 1、手机号资源(默认)2、企业微信有unionid资源 /// 3、企业微信无unionid资源,如果后期获取到了unionid将新增一条有unionid的 /// 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; } /// /// 绑定企业微信 /// /// /// 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(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 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 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 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 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; } } /// /// 获取实体 /// /// /// 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; } } /// /// 根据客户ID查找对应的所有客户ID /// /// /// public List 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 list = new List(); 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; } } /// /// 根据客户ID查找对应的所有客户ID /// /// /// public List 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(); List 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; } } /// /// 根据客户ID查找对应的所有客户ID /// /// /// public List 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(); List 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(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 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(); } } /// /// 根据导入resid进行条件过滤 /// /// 资源数据 /// 导入id /// 过滤开始时间 /// 过滤结束时间 /// 选项ID /// 工单过滤类型ID /// public List 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(); } } public List 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().Select(m => m.RESID).ToList(); } return new List(); } catch (Exception ex) { LogHelper.Error(ex.Message); errors.Add(ex.Message); return new List(); } } public List 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().Select(m => m.RESID).ToList(); } return new List(); } catch (Exception ex) { LogHelper.Error(ex.Message); errors.Add(ex.Message); return new List(); } } 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); } /// /// 根据客户ID查找 客户列表 /// /// /// public DataTable GetList_CustomerByResIds(string CustomerIds) { var dal = new CUSTOMER_DAL(); return dal.Res_GetCustomerByResIds(CustomerIds); } /// /// 判断该资源是否能够查看手机号码 /// /// 客户ID /// 员工ID /// 权限码 /// 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 deptIDS = new List(); List gidS = new List(); 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); } /// /// 客户基础信息中获取其他信息 /// 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 GetBestCustomer(Pager pager, BestCustomerQueryDto dto) { List res = new List(); 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 { "220", "90", "210", "80" }; var orderQuery = db.WX_SZZYORDER.Where(n => finshStatus.Contains(n.ORDERSTATUS)); List ALLdeptIDS = new List(); List ALLgidS = new List(); 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 deptIDS = new List(); List gidS = new List(); 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(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); } } /// /// 重置CustomerId /// /// 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; } } } }