.NET 釘釘接口同步釘釘框架,通訊錄


定義變量

        string DingAppkey = "dingdul5161354SDF5131";//釘釘  應用的唯一標識key
        string DingAppsecret = "zU6w54Wg21DieRC3SSDF15SDFDSF15SDF1DS415S4DF8A791SD4";//釘釘  應用的密鑰
        public static string dingAccessToken = ""; //釘釘接口調用憑證

獲取釘釘接口調用憑證access_token

        #region 獲取釘釘接口調用憑證:access_token
        /// <summary>
        /// 獲取釘釘接口調用憑證:access_token
        /// </summary>
        /// <returns></returns>
        public string GetDingAccessToken()
        {
            string access_token = string.Empty;
            try
            {
                string accessToken = string.Empty;
                DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
                OapiGettokenRequest request = new OapiGettokenRequest();
                request.Appkey = DingAppkey;//釘釘  應用的唯一標識key
                request.Appsecret = DingAppsecret;//釘釘  應用的密鑰
                request.SetHttpMethod("GET");
                OapiGettokenResponse response = client.Execute(request);
                access_token = response.AccessToken;
            }
            catch (Exception ex)
            {


            }
            return access_token;
        }
        #endregion

獲取簡單釘釘部門列表

        #region 獲取簡單釘釘部門列表
        /// <summary>
        /// 獲取簡單釘釘部門列表
        /// </summary>
        /// <returns></returns>
        public List<DepartmentDomain> GetDingAlldepartmentList()
        {
            IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/department/list");
            OapiDepartmentListRequest request = new OapiDepartmentListRequest();
            request.Id = "1";
            request.SetHttpMethod("GET");
            OapiDepartmentListResponse response = client.Execute(request, dingAccessToken);
            return response.Department;
        }
        #endregion

獲取釘釘全部通訊錄人員

