293 lines
13 KiB
C#
293 lines
13 KiB
C#
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 通过用户获取对应的渠道ID
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public Dictionary<decimal, int> GetChannelByUser(List<decimal> userId)
|
|
{
|
|
var channel = Utility.GetSettingOrNullByKey("Channel");
|
|
Dictionary<decimal, int> res = new Dictionary<decimal, int>();
|
|
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<BAS_BUSINESSLINES> 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<decimal> ALLdeptIDS = new List<decimal>();
|
|
List<decimal> ALLgidS = new List<decimal>();
|
|
//向下遍历
|
|
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<BAS_BUSINESSLINES>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据业务权限获取业务线
|
|
/// </summary>
|
|
/// <param name="userId"></param>
|
|
/// <returns></returns>
|
|
public List<BAS_BUSINESSLINES> GetBusinessLineByRoot(decimal userId)
|
|
{
|
|
List<BAS_BUSINESSLINES> res = new List<BAS_BUSINESSLINES>();
|
|
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<decimal> ALLdeptIDS = new List<decimal>();
|
|
List<decimal> ALLgidS = new List<decimal>();
|
|
//向下遍历
|
|
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<BAS_BUSINESSLINES> GetBusinessLineByAnyUser(IList<decimal> deptIds)
|
|
{
|
|
var res = new List<BAS_BUSINESSLINES>();
|
|
var cacheBl = new CACHE_BL();
|
|
UserServices userservices = new UserServices(cacheBl);
|
|
List<decimal> parentDeptIds = new List<decimal>();
|
|
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<string> GetDeptCodeMapByBusinessId(decimal? businessId)
|
|
{
|
|
List<string> res = new List<string>();
|
|
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<DeptBussinessDto> 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<decimal> secondDept = new List<decimal>();
|
|
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<BAS_SALESDEPARTMENT> allDeptList, decimal? parentIds, List<decimal> 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<string> During { get; set; }
|
|
}
|
|
} |