ComplianceServer/oldcode/RiaService/Services/ResServices.cs

312 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}