Files
zszq-trs/YLErpDAL/BLL_System/DepartmentBLL.cs
T
2024-05-09 14:06:26 +08:00

517 lines
17 KiB
C#

namespace BaseOUDAL
{
public class DepartmentBLL
{
//static ErpBaseContext db = new ErpBaseContext();
static public List<Department> Departments;
static public List<Department> SaoDepartments;
public static List<DepartmentUser> DepartmentUsers;
public static DepartmentTree Root;
static DepartmentBLL()
{
UpdateDepartments();
}
public static string[] Sao1SaoProject = new string[] { "上海", "北京", "深圳" };
/// <summary>
/// erp和一扫projectid对应部门信息Sao1SaoProject
/// </summary>
/// <param name="userList"></param>
/// <param name="did"></param>
public static int GetEsaoProjectId(int xxProjectId)
{
Department xxDep = Departments.FirstOrDefault(d => d.Id == xxProjectId);
if (xxDep == null)
{
return 0;
}
foreach (string pname in Sao1SaoProject)
{
if (xxDep.Name.IndexOf(pname) < 0)
{
continue;
}
Department saoDep = SaoDepartments.FirstOrDefault(s => s.Name.IndexOf(pname) >= 0);
if (saoDep != null)
{
return saoDep.Id;
}
}
//默认上海站
return 2;
}
static void addDepartmentUser(ref List<int> userList, int did)
{
List<DepartmentUser> subDeUsers = DepartmentUsers.Where(sub => sub.DepartmentId == did).ToList();
foreach (var td in subDeUsers)
{
if (userList.All(s => s != td.UserId))
{
userList.Add(td.UserId);
}
}
}
/// <summary>
/// 当前输入部门下所有子部门员工id获取
/// </summary>
/// <param name="userList"></param>
/// <param name="did"></param>
static void addSubDepartmentUser(ref List<int> userList, int did)
{
List<Department> departments = Departments.Where(dp => dp.PId == did).ToList();
addDepartmentUser(ref userList, did);
foreach (var dp in departments)
{
addSubDepartmentUser(ref userList, dp.Id);
}
}
/// <summary>
/// 获取当前用户的所有附属用户(包括自己)
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public static List<int> GetSubSystemUsers(int userId)
{
List<int> retDepartmentUsers = new List<int>();
List<DepartmentUser> departmentUsers = DepartmentUsers.Where(d => d.UserId == userId).ToList();
departmentUsers.ForEach(d =>
{
if (!retDepartmentUsers.Any(s => s == d.UserId))
{
retDepartmentUsers.Add(d.UserId);
}
});
departmentUsers.ForEach(d =>
{
if (d.IsManager == 1)
{
//是经理
//db.SystemUsers 当前部门下用户
//addDepartmentUser(ref retDepartmentUsers, d.DepartmentId);
//子部门下用户
addSubDepartmentUser(ref retDepartmentUsers, d.DepartmentId);
}
});
return retDepartmentUsers;
}
//public static List<SystemUser> GetManagerByDepName(string dep
/// <summary>
/// 根据部门名获取部门经理,用缓存数据
/// </summary>
/// <param name="depName"></param>
/// <returns></returns>
public static List<SystemUser> GetManagerByDepName(string depName)
{
Department dep = Departments.FirstOrDefault(d => d.Name == depName);
if (dep == null)
{
return null;
}
List<SystemUser> ret = new List<SystemUser>();
DepartmentUsers.ForEach(d =>
{
if (d.DepartmentId == dep.Id)
{
if (d.IsManager == 1)
{
SystemUser su = UserBLL.GetById(d.UserId);
if (su != null)
{
ret.Add(su);
}
}
}
});
return ret;
}
public static void UpdateDepartments()
{
using (ErpBaseContext db = new ErpBaseContext())
{
Departments = (from o in db.Departments.AsNoTracking() select o).ToList();
DepartmentUsers = (from o in db.DepartmentUsers.AsNoTracking() select o).ToList();
foreach (var department in Departments)
{
if (department.PId == 0)
{
Root = new DepartmentTree { Node = department };
AddChildren(Root);
break;
}
}
}
}
static void AddChildren(DepartmentTree node)
{
if (node.Children == null)
{
node.Children = new List<DepartmentTree>();
}
foreach (var department in Departments)
{
if (department.PId == node.Node.Id)
{
var child = new DepartmentTree { Node = department };
node.Children.Add(child);
AddChildren(child);
}
}
}
public static Department GetById(int id)
{
return Departments.Find(o => o.Id == id);
}
public static Department GetByName(string dename)
{
return Departments.Find(o => o.Name == dename);
}
public static string GetNameById(int id)
{
Department d = GetById(id);
if (d == null)
{
return "";
}
return d.Name;
}
static List<UserName> GetUserNames(int id)
{
using (ErpBaseContext db = new ErpBaseContext())
{
var query = from o in db.SystemUsers.AsNoTracking()
join p in db.DepartmentUsers on o.Id equals p.UserId
where p.DepartmentId == id
select o;
return (from o in query select new UserName { Department = GetNameById(id), id = o.Id, Name = o.Name }).ToList();
}
}
/// <summary>
/// 当前节点下,不含子节点
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static List<IdName> GetUsers(int id)
{
using (ErpBaseContext db = new ErpBaseContext())
{
var query = from o in db.SystemUsers.AsNoTracking()
join p in db.DepartmentUsers on o.Id equals p.UserId
where p.DepartmentId == id
select o;
return (from o in query select new IdName() { Id = o.Id, Name = o.Name }).ToList();
}
}
static void GetManager(List<UserName> managers, int departmentId, int userid, string departmenttype)
{
var q1 = from o in DepartmentUsers
where o.DepartmentId == departmentId && o.UserId == userid && o.IsManager == 1
select o;
if (q1.Count() > 0)//在本部门是经理
{
Department d = GetById(departmentId);
if (d.PId == 0)
{
return;
}
GetManager(managers, d.PId, userid, departmenttype);
}
else
{
var query = from o in DepartmentUsers where o.DepartmentId == departmentId select o;
bool found = false;
foreach (var du in query)
{
if (du.IsManager == 1)
{
managers.Add(new UserName { Department = GetNameById(du.DepartmentId), id = du.UserId, Name = UserBLL.GetNameById(du.UserId) });
found = true;
}
}
if (found == false)
{
Department d = GetById(departmentId);
if (d.PId == 0)
{
return;
}
GetManager(managers, d.PId, userid, "");
}
}
}
static public List<UserName> GetManagers(int userid)
{
List<UserName> managers = new List<UserName>();
var query = from o in DepartmentUsers where o.UserId == userid select o;
foreach (var departmentUser in query)
{
GetManager(managers, departmentUser.DepartmentId, userid, "");
}
return managers;
}
static public List<UserName> GetManagers(int userid, string departmenttype)
{
List<UserName> managers = new List<UserName>();
var query = from o in DepartmentUsers where o.UserId == userid select o;
foreach (var departmentUser in query)
{
GetManager(managers, departmentUser.DepartmentId, userid, departmenttype);
}
return managers;
}
static public List<string> GetUserDepartments(int userid)
{
List<string> list = new List<string>();
DepartmentUsers.ForEach(o =>
{
if (o.UserId == userid)
{
list.Add(GetNameById(o.DepartmentId));
}
});
return list;
}
static public List<string> GetUserDepartments(int userid, string departmenttype)
{
List<string> list = new List<string>();
DepartmentUsers.ForEach(o =>
{
if (o.UserId == userid)
{
Department dept = GetById(o.DepartmentId);
if (departmenttype == "" || dept.DepartmentType.Contains(departmenttype))
{
list.Add((dept.Name));
}
}
});
return list;
}
public static string GetUserDepartmentString(int userid)
{
string s = "";
GetUserDepartments(userid).ForEach(o => s += ("" + o));
return s;
}
static void _GetDeptString(List<int> list, int id)
{
Departments.ForEach(o =>
{
if (o.PId == id)
{
list.Add(o.Id);
_GetDeptString(list, o.Id);
}
});
}
/// <summary>
/// 获取部门及子部门,用,分开
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
static public string GetDeptString(int i)
{
List<int> list = new List<int>();
_GetDeptString(list, i);
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(i);
list.ForEach(o => { sb.Append(","); sb.Append(o); });
return sb.ToString();
}
static public bool IsParnet(int idp, int idc)
{
Department d = GetById(idc);
if (d.PId == idp)
{
return true;
}
if (d.PId == 0)
{
return false;
}
return IsParnet(idp, d.PId);
}
static public List<int> GetUserManageDepartment(int userid)
{
List<int> departments = new List<int>();
List<int> result = new List<int>();
DepartmentUsers.ForEach(o =>
{
if (o.UserId == userid && o.IsManager == 1)
{
departments.Add(o.DepartmentId);
}
});
foreach (int id in departments)
{
bool canadd = true;
for (int i = 0; i < result.Count; i++)
{
if (IsParnet(id, result[i]))//如果是父级节点则替换
{ result[i] = id; canadd = false; }
else
{
if (IsParnet(result[i], id))//有上下级关系
{
canadd = false;
}
}
}
if (canadd)
{
result.Add(id);
}
}
return result;
}
static void list_findchildren(List<Department> list, Department parent)
{
list.Add(parent);
Departments.ForEach(o =>
{
if (o.PId == parent.Id)
{
list_findchildren(list, o);
}
});
}
static public List<Department> GetDepartmentByParent(int deptid)
{
List<Department> list = new List<Department>();
if (deptid == 0)
{
deptid = 1;
}
Department root = (from o in Departments where o.Id == deptid select o).First();
list_findchildren(list, root);
return list;
}
static public List<Department> GetDepartments(string type)
{
List<Department> list = new List<Department>();
list = Departments.Where(d => d.DepartmentType == type).ToList();
return list;
}
static public List<Department> GetGroupsByPid(int deptid)
{
using (ErpBaseContext db = new ErpBaseContext())
{
List<Department> list = (from o in db.Departments where o.PId == deptid && o.DepartmentType == "小组" select o).ToList();
return list;
}
}
static DepartmentTree FindNode(int deptid, DepartmentTree parent)
{
if (parent.Node.Id == deptid)
{
return parent;
}
foreach (var node in parent.Children)
{
var found = FindNode(deptid, node);
if (found != null)
{
return found;
}
}
return null;
}
static void InsertUsers(List<IdName> returnValue, DepartmentTree node)
{
foreach (var user in DepartmentUsers)
{
if (node.Node.Id == user.DepartmentId)
{
bool found = false;
foreach (var idName in returnValue)
{
if (idName.Id == user.UserId)
{
found = true;
}
}
if (!found)
{
returnValue.Add(new IdName { Id = user.UserId, Name = UserBLL.GetNameById(user.UserId) });
}
}
foreach (var subNode in node.Children)
{
InsertUsers(returnValue, subNode);
}
}
}
static public List<IdName> GetDepartmentUsersIdNames(int deptid)
{
List<IdName> list = new List<IdName>();
DepartmentTree node = FindNode(deptid, Root);
if (node != null)
{
InsertUsers(list, node);
}
return list;
}
public SearchListResult<Department> SearchList(DepartmentReq req)
{
using (ErpBaseContext db = new ErpBaseContext())
{
var query = from source in db.Departments select source;
query = req.DepartmentType != null ? query.Where(n => n.DepartmentType == req.DepartmentType) : query.Where(n => n.DepartmentType == "部门" || n.DepartmentType == "项目");
if (!string.IsNullOrEmpty(req.Name))
{
query = query.Where(d => d.Name.Contains(req.Name));
}
if (string.IsNullOrEmpty(req.sidx))
{
req.sidx = "id";
req.sord = "desc";
}
SearchListResult<Department> retListResult = query.ToSearchList(req);
return retListResult;
}
}
}
public class DepartmentTree
{
public Department Node { get; set; }
public List<DepartmentTree> Children { get; set; }
}
}