using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WX.CRM.BLL.Util; using WX.CRM.Common; using WX.CRM.IBLL.Util; using WX.CRM.Model.Entity; namespace WX.CRM.BLL.Application.UserComBox { public class UserServices : IUserServices { private ICACHE_Q _cache; public UserServices(ICACHE_Q cache = null) { this._cache = cache; if (_cache == null) _cache = new CACHE_BL(); } /// /// 对接SSO后拿取的数据 /// /// /// /// /// /// public List GetUserComBoSSO(string deptId, string groupId, decimal? userId) { var salesDeptList = _cache.GetList_SalesDepartMent(); var groupList = _cache.GetGroupList(); var userGroup = _cache.GetList_InnerUserGroup(); var users = _cache.GetUserList(); List deptIDS = new List(); List gidS = new List(); if (!string.IsNullOrWhiteSpace(deptId)) { var deptids = deptId.Split(','); foreach(var id in deptids) { GetAllDeptIDOrGid(salesDeptList, groupList,Convert.ToDecimal(id), ref deptIDS, ref gidS);//获取所有的子部门和销售组 } deptIDS = deptIDS.Distinct().ToList(); gidS = gidS.Distinct().ToList(); } var query = from a in users join m in userGroup on a.PKID equals m.INNERUSERID select new UserComBoDto() { UserId = a.PKID, Eid = a.EID, UName = a.UNAME, IsDimiss = a.ISDISMISS, DeptId = m.DEPTID, GroupId = m.GID }; List mygids = new List(); if (!string.IsNullOrEmpty(groupId)) { var gids = groupId.Split(','); mygids = gids.Select(m => Convert.ToDecimal(m)).ToList(); } if (!string.IsNullOrWhiteSpace(deptId)) { gidS.AddRange(mygids); query = query.Where(p => deptIDS.Contains(p.DeptId.Value) || (p.GroupId != null && gidS.Contains(p.GroupId.Value))); } if (!string.IsNullOrEmpty(groupId)) { query = query.Where(p => p.GroupId != null && mygids.Contains(p.GroupId.Value)); } if (userId.HasValue) { query = query.Where(p => p.UserId == userId.Value); } return query.ToList(); } public void GetAllDeptIDOrGidByDeptStr(string deptstr, ref List ALLdeptIDS, ref List ALLgidS) { var depts = OperationUtil.ConvertToDecimal(deptstr.Split(',')); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } ALLdeptIDS = ALLdeptIDS.Distinct().ToList(); ALLgidS = ALLgidS.Distinct().ToList(); } public void GetAllDeptIDOrGidByDeptId(decimal deptId, ref List deptIDS, ref List gidS) { var salesDeptList = _cache.GetList_SalesDepartMent(); var groupList = _cache.GetGroupList(); var userGroup = _cache.GetList_InnerUserGroup(); var users = _cache.GetUserList(); GetAllDeptIDOrGid(salesDeptList, groupList, deptId, ref deptIDS, ref gidS);//获取所有的子部门和销售组 } private void GetAllDeptIDOrGid(List salesDeptList, List groupList, decimal deptId, ref List deptIDS, ref List gidS) { var dept = salesDeptList.FirstOrDefault(m => m.SALEDEPTID == deptId); if (dept != null) { deptIDS.Add(deptId);//本ID也是需要加入 List list = salesDeptList.Where(n => n.DEPARTMENT_PARENTID == dept.DEPARTMENT_ID && n.IS_DELETED == 0 && n.SALEDEPTID != dept.SALEDEPTID).OrderBy(m => m.DEPARTMENT_SORT).ToList(); foreach (var item in list) { deptIDS.Add(item.SALEDEPTID); GetAllDeptIDOrGid(salesDeptList, groupList, item.SALEDEPTID, ref deptIDS, ref gidS); } } gidS.AddRange(groupList.Where(m => m.SALEDEPTID == deptId).Select(m => m.GID)); gidS.AddRange(groupList.Where(m => m.GID == deptId).Select(m => m.GID)); } public List GetAllUserByDeptOrGroup(List deptIdList,List groupIdList) { var ALLdeptIDS = new List(); var ALLgidS = new List(); foreach (var item in deptIdList) { List deptIDS = new List(); List gidS = new List(); GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } ALLgidS.AddRange(groupIdList); ALLdeptIDS = ALLdeptIDS.Distinct().ToList(); ALLgidS = ALLgidS.Distinct().ToList(); var userGroup = _cache.GetList_InnerUserGroup(); var users = _cache.GetUserList().Where(n=>n.ISDISMISS == 0).ToList(); var deptUser = userGroup.Where(n => n.DEPTID.HasValue && ALLdeptIDS.Contains(n.DEPTID.Value)).Select(n=>n.INNERUSERID).ToList(); var groupUser = userGroup.Where(n => n.GID.HasValue && ALLgidS.Contains(n.GID.Value)).Select(n => n.INNERUSERID).ToList(); deptUser.AddRange(groupUser); deptUser = deptUser.Distinct().ToList(); return users.Where(n => deptUser.Contains(n.PKID)).ToList(); } public List GetUserComBo(decimal? companyId, decimal? deptId, string groupId, decimal? userId) { var companyList = _cache.GetList_innerCompany(); var salesDeptList = _cache.GetList_SalesDepartMent(); var groupList = _cache.GetGroupList(); var userGroup = _cache.GetList_InnerUserGroup(); var users = _cache.GetUserList(); var query = from c in companyList join d in salesDeptList on c.COMPANYID equals d.COMPANYID join g in groupList on d.SALEDEPTID equals g.SALEDEPTID join ug in userGroup on g.GID equals ug.GID join u in users on ug.INNERUSERID equals u.PKID select new UserComBoDto() { UserId = u.PKID, Eid = u.EID, UName = u.UNAME, IsDimiss = u.ISDISMISS, CompanyId = c.COMPANYID, DeptId = d.SALEDEPTID, GroupId = g.GID }; if (companyId.HasValue) { query = query.Where(p => p.CompanyId == companyId.Value); } if (deptId.HasValue) { query = query.Where(p => p.DeptId == deptId.Value); } if (!string.IsNullOrEmpty(groupId)) { var gids = groupId.Split(','); var mygids = gids.Select(m => Convert.ToDecimal(m)).ToArray(); query = query.Where(p => mygids.Contains(p.GroupId.Value)); } if (userId.HasValue) { query = query.Where(p => p.UserId == userId.Value); } return query.ToList(); } /// /// 获取上级部门id /// /// /// public List GetParentDeptId(decimal? deptId) { List res = new List { }; var salesDeptList = _cache.GetList_SalesDepartMent(); var dept = salesDeptList.FirstOrDefault(b => b.SALEDEPTID == deptId); BuildParentDept(dept, salesDeptList, res); return res; } public void BuildParentDept(BAS_SALESDEPARTMENT dept, List deptList, List res) { if (dept != null) { res.Add(dept.SALEDEPTID); if (dept.DEPARTMENT_PARENTID.HasValue) { var parDept = deptList.FirstOrDefault(n => n.DEPARTMENT_ID == dept.DEPARTMENT_PARENTID); BuildParentDept(parDept, deptList, res); } } } } public interface IUserServices { List GetUserComBo(decimal? companyId, decimal? deptId, string groupId, decimal? userId); List GetUserComBoSSO(string deptId, string groupId, decimal? userId); void GetAllDeptIDOrGidByDeptId(decimal deptId, ref List deptIDS, ref List gidS); List GetParentDeptId(decimal? deptId); } }