예제 #1
0
        /// <summary>
        ///获取所有的部门列表信息
        /// </summary>
        /// <param name="repuestParams"></param>
        /// <returns></returns>
        public List <Department> GetAllDepIds(RequestParams repuestParams)
        {
            List <Department>         depList = new List <Department>();
            IDingTalkClient           client  = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
            OapiDepartmentListRequest request = new OapiDepartmentListRequest();

            request.Id = "1";//如果不传,默认为1表示根部门id
            request.SetHttpMethod("GET");
            OapiDepartmentListResponse response = client.Execute(request, TooUtil.GetAccessToken());

            if (response.Errcode == 0 && response.Department.Count > 0)
            {
                response.Department.ForEach(u =>
                {
                    Department department      = new Department();
                    department.DepId           = u.Id;
                    department.ParentId        = u.Parentid;
                    department.DepName         = u.Name;
                    department.CreateDeptGroup = u.CreateDeptGroup;
                    department.AutoAddUser     = u.AutoAddUser;
                    depList.Add(department);
                });
            }
            return(depList);
        }
예제 #2
0
        /// <summary>
        /// 同步部门
        /// </summary>
        public static void OrgSync()
        {
            Res("=========同步部门==========");
            Res("开始获取Access_Token");
            OapiGettokenResponse response = GetAccessToken();

            if (response.Errcode == 0)
            {
                AccessToken = response.AccessToken;
                Res("Access_Token:" + AccessToken + "");
                OapiDepartmentListResponse responsedep = GetDepList();
                Res("开始获取钉钉部门");
                List <OapiDepartmentListResponse.DepartmentDomain> deptlist = responsedep.Department;
                Res("钉钉部门:" + FastJSON.JSON.ToJSON(deptlist));
                Res("开始获取同步部门数量");
                DataTable dt = GetDepData();
                if (dt.Rows.Count == 0)
                {
                    Res("部门数量为0,请检查SQL,结束同步");
                    return;
                }
                Res("部门数量为:" + dt.Rows.Count + "");
                Res("开始执行创建更新");
                CreateUpdateDep(dt, deptlist); //执行创建更新
                Res("开始执行执行删除");
                DeleteDep(dt, deptlist);       //执行删除
                Res("=========结束同步部门==========");
            }
            else
            {
                Res("获取Access_Token失败,结束同步");
                return;
            }
        }
예제 #3
0
        public List <Dept> GetDepts()
        {
            List <Dept>               dlist   = new List <Dept>();
            IDingTalkClient           client  = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
            OapiDepartmentListRequest request = new OapiDepartmentListRequest();

            request.SetHttpMethod("GET");
            OapiDepartmentListResponse response = client.Execute(request, DdOper.AccessToken);

            if (response.Errcode == 0)
            {
                foreach (var p in response.Department)
                {
                    Dept newDept = new Dept();
                    newDept.DeptID   = p.Id;
                    newDept.DeptName = p.Name;
                    if (newDept.DeptID != 1)
                    {
                        newDept.ParentDeptId = p.Parentid;
                    }
                    dlist.Add(newDept);
                }
            }
            return(dlist);
        }
예제 #4
0
 /// <summary>
 /// 通过父部门找到所有子部门
 /// </summary>
 /// <param name="PdepId"></param>
 /// <returns></returns>
 public static ResponseParameters GetDepListByPDepId(long pdepId)
 {
     try
     {
         DefaultDingTalkClient     client  = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
         OapiDepartmentListRequest request = new OapiDepartmentListRequest();
         request.Id = pdepId.ToString();
         request.SetHttpMethod("GET");
         OapiDepartmentListResponse response = client.Execute(request, Get_Access_Token());
         response.Department.Add(new OapiDepartmentListResponse.DepartmentDomain()
         {
             Id = pdepId
         });
         return(new ResponseParameters()
         {
             ErroCode = response.Errcode,
             ErroMsg = response.Errmsg,
             DepartmentList = response.Department
         });
     }
     catch (Exception ex)
     {
         return(new ResponseParameters()
         {
             ErroCode = -1,
             ErroMsg = ex.Message
         });
     }
 }
예제 #5
0
파일: Program.cs 프로젝트: radtek/EMIP
        /// <summary>
        /// 同步人员
        /// </summary>
        public static void UserSync()
        {
            OapiDepartmentListResponse responsedep = GetDepList();
            List <OapiDepartmentListResponse.DepartmentDomain> deptlist = responsedep.Department;
            DataTable dt = GetUserData();

            CreateUpdateUser(dt);     //执行创建更新
            DeleteUser(dt, deptlist); //执行删除
        }