#region 定時器---獲取釘釘全部通訊錄人員

        void ToPandian(object sender, System.Timers.ElapsedEventArgs e)
        {
            //if (true)//每月一號執行 false true
            if (DateTime.Now.Day == 1)//每月一號執行
            {
                dingAccessToken = GetDingAccessToken();//獲取釘釘接口調用憑證
                List<OapiUserListbypageResponse.UserlistDomain> dingUserList = new List<OapiUserListbypageResponse.UserlistDomain>(); //所有用戶
                List<DepartmentDomain> dingDptList = GetDingAlldepartmentList();//獲取所有部門 
                                                                                //ResultInfo resultInfo = new ResultInfo() { State = false };
                try
                {
                    string cacheKey = "F7C16F00-6A13-4063-8019-CEA4E51A5AF2";
                    var dingdingUserCache = Common.GetCache(cacheKey);//讀取用戶緩存
                    if (dingdingUserCache == null)//沒有緩存記錄
                    {
                        //遍歷部門獲取所有通訊錄人員
                        foreach (var item in dingDptList)
                        {
                            List<OapiUserListbypageResponse.UserlistDomain> tempUserList = new List<OapiUserListbypageResponse.UserlistDomain>();
                            IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/listbypage");
                            OapiUserListbypageRequest req = new OapiUserListbypageRequest();
                            req.DepartmentId = item.Id;
                            req.Offset = 0;
                            req.Size = 100;
                            req.SetHttpMethod("GET");
                            OapiUserListbypageResponse rsp = client.Execute(req, dingAccessToken);
                            tempUserList = rsp.Userlist;
                            if (rsp.Errcode != 0)//請求不成功
                            {
                                throw new Exception("網速有點慢E");
                            }
                            if (tempUserList != null)
                            {
                                dingUserList.AddRange(tempUserList);
                            }

                            Thread.Sleep(5);
                        }
                        if (dingUserList.Count > 0)
                        {
                            Common.SetCache(cacheKey, dingUserList, DateTime.Now.AddMinutes(300), TimeSpan.Zero);//存儲釘釘用戶到緩存(每5小時更新一次)
                        }
                        else
                        {
                            HttpRuntime.Cache.Remove(cacheKey);//清除緩存
                            throw new Exception("網速有點慢N001");
                        }
                    }
                    else
                    {
                        dingUserList = (List<OapiUserListbypageResponse.UserlistDomain>)dingdingUserCache;
                        if (dingUserList.Count == 0)
                        {
                            throw new Exception("網速有點慢N002");
                        }
                    }
                    //resultInfo.State = true;//Jobnumber釘釘里的工號
                    string Data = "[" + JsonHelper.ObjectToJSON(dingDptList) + "," + JsonHelper.ObjectToJSON(dingUserList) + "]";
                    //List<OapiUserListbypageResponse.UserlistDomain> listuser30 = null;

                    /*釘釘上的部門
                    [XmlElement("autoAddUser")]
                    [XmlElement("createDeptGroup")]
                    [XmlElement("id")]//部門id
                    [XmlElement("name")]//部門名稱
                    [XmlElement("parentid")]//父部門id,根部門為1
                    [XmlElement("sourceIdentifier")]//部門標識字段,開發者可用該字段來唯一標識一個部門,並與釘釘外部通訊錄里的部門做映射
                     */

                    /*釘釘上的員工信息
                     * https://ding-doc.dingtalk.com/doc#/serverapi2/ege851/AaRQe
                    [XmlElement("unionid")]//szyC6A4aYGDbD2KiS5Y9f6QiEIE//員工在當前開發者企業賬號范圍內的唯一標識,系統生成,固定值,不會改變
                    [XmlElement("tel")]
                    [XmlElement("remark")]
                    [XmlElement("position")]//經營管理部副主任//職位信息
                    [XmlElement("orgEmail")]
                    [XmlElement("order")]//17634072162316213525//表示人員在此部門中的排序
                    [XmlElement("name")]//趙倩華//成員名稱
                    [XmlElement("mobile")]//13781503303//手機號
                    [XmlElement("jobnumber")]//011//工號
                    [XmlElement("userid")]//6717155435458170//員工在當前企業內的唯一標識
                    [XmlElement("isHide")]//false
                    [XmlElement("isLeader")]//false//是否是部門的主管
                    [XmlElement("isBoss")]//true//是否為企業的老板
                    [XmlElement("isAdmin")]//true//是否是企業的管理員
                    [XmlElement("hiredDate")]
                    [XmlElement("extattr")]
                    [XmlElement("email")]
                    [XmlElement("dingId")]
                    [XmlElement("department")]//150926607//成員所屬部門id列表
                    [XmlElement("avatar")]//http://********.com/***.jpg//頭像url
                    [XmlElement("active")]//true//表示該用戶是否激活了釘釘
                    [XmlElement("workPlace")]

                     */

                    StringBuilder sbDeptUpdate = new StringBuilder();
                    sbDeptUpdate.Append(string.Format(" update MyUser_Department set isDel=0  ; "));//先全部更改為已刪除狀態
                    for (int i = 0; i < dingDptList.Count; i++)
                    {
                        MyUser_DepartmentModel model = MyUser_DepartmentBLL.SelectModel(" and departmentID='" + dingDptList[i].Id + "' ");
                        if (model == null)
                        {
                            sbDeptUpdate.Append(string.Format(" insert into MyUser_Department (departmentID,departmentName,parentid) values ('{0}','{1}','{2}') ; ", dingDptList[i].Id.ToString(), dingDptList[i].Name, dingDptList[i].Parentid.ToString()));
                        }
                        else
                        {
                            //如果數據庫有就更新
                            sbDeptUpdate.Append(string.Format(" update MyUser_Department set departmentName='{0}',parentid='{1}' where departmentID='{2}' ; ", dingDptList[i].Name, dingDptList[i].Parentid.ToString(), dingDptList[i].Id.ToString()));
                        }
                    }


                    StringBuilder sbUserUpdate = new StringBuilder();
                    sbDeptUpdate.Append(string.Format(" update MyUser_Yuyue set isDel=0  ; "));//先全部更改為已刪除狀態
                    for (int i = 0; i < dingUserList.Count; i++)
                    {
                        sbUserUpdate.Append(string.Format(" update MyUser_Yuyue set dingdingUserid='{0}' where userName='{1}' ; ", dingUserList[i].Userid, dingUserList[i].Name));//初始化時候先用姓名同步一下釘釘ID,以后不執行
                        if (!string.IsNullOrEmpty(dingUserList[i].Jobnumber))//如果有工號才同步
                        {
                            MyUserModel model = MyUserBLL.SelectModel(" and userID='" + dingUserList[i].Jobnumber + "' ");
                            if (model == null)
                            {
                                sbDeptUpdate.Append(string.Format(" insert into MyUser_Yuyue (userID,userName,mobile,department,avatar,dingdingUserid,isDel,unionid) values ('{0}','{1}','{2}','{3}','{4}','{5}',1,'{6}') ; ", dingUserList[i].Jobnumber, dingUserList[i].Name, dingUserList[i].Mobile, dingUserList[i].Department, dingUserList[i].Avatar, dingUserList[i].Userid, dingUserList[i].Unionid));

                            }
                            else
                            {
                                //Common.CreateWebLog("更新語句", string.Format(" update MyUser_Yuyue set userName='{0}',mobile='{1}',department='{2}',avatar='{3}',isDel=1,unionid='{5}',dingdingUserid='{6}' where userID='{4}' ; ", dingUserList[i].Name, dingUserList[i].Mobile, dingUserList[i].Department.Replace("[", "").Replace("]", ""), dingUserList[i].Avatar, dingUserList[i].Jobnumber, dingUserList[i].Unionid, dingUserList[i].Userid));
                                //如果數據庫有就更新
                                sbUserUpdate.Append(string.Format(" update MyUser_Yuyue set userName='{0}',mobile='{1}',department='{2}',avatar='{3}',isDel=1,unionid='{5}',dingdingUserid='{6}' where userID='{4}' ; ", dingUserList[i].Name, dingUserList[i].Mobile, dingUserList[i].Department.ToString().Replace("[", "").Replace("]", ""), dingUserList[i].Avatar, dingUserList[i].Jobnumber, dingUserList[i].Unionid, dingUserList[i].Userid));
                            }
                        }

                    }
                    SqlHelper.ExecuteNonQuery(sbDeptUpdate.ToString() + sbUserUpdate.ToString(), CommandType.Text);

                }
                catch (Exception ex)
                {
                    Common.CreateWebLog("同步釘釘信息異常182", ex.ToString());
                }
            }

        }
        #endregion

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM