312 lines
13 KiB
C#
312 lines
13 KiB
C#
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<ICACHE_Q>();
|
||
private ICSVR_FAVORITECUSTOMER_Q _favCustomerQ = NinjectControllerFactory.ninjectKernel.Get<ICSVR_FAVORITECUSTOMER_Q>();
|
||
private IRES_SCENE _resScene = NinjectControllerFactory.ninjectKernel.Get<IRES_SCENE>();
|
||
private IRES_MYALLOCATERES _myallocate = NinjectControllerFactory.ninjectKernel.Get<IRES_MYALLOCATERES>();
|
||
private IWX_SZZYORDER _order = NinjectControllerFactory.ninjectKernel.Get<IWX_SZZYORDER>();
|
||
private IRES_SHAREDPOOL_HIS _sharedPoolHis = NinjectControllerFactory.ninjectKernel.Get<IRES_SHAREDPOOL_HIS>();
|
||
private IRES_SHAREDPOOL_ONE _sharedPoolOne = NinjectControllerFactory.ninjectKernel.Get<IRES_SHAREDPOOL_ONE>();
|
||
private IRES_ACTIVITY _activity = NinjectControllerFactory.ninjectKernel.Get<IRES_ACTIVITY>();
|
||
private ICACHE_Q _cache = NinjectControllerFactory.ninjectKernel.Get<ICACHE_Q>();
|
||
private IWw_huser _wwHHUser = NinjectControllerFactory.ninjectKernel.Get<IWw_huser>();
|
||
private ICSVR_TODOITEM _todoItem = NinjectControllerFactory.ninjectKernel.Get<ICSVR_TODOITEM>();
|
||
private IRES_APPLY res_apply = NinjectControllerFactory.ninjectKernel.Get<IRES_APPLY>();
|
||
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;
|
||
}
|
||
}
|
||
|
||
} |