854 lines
40 KiB
C#
854 lines
40 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using WX.CRM.BLL.Base;
|
||
using WX.CRM.BLL.Res;
|
||
using WX.CRM.BLL.Util;
|
||
using WX.CRM.Common;
|
||
using WX.CRM.DAL.Res;
|
||
using WX.CRM.IBLL.Csvr;
|
||
using WX.CRM.DAL.Res;
|
||
using WX.CRM.BLL.Res;
|
||
using WX.CRM.Model.MAP;
|
||
using WX.CRM.BLL.Application.UserComBox;
|
||
using WX.CRM.Model.Entity;
|
||
|
||
namespace WX.CRM.BLL.Csvr
|
||
{
|
||
public class CSVR_FAVORITECUSTOMER_BL : ICSVR_FAVORITECUSTOMER, ICSVR_FAVORITECUSTOMER_Q
|
||
{
|
||
private RES_SHAREDPOOL_DAL _sharedPool_dal = new RES_SHAREDPOOL_DAL();
|
||
private RES_MYALLOCATERES_BL _resMyAllocateRes = new RES_MYALLOCATERES_BL();
|
||
private CACHE_BL _cache = new CACHE_BL();
|
||
|
||
#region 添加
|
||
public bool Create(ref ValidationErrors errors, WX.CRM.Model.Entity.CSVR_FAVORITECUSTOMER model, decimal eid, decimal userId)
|
||
{
|
||
try
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var isExists = db.CSVR_FAVORITECUSTOMER.Any(p => p.RESID == model.RESID);
|
||
if (isExists)
|
||
{
|
||
errors.Add("该客户已经被收藏,您不能再收藏了!");
|
||
return false;
|
||
}
|
||
|
||
//如果在高级回收池里面
|
||
//var isHS = db.RES_SENIORSHAREDPOOL.Any(p => p.RESID == model.RESID);
|
||
//if (isHS)
|
||
//{
|
||
// //共享池获取资源,写入归属
|
||
// var info = new RES_ALLCOTE_USER()
|
||
// {
|
||
// ID = new SEQUENCES_BL().Seq_base_get(),
|
||
// INNERUSERID = userId,
|
||
// EID = eid,
|
||
// NUM = 1,
|
||
// CTIME = DateTime.Now,
|
||
// PICI = new SEQUENCES_BL().Seq_base_get(),
|
||
// RESID = model.RESID,
|
||
// TYPE = 1
|
||
// };
|
||
|
||
// db.RES_ALLCOTE_USER.Add(info);
|
||
|
||
// var eid1000 = _cache.GetUserList().FirstOrDefault(p => p.EID == 10000).PKID;
|
||
|
||
// _resMyAllocateRes.ExeSeniorDistributeByResId(eid1000, info.PICI, "高级共享池获取写入", 0);
|
||
//}
|
||
//else
|
||
//{
|
||
// //是否存在归属
|
||
// var isGS = db.RES_MYALLOCATERES.Any(p => p.RESID == model.RESID && p.INNERUSERID == userId);
|
||
// if (!isGS)
|
||
// {
|
||
// errors.Add("该客户已经有归属,您不能收藏!");
|
||
// return false;
|
||
// }
|
||
|
||
// //如果分配表没有数据,说明不存在归属,写入归属,然后收藏
|
||
// var isFP = db.RES_MYALLOCATERES.Any(p => p.RESID == model.RESID);
|
||
// if (!isFP)
|
||
// {
|
||
// //共享池获取资源,写入归属
|
||
// var info = new RES_ALLCOTE_USER()
|
||
// {
|
||
// ID = new SEQUENCES_BL().Seq_base_get(),
|
||
// INNERUSERID = userId,
|
||
// EID = eid,
|
||
// NUM = 1,
|
||
// CTIME = DateTime.Now,
|
||
// PICI = new SEQUENCES_BL().Seq_base_get(),
|
||
// RESID = model.RESID,
|
||
// TYPE = 1
|
||
// };
|
||
|
||
// db.RES_ALLCOTE_USER.Add(info);
|
||
|
||
// var eid1000 = _cache.GetUserList().FirstOrDefault(p => p.EID == 10000).PKID;
|
||
|
||
// _resMyAllocateRes.ExeSeniorDistributeByResId(eid1000, info.PICI, "共享池获取写入", 0);
|
||
// }
|
||
//}
|
||
|
||
model.PKID = new SEQUENCES_BL().Seq_base_get(WX.CRM.Model.Enum.PKIDType.LargeTable);
|
||
model.CTIME = DateTime.Now;
|
||
db.CSVR_FAVORITECUSTOMER.Add(model);
|
||
|
||
decimal? oldeid = null;
|
||
|
||
var myRes = db.RES_MYALLOCATERES.FirstOrDefault(p => p.RESID == model.RESID);
|
||
if (myRes != null)
|
||
{
|
||
oldeid = db.BAS_INNERUSER.FirstOrDefault(p => p.PKID == myRes.INNERUSERID).EID;
|
||
}
|
||
|
||
if (oldeid.HasValue)
|
||
{
|
||
//多个归属,以收藏客户优先
|
||
//写入关系操作表
|
||
if (oldeid.Value != eid)
|
||
{
|
||
//eid相等说明是自己的资源,不需要更新关系
|
||
db.RES_MYALLOCATERES_ACT.Add(new RES_MYALLOCATERES_ACT(new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable), model.RESID, eid, 0, "update", oldeid.Value));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//oldeid 为空,回收池资源,
|
||
//写入关系操作表
|
||
db.RES_MYALLOCATERES_ACT.Add(new RES_MYALLOCATERES_ACT(new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable), model.RESID, eid, 0, "add", null));
|
||
}
|
||
|
||
var customerDetial = db.RES_CUSTOMERDETAIL.FirstOrDefault(p => p.RESID == model.RESID);
|
||
|
||
var favCustomerHis = new CSVR_FAVORITECUSTOMER_HIS()
|
||
{
|
||
PKID = new SEQUENCES_BL().Seq_base_get(WX.CRM.Model.Enum.PKIDType.LargeTable),
|
||
SALESID = model.SALESID,
|
||
RESID = model.RESID,
|
||
PARAKEY = model.PARAKEY,
|
||
MEMO = model.MEMO,
|
||
CTIME = model.CTIME,
|
||
REMARK = eid.ToString() + "添加收藏客户" + model.RESID,
|
||
OPERATOR = userId,
|
||
ACTION = "add",
|
||
ACTIONTIME = DateTime.Now,
|
||
NAME = customerDetial != null ? customerDetial.CNAME : string.Empty
|
||
};
|
||
db.CSVR_FAVORITECUSTOMER_HIS.Add(favCustomerHis);
|
||
|
||
//收藏客户时删除共享池资源
|
||
var sharedpool = db.RES_SHAREDPOOL.FirstOrDefault(p => p.RESID == model.RESID);
|
||
if (sharedpool != null)
|
||
{
|
||
db.RES_SHAREDPOOL.Remove(sharedpool);
|
||
}
|
||
//收藏客户时删除高级共享池资源
|
||
var seniorSharedPool = db.RES_SENIORSHAREDPOOL.FirstOrDefault(p => p.RESID == model.RESID);
|
||
if (seniorSharedPool != null)
|
||
{
|
||
db.RES_SENIORSHAREDPOOL.Remove(seniorSharedPool);
|
||
}
|
||
|
||
return db.SaveChanges().GetResult();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
errors.Add(ex.Message);
|
||
LogHelper.Error(ex.ToString());
|
||
return false;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 获取条件后的queryData
|
||
/// <summary>
|
||
/// 获取条件后的queryData
|
||
/// </summary>
|
||
/// <param name="queryData"></param>
|
||
/// <param name="db"></param>
|
||
/// <param name="parameterKey"></param>
|
||
/// <param name="stime"></param>
|
||
/// <param name="etime"></param>
|
||
/// <param name="salesId"></param>
|
||
/// <returns></returns>
|
||
private IQueryable<CSVR_FAVORITECUSTOMER> GetQuery(IQueryable<CSVR_FAVORITECUSTOMER> queryData, crmContext db, string parameterKey, string stime, string etime, string remark, string resId, QueryUserComboDto usercomboDto)
|
||
{
|
||
|
||
if (!string.IsNullOrEmpty(parameterKey) && parameterKey != "0")
|
||
{
|
||
queryData = queryData.Where(m => m.PARAKEY == parameterKey);
|
||
}
|
||
DateTime dt;
|
||
if (!string.IsNullOrWhiteSpace(stime) && DateTime.TryParse(stime, out dt))
|
||
queryData = queryData.Where(a => a.CTIME >= dt);
|
||
DateTime dt2;
|
||
if (!string.IsNullOrWhiteSpace(etime) && DateTime.TryParse(etime, out dt2))
|
||
{
|
||
dt2 = dt2.AddDays(1);
|
||
queryData = queryData.Where(a => a.CTIME <= dt2);
|
||
}
|
||
|
||
if (usercomboDto.userId.HasValue)
|
||
{
|
||
queryData = queryData.Where(m => m.SALESID == usercomboDto.userId.Value);
|
||
}
|
||
else if (!string.IsNullOrEmpty(usercomboDto.groupIds))
|
||
{
|
||
var _groupids = OperationUtil.ConvertToDecimal(usercomboDto.groupIds.Split(','));
|
||
queryData = (from a in queryData
|
||
join b in db.BAS_INNERUSERGROUP on a.SALESID equals b.INNERUSERID
|
||
where _groupids.Contains(b.GID.Value)
|
||
select a);
|
||
}
|
||
else if (!string.IsNullOrEmpty(usercomboDto.deptId))
|
||
{
|
||
var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(','));
|
||
List<decimal> ALLdeptIDS = new List<decimal>();
|
||
List<decimal> ALLgidS = new List<decimal>();
|
||
foreach (var item in depts)
|
||
{
|
||
List<decimal> deptIDS = new List<decimal>();
|
||
List<decimal> gidS = new List<decimal>();
|
||
new UserServices(_cache).GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid
|
||
ALLdeptIDS.AddRange(deptIDS);
|
||
ALLgidS.AddRange(gidS);
|
||
}
|
||
queryData = (from a in queryData
|
||
join b in db.BAS_INNERUSERGROUP on a.SALESID equals b.INNERUSERID
|
||
//join g in db.BAS_INNERGROUP on b.GID equals g.GID
|
||
where ALLdeptIDS.Contains(b.DEPTID.Value) || ALLgidS.Contains(b.GID.Value)
|
||
select a);
|
||
}
|
||
|
||
//else
|
||
//{
|
||
// if (!string.IsNullOrWhiteSpace(groupId))
|
||
// {
|
||
// var _groupids = OperationUtil.ConvertToDecimal(groupId.ToString().Split(','));
|
||
// List<decimal?> groupList = new List<decimal?>();
|
||
// if (_groupids != null)
|
||
// {
|
||
// foreach (var g in _groupids)
|
||
// {
|
||
// groupList.Add(g);
|
||
// }
|
||
// }
|
||
// if (groupList != null)
|
||
// {
|
||
// var returnData = from a in queryData
|
||
// join b in db.BAS_INNERUSERGROUP on a.SALESID equals b.INNERUSERID
|
||
// where groupList.Contains(b.GID)
|
||
// select a;
|
||
|
||
// queryData = returnData;
|
||
// }
|
||
// }
|
||
//}
|
||
|
||
if (!string.IsNullOrEmpty(remark))
|
||
{
|
||
queryData = queryData.Where(p => p.MEMO == remark);
|
||
}
|
||
if (!string.IsNullOrEmpty(resId))
|
||
{
|
||
queryData = queryData.Where(p => p.RESID == resId);
|
||
}
|
||
|
||
return queryData;
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 获取分页数据列表
|
||
public List<CSVR_FAVORITECUSTOMER_extend> GetList(ref Pager pager, string memoId, string stime, string etime, string remark, string resId, bool? hasOrder, bool? IsFx, QueryUserComboDto usercomboDto)
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var lableList = from c in db.RES_CUSTOMER
|
||
join lable in db.RES_CUSTOMER_LABEL on c.RESID equals lable.RESID
|
||
where lable.RFMTYPE == 1
|
||
select c;
|
||
|
||
var residList = from c in db.RES_CUSTOMER
|
||
join lable in lableList on c.CUSTOMERID equals lable.CUSTOMERID
|
||
select c;
|
||
|
||
var queryData = db.CSVR_FAVORITECUSTOMER.AsQueryable();
|
||
queryData = GetQuery(queryData, db, memoId, stime, etime, remark, resId, usercomboDto);
|
||
//queryData = queryData.OrderByDescending(m => m.CTIME);
|
||
var obj = from a in queryData
|
||
join b in db.RES_CUSTOMERDETAIL on a.RESID equals b.RESID into temp
|
||
from b in temp.DefaultIfEmpty()
|
||
join o in db.WX_SZZYORDER.Where(p => p.ISOPEN == 1).Select(p => p.RESID).Distinct() on a.RESID equals o into aoTemp
|
||
from ao in aoTemp.DefaultIfEmpty()
|
||
join c in db.CACHE_RES_RESOURCE_COUNT on a.RESID equals c.RESID into acTemp
|
||
from ac in acTemp.DefaultIfEmpty()
|
||
join r in residList on a.RESID equals r.RESID into arTemp
|
||
from ar in arTemp.DefaultIfEmpty()
|
||
select new CSVR_FAVORITECUSTOMER_extend()
|
||
{
|
||
Name = b.CNAME,
|
||
CTIME = a.CTIME,
|
||
MEMO = a.MEMO,
|
||
PKID = a.PKID,
|
||
RESID = a.RESID,
|
||
PARAKEY = a.PARAKEY,
|
||
SALESID = a.SALESID,
|
||
HASORDER = string.IsNullOrEmpty(ao) ? false : true,
|
||
LASTACTIVETIME = ac.LASTACTIVETIME,
|
||
LASTCALLTIME = ac.LASTCALLTIME,
|
||
LastTime = ac.LASTACTIVETIME.HasValue && ac.LASTCALLTIME.HasValue ? (ac.LASTACTIVETIME > ac.LASTCALLTIME ? ac.LASTACTIVETIME : ac.LASTCALLTIME) : (ac.LASTACTIVETIME.HasValue ? ac.LASTACTIVETIME : (ac.LASTCALLTIME.HasValue ? ac.LASTCALLTIME : a.CTIME)),
|
||
IsFx = ar != null ? true : false
|
||
};
|
||
if (hasOrder.HasValue)
|
||
{
|
||
obj = obj.Where(p => p.HASORDER == hasOrder.Value);
|
||
}
|
||
if (IsFx.HasValue)
|
||
{
|
||
obj = obj.Where(p => p.IsFx == IsFx.Value);
|
||
}
|
||
obj = from o in obj
|
||
select new CSVR_FAVORITECUSTOMER_extend()
|
||
{
|
||
Name = o.Name,
|
||
CTIME = o.CTIME,
|
||
MEMO = o.MEMO,
|
||
PKID = o.PKID,
|
||
RESID = o.RESID,
|
||
PARAKEY = o.PARAKEY,
|
||
SALESID = o.SALESID,
|
||
HASORDER = o.HASORDER,
|
||
LASTACTIVETIME = o.LASTACTIVETIME,
|
||
LASTCALLTIME = o.LASTCALLTIME,
|
||
LastTime = o.LastTime.HasValue ? (o.LastTime > o.CTIME ? o.LastTime : o.CTIME) : null,
|
||
IsFx = o.IsFx
|
||
};
|
||
if (pager.order == "desc")
|
||
{
|
||
if (pager.sort == "recyleTime")
|
||
{
|
||
obj = obj.OrderByDescending(p => p.LastTime);
|
||
}
|
||
else
|
||
{
|
||
obj = obj.OrderByDescending(p => p.CTIME);
|
||
}
|
||
}
|
||
else if (pager.order == "asc")
|
||
{
|
||
if (pager.sort == "recyleTime")
|
||
{
|
||
obj = obj.OrderBy(p => p.LastTime);
|
||
}
|
||
else
|
||
{
|
||
obj = obj.OrderBy(p => p.CTIME);
|
||
}
|
||
}
|
||
else
|
||
obj = obj.OrderByDescending(p => p.CTIME);
|
||
PagerUtil.SetPager<CSVR_FAVORITECUSTOMER_extend>(ref obj, ref pager);
|
||
return obj.ToList();
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 获取收藏数量
|
||
public int GetCount(decimal userId, string roleCodes)
|
||
{
|
||
var count = 0;
|
||
var countOrder = 0;
|
||
var countAdv = 0;
|
||
|
||
using (var db = new crmContext())
|
||
{
|
||
//所有收藏客户
|
||
var query = from a in db.CSVR_FAVORITECUSTOMER
|
||
where a.SALESID == userId
|
||
select a;
|
||
|
||
if (roleCodes.Contains("GJSSJKF"))
|
||
{
|
||
//升级手
|
||
//收藏擒龙版升级客户
|
||
var arr = new List<decimal> { 100800013, 100800014, 100800016 };
|
||
var arr2 = new List<decimal> { 100912, 100913 };
|
||
var queryData = from a in db.CSVR_FAVORITECUSTOMER
|
||
join b in db.WX_SZZYORDER on a.RESID equals b.RESID
|
||
join c in db.WX_SZZYSUBPRODUCT on b.SUBPRODUCTID equals c.SUBPRODUCTID
|
||
where (arr.Contains(c.MIDPRODUCTID) || arr2.Contains(c.SUBPRODUCTID)) && a.SALESID == userId
|
||
select a;
|
||
countAdv = queryData.Count();
|
||
}
|
||
else
|
||
{
|
||
//除升级手外需要减掉成交客户数
|
||
//所有成交客户数
|
||
var queryOrde = from a in db.CSVR_FAVORITECUSTOMER
|
||
join b in db.WX_SZZYORDER on a.RESID equals b.RESID
|
||
where b.ISOPEN == 1 && a.SALESID == userId
|
||
select a;
|
||
|
||
countOrder = queryOrde.Count();
|
||
}
|
||
count = query.Count() - countOrder - countAdv;
|
||
}
|
||
|
||
return count;
|
||
}
|
||
#endregion
|
||
|
||
#region 获取单个
|
||
public CSVR_FAVORITECUSTOMER_extend GetModel_FavoriteCustomer(decimal id)
|
||
{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
var queryData = db.CSVR_FAVORITECUSTOMER.AsQueryable();
|
||
return (from a in queryData
|
||
join b in db.RES_CUSTOMERDETAIL on a.RESID equals b.RESID into temp
|
||
from b in temp.DefaultIfEmpty()
|
||
select new CSVR_FAVORITECUSTOMER_extend()
|
||
{
|
||
Name = b.CNAME,
|
||
CTIME = a.CTIME,
|
||
MEMO = a.MEMO,
|
||
PKID = a.PKID,
|
||
RESID = a.RESID,
|
||
PARAKEY = a.PARAKEY,
|
||
SALESID = a.SALESID
|
||
|
||
}
|
||
).FirstOrDefault(m => m.PKID == id);
|
||
|
||
|
||
}
|
||
}
|
||
|
||
public CSVR_FAVORITECUSTOMER_extend GetModel_FavoriteCustomer(string resid, decimal? userId)
|
||
{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
var queryData = db.CSVR_FAVORITECUSTOMER.AsQueryable();
|
||
if (!string.IsNullOrEmpty(resid))
|
||
{
|
||
queryData = queryData.Where(p => p.RESID == resid);
|
||
}
|
||
if (userId.HasValue)
|
||
{
|
||
queryData = queryData.Where(p => p.SALESID == userId.Value);
|
||
}
|
||
return (from a in queryData
|
||
join b in db.RES_CUSTOMERDETAIL on a.RESID equals b.RESID into temp
|
||
from b in temp.DefaultIfEmpty()
|
||
select new CSVR_FAVORITECUSTOMER_extend()
|
||
{
|
||
Name = b.CNAME,
|
||
CTIME = a.CTIME,
|
||
MEMO = a.MEMO,
|
||
PKID = a.PKID,
|
||
RESID = a.RESID,
|
||
PARAKEY = a.PARAKEY,
|
||
SALESID = a.SALESID
|
||
|
||
}).FirstOrDefault();
|
||
|
||
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 编辑
|
||
public bool Update(ref ValidationErrors errors, CSVR_FAVORITECUSTOMER model, decimal eid, decimal userId)
|
||
{
|
||
try
|
||
{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
var entry = db.CSVR_FAVORITECUSTOMER.FirstOrDefault(m => m.PKID == model.PKID);
|
||
if (entry == null)
|
||
return false;
|
||
entry.PARAKEY = model.PARAKEY;
|
||
entry.MEMO = model.MEMO;
|
||
|
||
var customerDetial = db.RES_CUSTOMERDETAIL.FirstOrDefault(p => p.RESID == entry.RESID);
|
||
|
||
var favCustomerHis = new CSVR_FAVORITECUSTOMER_HIS()
|
||
{
|
||
PKID = new SEQUENCES_BL().Seq_base_get(WX.CRM.Model.Enum.PKIDType.LargeTable),
|
||
SALESID = entry.SALESID,
|
||
RESID = entry.RESID,
|
||
PARAKEY = entry.PARAKEY,
|
||
MEMO = entry.MEMO,
|
||
CTIME = entry.CTIME,
|
||
REMARK = eid.ToString() + "修改收藏客户" + entry.RESID,
|
||
OPERATOR = userId,
|
||
ACTION = "update",
|
||
ACTIONTIME = DateTime.Now,
|
||
NAME = customerDetial != null ? customerDetial.CNAME : string.Empty
|
||
};
|
||
db.CSVR_FAVORITECUSTOMER_HIS.Add(favCustomerHis);
|
||
|
||
db.SaveChanges();
|
||
return true;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
errors.Add(ex.Message);
|
||
LogHelper.Error(ex.ToString());
|
||
return false;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 删除
|
||
|
||
/// <summary>
|
||
/// 删除数据
|
||
/// </summary>
|
||
/// <param name="id"></param>
|
||
/// <returns></returns>
|
||
public bool Delete(ref ValidationErrors errors, decimal id, decimal eid, decimal userId)
|
||
{
|
||
try
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var userInfo = db.CSVR_FAVORITECUSTOMER.FirstOrDefault(m => m.PKID == id);
|
||
if (userInfo != null)
|
||
{
|
||
//获取收藏客户列表
|
||
var favList = db.CSVR_FAVORITECUSTOMER.Where(p => p.RESID == userInfo.RESID);
|
||
//如果收藏客户只有最后一个
|
||
//if (favList.Count() == 1)
|
||
//{
|
||
var favModel = favList.First();
|
||
var existsOrder = db.WX_SZZYORDER.Any(p => p.RESID == userInfo.RESID);
|
||
//var existsDistribute = db.RES_DISTRIBUTE_DETAIL.Any(p => p.RESID == userInfo.RESID);
|
||
var existsDistribute = db.RES_MYALLOCATERES.Any(p => p.RESID == userInfo.RESID);
|
||
if (!(existsOrder || existsDistribute))
|
||
{
|
||
//如果是订单用户则不需要写入到共享池
|
||
//写到共享池
|
||
if (!db.RES_SHAREDPOOL.Any(p => p.RESID == favModel.RESID))
|
||
{
|
||
db.RES_SHAREDPOOL.Add(new RES_SHAREDPOOL() { RESID = favModel.RESID, TYPE = 4, CTIME = DateTime.Now, REMARK = "放弃客户时写入" });
|
||
db.RES_SHAREDPOOL_HIS.Add(new RES_SHAREDPOOL_HIS() { PKID = new SEQUENCES_BL().Seq_base_get(), RESID = favModel.RESID, SALESID = favModel.SALESID, TYPE = 4, CTIME = DateTime.Now, REMARK = "删除收藏客户时写入" });
|
||
}
|
||
}
|
||
var arr = new List<decimal> { 100800013, 100800015, 100800016, 100800201 };
|
||
var arr2 = new List<decimal> { 100800011, 100800101 };
|
||
var hasUporder = from a in db.WX_SZZYORDER
|
||
join b in db.WX_SZZYSUBPRODUCT on a.SUBPRODUCTID equals b.SUBPRODUCTID
|
||
where a.RESID == userInfo.RESID && arr.Contains(b.MIDPRODUCTID)
|
||
select a;
|
||
|
||
var hasQlOrder = from a in db.WX_SZZYORDER
|
||
join b in db.WX_SZZYSUBPRODUCT on a.SUBPRODUCTID equals b.SUBPRODUCTID
|
||
where a.RESID == userInfo.RESID && arr2.Contains(b.MIDPRODUCTID) && a.ISOPEN == 1
|
||
orderby a.OTIME descending
|
||
select a;
|
||
|
||
var hasTkOrder = from a in db.WX_SZZYORDER where a.RESID == userInfo.RESID && a.ORDERSTATUS == "90" select a;
|
||
//有擒龙版订单,没有升级客户,开通时间大于3个月放入高级共享池,并去除退款客户
|
||
if (!hasUporder.Any() && hasQlOrder.Any() && !hasTkOrder.Any())
|
||
{
|
||
var qlOrde = hasQlOrder.First();
|
||
var otime = qlOrde.OTIME.Value.AddMonths(3);
|
||
|
||
if (otime < DateTime.Now)
|
||
{
|
||
db.RES_SENIORSHAREDPOOL.Add(new RES_SENIORSHAREDPOOL() { RESID = favModel.RESID, TYPE = 1, CTIME = DateTime.Now, REMARK = "放弃客户时写入", COMPANYCODE = "" });
|
||
db.RES_SENIORSHAREDPOOL_HIS.Add(new RES_SENIORSHAREDPOOL_HIS() { PKID = new SEQUENCES_BL().Seq_base_get(), RESID = favModel.RESID, TYPE = 1, CTIME = DateTime.Now, REMARK = "删除收藏客户时写入", COMPANYCODE = "" });
|
||
}
|
||
}
|
||
//}
|
||
//删除共享客户
|
||
var sharedCustomerList = db.RES_SHAREDCUSTOMER.Where(p => p.RESID == userInfo.RESID);
|
||
db.RES_SHAREDCUSTOMER.RemoveRange(sharedCustomerList);
|
||
|
||
//写收藏日志
|
||
var customerDetial = db.RES_CUSTOMERDETAIL.FirstOrDefault(p => p.RESID == userInfo.RESID);
|
||
db.CSVR_FAVORITECUSTOMER_HIS.Add(new CSVR_FAVORITECUSTOMER_HIS()
|
||
{
|
||
PKID = new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable),
|
||
SALESID = userInfo.SALESID,
|
||
RESID = userInfo.RESID,
|
||
PARAKEY = userInfo.PARAKEY,
|
||
MEMO = userInfo.MEMO,
|
||
CTIME = userInfo.CTIME,
|
||
REMARK = eid.ToString() + "放弃客户时删除收藏客户" + userInfo.RESID,
|
||
OPERATOR = userId,
|
||
ACTION = "delete",
|
||
ACTIONTIME = DateTime.Now,
|
||
NAME = customerDetial != null ? customerDetial.CNAME : string.Empty
|
||
});
|
||
//删除收藏客户
|
||
db.CSVR_FAVORITECUSTOMER.Remove(userInfo);
|
||
|
||
//如果原来分配表有分配,写回原来的关系
|
||
decimal? oldeid = null;
|
||
var myRes = db.RES_MYALLOCATERES.FirstOrDefault(p => p.RESID == userInfo.RESID);
|
||
if (myRes != null)
|
||
{
|
||
oldeid = db.BAS_INNERUSER.FirstOrDefault(p => p.PKID == myRes.INNERUSERID).EID;
|
||
}
|
||
|
||
var faveid = db.BAS_INNERUSER.FirstOrDefault(p => p.PKID == userInfo.SALESID).EID;
|
||
|
||
if (oldeid.HasValue)
|
||
{
|
||
//写入关系操作表
|
||
if (oldeid.Value != faveid)
|
||
{
|
||
db.RES_MYALLOCATERES_ACT.Add(new RES_MYALLOCATERES_ACT(new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable), userInfo.RESID, faveid, 0, "update", oldeid.Value));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//如果已经是订单客户,则不删除关系
|
||
if (!existsOrder)
|
||
{
|
||
db.RES_MYALLOCATERES_ACT.Add(new RES_MYALLOCATERES_ACT(new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable), userInfo.RESID, 0, 0, "delete", faveid));
|
||
}
|
||
}
|
||
}
|
||
|
||
return db.SaveChanges().GetResult();
|
||
}
|
||
|
||
}
|
||
catch (Exception ex) { LogHelper.Error(ex.ToString()); errors.Add(ex.Message); return false; }
|
||
}
|
||
|
||
public bool GiveUp(ref ValidationErrors errors, decimal id, decimal eid, decimal userId)
|
||
{
|
||
try
|
||
{
|
||
using (var db = new crmContext())
|
||
{
|
||
var userInfo = db.CSVR_FAVORITECUSTOMER.FirstOrDefault(m => m.PKID == id);
|
||
if (userInfo != null)
|
||
{
|
||
//获取收藏客户列表
|
||
var favList = db.CSVR_FAVORITECUSTOMER.Where(p => p.RESID == userInfo.RESID);
|
||
//如果收藏客户只有最后一个
|
||
if (favList.Count() == 1)
|
||
{
|
||
var favModel = favList.First();
|
||
var existsOrder = db.WX_SZZYORDER.Any(p => p.RESID == userInfo.RESID);
|
||
//var existsDistribute = db.RES_DISTRIBUTE_DETAIL.Any(p => p.RESID == userInfo.RESID);
|
||
var existsDistribute = db.RES_MYALLOCATERES.Any(p => p.RESID == userInfo.RESID);
|
||
if (!(existsOrder || existsDistribute))
|
||
{
|
||
//如果是订单用户则不需要写入到共享池
|
||
//写到共享池
|
||
if (!db.RES_SHAREDPOOL.Any(p => p.RESID == favModel.RESID))
|
||
{
|
||
db.RES_SHAREDPOOL.Add(new RES_SHAREDPOOL() { RESID = favModel.RESID, TYPE = 4, CTIME = DateTime.Now, REMARK = "放弃客户时写入" });
|
||
db.RES_SHAREDPOOL_HIS.Add(new RES_SHAREDPOOL_HIS() { PKID = new SEQUENCES_BL().Seq_base_get(), RESID = favModel.RESID, SALESID = favModel.SALESID, TYPE = 4, CTIME = DateTime.Now, REMARK = "删除收藏客户时写入" });
|
||
}
|
||
}
|
||
var arr = new List<decimal> { 100800013, 100800015, 100800016 };
|
||
var hasUporder = from a in db.WX_SZZYORDER
|
||
join b in db.WX_SZZYSUBPRODUCT on a.SUBPRODUCTID equals b.SUBPRODUCTID
|
||
where a.RESID == userInfo.RESID && arr.Contains(b.MIDPRODUCTID)
|
||
select a;
|
||
|
||
var hasQlOrder = from a in db.WX_SZZYORDER
|
||
join b in db.WX_SZZYSUBPRODUCT on a.SUBPRODUCTID equals b.SUBPRODUCTID
|
||
where a.RESID == userInfo.RESID && b.MIDPRODUCTID == 100800011 && a.ISOPEN == 1
|
||
orderby a.OTIME descending
|
||
select a;
|
||
|
||
var hasTkOrder = from a in db.WX_SZZYORDER where a.RESID == userInfo.RESID && a.ORDERSTATUS == "90" select a;
|
||
//有擒龙版订单,没有升级客户,开通时间大于3个月放入高级共享池,并去除退款客户
|
||
if (!hasUporder.Any() && hasQlOrder.Any() && !hasTkOrder.Any())
|
||
{
|
||
var qlOrde = hasQlOrder.First();
|
||
var otime = qlOrde.OTIME.Value.AddMonths(3);
|
||
|
||
if (otime < DateTime.Now)
|
||
{
|
||
db.RES_SENIORSHAREDPOOL.Add(new RES_SENIORSHAREDPOOL() { RESID = favModel.RESID, TYPE = 1, CTIME = DateTime.Now, REMARK = "放弃客户时写入", COMPANYCODE = "" });
|
||
db.RES_SENIORSHAREDPOOL_HIS.Add(new RES_SENIORSHAREDPOOL_HIS() { PKID = new SEQUENCES_BL().Seq_base_get(), RESID = favModel.RESID, TYPE = 1, CTIME = DateTime.Now, REMARK = "删除收藏客户时写入", COMPANYCODE = "" });
|
||
}
|
||
}
|
||
}
|
||
//删除共享客户
|
||
var sharedCustomerList = db.RES_SHAREDCUSTOMER.Where(p => p.RESID == userInfo.RESID);
|
||
db.RES_SHAREDCUSTOMER.RemoveRange(sharedCustomerList);
|
||
|
||
//写收藏日志
|
||
var customerDetial = db.RES_CUSTOMERDETAIL.FirstOrDefault(p => p.RESID == userInfo.RESID);
|
||
db.CSVR_FAVORITECUSTOMER_HIS.Add(new CSVR_FAVORITECUSTOMER_HIS()
|
||
{
|
||
PKID = new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable),
|
||
SALESID = userInfo.SALESID,
|
||
RESID = userInfo.RESID,
|
||
PARAKEY = userInfo.PARAKEY,
|
||
MEMO = userInfo.MEMO,
|
||
CTIME = userInfo.CTIME,
|
||
REMARK = eid.ToString() + "放弃客户时删除收藏客户" + userInfo.RESID,
|
||
OPERATOR = userId,
|
||
ACTION = "delete",
|
||
ACTIONTIME = DateTime.Now,
|
||
NAME = customerDetial != null ? customerDetial.CNAME : string.Empty
|
||
});
|
||
//删除收藏客户
|
||
db.CSVR_FAVORITECUSTOMER.Remove(userInfo);
|
||
|
||
//放弃客户时,删除归属
|
||
var resInfo = db.RES_MYALLOCATERES.FirstOrDefault(p => p.RESID == userInfo.RESID);
|
||
if (resInfo != null)
|
||
{
|
||
db.RES_MYALLOCATERES.Remove(resInfo);
|
||
}
|
||
|
||
//写入关系操作表
|
||
var oldeid = db.BAS_INNERUSER.FirstOrDefault(p => p.PKID == userInfo.SALESID).EID;
|
||
db.RES_MYALLOCATERES_ACT.Add(new RES_MYALLOCATERES_ACT(new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable), userInfo.RESID, 0, 0, "delete", oldeid));
|
||
|
||
}
|
||
|
||
return db.SaveChanges().GetResult();
|
||
}
|
||
|
||
}
|
||
catch (Exception ex) { LogHelper.Error(ex.ToString()); errors.Add(ex.Message); return false; }
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region
|
||
public void Change(string id, decimal inneruserId, decimal eid, decimal aeid, decimal userId, string paraKey)
|
||
{
|
||
try
|
||
{
|
||
var arr = id.Split(',').Select(decimal.Parse);
|
||
|
||
var allocteUsers = new List<RES_ALLCOTE_USER>();
|
||
var pici = new SEQUENCES_BL().Seq_base_get();
|
||
|
||
using (var db = new crmContext())
|
||
{
|
||
foreach (var item in arr)
|
||
{
|
||
var model = db.CSVR_FAVORITECUSTOMER.FirstOrDefault(p => p.PKID == item);
|
||
var oldUser = db.BAS_INNERUSER.FirstOrDefault(p => p.PKID == model.SALESID);
|
||
var resModel = db.RES_MYALLOCATERES.FirstOrDefault(p => p.RESID == model.RESID && p.INNERUSERID == model.SALESID);
|
||
model.SALESID = inneruserId;
|
||
if (!string.IsNullOrEmpty(paraKey))
|
||
{
|
||
model.PARAKEY = paraKey;
|
||
}
|
||
|
||
//写收藏日志
|
||
var customerDetial = db.RES_CUSTOMERDETAIL.FirstOrDefault(p => p.RESID == model.RESID);
|
||
db.CSVR_FAVORITECUSTOMER_HIS.Add(new CSVR_FAVORITECUSTOMER_HIS()
|
||
{
|
||
PKID = new SEQUENCES_BL().Seq_base_get(Model.Enum.PKIDType.LargeTable),
|
||
SALESID = model.SALESID,
|
||
RESID = model.RESID,
|
||
PARAKEY = model.PARAKEY,
|
||
MEMO = model.MEMO,
|
||
CTIME = model.CTIME,
|
||
REMARK = aeid.ToString() + "移动" + (oldUser != null ? oldUser.EID.ToString() : "未知") + "的收藏客户" + model.RESID + "到" + eid.ToString(),
|
||
OPERATOR = userId,
|
||
ACTION = "change",
|
||
ACTIONTIME = DateTime.Now,
|
||
NAME = customerDetial != null ? customerDetial.CNAME : string.Empty
|
||
});
|
||
|
||
var info = new RES_ALLCOTE_USER()
|
||
{
|
||
ID = new SEQUENCES_BL().Seq_base_get(),
|
||
INNERUSERID = inneruserId,
|
||
EID = eid,
|
||
NUM = 1,
|
||
CTIME = DateTime.Now,
|
||
PICI = pici,
|
||
RESID = model.RESID,
|
||
TYPE = 1
|
||
};
|
||
if (resModel != null)
|
||
{
|
||
info.SGID = resModel.SGID;
|
||
}
|
||
allocteUsers.Add(info);
|
||
}
|
||
|
||
db.RES_ALLCOTE_USER.AddRange(allocteUsers);
|
||
|
||
db.SaveChanges();
|
||
}
|
||
|
||
_resMyAllocateRes.ExeSeniorDistributeByResId(userId, pici, "移动收藏分配");
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
throw ex;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 检测是否能外呼电话
|
||
/// <summary>
|
||
/// 检测是否能外呼电话(收藏客户只有收藏的员工才能外呼,特定角色、共享客户除外)
|
||
/// 如果返回的结果集
|
||
/// </summary>
|
||
/// <param name="resId"></param>
|
||
/// <param name="userId"></param>
|
||
/// <returns></returns>
|
||
public List<CSVR_FAVORITECUSTOMER_Call> FavCallList(string resId, decimal userId)
|
||
{
|
||
var ds = _sharedPool_dal.FavCallList(resId, userId);
|
||
var data = ds.Tables[0].ToList<CSVR_FAVORITECUSTOMER_Call>();
|
||
|
||
return data;
|
||
}
|
||
#endregion
|
||
|
||
/// <summary>
|
||
/// 获取客户ID的收藏人 和 归属人
|
||
/// </summary>
|
||
/// <param name="resid"></param>
|
||
/// <returns></returns>
|
||
public List<CSVR_FAVORITECUSTOMER_AndMyRes> GetFavAndMyResList(string resid)
|
||
{
|
||
using (var db = new WX.CRM.Model.Entity.crmContext())
|
||
{
|
||
List<CSVR_FAVORITECUSTOMER_AndMyRes> list = db.RES_CUSTOMER.Where(m => m.CUSTOMERID == resid).Select(m => new CSVR_FAVORITECUSTOMER_AndMyRes() { resid = m.RESID }).ToList();
|
||
var ds = list.Select(m => m.resid);
|
||
var myreslist = db.RES_MYALLOCATERES.Where(m => ds.Contains(m.RESID)).ToList();
|
||
var csvlist = db.CSVR_FAVORITECUSTOMER.Where(m => ds.Contains(m.RESID)).ToList();
|
||
|
||
foreach (var item in list)
|
||
{
|
||
var my = myreslist.FirstOrDefault(m => m.RESID == item.resid);
|
||
if (my != null)
|
||
{
|
||
item.myresuserid = my.INNERUSERID;
|
||
}
|
||
var fav = csvlist.Where(m => m.RESID == item.resid).ToList();
|
||
if (fav.Count > 0)
|
||
{
|
||
item.favuserid = fav.Select(m => m.SALESID).ToArray();
|
||
}
|
||
|
||
}
|
||
return list;
|
||
}
|
||
}
|
||
}
|
||
}
|