定义变量
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