using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Caching;
using WX.CRM.BLL.Application.UserComBox;
using WX.CRM.BLL.Util;
using WX.CRM.Common;
using WX.CRM.Model.Entity;
namespace WX.CRM.BLL.Base
{
public class BAS_BUSSINESSLINE_BL : IBAS_BUSINESSLINE_Q
{
private WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext();
private BAS_GROUPLEADER_BL leader_bl = new BAS_GROUPLEADER_BL();
public void InsertBusCustomerMap(string resId, int? channel, string customerfrom)
{
var busLine = db.BAS_BUSINESSCHANNEL.FirstOrDefault(n => n.MINCHANNEL <= channel && n.MAXCHANNEL >= channel);
if (busLine == null)
{
LogHelper.Info($"【{resId}_{channel}_{customerfrom}】找不到对应的业务线");
return;
}
var existModel = db.BAS_BUSINESSCUSTOMER.FirstOrDefault(n => n.RESID == resId && n.BUSINESSID == busLine.BUSINESSID);
if (existModel != null)
{
return;
}
BAS_BUSINESSCUSTOMER customer = new BAS_BUSINESSCUSTOMER
{
ID = new SEQUENCES_BL().Seq_base_get(),
CTIME = DateTime.Now,
CUSTOMERFROM = customerfrom,
RESID = resId,
BUSINESSID = busLine.BUSINESSID
};
db.BAS_BUSINESSCUSTOMER.Add(customer);
db.SaveChanges();
}
///
/// 通过用户获取对应的渠道ID
///
///
public Dictionary GetChannelByUser(List userId)
{
var channel = Utility.GetSettingOrNullByKey("Channel");
Dictionary res = new Dictionary();
var cacheBl = new CACHE_BL();
var userGroup = cacheBl.GetList_InnerUserGroup();
var lines = db.BAS_BUSINESSLINES.OrderBy(m => m.CTIME).ToList(); // cacheBl.GetList_BussinessLine();
var lineDept = db.BAS_BUSINESSDEPARTMENT.OrderBy(m => m.CTIME).ToList(); //cacheBl.GetList_BussinessDepartMent();
foreach (var user in userId)
{
//获取用户所在的部门
var dept = userGroup.FirstOrDefault(n => user == n.INNERUSERID);
UserServices userservices = new UserServices(cacheBl);
if (dept != null)
{
var deptList = userservices.GetParentDeptId(dept.DEPTID);
var bussinessId = db.BAS_BUSINESSDEPARTMENT.FirstOrDefault(n => deptList.Contains(n.DEPTID))?.BUSINESSID;
var line = db.BAS_BUSINESSLINES.FirstOrDefault(n => n.BUSINESSID == bussinessId);
var userChannel = line == null ? Convert.ToInt32(channel) : line.CHANNEL;
res.Add(user, userChannel);
}
else
{
res.Add(user, Convert.ToInt32(channel));
}
}
return res;
}
public BAS_BUSINESSLINES GetBusineeLine(decimal userId)
{
var cacheBl = new CACHE_BL();
var userGroup = cacheBl.GetList_InnerUserGroup();
var lines = cacheBl.GetList_BussinessLine();
var lineDept = cacheBl.GetList_BussinessDepartMent();
var dept = userGroup.FirstOrDefault(n => userId == n.INNERUSERID);
UserServices userservices = new UserServices(cacheBl);
if (dept != null)
{
var deptList = userservices.GetParentDeptId(dept.DEPTID);
var bussinessId = db.BAS_BUSINESSDEPARTMENT.FirstOrDefault(n => deptList.Contains(n.DEPTID))?.BUSINESSID;
var line = db.BAS_BUSINESSLINES.FirstOrDefault(n => n.BUSINESSID == bussinessId);
return line;
}
return null;
}
public List GetBusineeLineByDeptId(decimal deptId)
{
var cacheBl = new CACHE_BL();
var cachedeptList = cacheBl.GetList_SalesDepartMent();
var dept = cachedeptList.FirstOrDefault(n => n.SALEDEPTID == deptId);
if (dept != null)
{
UserServices userservices = new UserServices(cacheBl);
var deptList = userservices.GetParentDeptId(dept.SALEDEPTID);
List ALLdeptIDS = new List();
List ALLgidS = new List();
//向下遍历
userservices.GetAllDeptIDOrGidByDeptStr(dept.SALEDEPTID.ToString(), ref ALLdeptIDS, ref ALLgidS);
deptList.AddRange(ALLdeptIDS);
var bussinessId = db.BAS_BUSINESSDEPARTMENT.Where(n => deptList.Contains(n.DEPTID)).Select(n => n.BUSINESSID).ToList();
var line = db.BAS_BUSINESSLINES.Where(n => bussinessId.Contains(n.BUSINESSID)).ToList();
return line;
}
return new List();
}
///
/// 根据业务权限获取业务线
///
///
///
public List GetBusinessLineByRoot(decimal userId)
{
List res = new List();
try
{
var cacheBl = new CACHE_BL();
UserServices userservices = new UserServices(cacheBl);
var leadList = leader_bl.GetListGroupLeaderByUserId(userId);
var userGroup = cacheBl.GetList_InnerUserGroup();
var groupList = cacheBl.GetGroupList();
var lines = cacheBl.GetList_BussinessLine();
var lineDept = cacheBl.GetList_BussinessDepartMent();
if (leadList.Select(n => n.INNERGROUPID).Contains(0))
{
return lines;
}
var groupIds = leadList.Where(n => n.TYPE == 0).Select(x => x.INNERGROUPID).ToList();
var depts = groupList.Where(n => groupIds.Contains(n.GID) && n.SALEDEPTID.HasValue)
.Select(n => n.SALEDEPTID.Value).ToList();
var leadDept = leadList.Where(n => n.TYPE == 1).Select(n => n.INNERGROUPID).ToList();
depts.AddRange(leadDept);
var seftdept = userGroup.FirstOrDefault(n => userId == n.INNERUSERID);
if (seftdept != null && seftdept.DEPTID.HasValue)
{
depts.Add(seftdept.DEPTID.Value);
}
depts = depts.Distinct().ToList();
foreach (var item in depts)
{
var deptList = userservices.GetParentDeptId(item);
List ALLdeptIDS = new List();
List ALLgidS = new List();
//向下遍历
userservices.GetAllDeptIDOrGidByDeptStr(item.ToString(), ref ALLdeptIDS, ref ALLgidS);
deptList.AddRange(ALLdeptIDS);
var bussinessId = db.BAS_BUSINESSDEPARTMENT.FirstOrDefault(n => deptList.Contains(n.DEPTID))?.BUSINESSID;
var line = db.BAS_BUSINESSLINES.FirstOrDefault(n => n.BUSINESSID == bussinessId);
res.Add(line);
}
}
catch (Exception ex)
{
LogHelper.Error($"获取事业线失败{ex.Message}");
}
return res.Where(n => n != null).Distinct().ToList();
}
public List GetBusinessLineByAnyUser(IList deptIds)
{
var res = new List();
var cacheBl = new CACHE_BL();
UserServices userservices = new UserServices(cacheBl);
List parentDeptIds = new List();
foreach (var item in deptIds)
{
var deptList = userservices.GetParentDeptId(item);
parentDeptIds.AddRange(deptList); //父级部门
}
if (parentDeptIds.Any())
{
var bussinessId = db.BAS_BUSINESSDEPARTMENT.Where(n => parentDeptIds.Contains(n.DEPTID)).Select(m => m.BUSINESSID);
res = db.BAS_BUSINESSLINES.Where(n => bussinessId.Contains(n.BUSINESSID)).ToList();
}
return res;
}
public List GetDeptCodeMapByBusinessId(decimal? businessId)
{
List res = new List();
var channelDuring = db.BAS_BUSINESSCHANNEL.Where(n => n.BUSINESSID == businessId).ToList();
var defaultchannel = decimal.Parse(Utility.GetSettingOrNullByKey("Channel"));
if (channelDuring.Exists(n => n.MINCHANNEL <= defaultchannel && n.MAXCHANNEL >= defaultchannel))
{
res.Add("-1");
}
var deptCodeList = new CACHE_BL().GetList_SalesDepartMent().Where(n => n.CHANNELDEF.HasValue).ToList();
foreach (var dept in deptCodeList)
{
if (channelDuring.Exists(n => n.MINCHANNEL <= dept.CHANNELDEF && n.MAXCHANNEL >= dept.CHANNELDEF))
{
res.Add(dept.SALEDEPTCODE);
}
}
return res.Distinct().ToList();
}
#region 初始化
public bool BuildDeptBussinessLine(List mainDeptDto)
{
var deptids = mainDeptDto.Select(n => Convert.ToDecimal(n.DeptId)).ToList();
var allDeptList = db.BAS_SALESDEPARTMENT.Where(n => n.IS_DELETED != 1).ToList();
//主部门
var maindeptlist = allDeptList.Where(n => deptids.Contains(n.SALEDEPTID)).ToList();
foreach (var dept in maindeptlist)
{
var model = mainDeptDto.FirstOrDefault(n => n.DeptId == dept.SALEDEPTID);
var line = new BAS_BUSINESSLINES
{
BUSINESSID = model.Business,
BUSINESSNAME = string.IsNullOrWhiteSpace(model.DeptName) ? dept.DEPTNAME : model.DeptName,
CHANNEL = model.Channel,
CTIME = DateTime.Now,
UTIME = DateTime.Now
};
db.BAS_BUSINESSLINES.Add(line);
foreach (var channel in model.During)
{
var channelModel = new BAS_BUSINESSCHANNEL
{
ID = new SEQUENCES_BL().Seq_base_get(),
BUSINESSID = line.BUSINESSID,
MINCHANNEL = Convert.ToInt32(channel.Split('-').FirstOrDefault()),
MAXCHANNEL = Convert.ToInt32(channel.Split('-').LastOrDefault()),
CTIME = DateTime.Now
};
db.BAS_BUSINESSCHANNEL.Add(channelModel);
}
var bussinessDept = new BAS_BUSINESSDEPARTMENT
{
ID = new SEQUENCES_BL().Seq_base_get(),
BUSINESSID = line.BUSINESSID,
DEPTID = dept.SALEDEPTID,
DEPTTYPE = 1,
CTIME = DateTime.Now,
UTIME = DateTime.Now
};
db.BAS_BUSINESSDEPARTMENT.Add(bussinessDept);
/* List secondDept = new List();
GetChildDept(allDeptList, dept.DEPARTMENT_ID, secondDept);
foreach(var saleDeptId in secondDept)
{
var child = new BAS_BUSINESSDEPARTMENT
{
ID = new SEQUENCES_BL().Seq_base_get(),
BUSINESSID = line.BUSINESSID,
DEPTID = saleDeptId,
DEPTTYPE = 2,
CTIME = DateTime.Now,
UTIME = DateTime.Now
};
db.BAS_BUSINESSDEPARTMENT.Add(child);
}*/
}
db.SaveChanges();
return true;
}
private void GetChildDept(List allDeptList, decimal? parentIds, List res)
{
var children = allDeptList.Where(n => n.DEPARTMENT_PARENTID == parentIds).ToList();
res.AddRange(children.Select(n => n.SALEDEPTID));
foreach (var item in children)
{
GetChildDept(allDeptList, item.DEPARTMENT_ID, res);
}
}
#endregion 初始化
}
public class DeptBussinessDto
{
public decimal Business { get; set; }
public decimal DeptId { get; set; }
public string DeptName { get; set; }
public int Channel { get; set; }
public List During { get; set; }
}
}