zoukankan      html  css  js  c++  java
  • 组织架构树后端逻辑

    public class OrgChart
            {
                public Guid id { get; set; }
    
                public string name { get; set; }
    
                public Data data { get; set; }
    
                public List<OrgChart> children { get; set; }
            }
    
            public class Data
            {
                /// <summary>
                /// 1架构,2岗位,3人员
                /// </summary>
                public int Type { get; set; }
    
                public string StaffId { get; set; }
    
                public string OrgId { get; set; }
    
                public string Info { get; set; }
                /// <summary>
                /// 编制人数
                /// </summary>
                public int HeadCount { get; set; }
                /// <summary>
                /// 实际人数
                /// </summary>
                public int ActualCount { get; set; }
                /// <summary>
                /// 岗位负责人
                /// </summary>
                public string IsPrimary { get; set; }
                /// <summary>
                /// 编制描述
                /// </summary>
                public string HeadCountTitle { get; set; }
                /// <summary>
                /// 性别
                /// </summary>
                public string sex { get; set; }
    
    
            }
    
                   public void FindTreeNode(string staffNo, OrgChart _oc)
            {
                //staffNo的下级
                IList<HrStaffSupervisor> listChildren = supsers.Where<HrStaffSupervisor>(x => x.SupervisorNo != null && x.SupervisorNo.ToUpper() == staffNo.ToUpper() && x.IsMainSupervisor == true).ToList<HrStaffSupervisor>();
    
    
                if (listChildren != null && listChildren.Count > 0)
                {
                    //_oc.data = new Data();
    
                    List<OrgChart> children = new List<OrgChart>();
                    _oc.children = children;
                    foreach (HrStaffSupervisor item in listChildren)
                    {
                        OrgChart oc = new OrgChart();
                        oc.id = Guid.NewGuid();
                        oc.name = item.StaffName;
    
                        OrgChartDetail data = new OrgChartDetail();
                        data.Type = 3;
                        data.StaffId = item.StaffNo;
                        data.StaffName = item.StaffName;
                        ///demo定制显示
                        OrgStaff os = GetStaffinfo(item.StaffNo);
                        if (os != null)
                        {
                            data.lvlfirst = os.OrgUnit.PathInfo == null ? "" : os.OrgUnit.PathInfo.Level1.Name;
                            data.lvllast = os.OrgUnit.OrgDictionary.Name.String;
                            data.position = os.OrgPosition.OrgDictionary.Name.String;
                        }
    
                        ////如果有上级
                        //IList<HrStaffSupervisor> listSuper = supsers.Where<HrStaffSupervisor>(x => x.StaffNo.ToUpper().Equals(item.StaffNo.ToUpper()) && x.IsMainSupervisor == true).ToList<HrStaffSupervisor>();
                        //if (listSuper != null && listSuper.Count > 0)
                        //{
                        //    HrStaffSupervisor super = listSuper[0];
                        //    data.SupervisorNo = super.SupervisorNo;
                        //    data.Type = 1;
                        //}
                        //如果有下级
                        IList<HrStaffSupervisor> listChi = supsers.Where<HrStaffSupervisor>(x => x.SupervisorNo != null && x.SupervisorNo.ToUpper() == item.StaffNo.ToUpper() && x.IsMainSupervisor == true).ToList<HrStaffSupervisor>();
                        data.StaffCount = listChi.Count;
    
                        //data.lvlfirst=item.
                        oc.data = data;
    
                        //是否有间接主管
                        IList<HrStaffSupervisor> listSupervisor = supsers.Where<HrStaffSupervisor>(x => x.StaffNo == item.StaffNo && x.IsMainSupervisor == false).ToList<HrStaffSupervisor>();
                        if (listSupervisor.Count > 0)
                            data.HasOtherSupervisor = true;
                        else
                            data.HasOtherSupervisor = false;
                        _oc.children.Add(oc);
    
                        FindTreeNode(item.StaffNo, oc);
                    }
                }
            }

    demo2

     /// <summary>
        /// 部门表
        /// </summary>
        [TableInfo("DeptInfo")]
        public class DepartInfo : BaseIntModel
        {
            /// <summary>        
            ///部门ID
            /// </summary>
            [KeyInfo("DeptId")]
            public override int Id { get; set; }
            /// <summary>        
            ///部门名称
            /// </summary>
            public string DeptName { get; set; }
            /// <summary>        
            ///部门名称简写
            /// </summary>
            public string ShortName { get; set; }
            /// <summary>        
            ///组织机构代码
            /// </summary>
            public string DeptCode { get; set; }
            /// <summary>        
            ///上级ID
            /// </summary>
            [ColumnInfo("Upperid")]
            public int? ParentId { get; set; }
            /// <summary>        
            ///排序
            /// </summary>
            public int? Sequence { get; set; }
            public DateTime? CreateTime { get; set; }
            /// <summary>        
            ///部门简称
            /// </summary>
            public string DeptJc { get; set; }
            /// <summary>        
            ///备注
            /// </summary>
            public string Description { get; set; }
     
            /// <summary>        
            ///添加人
            /// </summary>
            public int? CreateUser { get; set; }
            /// <summary>        
            ///修改时间
            /// </summary>
            public DateTime? UpdateTime { get; set; }
            /// <summary>        
            ///是否删除
            /// </summary>
            public int? DelFlag { get; set; }
            /// <summary>        
            ///是否在前台显示
            /// </summary>
            public int? Activeflag { get; set; }
            /// <summary>        
            ///树状图结构
            /// </summary>
            public string Path { get; set; }
    
    
            /// <summary>
            /// 父节点ID集合
            /// </summary>
            [Ignore]
            public List<int> ParentIdList { get; set; }
            /// <summary>
            /// 父节点集合
            /// </summary>
            [Ignore]
            public List<DepartInfo> Children { get; set; }
            /// <summary>
            /// 当前及子部门人员统计数
            /// </summary>
            [Ignore]
            public int DeptUsersCount { get; set; }
        }
     public async Task<RespondView<IEnumerable<DepartInfo>>> DepartList()
            {
                var result = new RespondView<IEnumerable<DepartInfo>>() { Data = new List<DepartInfo>()};
                var _list =   await this._repository.GetListAll(); 
                if (_list != null && _list.Any())
                {
                    result.Status = true;
    
                    var parentNodeList = _list.Where(m => m.ParentId == -1).ToList();
                    if (parentNodeList != null && parentNodeList.Any())
                    {
                        foreach (var parentNode in parentNodeList)
                        {
                            SetParentChildren(_list.ToList(), parentNode);
                        }
                    }
                    result.Data = parentNodeList;
                }
                else
                {
                    result.Status = false;
                    result.Message = "暂无数据";
                }
                return result;
            }
    
            /// <summary>
            /// 遍历子结点
            /// </summary>
            /// <param name="departInfos">全部节点</param>
            /// <param name="parentNode">父级节点</param>
            public void SetParentChildren(List<DepartInfo> departInfos, DepartInfo parentNode)
            {
                if (departInfos != null && departInfos.Any() && parentNode != null)
                {
                    #region 当前部门及子部门总人数
                    var deptUsersCount = 0;
                    var deptId = parentNode.Id;
                    var deptCurWithChildIds = Task.Run(() => CurrentDeptWithChild(new List<int>() { deptId }).Result).Result;
                    if (deptCurWithChildIds != null && deptCurWithChildIds.Any())
                    {
                        deptUsersCount = Task.Run(() => _userRepository.IsDeptCmsUserCount(deptCurWithChildIds.ToList()).Result).Result;
                    }
                    parentNode.DeptUsersCount = deptUsersCount;
                    #endregion
    
                    parentNode.Children = departInfos.Where(o => o.ParentId == deptId).OrderBy(o=>o.DeptName).ToList();
                    if (parentNode.Children != null && parentNode.Children.Any())
                    {
                        foreach (var nextChild in parentNode.Children)
                        {
                            SetParentChildren(departInfos, nextChild);
                        }
                    }
                }
            }
    
            #region 获取当前部门及其子部门ID集合
            /// <summary>
            /// 获取当前部门及其子部门ID集合
            /// </summary>
            /// <param name="deptIds"></param>
            /// <returns></returns>
            public async Task<IList<int>> CurrentDeptWithChild(List<int> deptIds)
            {
                var result = new List<int>();
                var deptId = deptIds.FirstOrDefault();
                if (deptId > 0)
                {
                    var _list = await this._repository.GetListAll();
                    if (_list != null && _list.Any())
                    {
                        result = deptIds;
                        var parentNodeList = _list.Where(m => m.ParentId == deptId).ToList();
                        if (parentNodeList != null && parentNodeList.Any())
                        {
                            foreach (var parentNode in parentNodeList)
                            {
                                SetNextDeptIds(_list.ToList(), parentNode, ref result);
                            }
                        }
                    }
                }
                return result;
            }
    
            public void SetNextDeptIds(List<DepartInfo> departInfos, DepartInfo parentNode, ref List<int> deptIds)
            {
                if (departInfos != null && departInfos.Any() && parentNode != null)
                {
                    deptIds.Add(parentNode.Id);     //添加当前子节点
                    parentNode.Children = departInfos.Where(o => o.ParentId == parentNode.Id).ToList();
                    if (parentNode.Children != null && parentNode.Children.Any())
                    {
                        foreach (var nextChild in parentNode.Children)
                        {
                            SetNextDeptIds(departInfos, nextChild, ref deptIds);
                        }
                    }
                }
            }
  • 相关阅读:
    Java变量在内存中的存储
    Java成员变量和局部变量
    Java类的定义与类的实例化
    面向对象编程思想
    Java数组深入
    Java的Arrays类 基本用法
    Intellij IDEA如何设置快速调整字体大小的快捷键
    Win10如何快速截屏
    应用层协议原理(二)
    应用层协议原理(一)
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/14000725.html
Copyright © 2011-2022 走看看