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