예제 #6
0
        /// <summary>
        /// 获取部门列表
        /// </summary>
        /// <returns></returns>
        public static OapiDepartmentListResponse GetDepList()
        {
            DefaultDingTalkClient     client  = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
            OapiDepartmentListRequest request = new OapiDepartmentListRequest();

            request.Id = "1";
            request.SetHttpMethod("GET");
            OapiDepartmentListResponse response = client.Execute(request, AccessToken);

            return(response);
        }
예제 #7
0
        /// <summary>
        /// 获取部门列表
        /// </summary>
        /// <param name="departId">父部门id(如果不传,默认部门为根部门,根部门ID为1)</param>
        public string GetDepartList(string departId)
        {
            IDingTalkClient           client  = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
            OapiDepartmentListRequest request = new OapiDepartmentListRequest();

            request.Id = departId;
            request.SetHttpMethod("GET");
            OapiDepartmentListResponse response = client.Execute(request, base.AccessToken);

            return(response.Body);
        }
예제 #8
0
        /// <summary>
        /// 获取部门列表
        /// </summary>
        /// <param name="accessToken">accessToken</param>
        /// <param name="id">父部门id(如果不传,默认部门为根部门,根部门ID为1)</param>
        /// <param name="lang">通讯录语言(默认zh_CN,未来会支持en_US)</param>
        /// <param name="fetchChild">是否递归部门的全部子部门,ISV微应用固定传递false</param>
        /// <returns></returns>
        public OapiDepartmentListResponse List(string accessToken, string id, string lang = "zh_CN", bool fetchChild = false)
        {
            IDingTalkClient           client  = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
            OapiDepartmentListRequest request = new OapiDepartmentListRequest();

            request.Id         = id;
            request.Lang       = lang;
            request.FetchChild = fetchChild;
            request.SetHttpMethod("GET");
            OapiDepartmentListResponse response = client.Execute(request, accessToken);

            return(response);
        }
        /// <summary>
        /// 获取部门列表
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        public virtual List <DepartmentDomain> GetDepartmentList(string token)
        {
            IDingTalkClient           client  = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
            OapiDepartmentListRequest request = new OapiDepartmentListRequest();

            request.SetHttpMethod("GET");
            OapiDepartmentListResponse response = client.Execute(request, token);

            if (response.Errcode != 0)
            {
                Console.WriteLine("错误原因:【" + response.Errmsg + "】");
            }
            return(response.Department);
        }
