/// <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); }
/// <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; } }
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); }
/// <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 }); } }
/// <summary> /// 同步人员 /// </summary> public static void UserSync() { OapiDepartmentListResponse responsedep = GetDepList(); List <OapiDepartmentListResponse.DepartmentDomain> deptlist = responsedep.Department; DataTable dt = GetUserData(); CreateUpdateUser(dt); //执行创建更新 DeleteUser(dt, deptlist); //执行删除 }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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(); }