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(); } } }