using CRM.Core.DTO.Res; using Ninject; using System; using System.Linq; using WX.CRM.BLL.Base; using WX.CRM.Common; using WX.CRM.IBLL.Csvr; using WX.CRM.IBLL.Res; using WX.CRM.IBLL.Util; using WX.CRM.IBLL.Ww; using WX.CRM.IBLL.Wx; using WX.CRM.Model.Entity; using WX.CRM.WebHelper.Infrastructure; namespace RiaService.Services { public class ResServices { private ICACHE_Q cacheQ = NinjectControllerFactory.ninjectKernel.Get(); private ICSVR_FAVORITECUSTOMER_Q _favCustomerQ = NinjectControllerFactory.ninjectKernel.Get(); private IRES_SCENE _resScene = NinjectControllerFactory.ninjectKernel.Get(); private IRES_MYALLOCATERES _myallocate = NinjectControllerFactory.ninjectKernel.Get(); private IWX_SZZYORDER _order = NinjectControllerFactory.ninjectKernel.Get(); private IRES_SHAREDPOOL_HIS _sharedPoolHis = NinjectControllerFactory.ninjectKernel.Get(); private IRES_SHAREDPOOL_ONE _sharedPoolOne = NinjectControllerFactory.ninjectKernel.Get(); private IRES_ACTIVITY _activity = NinjectControllerFactory.ninjectKernel.Get(); private ICACHE_Q _cache = NinjectControllerFactory.ninjectKernel.Get(); private IWw_huser _wwHHUser = NinjectControllerFactory.ninjectKernel.Get(); private ICSVR_TODOITEM _todoItem = NinjectControllerFactory.ninjectKernel.Get(); private IRES_APPLY res_apply = NinjectControllerFactory.ninjectKernel.Get(); ValidationErrors errors = new ValidationErrors(); public BAS_INNERUSER FindUser(string resid, string unionid, string appid, string appuserid) { var users = cacheQ.GetUserList(); if (!string.IsNullOrEmpty(resid)) { var favCustomer = _favCustomerQ.GetModel_FavoriteCustomer(resid, null); if (favCustomer != null) { return users.Find(p => p.PKID == favCustomer.SALESID && p.ISDISMISS == 0); } else { var resMyAllocate = _myallocate.GetLastSale(resid); if (resMyAllocate != null) { return users.Find(p => p.PKID == resMyAllocate.INNERUSERID && p.ISDISMISS == 0); } else { var order = _order.Get(P => P.RESID == resid && P.ISOPEN == 1); if (order != null) { return users.Find(p => p.PKID == order.INNERUSERID && p.ISDISMISS == 0); } var sharedPoolHisList = _sharedPoolHis.GetList(p => p.RESID == resid); if (sharedPoolHisList.Any()) { var sharedPoolHis = sharedPoolHisList.OrderByDescending(p => p.CTIME).FirstOrDefault(); var user = users.Find(p => p.PKID == sharedPoolHis.SALESID.Value); if (user.ISDISMISS == 0) { return user; } else { var sharedPoolOneList = _sharedPoolOne.GetList(p => p.RESID == resid); if (sharedPoolOneList.Any()) { var sharedPoolOne = sharedPoolOneList.OrderByDescending(p => p.CTIME).FirstOrDefault(); return users.Find(p => p.PKID == sharedPoolOne.SALESID); } } } } } } else { if (!string.IsNullOrEmpty(unionid)) { var extUser = _wwHHUser.GetExtUserByUnionId(unionid); if (extUser != null) { var userExtUserList = _wwHHUser.GetUserExtUserByUserId(extUser.userid); //LogHelper.Info("userExtUserList:" + userExtUserList.ToJson()); if (userExtUserList.Any()) { var hhUserList = _wwHHUser.GetUserListByQWUserId(userExtUserList.Select(p => p.userid).ToArray()); //LogHelper.Info("hhUserList:" + hhUserList.ToJson()); if (hhUserList.Any()) { if (hhUserList.Count() > 1) { var aid = appid.Replace("_1", ""); var hhUserList2 = hhUserList.Where(p => p.CORPID == aid); foreach (var item in hhUserList2) { return users.Find(p => p.EID == item.EID); } } else { var eid = hhUserList.First().EID; return users.Find(p => p.EID == eid); } } else { LogHelper.Info("未找到分配企微客服信息 hhUserList:" + userExtUserList.Select(p => p.userid).ToJson()); } } else { LogHelper.Info("根据appuserid未能找到信息 userExtUserList:" + extUser.userid); } } else { LogHelper.Info("根据unionid未能找到信息 extUser:" + unionid); } } } return null; } public void SaveToDoItem(UserCenterEventDto dto, string tag) { if (!string.IsNullOrEmpty(dto.Mobile)) { var apply = new RES_APPLY { CTIME = DateTime.Now, JSONDATA = null, JSONTYPE = 0, MOBILE = dto.Mobile, RESID = dto.ResId, RESOURCETAG = tag, RTIME = DateTime.Now, STATUS = 0, USERNAME = string.Empty, DATATYPE = null, EXTXML = null, KWORD = null, SOURCETYPE = null }; res_apply.Create(ref errors, apply); } var user = FindUser(dto.ResId, dto.UnionId, dto.AppId, dto.AppUserId); if (user == null) { return; } var users = cacheQ.GetUserList(); var user10000 = cacheQ.GetUserList().Find(p => p.EID == 10000).PKID; var todoItem = new CSVR_TODOITEM() { PKID = new SEQUENCES_BL().Seq_base_get(), SENDEDUSERID = user10000, RECEIVEDUSERID = user.PKID, ISPRIVATE = 1, //RESID = dto.resid, MEMO = dto.EventMemo, STARTTIME = DateTime.Now, //URL = "/Csvr/CustomerInfo/CustomerDetail?resid=" + dto.resid, URLTITLE = "客户详细", DOSTATUS = 0, RESOURCETAG = tag }; if (string.IsNullOrEmpty(dto.ResId)) { todoItem.RESID = dto.AppUserId; todoItem.URL = string.Empty; } else { todoItem.RESID = dto.ResId; todoItem.URL = "/Csvr/CustomerInfo/CustomerDetail?resid=" + dto.ResId; } _todoItem.Create(ref errors, todoItem); } public BAS_INNERUSER SceneFindUser(RES_SCENE model) { var users = cacheQ.GetUserList(); //var users = cacheQ.GetUserList(); if (!string.IsNullOrEmpty(model.RESID)) { var favCustomer = _favCustomerQ.GetModel_FavoriteCustomer(model.RESID, null); if (favCustomer != null) { return users.Find(p => p.PKID == favCustomer.SALESID && p.ISDISMISS == 0); } else { var resMyAllocate = _myallocate.GetLastSale(model.RESID); if (resMyAllocate != null) { return users.Find(p => p.PKID == resMyAllocate.INNERUSERID && p.ISDISMISS == 0); } else { var order = _order.Get(P => P.RESID == model.RESID && P.ISOPEN == 1); if (order != null) { return users.Find(p => p.PKID == order.INNERUSERID && p.ISDISMISS == 0); } var sharedPoolHisList = _sharedPoolHis.GetList(p => p.RESID == model.RESID); if (sharedPoolHisList.Any()) { var sharedPoolHis = sharedPoolHisList.OrderByDescending(p => p.CTIME).FirstOrDefault(); var user = users.Find(p => p.PKID == sharedPoolHis.SALESID.Value); if (user.ISDISMISS == 0) { return user; } else { var sharedPoolOneList = _sharedPoolOne.GetList(p => p.RESID == model.RESID); if (sharedPoolOneList.Any()) { var sharedPoolOne = sharedPoolOneList.OrderByDescending(p => p.CTIME).FirstOrDefault(); return users.Find(p => p.PKID == sharedPoolOne.SALESID); } } } } } } return null; } public void SaveScene(RES_SCENE model) { var user = SceneFindUser(model); if (user != null) { model.EID = user.EID; model.INNERUSERID = user.PKID; } else { LogHelper.Info("本地未找到归属信息:" + model.ToJson()); //如果本地没有获取到工号并且资源ID不是空的,那么获取线上分配关系,如果线上分配关系不为空,使用线上分配关系分配 if (!string.IsNullOrEmpty(model.RESID)) { _myallocate.ExecDistribute(null, model.RESID, Convert.ToInt32(model.CH.Value), null, "直播分配"); } } _resScene.Add(model); } public bool SaveActivityType(ActivityDto dto, string typename = "活动报名") { var errors = new ValidationErrors(); var resourceType = _cache.GetResourceType(); var resourceTypeModel = resourceType.FirstOrDefault(p => p.TYPENAME == typename); if (resourceTypeModel != null) { var activityList = _cache.GetList_ResActivity(); var activityexists = activityList.Any(p => p.RESOURCETAG == dto.tag); //如果标签已经存在就不需要处理 if (!activityexists) { var activity = activityList.OrderByDescending(p => p.ACTIVITYID).FirstOrDefault(p => p.RESTYPEID == resourceTypeModel.RESTYPEID); var lastCode = activity.ACTIVITYCODE; var prefix = lastCode.Substring(0, 5); var suffix = lastCode.Substring(5, lastCode.Length - 5); var code = prefix + (int.Parse(suffix) + 1).ToString(); var model = new RES_ACTIVITY() { ACTIVITYCODE = code, RESOURCETAG = dto.tag, RESTYPEID = resourceTypeModel.RESTYPEID, CREATEUSER = 600000207, ACTIVITYNAME = dto.tagname }; _activity.Create(ref errors, model); CacheHelper.Remove("cache_resourcetype_getlist"); CacheHelper.Remove("cache_resactivity_getList"); } return true; } return false; } } }