using Edu.Model.ViewModel.User; using Edu.Repository.User; using System.Collections.Generic; using System.Linq; using VT.FW.DB; namespace Edu.Module.User { /// <summary> /// 部门处理类 /// </summary> public class DepartmentModule { /// <summary> /// 部门仓储层对象 /// </summary> private readonly RB_DepartmentRepository departmentRepository = new RB_DepartmentRepository(); /// <summary> /// 账号仓储层对象 /// </summary> private readonly RB_AccountRepository accountRepository = new RB_AccountRepository(); /// <summary> /// 岗位仓储层对象 /// </summary> private readonly RB_PostRepository postRepository = new RB_PostRepository(); /// <summary> /// 部门岗位关联表仓储层对象 /// </summary> private readonly RB_Department_PostRepository department_PostRepository = new RB_Department_PostRepository(); /// <summary> /// 获取部门分页列表 /// </summary> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <param name="rowsCount"></param> /// <param name="query"></param> /// <returns></returns> public List<RB_Department_ViewModel> GetDepartmentPageListModule(int pageIndex, int pageSize, out long rowsCount, RB_Department_ViewModel query) { var list = departmentRepository.GetDepartmentPageListRepository(pageIndex, pageSize, out rowsCount, query); List<RB_Department_ViewModel> parentList = new List<RB_Department_ViewModel>(); List<Employee_ViewModel> empList = new List<Employee_ViewModel>(); List<RB_Department_Post_ViewModel> deptPostList = new List<RB_Department_Post_ViewModel>(); if (list != null && list.Count > 0) { //查询部门列表 string Ids = string.Join(",", list.Where(qitem => qitem.ParentId > 0).Select(qitem => qitem.ParentId)); if (!string.IsNullOrEmpty(Ids)) { parentList = GetDepartmentListModule(new RB_Department_ViewModel() { QDeptIds = Ids }); } //查询员工列表 string persion = string.Join(",", list.Where(qitem => !string.IsNullOrEmpty(qitem.ManagerIds)).Select(qitem => qitem.ManagerIds)); if (!string.IsNullOrEmpty(persion)) { empList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { QIds = persion }); } string qDeptIds = string.Join(",", list.Select(qitem => qitem.DeptId)); if (!string.IsNullOrEmpty(qDeptIds)) { deptPostList = department_PostRepository.GetDepartmentPostListRepository(new RB_Department_Post_ViewModel() { QDeptIds = qDeptIds }); } } foreach (var item in list) { //部门 item.ParentDeptName = parentList?.Where(qitem => qitem.DeptId == item.ParentId)?.FirstOrDefault()?.DeptName ?? ""; //负责人 string persionName = ""; if (item.ManagerList != null && item.ManagerList.Count > 0) { foreach (var subItem in item.ManagerList) { persionName += "、" + empList?.Where(qitem => qitem.Id == subItem)?.FirstOrDefault()?.EmployeeName ?? ""; } } if (!string.IsNullOrEmpty(persionName) && persionName != "") { persionName = persionName.Substring(1); } item.ManagerName = persionName; item.DeptPostList = deptPostList?.Where(qitem => qitem.Dept_Id == item.DeptId)?.ToList() ?? new List<RB_Department_Post_ViewModel>(); } return list; } /// <summary> /// 获取部门列表 /// </summary> /// <param name="query"></param> /// <returns></returns> public List<RB_Department_ViewModel> GetDepartmentListModule(RB_Department_ViewModel query) { return departmentRepository.GetDepartmentListRepository(query); } /// <summary> /// 获取当前部门的所有上级部门 /// </summary> /// <param name="DeptId"></param> /// <returns></returns> public List<RB_Department_ViewModel> GetAllSuperiorDepartmentListModule(object DeptId) { return departmentRepository.GetAllSuperiorDepartmentListRepository(DeptId); } /// <summary> /// 获取当前部门的所有上级部门编号【例如:1,2,3...】 /// </summary> /// <param name="DeptId"></param> /// <returns></returns> public string GetAllSuperiorDepartmentIdsModule(object DeptId) { return departmentRepository.GetAllSuperiorDepartmentIdsRepository(DeptId); } /// <summary> /// 获取当前部门和当前部门所有的下级部门列表 /// </summary> /// <param name="DeptId"></param> /// <returns></returns> public List<RB_Department_ViewModel> GetCurrentAndChildDepartmentListModule(object DeptId) { return departmentRepository.GetCurrentAndChildDepartmentListRepository(DeptId); } /// <summary> /// 获取当前部门和当前部门所有的下级部门【例如:1,2,3...】 /// </summary> /// <param name="DeptId"></param> /// <returns></returns> public string GetCurrentAndChildDepartmentIdsModule(object DeptId) { return departmentRepository.GetCurrentAndChildDepartmentIdsRepository(DeptId); } /// <summary> /// 获取部门结构树 /// </summary> /// <param name="query"></param> /// <param name="isQueryEmployee">是否查询员工</param> /// <param name="isQueryPost">是否岗位</param> /// <returns></returns> public List<DepartmentTree_ViewModel> GetDepartmentTreeModule(RB_Department_ViewModel query,bool isQueryEmployee=false,bool isQueryPost=false) { //树形结构列表 List<DepartmentTree_ViewModel> list = new List<DepartmentTree_ViewModel>(); //所有的部门列表 var deptList = GetDepartmentListModule(query); //员工列表 var empList = new List<Employee_ViewModel>(); //岗位列表 var postList = new List<RB_Post_ViewModel>(); if (deptList == null) { deptList = new List<RB_Department_ViewModel>(); } //查询员工 if (isQueryEmployee) { empList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { Group_Id = query.Group_Id, School_Id = query.School_Id }); } if (isQueryPost) { postList= postRepository.GetPostListRepository(new RB_Post_ViewModel() { Group_Id = query.Group_Id, }); } if (deptList != null && deptList.Count > 0) { var firstList = new List<RB_Department_ViewModel>(); if (query.School_Id == 0) { firstList = deptList.Where(qitem => qitem.ParentId == 0 && qitem.School_Id == 0).ToList(); } else { var minParentId = deptList.Where(qitem => qitem.School_Id == query.School_Id).Min(qitem => qitem.ParentId); firstList = deptList.Where(qitem => qitem.ParentId == minParentId && qitem.School_Id == query.School_Id).ToList(); } if (firstList != null && firstList.Count > 0) { foreach (var fItem in firstList) { DepartmentTree_ViewModel tModel = new DepartmentTree_ViewModel() { DeptId = fItem.DeptId, DeptName = fItem.DeptName, ParentId = fItem.ParentId, ChildList = new List<DepartmentTree_ViewModel>(), School_Id = fItem.School_Id, IsCompany = fItem.IsCompany, DataType=1, }; #region 添加员工信息 if (isQueryEmployee) { var tempEmpList = empList?.Where(qitem => qitem.Dept_Id == fItem.DeptId)?.ToList(); if (tempEmpList != null && tempEmpList.Count > 0) { foreach (var eItem in tempEmpList) { tModel.ChildList.Add(new DepartmentTree_ViewModel() { DeptId = eItem.Id, DeptName = eItem.EmployeeName, ParentId = 0, ChildList = new List<DepartmentTree_ViewModel>(), School_Id = eItem.School_Id, DataType = 2, }); } } } #endregion #region 添加岗位 if (isQueryPost) { //var tempPostList = postList?.Where(qitem => qitem.RB_Dept_Id == fItem.DeptId)?.ToList(); //if (tempPostList != null && tempPostList.Count > 0) //{ // foreach (var pItem in tempPostList) // { // tModel.ChildList.Add(new DepartmentTree_ViewModel() // { // DeptId = pItem.PostId, // DeptName = pItem.PostName, // ParentId = 0, // ChildList = new List<DepartmentTree_ViewModel>(), // School_Id = fItem.School_Id, // DataType = 3, // }); // } //} } #endregion var childList = GetDeptTreeList(fItem.DeptId, deptList, empList: empList,postList:postList); if (childList != null && childList.Count > 0) { tModel.ChildList.AddRange(childList); } list.Add(tModel); } } } return list; } /// <summary> /// 递归生成树形结构 /// </summary> /// <param name="parentId">父节点编号</param> /// <param name="sourceList">数据源列表</param> /// <param name="empList">员工列表</param> private List<DepartmentTree_ViewModel> GetDeptTreeList(int parentId, List<RB_Department_ViewModel> sourceList, List<Employee_ViewModel> empList=null, List<RB_Post_ViewModel> postList=null) { List<DepartmentTree_ViewModel> treeList = new List<DepartmentTree_ViewModel>(); foreach (var item in sourceList.Where(qitem => qitem.ParentId == parentId)) { DepartmentTree_ViewModel model = new DepartmentTree_ViewModel() { DeptId = item.DeptId, DeptName = item.DeptName, ParentId = item.ParentId, ChildList = new List<DepartmentTree_ViewModel>(), School_Id=item.School_Id, IsCompany = item.IsCompany, DataType = 1, }; #region 添加员工信息 if (empList != null && empList.Count > 0) { var tempEmpList = empList?.Where(qitem => qitem.Dept_Id == item.DeptId)?.ToList(); if (tempEmpList != null && tempEmpList.Count > 0) { foreach (var eItem in tempEmpList) { model.ChildList.Add(new DepartmentTree_ViewModel() { DeptId = eItem.Id, DeptName = eItem.EmployeeName, ParentId = 0, School_Id=eItem.School_Id, ChildList = new List<DepartmentTree_ViewModel>(), DataType = 2, }); } } } #endregion #region 添加岗位 if (postList != null && postList.Count > 0) { //var tempPostList = postList?.Where(qitem => qitem.RB_Dept_Id == item.DeptId)?.ToList(); //if (tempPostList != null && tempPostList.Count > 0) //{ // foreach (var pItem in tempPostList) // { // model.ChildList.Add(new DepartmentTree_ViewModel() // { // DeptId = pItem.PostId, // DeptName = pItem.PostName, // ParentId = 0, // ChildList = new List<DepartmentTree_ViewModel>(), // School_Id = item.School_Id, // DataType = 3, // }); // } //} } #endregion var childList = GetDeptTreeList(item.DeptId, sourceList, empList: empList, postList: postList); if (childList != null && childList.Count > 0) { model.ChildList.AddRange(childList); } treeList.Add(model); } return treeList; } /// <summary> /// 获取组织机构 /// </summary> /// <param name="groupModel"></param> /// <param name="query"></param> /// <returns></returns> public object GetOrganizationChartModule(RB_Group_ViewModel groupModel, RB_Department_ViewModel query) { List<object> nodeList = new List<object>(); List<object> linkList = new List<object>(); var list = GetDepartmentTreeModule(query); //根节点 nodeList.Add(new { id = groupModel.GId, text = groupModel.GroupName, color = "#2E4E8F", }); foreach (var item in list) { nodeList.Add(new { id = item.DeptId, text = item.DeptName, }); linkList.Add(new { from = groupModel.GId.ToString(), to = item.DeptId.ToString(), }); GetChildDept(item, ref nodeList, ref linkList); } var obj = new { rootId = groupModel.GId, nodes = nodeList, links = linkList }; return obj; } /// <summary> /// 获取下级部门 /// </summary> /// <param name="item"></param> /// <param name="nodeList"></param> /// <param name="linkList"></param> public void GetChildDept(DepartmentTree_ViewModel item, ref List<object> nodeList, ref List<object> linkList) { if (item.ChildList != null && item.ChildList.Count > 0) { foreach (var subItem in item.ChildList) { nodeList.Add(new { id = subItem.DeptId, text = subItem.DeptName, }); linkList.Add(new { from = item.DeptId.ToString(), to = subItem.DeptId.ToString(), }); GetChildDept(subItem, ref nodeList, ref linkList); } } } /// <summary> /// 新增修改部门 /// </summary> /// <param name="extModel"></param> /// <returns></returns> public virtual bool SetDepartmentModule(RB_Department_ViewModel extModel) { bool flag; if (extModel.DeptId > 0) { Dictionary<string, object> fileds = new Dictionary<string, object>() { {nameof(RB_Department_ViewModel.DeptName),extModel.DeptName }, {nameof(RB_Department_ViewModel.DeptTel),extModel.DeptTel }, {nameof(RB_Department_ViewModel.ManagerIds),extModel.ManagerIds }, {nameof(RB_Department_ViewModel.ParentId),extModel.ParentId }, {nameof(RB_Department_ViewModel.UpdateBy),extModel.UpdateBy }, {nameof(RB_Department_ViewModel.UpdateTime),extModel.UpdateTime }, {nameof(RB_Department_ViewModel.School_Id),extModel.School_Id }, {nameof(RB_Department_ViewModel.DeptTier),extModel.DeptTier }, {nameof(RB_Department_ViewModel.DeptSort),extModel.DeptSort }, {nameof(RB_Department_ViewModel.IsCompany),extModel.IsCompany } }; flag = departmentRepository.Update(fileds, new WhereHelper(nameof(RB_Department_ViewModel.DeptId), extModel.DeptId)); } else { var newId = departmentRepository.Insert(extModel); extModel.DeptId = newId; flag = newId > 0; } department_PostRepository.DeleteOne(new WhereHelper(nameof(RB_Department_Post_ViewModel.Dept_Id), extModel.DeptId)); if (extModel.ChoosePostList != null && extModel.ChoosePostList.Count > 0) { foreach (var item in extModel.ChoosePostList) { var deptPostModel = new RB_Department_Post_ViewModel() { Id = 0, Dept_Id = extModel.DeptId, PostId = item }; department_PostRepository.Insert(deptPostModel); } } return flag; } /// <summary> /// 根据部门编号获取部门实体 /// </summary> /// <param name="DeptId"></param> /// <returns></returns> public RB_Department_ViewModel GetDepartmentModule(object DeptId) { var extModel = departmentRepository.GetEntity<RB_Department_ViewModel>(DeptId); if (extModel != null && extModel.DeptId > 0) { var deptPostList = department_PostRepository.GetDepartmentPostListRepository(new RB_Department_Post_ViewModel() { Dept_Id = extModel.DeptId }); extModel.ChoosePostList = new List<int>(); if (deptPostList != null && deptPostList.Count > 0) { foreach (var item in deptPostList) { extModel.ChoosePostList.Add(item.PostId); } } extModel.DeptPostList = deptPostList; } return extModel; } /// <summary> /// 修改部门状态 /// </summary> /// <param name="DeptId">部门编号</param> /// <param name="Status">状态</param> /// <returns></returns> public bool RemoveDepartmentModule(int DeptId, int Status) { Dictionary<string, object> fileds = new Dictionary<string, object>() { {nameof(RB_Department_ViewModel.Status),Status } }; return departmentRepository.Update(fileds, new WhereHelper(nameof(RB_Department_ViewModel.DeptId), DeptId)); } } }