定義變量
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