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(decimal? 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 (deptId.HasValue) { GetAllDeptIDOrGid(salesDeptList, groupList, deptId.Value, ref deptIDS, ref gidS);//获取所有的子部门和销售组 } //var query = from d in salesDeptList // 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, // DeptId = d.SALEDEPTID, // GroupId = g.GID // }; 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 }; if (deptId.HasValue) { query = query.Where(p => deptIDS.Contains(p.DeptId.Value) || (p.GroupId != null && gidS.Contains(p.GroupId.Value))); } if (!string.IsNullOrEmpty(groupId)) { var gids = groupId.Split(','); var mygids = gids.Select(m => Convert.ToDecimal(m)).ToArray(); 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).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 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(); } } public interface IUserServices { List GetUserComBo(decimal? companyId, decimal? deptId, string groupId, decimal? userId); List GetUserComBoSSO(decimal? deptId, string groupId, decimal? userId); void GetAllDeptIDOrGidByDeptId(decimal deptId, ref List deptIDS, ref List gidS); } }