using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using BP.Tools;
using BP.En;
using BP.GPM.DTalk.DINGTalk;
using BP.GPM.DTalk.DDSDK;
using BP.DA;
using BP.Port;
namespace BP.GPM.DTalk
{
///
/// 钉钉主类
///
public class DingDing
{
private string corpid = BP.Difference.SystemConfig.Ding_CorpID;
private string corpsecret = BP.Difference.SystemConfig.Ding_CorpSecret;
public static string getAccessToken()
{
//if (DataType.IsNullOrEmpty(AccessToken_Ding.Value) || AccessToken_Ding.Begin.AddSeconds(ConstVars.CACHE_TIME) < DateTime.Now)
// UpdateAccessToken(true);
//return AccessToken_Ding.Value;
string url = "https://oapi.dingtalk.com/gettoken?appkey="+BP.Difference.SystemConfig.Ding_AppKey + "&appsecret="+BP.Difference.SystemConfig.Ding_AppSecret;
string str = new HttpWebResponseUtility().HttpResponseGet(url);
BP.DA.Log.DebugWriteError(str);
DingAccessToken token = new DingAccessToken();
token = FormatToJson.ParseFromJson(str);
if (token.errcode == "0")
return token.access_token;
else
return "";
}
///
/// 获取用户ID
///
///
///
///
public string GetUserID(string code)
{
string access_token = getAccessToken();
BP.DA.Log.DebugWriteError(access_token);
BP.DA.Log.DebugWriteError(code);
string url = "https://oapi.dingtalk.com/user/getuserinfo?access_token=" + access_token + "&code=" + code;
try
{
string str = new HttpWebResponseUtility().HttpResponseGet(url);
BP.DA.Log.DebugWriteError(str);
CreateUser_PostVal user = new CreateUser_PostVal();
user = FormatToJson.ParseFromJson(str);
BP.DA.Log.DebugWriteError(user.userid);
//BP.DA.Log.DebugWriteError(access_token + "code:" + code + "1." + user.userid + "2." + user.errcode + "3." + user.errmsg);
if (!DataType.IsNullOrEmpty(user.userid)) {
string userUrl = "https://oapi.dingtalk.com/topapi/v2/user/get?access_token=" + access_token+"&userid="+ user.userid;
string json= new HttpWebResponseUtility().HttpResponseGet(userUrl);
BP.DA.Log.DebugWriteError(json);
DingUserInfo userinfo = new DingUserInfo();
userinfo= FormatToJson.ParseFromJson(json);
UserInfoResult result = userinfo.result;
return result.mobile;
}
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError(ex.Message);
return ex.Message;
}
return "";
}
#region 客户端开发
///
/// 获取JS票据
///
///
///
public static JSTicket FetchJSTicket()
{
SimpleCacheProvider cache = SimpleCacheProvider.GetInstance();
JSTicket jsTicket = cache.GetCache(ConstVars.CACHE_JS_TICKET_KEY);
if (jsTicket == null || DataType.IsNullOrEmpty(jsTicket.ticket))
{
String apiurl = FormatApiUrlWithToken(Urls.get_jsapi_ticket);
jsTicket = Analyze.Get(apiurl);
cache.SetCache(ConstVars.CACHE_JS_TICKET_KEY, jsTicket, ConstVars.CACHE_TIME);
}
return jsTicket;
}
///
/// 获取签名包
///
///
///
public static SignPackage FetchSignPackage(String url)
{
JSTicket jsticket = FetchJSTicket();
SignPackage signPackage = FetchSignPackage(url, jsticket);
return signPackage;
}
///
/// 获取签名包
///
///
///
public static SignPackage FetchSignPackage(String url, JSTicket jsticket)
{
string timestamp = SignPackageHelper.ConvertToUnixTimeStamp(DateTime.Now);
string nonceStr = SignPackageHelper.CreateNonceStr();
if (jsticket == null)
{
return null;
}
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
string rawstring = Keys.jsapi_ticket + "=" + jsticket.ticket;
rawstring += "&" + Keys.noncestr + "=" + nonceStr;
rawstring += "&" + Keys.timestamp + "=" + timestamp;
rawstring += "&" + Keys.url + "=" + url;
string signature = SignPackageHelper.Sha1Hex(rawstring).ToLower();
var signPackage = new SignPackage()
{
agentId = BP.Difference.SystemConfig.Ding_AgentID,
corpId = BP.Difference.SystemConfig.Ding_CorpID,
timeStamp = timestamp,
nonceStr = nonceStr,
signature = signature,
url = url,
rawstring = rawstring,
jsticket = jsticket.ticket
};
return signPackage;
}
///
///更新票据
///
/// true:强制更新.false:按缓存是否到期来更新
public static void UpdateAccessToken(bool forced = false)
{
if (!forced && AccessToken_Ding.Begin.AddSeconds(ConstVars.CACHE_TIME) >= DateTime.Now)
{
//没有强制更新,并且没有超过缓存时间
return;
}
string CorpID = BP.Difference.SystemConfig.Ding_CorpID;
string CorpSecret = BP.Difference.SystemConfig.Ding_CorpSecret;
string TokenUrl = Urls.gettoken;
string apiurl = TokenUrl + "?" + Keys.corpid + "=" + CorpID + "&" + Keys.corpsecret + "=" + CorpSecret;
TokenResult tokenResult = Analyze.Get(apiurl);
if (tokenResult.ErrCode == ErrCodeEnum.OK)
{
AccessToken_Ding.Value = tokenResult.Access_token;
AccessToken_Ding.Begin = DateTime.Now;
}
}
///
/// 获取拼接Token的url
///
///
///
public static string FormatApiUrlWithToken(string apiUrl)
{
//为空或超时
return apiUrl + "?access_token=" + getAccessToken();
}
#endregion
///
/// 下载多媒体文件
///
/// 多媒体编号
/// 业务编号
/// 保存路径
///
public static bool DownLoadMediaById(string mediaId, string workID, string savePath)
{
string apiurl = FormatApiUrlWithToken(Urls.get_media) + "&media_id=" + mediaId;
return Analyze.HttpDownLoadFile(apiurl, savePath);
}
///
/// 下载钉钉所有头像
///
///
///
public bool DownLoadUserIcon(string savePath)
{
if (Directory.Exists(savePath) == false)
Directory.CreateDirectory(savePath);
string access_token = getAccessToken();
string url = "https://oapi.dingtalk.com/department/list?access_token=" + access_token;
try
{
string str = new HttpWebResponseUtility().HttpResponseGet(url);
DepartMent_List departMentList = FormatToJson.ParseFromJson(str);
//部门集合
if (departMentList != null && departMentList.department != null && departMentList.department.Count > 0)
{
//部门信息
foreach (DepartMentDetailInfo deptMentInfo in departMentList.department)
{
//部门人员
DepartMentUser_List userList = GenerDeptUser_List(access_token, deptMentInfo.id);
if (userList != null)
{
foreach (DepartMentUserInfo userInfo in userList.userlist)
{
if (DataType.IsNullOrEmpty(userInfo.avatar))
{
//大图标
string UserIcon = savePath + "/" + userInfo.userid + "Biger.png";
File.Copy(savePath + "/DefaultBiger.png", UserIcon, true);
//小图标
UserIcon = savePath + "/" + userInfo.userid + "Smaller.png";
File.Copy(savePath + "/DefaultSmaller.png", UserIcon, true);
//正常图标
UserIcon = savePath + "/" + userInfo.userid + ".png";
File.Copy(savePath + "/Default.png", UserIcon, true);
}
else
{
//大图标
string headimgurl = userInfo.avatar;
string UserIcon = savePath + "/" + userInfo.userid + "Biger.png";
DataType.HttpDownloadFile(headimgurl, UserIcon);
//小图标
UserIcon = savePath + "/" + userInfo.userid + "Smaller.png";
DataType.HttpDownloadFile(headimgurl, UserIcon);
//正常图标
UserIcon = savePath + "/" + userInfo.userid + ".png";
DataType.HttpDownloadFile(headimgurl, UserIcon);
}
}
}
}
}
return true;
}
catch (Exception ex)
{
}
return false;
}
///
/// 同步钉钉通讯录到CCGPM
///
///
public bool AnsyOrgToCCGPM()
{
string access_token = getAccessToken();
string url = "https://oapi.dingtalk.com/department/list?access_token=" + access_token;
try
{
string str = new HttpWebResponseUtility().HttpResponseGet(url);
DepartMent_List departMentList = FormatToJson.ParseFromJson(str);
//部门集合
if (departMentList != null && departMentList.department != null && departMentList.department.Count > 0)
{
//删除旧数据
ClearOrg_Old();
//获取根部门
DepartMentDetailInfo rootDepartMent = new DepartMentDetailInfo();
foreach (DepartMentDetailInfo deptMenInfo in departMentList.department)
{
if (deptMenInfo.id == "1")
{
rootDepartMent = deptMenInfo;
break;
}
}
//增加跟部门
int deptIdx = 0;
Dept rootDept = new Dept();
rootDept.No = rootDepartMent.id;
rootDept.Name = rootDepartMent.name;
rootDept.ParentNo = "0";
rootDept.DirectInsert();
//部门信息
foreach (DepartMentDetailInfo deptMentInfo in departMentList.department)
{
//增加部门,排除根目录
if (deptMentInfo.id != "1")
{
Dept dept = new Dept();
dept.No = deptMentInfo.id;
dept.Name = deptMentInfo.name;
dept.ParentNo = deptMentInfo.parentid;
dept.DirectInsert();
}
//部门人员
DepartMentUser_List userList = GenerDeptUser_List(access_token, deptMentInfo.id);
if (userList != null)
{
foreach (DepartMentUserInfo userInfo in userList.userlist)
{
Emp emp = new Emp();
DeptEmp deptEmp = new DeptEmp();
//如果账户存在则人员信息不添加,添加关联表
if (emp.IsExit(EmpAttr.No, userInfo.userid) == true)
{
deptEmp.setMyPK(deptMentInfo.id + "_" + emp.No);
deptEmp.FK_Dept = deptMentInfo.id;
deptEmp.FK_Emp = emp.No;
deptEmp.DirectInsert();
continue;
}
//增加人员
emp.No = userInfo.userid;
emp.Name = userInfo.name;
emp.FK_Dept = deptMentInfo.id;
emp.Tel = userInfo.mobile;
emp.Email = userInfo.email;
//emp.Idx = DataType.IsNullOrEmpty(userInfo.order) == true ? 0 : Int32.Parse(userInfo.order);
emp.DirectInsert();
//增加人员与部门对应表
deptEmp.setMyPK(deptMentInfo.id + "_" + emp.No);
deptEmp.FK_Dept = deptMentInfo.id;
deptEmp.FK_Emp = emp.No;
deptEmp.DirectInsert();
}
}
}
#region 处理部门名称全程
//OrgInit_NameOfPath nameOfPath = new OrgInit_NameOfPath();
//if (nameOfPath.IsCanDo)
//nameOfPath.Do();
#endregion
return true;
}
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError(ex.Message);
}
return false;
}
///
/// 增量同步组织结构
///
///
public string AnsyIncrementOrgToGPM()
{
string access_token = getAccessToken();
string url = "https://oapi.dingtalk.com/department/list?access_token=" + access_token;
try
{
StringBuilder append = new StringBuilder();
string str = new HttpWebResponseUtility().HttpResponseGet(url);
DepartMent_List departMentList = FormatToJson.ParseFromJson(str);
if (departMentList == null || departMentList.department == null || departMentList.department.Count == 0)
return "钉钉获取部门出错。";
#region 获取钉钉组织结构,进行更新与新增
//增加跟部门
int deptIdx = 0;
bool doSomeThing = false;
//部门信息
foreach (DepartMentDetailInfo deptMentInfo in departMentList.department)
{
deptIdx++;
doSomeThing = false;
//增加部门,排除根目录
if (deptMentInfo.id != "1")
{
Dept dept = new Dept();
if (dept.IsExit(DeptAttr.No, deptMentInfo.id) == true)
{
if (dept.No == deptMentInfo.id && !dept.Name.Equals(deptMentInfo.name))
{
doSomeThing = true;
append.Append("\r\n部门名称发生变化:" + dept.Name + " --> " + deptMentInfo.name);
}
if (!dept.ParentNo.Equals(deptMentInfo.parentid))
{
doSomeThing = true;
append.Append("\r\n部门父级发生变化:" + dept.ParentNo + " --> " + deptMentInfo.parentid);
}
//有变化,更新
if (doSomeThing == true)
{
dept.No = deptMentInfo.id;
dept.Name = deptMentInfo.name;
dept.ParentNo = deptMentInfo.parentid;
dept.DirectUpdate();
}
}
else
{
//不存在则新增
dept.No = deptMentInfo.id;
dept.Name = deptMentInfo.name;
dept.ParentNo = deptMentInfo.parentid;
dept.DirectInsert();
append.Append("\r\n新增部门:" + deptMentInfo.id + " - " + deptMentInfo.name);
}
}
//部门人员
DepartMentUser_List userList = GenerDeptUser_List(access_token, deptMentInfo.id);
if (userList != null)
{
foreach (DepartMentUserInfo userInfo in userList.userlist)
{
Emp emp = new Emp();
emp.No = userInfo.userid;
DeptEmp deptEmp = new DeptEmp();
//如果账户存在则人员信息不添加,添加关联表
if (emp.RetrieveFromDBSources() > 0)
{
if (!emp.Name.Equals(userInfo.name))
{
emp.Name = userInfo.name;
emp.DirectUpdate();
append.Append("\r\n人员名称发生变化:" + emp.Name + " --> " + userInfo.name);
}
deptEmp.setMyPK(deptMentInfo.id + "_" + emp.No);
if (deptEmp.RetrieveFromDBSources() > 0)
continue;
//增加人员归属部门
deptEmp.FK_Dept = deptMentInfo.id;
deptEmp.FK_Emp = emp.No;
deptEmp.DirectInsert();
append.Append("\r\n增加人员归属部门:" + emp.Name + " - " + deptMentInfo.name);
continue;
}
//增加人员
emp.No = userInfo.userid;
emp.Name = userInfo.name;
emp.FK_Dept = deptMentInfo.id;
emp.Tel = userInfo.mobile;
emp.Email = userInfo.email;
//emp.Idx = DataType.IsNullOrEmpty(userInfo.order) == true ? 0 : Int32.Parse(userInfo.order);
emp.DirectInsert();
append.Append("\r\n增加人员:" + emp.Name + " 所属部门:" + deptMentInfo.name);
//增加人员与部门对应表
deptEmp.setMyPK(deptMentInfo.id + "_" + emp.No);
deptEmp.FK_Dept = deptMentInfo.id;
deptEmp.FK_Emp = emp.No;
deptEmp.DirectInsert();
}
}
}
#endregion
#region GPM组织结构,在钉钉不存在进行删除部门与人员关系表,人员表不进行删除,删除业务人员表WF_Emp
Depts gpm_Depts = new Depts();
gpm_Depts.RetrieveAllFromDBSource();
foreach (Dept gpm_Dept in gpm_Depts)
{
bool isHave = false;
foreach (DepartMentDetailInfo ding_Dept in departMentList.department)
{
if (gpm_Dept.No.Equals(ding_Dept.id))
{
isHave = true;
break;
}
}
//部门在钉钉不存在则进行删除:部门表、部门人员、部门人员角色、部门职位、部门角色
if (isHave == false)
{
////部门角色
//DeptStation deptStation = new DeptStation();
//int iDeptStation = deptStation.Delete(DeptStationAttr.FK_Dept, gpm_Dept.No);
////部门人员角色
//DeptEmpStation deptEmpStation = new DeptEmpStation();
//int iDeptEmpStation = deptEmpStation.Delete(DeptEmpStationAttr.FK_Dept, gpm_Dept.No);
////部门人员
//DeptEmp deptEmp = new DeptEmp();
//int iDeptEmp = deptEmp.Delete(DeptEmpAttr.FK_Dept, gpm_Dept.No);
////部门表
//Dept dt = new Dept(gpm_Dept.No);
//dt.Delete();
//append.Append("\r\n删除部门:" + gpm_Dept.Name + " 部门全路径:" + gpm_Dept.NameOfPath);
//append.Append("\r\n 部门角色 " + iDeptStation + " 条记录");
//append.Append("\r\n 部门人员角色 " + iDeptEmpStation + " 条记录");
//append.Append("\r\n 部门人员 " + iDeptEmp + " 条记录");
}
else
{
//组织结构人员
DeptEmps deptEmps = new DeptEmps();
QueryObject obj = new QueryObject(deptEmps);
obj.AddWhere(DeptEmpAttr.FK_Dept, gpm_Dept.No);
obj.addAnd();
obj.AddWhereNotIn(DeptEmpAttr.FK_Emp, "'admin'");
obj.DoQuery();
//部门下没有人员不需要处理
if (deptEmps == null || deptEmps.Count == 0)
continue;
//钉钉部门人员
DepartMentUser_List userList = GenerDeptUser_List(access_token, gpm_Dept.No);
//部门下没有人员,清除部门下的所有人员
if (userList == null || userList.userlist.Count == 0)
{
append.Append("\r\n删除部门下的人员,部门:" + gpm_Dept.Name + " 部门全路径:" + gpm_Dept.NameOfPath);
foreach (DeptEmp dt in deptEmps)
{
dt.Delete();
Emp ep = new Emp();
ep.No = dt.FK_Emp;
ep.RetrieveFromDBSources();
append.Append("\r\n 人员编号:" + dt.FK_Emp + " 姓名:" + ep.Name);
}
continue;
}
//判断部门下的人员是否存在
foreach (DeptEmp deptEmp in deptEmps)
{
isHave = false;
foreach (DepartMentUserInfo userInfo in userList.userlist)
{
if (deptEmp.FK_Emp.Equals(userInfo.userid))
{
isHave = true;
break;
}
}
//不存在,删除
if (isHave == false)
{
deptEmp.Delete();
Emp ep = new Emp();
ep.No = deptEmp.FK_Emp;
ep.RetrieveFromDBSources();
append.Append("\r\n删除部门下的人员,部门:" + gpm_Dept.Name + " 部门全路径:" + gpm_Dept.NameOfPath);
append.Append("\r\n 人员编号:" + deptEmp.FK_Emp + " 姓名:" + ep.Name);
}
}
}
}
//删除没包含在部门的人员
#endregion
#region 处理部门名称全程
//OrgInit_NameOfPath nameOfPath = new OrgInit_NameOfPath();
//if (nameOfPath.IsCanDo)
// nameOfPath.Do();
#endregion
return append.ToString();
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError(ex.Message);
}
return null;
}
///
/// 获取部门下的人员
///
///
private DepartMentUser_List GenerDeptUser_List(string access_token, string department_id)
{
string url = "https://oapi.dingtalk.com/user/list?access_token=" + access_token + "&department_id=" + department_id;
try
{
string str = new HttpWebResponseUtility().HttpResponseGet(url);
DepartMentUser_List departMentUserList = FormatToJson.ParseFromJson(str);
//部门人员集合
if (departMentUserList != null && departMentUserList.userlist != null && departMentUserList.userlist.Count > 0)
return departMentUserList;
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError(ex.Message);
}
return null;
}
#region 组织结构同步
///
/// 钉钉,新增部门同步钉钉
///
/// 部门基本信息
///
public CreateDepartMent_PostVal GPM_Ding_CreateDept(Dept dept)
{
string access_token = getAccessToken();
string url = "https://oapi.dingtalk.com/department/create?access_token=" + access_token;
try
{
IDictionary list = new Dictionary();
list.Add("name", dept.Name);
list.Add("parentid", dept.ParentNo);
//list.Add("order", "1");
list.Add("createDeptGroup", "true");
string str = BP.Tools.Json.ToJson(list);
str = new HttpWebResponseUtility().HttpResponsePost_Json(url, str);
CreateDepartMent_PostVal postVal = FormatToJson.ParseFromJson(str);
//请求返回信息
if (postVal != null)
{
if (postVal.errcode != "0")
BP.DA.Log.DebugWriteError("钉钉新增部门失败:" + postVal.errcode + "-" + postVal.errmsg);
return postVal;
}
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError(ex.Message);
}
return null;
}
///
/// 钉钉,编辑部门同步钉钉
///
/// 部门基本信息
///
public Ding_Post_ReturnVal GPM_Ding_EditDept(Dept dept)
{
string access_token = getAccessToken();
string url = "https://oapi.dingtalk.com/department/update?access_token=" + access_token;
try
{
IDictionary list = new Dictionary();
list.Add("id", dept.No);
list.Add("name", dept.Name);
//根目录不允许修改
if (dept.No != "1")
{
list.Add("parentid", dept.ParentNo);
}
string str = BP.Tools.FormatToJson.ToJson_FromDictionary(list);
str = new HttpWebResponseUtility().HttpResponsePost_Json(url, str);
Ding_Post_ReturnVal postVal = FormatToJson.ParseFromJson(str);
//请求返回信息
if (postVal != null)
{
if (postVal.errcode != "0")
BP.DA.Log.DebugWriteError("钉钉修改部门失败:" + postVal.errcode + "-" + postVal.errmsg);
return postVal;
}
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError(ex.Message);
}
return null;
}
///
/// 钉钉,删除部门同步钉钉
///
/// 部门编号
///
public Ding_Post_ReturnVal GPM_Ding_DeleteDept(string deptId)
{
string access_token = getAccessToken();
string url = "https://oapi.dingtalk.com/department/delete?access_token=" + access_token + "&id=" + deptId;
try
{
string str = new HttpWebResponseUtility().HttpResponseGet(url);
Ding_Post_ReturnVal postVal = FormatToJson.ParseFromJson(str);
//请求返回信息
if (postVal != null)
{
if (postVal.errcode != "0")
BP.DA.Log.DebugWriteError("钉钉删除部门失败:" + postVal.errcode + "-" + postVal.errmsg);
return postVal;
}
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError(ex.Message);
}
return null;
}
///
/// 钉钉,新增人员同步钉钉
///
/// 部门基本信息
///
public CreateUser_PostVal GPM_Ding_CreateEmp(Emp emp)
{
string access_token = getAccessToken();
string url = "https://oapi.dingtalk.com/user/create?access_token=" + access_token;
try
{
IDictionary list = new Dictionary();
//如果用户编号存在则按照此账号进行新建
if (!(DataType.IsNullOrEmpty(emp.No) || string.IsNullOrWhiteSpace(emp.No)))
{
list.Add("userid", emp.No);
}
list.Add("name", emp.Name);
//部门数组
List listArrary = new List();
listArrary.Add(emp.FK_Dept);
list.Add("department", listArrary);
list.Add("mobile", emp.Tel);
list.Add("email", emp.Email);
string str = BP.Tools.FormatToJson.ToJson_FromDictionary(list);
str = new HttpWebResponseUtility().HttpResponsePost_Json(url, str);
CreateUser_PostVal postVal = FormatToJson.ParseFromJson(str);
//请求返回信息
if (postVal != null)
{
if (postVal.errcode != "0")
{
//在钉钉通讯录已经存在
if (postVal.errcode == "60102") postVal.userid = emp.No;
BP.DA.Log.DebugWriteError("钉钉新增人员失败:" + postVal.errcode + "-" + postVal.errmsg);
}
return postVal;
}
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError(ex.Message);
}
return null;
}
///
/// 钉钉,编辑人员同步钉钉
///
/// 部门基本信息
///
public Ding_Post_ReturnVal GPM_Ding_EditEmp(Emp emp, List deptIds = null)
{
string access_token = getAccessToken();
string url = "https://oapi.dingtalk.com/user/update?access_token=" + access_token;
try
{
IDictionary list = new Dictionary();
list.Add("userid", emp.No);
list.Add("name", emp.Name);
list.Add("email", emp.Email);
list.Add("mobile", emp.Tel);
list.Add("position","");
//钉钉根据此从其他部门删除或增加到其他部门
if (deptIds != null && deptIds.Count > 0)
{
list.Add("department", deptIds);
}
string str = BP.Tools.FormatToJson.ToJson_FromDictionary(list);
str = new HttpWebResponseUtility().HttpResponsePost_Json(url, str);
Ding_Post_ReturnVal postVal = FormatToJson.ParseFromJson(str);
//请求返回信息
if (postVal != null)
{
bool create_Ding_user = false;
//40022企业中的手机号码和登陆钉钉的手机号码不一致,暂时不支持修改用户信息,可以删除后重新添加
if (postVal.errcode == "40022" || postVal.errcode == "40021")
{
create_Ding_user = true;
postVal = GPM_Ding_DeleteEmp(emp.No);
//删除失败
if (postVal.errcode != "0")
create_Ding_user = false;
}
else if (postVal.errcode == "60121")//60121找不到该用户
{
create_Ding_user = true;
}
//需要新增人员
if (create_Ding_user == true)
{
CreateUser_PostVal postUserVal = GPM_Ding_CreateEmp(emp);
//消息传递
postVal.errcode = postUserVal.errcode;
postVal.errmsg = postUserVal.errmsg;
}
if (postVal.errcode != "0")
{
BP.DA.Log.DebugWriteError("钉钉修改人员失败:" + postVal.errcode + "-" + postVal.errmsg);
}
return postVal;
}
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError(ex.Message);
}
return null;
}
///
/// 钉钉,删除人员同步钉钉
///
/// 人员编号
///
public Ding_Post_ReturnVal GPM_Ding_DeleteEmp(string userid)
{
string access_token = getAccessToken();
string url = "https://oapi.dingtalk.com/user/delete?access_token=" + access_token + "&userid=" + userid;
try
{
string str = new HttpWebResponseUtility().HttpResponseGet(url);
Ding_Post_ReturnVal postVal = FormatToJson.ParseFromJson(str);
//请求返回信息
if (postVal != null)
{
if (postVal.errcode != "0")
BP.DA.Log.DebugWriteError("钉钉删除人员失败:" + postVal.errcode + "-" + postVal.errmsg);
return postVal;
}
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError(ex.Message);
}
return null;
}
#endregion
///
/// 清空组织结构
///
private void ClearOrg_Old()
{
//人员
DBAccess.RunSQL("DELETE FROM Port_Emp");
//部门
DBAccess.RunSQL("DELETE FROM Port_Dept");
//部门人员
DBAccess.RunSQL("DELETE FROM Port_DeptEmp");
//部门人员角色
DBAccess.RunSQL("DELETE FROM Port_DeptEmpStation");
//admin 是必须存在的
Emp emp = new Emp();
emp.No = "admin";
emp.Pass = "pub";
emp.Name = "管理员";
emp.FK_Dept = "1";
emp.DirectInsert();
//部门人员关联表
DeptEmp deptEmp = new DeptEmp();
deptEmp.FK_Dept = "1";
deptEmp.FK_Emp = "admin";
deptEmp.DirectInsert();
}
}
}