예제 #10
0
        /// <summary>
        /// 获取部门信息
        /// </summary>
        /// <param name="accessToken"></param>
        /// <param name="parentId">父级部门ID</param>
        /// <returns></returns>
        public static List <DepartmentInfo> GetDepartmentList(string accessToken, string parentId = "1")
        {
            try
            {
                IDingTalkClient           client  = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
                OapiDepartmentListRequest request = new OapiDepartmentListRequest();
                request.Id = parentId;
                request.SetHttpMethod("GET");

                OapiDepartmentListResponse response = client.Execute(request, accessToken);
                if (response != null)
                {
                    if (response.Errcode == 0)
                    {
                        List <DepartmentInfo> departmentinfolist = new List <DepartmentInfo>();
                        foreach (OapiDepartmentListResponse.DepartmentDomain info in response.Department)
                        {
                            DepartmentInfo depart = new DepartmentInfo();
                            depart.Id              = info.Id.ToString();
                            depart.Name            = info.Name;
                            depart.Parentid        = info.Parentid.ToString();
                            depart.CreateDeptGroup = info.CreateDeptGroup;
                            depart.AutoAddUser     = info.AutoAddUser;
                            departmentinfolist.Add(depart);
                        }
                        return(departmentinfolist);
                    }
                    else
                    {
                        throw new Exception(response.ErrMsg);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return(null);
        }
예제 #11
0
        static void Main(string[] args)
        {
            try
            {
                YiFang_CustomerComplaintEntities dbContext = new YiFang_CustomerComplaintEntities();
                //同步部门信息
                string                    accessToken = AccessToken.GetAccessToken();
                IDingTalkClient           client      = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
                OapiDepartmentListRequest request     = new OapiDepartmentListRequest();
                //request.Id
                request.SetHttpMethod("GET");
                OapiDepartmentListResponse response = client.Execute(request, accessToken);
                if (response.Errcode != 0)
                {
                    Console.WriteLine("错误原因:【" + response.Errmsg + "】");
                }
                //移除部门-人员信息
                dbContext.Database.ExecuteSqlCommand("delete REF_Person_Department");
                //获取钉钉部门和人员集合
                List <long>   DepartmentList = new List <long>();
                List <string> PersonList     = new List <string>();
                //获取普通用户
                var nomal = dbContext.AC_SysRoles.FirstOrDefault(p => p.Name == "普通用户");
                if (nomal == null)
                {
                    Console.WriteLine("请维护角色");
                    return;
                }
                DingTalkDepartmentList(dbContext, 0, response.Department);
                foreach (var item in response.Department.OrderBy(k => k.Id))
                {
                    //部门人员
                    //添加读取该部门所有人员信息
                    var personlist = JsonConvert.DeserializeObject <Jusoft_DepartmentPerson>(HttpRequestHelper.HttpGet("https://oapi.dingtalk.com/user/list?access_token=" + accessToken + "&department_id=" + item.Id));
                    foreach (var user in personlist.userlist)
                    {
                        var person = dbContext.OR_Person.FirstOrDefault(k => k.PsnNum == user.userid);
                        //person.REF_Person_Department.Add(new REF_Person_Department { });
                        if (person == null)
                        {
                            person = new OR_Person {
                                PsnNum = user.userid, Sex = 0
                            };
                            dbContext.OR_Person.Add(person);
                        }
                        person.Name           = user.name;
                        person.CodeDepartment = user.department[0].ToString();
                        person.PsnMobilePhone = user.mobile;
                        person.HeadUrl        = user.avatar;
                        person.LoginName      = user.userid;
                        person.ExternalBit    = false;
                        dbContext.SaveChanges();
                        Console.WriteLine("【" + user.name + "】人员-同步成功");
                        dbContext.REF_Person_Department.Add(new REF_Person_Department
                        {
                            CodeDepartment = item.Id.ToString(),
                            IdPerson       = person.Id
                        });

                        //同步信息到账户表
                        if (!dbContext.AC_SysUsers.Any(k => k.UserName == user.userid))
                        {
                            var _newUser = new AC_SysUsers
                            {
                                UserName     = user.userid,
                                PasswordType = 1,
                                PasswordHash = user.userid,
                            };
                            dbContext.AC_SysUsers.Add(_newUser);
                            dbContext.SaveChanges();
                            string sql = string.Format("INSERT dbo.REF_User_Roles(IdSysUsers,IdSysRoles)VALUES({0},{1})", _newUser.Id, nomal.Id);
                            Console.WriteLine(sql);
                            dbContext.Database.ExecuteSqlCommand(sql);
                        }

                        dbContext.SaveChanges();
                        //部门及人员 赋值
                        PersonList.Add(user.userid);
                    }
                    DepartmentList.Add(item.Id);
                }
                //离职人员 -(我们系统存在钉钉不存在)
                var employee = dbContext.OR_Person.Where(k => k.ExternalBit == false).Select(k => k.PsnNum).ToList();
                foreach (var item in employee.Except(PersonList))
                {
                    var yee = dbContext.OR_Person.FirstOrDefault(k => k.PsnNum == item);
                    yee.CodeDepartment = "1";
                    yee.LeaveDate      = DateTime.Now;
                    dbContext.REF_Person_Department.RemoveRange(dbContext.REF_Person_Department.Where(w => w.IdPerson == yee.Id));
                    dbContext.SaveChanges();
                    Console.WriteLine("【" + yee.Name + "】人员-离职成功");
                }
                //删除部门-(我们系统存在钉钉不存在)
                var Deletedepartment = dbContext.OR_Department.Select(k => k.Code).ToList().Select(k => Convert.ToInt64(k)).ToList();
                foreach (var item in Deletedepartment.Except(DepartmentList).OrderByDescending(k => k))
                {
                    var delete = dbContext.OR_Department.FirstOrDefault(k => k.Code == item.ToString());
                    dbContext.OR_Department.Remove(delete);
                    dbContext.SaveChanges();
                    Console.WriteLine("【" + delete.Name + "】部门-删除成功");
                }

                Console.WriteLine("同步完成");
            }
            catch (Exception ex)
            {
                Console.WriteLine("【异常】【" + ex.ToString() + "】");
            }
            Console.WriteLine();
        }