ComplianceServer/oldcode/BLL/Csvr/CSVR_FAVORITECUSTOMER_BL.cs

854 lines
40 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 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;
}
}
}
}