using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WX.CRM.BLL.Application.UserComBox; using WX.CRM.BLL.Base; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.DAL.Res; using WX.CRM.IBLL.Res; using WX.CRM.Model.DTO; using WX.CRM.Model.Entity; using WX.CRM.Model.MAP; namespace WX.CRM.BLL.Res { public class RES_MYALLOCATERES_BL : DbContextRepository, IRES_MYALLOCATERES { private readonly RES_ALLOCATE_DAL _dal = new RES_ALLOCATE_DAL(); private readonly RES_DISTRIBUTE_BL _resDistribute = new RES_DISTRIBUTE_BL(); private readonly RES_CUSTOMER_BL _customer = new RES_CUSTOMER_BL(); private BAS_PARAMETER_BL _para = new BAS_PARAMETER_BL(); private BAS_INNERUSER_BL _user = new BAS_INNERUSER_BL(); private readonly CACHE_BL _cache = new CACHE_BL(); public RES_MYALLOCATERES GetLastSale(string resId) { using (var db = new crmContext()) { //var roleArr = new string[] { "GJSKF", "GJSGJKF", "GJSSJKF" }; ////先找出不是客服,客服主管,高级客服的员工,这些员工需要提醒 //var users = (from u in db.BAS_INNERUSER // join ur in db.BAS_INNERUSERROLE on u.PKID equals ur.INNERUSERID // join r in db.BAS_ROLE on ur.ROLEID equals r.ROLEID // where !roleArr.Contains(r.CODE) // select u.PKID) // .Distinct() // .ToList(); //var data = db.RES_MYALLOCATERES.Where(p => !users.Contains(p.INNERUSERID) && p.RESID == resId); var data = db.RES_MYALLOCATERES.Where(p => p.RESID == resId); return data.FirstOrDefault(); } } public IList GetSeniorDistribution(ref Pager pg, SeniorDistributionQuery query) { var list = _dal.GetSeniorDistribution(ref pg, query); var row = list.FirstOrDefault(p => string.IsNullOrEmpty(p.ResId)); pg.totalRows = Convert.ToInt32(row.rn); list.Remove(row); return list; } public IList GetMySeniorDistribution(ref Pager pg, MySeniorDistributionQuery query) { var list = _dal.GetMySeniorDistribution(ref pg, query); var row = list.FirstOrDefault(p => string.IsNullOrEmpty(p.ResId)); pg.totalRows = Convert.ToInt32(row.rn); list.Remove(row); return list; } public IList GetKFBSeniorDistribution(ref Pager pg, SeniorDistributionQuery query, QueryUserComboDto usercomboDto) { List ALLdeptIDS = new List(); List ALLgidS = new List(); if (string.IsNullOrEmpty(usercomboDto.groupIds) && !string.IsNullOrEmpty(usercomboDto.deptId)) { var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(',')); UserServices userservices = new UserServices(); 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); } ALLdeptIDS.AddRange(ALLgidS); usercomboDto.groupIds = string.Join(",", ALLdeptIDS);//所有的部门ID和销售组ID } query.groupId = usercomboDto.groupIds; if (!query.eid.HasValue) query.eid = usercomboDto.userId; var list = _dal.GetKFBSeniorDistribution(ref pg, query); var row = list.FirstOrDefault(p => string.IsNullOrEmpty(p.ResId)); pg.totalRows = Convert.ToInt32(row.rn); list.Remove(row); return list; } public IList GetKFBMySeniorDistribution(ref Pager pg, MySeniorDistributionQuery query, QueryUserComboDto usercomboDto) { List ALLdeptIDS = new List(); List ALLgidS = new List(); if (string.IsNullOrEmpty(usercomboDto.groupIds) && !string.IsNullOrEmpty(usercomboDto.deptId)) { var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(',')); UserServices userservices = new UserServices(); 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); } ALLdeptIDS.AddRange(ALLgidS); usercomboDto.groupIds = string.Join(",", ALLdeptIDS);//所有的部门ID和销售组ID } query.groupId = usercomboDto.groupIds; var list = _dal.GetKFBMySeniorDistribution(ref pg, query); var row = list.FirstOrDefault(p => string.IsNullOrEmpty(p.ResId)); pg.totalRows = Convert.ToInt32(row.rn); list.Remove(row); return list; } public void ExeSeniorDistribute(SeniorDistributionQuery query) { _dal.ExeSeniorDistribute(query); } public void ExeSeniorDistributeByResId(decimal fenpeiUser, decimal pici, string remark, decimal isNew = 1) { _dal.ExeSeniorDistributeByResId(fenpeiUser, pici, remark, isNew); } /// /// 调用分配 /// 手机号跟资源ID必须存在一个,渠道跟资源类型必须存在一个 /// /// 手机号 /// 资源ID /// 渠道 /// 资源类型 /// 备注 public void ExecDistribute(string mobile, string resid, int? ch, decimal? restypeid, string remark) { if (string.IsNullOrEmpty(mobile) && string.IsNullOrEmpty(resid)) { LogHelper.Info("参数错误!分配时手机号跟资源ID不能同时为空"); return; } //var resid = Common.ResUtil.CreateResId(mobile); if (string.IsNullOrEmpty(resid)) { resid = Common.ResUtil.CreateResId(mobile); } var assignUrl = _cache.GetValue_Parameter("assignUrl"); if (!string.IsNullOrEmpty(assignUrl)) { if (!ch.HasValue && restypeid.HasValue) { var resourceType = _cache.GetResourceType(); var rtype = resourceType.FirstOrDefault(p => p.RESTYPEID == restypeid); if (rtype != null) { var companys = _cache.GetList_innerCompany(); var company = companys.Find(p => p.COMPANYID == rtype.COMPANYID); if (company != null) { var deptments = _cache.GetList_SalesDepartMent(); var dept = deptments.Find(p => p.CHANNELDEF != null && p.COMPANYID == company.COMPANYID); if (dept != null) { ch = Convert.ToInt32(dept.CHANNELDEF); } } } } if (ch.HasValue) { var assign = new AssignQuery("com.web", resid, ch.Value, ch.Value, "soft_reg"); var time = (long)Utility.ConvertDateTimeInt(DateTime.Now); var message = JsonConvert.SerializeObject(new { account = "dn.crm", time }); var postpara = new SecurityHelper().createSignEncodingStr(message); var rsp = Utility.PostAjaxData(assignUrl + "?" + postpara, assign.ToJson(), Encoding.UTF8); var ret = JsonConvert.DeserializeObject(rsp); LogHelper.Info("获取分配" + ret.ToJson()); if (ret.errcode == 0) { //如果有工号,直接分配 if (!string.IsNullOrEmpty(ret.data.eid) && !string.IsNullOrEmpty(resid)) { var isExe = false; var userList = _cache.GetUserList(); var pici = new SEQUENCES_BL().Seq_base_get(); using (var db = new crmContext()) { var myRes = db.RES_MYALLOCATERES.FirstOrDefault(p => p.RESID == resid); var para = _para.GetModel_Patameter("IgnoreManager"); if (para != null && myRes != null) { var manager = _user.GetModel(myRes.INNERUSERID); if (!string.IsNullOrEmpty(para.PARAVALUE)) { var manageList = para.PARAVALUE.Split(','); foreach (var item in manageList) { if (item == manager.EID.ToString()) { isExe = true; } } } } //如果不存在分配关系,才需要分配 if (myRes == null || isExe) { LogHelper.Info("开始写入分配资源:" + resid); var eid32 = Convert.ToDecimal(ret.data.eid); var user = userList.FirstOrDefault(p => p.EID == eid32); if (user != null) { var allcoteUse = new RES_ALLCOTE_USER() { ID = new SEQUENCES_BL().Seq_base_get(), INNERUSERID = user.PKID, EID = user.EID, NUM = 1, CTIME = DateTime.Now, PICI = pici, RESID = resid, TYPE = 1 }; //if (activeModel.groupid.HasValue) //{ // info.SGID = activeModel.groupid.Value; //} db.RES_ALLCOTE_USER.Add(allcoteUse); } db.SaveChanges(); } } //资源分配关系 var eid1000 = userList.FirstOrDefault(p => p.EID == 10000).PKID; ExeSeniorDistributeByResId(eid1000, pici, remark); } } } } } public IEnumerable GetToDayAllocateRes() { using (var db = new crmContext()) { var today = DateTime.Parse(DateTime.Now.ToShortDateString()); var query = from m in db.RES_MYALLOCATERES join c in db.RES_CUSTOMER on m.RESID equals c.RESID join u in db.BAS_INNERUSER on m.INNERUSERID equals u.PKID where m.DISTIME >= today && m.MEMO == "扫码直接分配" select new ToDayAllocateRes() { ResId = m.RESID, Eid = u.EID, DisTime = m.DISTIME, CTime = c.CTIME, IsNew = 1 } ; return query.ToList(); } } public List GetAllocateRes3List(AllocateRes3Para dto, ref int total) { var url = _cache.GetValue_Parameter("AllocateRes3Url"); var conditions = new List(); var dates = new List(); if (dto.QwStatus.HasValue) { conditions.Add(new Even() { eventid = 12, isNo = dto.QwStatus == 1 ? true : false }); } if (dto.RjStatus.HasValue) { conditions.Add(new Even() { eventid = 6, isNo = dto.RjStatus == 1 ? true : false }); } if (!string.IsNullOrEmpty(dto.TkStatus)) { conditions.Add(new Even() { eventid = 17, isNo = dto.TkStatus == "on" ? true : false }); } if (!string.IsNullOrEmpty(dto.stime)) { dates.Add(dto.stime); } if (!string.IsNullOrEmpty(dto.etime)) { var time = DateTime.Parse(dto.etime).AddDays(1); dates.Add(time.ToString("yyyy-MM-dd")); } var ch = new List() { "3000", "3099" }; var para = new AllocateRes3RequestDto() { conditions = conditions.ToJson(), dates = dates, ch = ch.ToJson(), isAnd = "true", iPageIndex = dto.page }; LogHelper.Info("para:" + para.ToJson()); var rsp = Utility.PostAjaxData(url, para.ToJson(), Encoding.UTF8); //var rsp = Utility.HttpPostData(url, para.ToJson(), Encoding.UTF8); LogHelper.Info("rsp:" + rsp); var data = Utility.JSONToObject(rsp); total = data.total; var residArr = new List(); foreach (var item in data.list) { if (!string.IsNullOrEmpty(item.mobile)) { item.resid = ResUtil.CreateResId(item.mobile); residArr.Add(item.resid); } } var view = new List(); if (!residArr.Any()) { return view; } var list = GetList(p => residArr.Contains(p.RESID)); var resounceCount = _resDistribute.GetCacheResourceCount(residArr); var customers = _customer.getResByResIds(residArr.ToArray()); var users = _cache.GetUserList(); foreach (var item in data.list.Where(p => p.resid != null)) { int? eid = null; var uname = string.Empty; DateTime? distime = null; DateTime? lastactivetime = null; DateTime? lastcalltime = null; DateTime? ctime = null; var myRes = list.FirstOrDefault(p => p.RESID == item.resid); if (myRes != null) { var user = users.FirstOrDefault(p => p.PKID == myRes.INNERUSERID); if (user != null) { eid = Convert.ToInt32(user.EID); uname = user.UNAME; } distime = myRes.DISTIME; } var cacheresourcecount = resounceCount.FirstOrDefault(p => p.RESID == item.resid); if (cacheresourcecount != null) { lastactivetime = cacheresourcecount.LASTACTIVETIME; lastcalltime = cacheresourcecount.LASTCALLTIME; } var customer = customers.FirstOrDefault(p => p.RESID == item.resid); if (customer != null) { ctime = customer.CTIME; } var model = new AllocateRes3View() { ResId = item.resid, QwStatus = dto.QwStatus, RjStauts = dto.RjStatus, Eid = eid, UName = uname, LastActiveTime = lastactivetime, LastCallTime = lastcalltime, DisTime = distime, CTime = ctime }; view.Add(model); } return view; } public class AssignQuery { public AssignQuery(string appid, string appuserid, int channel, int curchannel, string remark) : this(appid, appuserid, string.Empty, channel, curchannel, 0, string.Empty, remark, string.Empty, string.Empty, string.Empty) { } public AssignQuery(string appid, string appuserid, string unionid, int channel, int curchannel, int type, string livecode, string remark, string remarkext, string memo, string eid) { this.appid = appid; this.appuserid = appuserid; this.unionid = unionid; this.channel = channel; this.curchannel = curchannel; this.type = type; this.livecode = livecode; this.remark = remark; this.remarkext = remarkext; this.memo = memo; this.eid = eid; } public string appid { get; set; } public string appuserid { get; set; } public string unionid { get; set; } public int channel { get; set; } public int curchannel { get; set; } public int type { get; set; }//1、返回二维码链接、0、不需要返回二码码链接 public string livecode { get; set; } //活码标识,30字符以内 public string remark { get; set; }//标记,30字符以内 public string remarkext { get; set; }//标记补充,30字符以内 public string memo { get; set; } public string eid { get; set; }//工号 } public class WeworkUserAssignMessage { public int errcode { get; set; } public string errmsg { get; set; } public WeworkUserAssignResult data { get; set; } } public class WeworkUserAssignResult { public string eid { get; set; } public int? groupid { get; set; } public string qr { get; set; } } } }