public async Task <ApiResult> SendCode(string phoneNumber) { using (var dbcontext = new DataContext()) { if (!dbcontext.Managers.Any(t => t.PhoneNumber == phoneNumber)) { throw new Exception("手机号不存在"); } } string sended = _cache.Get <string>("LoginCodeSended" + phoneNumber); if (!string.IsNullOrEmpty(sended)) { throw new Exception("验证码已发送,稍后再试"); } int code = new Random().Next(100000, 999999); var sendRes = await DingTalkHelper.SendCode(_httpClientFactory, phoneNumber, code); if (!sendRes) { throw new Exception("验证码发送失败"); } _cache.Set("LoginCodeSended" + phoneNumber, phoneNumber, DateTime.Now.AddMinutes(1)); _cache.Set("LoginCode" + phoneNumber, code, DateTime.Now.AddMinutes(5)); return(new ApiResult() { Message = "验证码已发送" }); }
public MessageController(ILuisService luis, IAnswerService answerService, IUnknownService issueService, IRedisCachingProvider redis, DingTalkHelper ddHelper, IDepartmentService departmentService, IPermissionService permissionService, IConfiguration configuration, IFeedbackService feedbackService, IAppSettings settings, ILogger <MessageController> logger, KnowledgeMapContext mapContext, DingDingApprovalService dingDingApprovalService) { _logger = logger; _settings = settings; _ddHelper = ddHelper; _configuration = configuration; _ddApprovalService = dingDingApprovalService; _luis = luis; _answerService = answerService; _issueService = issueService; _departService = departmentService; _redis = redis; _feedbackService = feedbackService; _permissionService = permissionService; _httpClient = HttpClientFactory.Create(); _mapContext = mapContext; }
public IActionResult GetDDConfig() { //获取Token var corpId = DingTalkConfig.CorpId; var corpSecret = DingTalkConfig.CorpSecret; var token = DingTalkHelper.GetAccessToken(corpId, corpSecret); //HttpContext.Session.SetString("Token", _token); //获取部门 //string _depart = DingTalkHelper.GetDepartmentsList(_token); //获取JsApiTicket var ticket = DingTalkHelper.GetJsApiTicket(token); //HttpContext.Session.SetString("Ticket", _ticket); //获取url string url = "http://10.0.1.46:5000/";//"http://" + HttpContext.Request.Host.ToString(); //生成config信息 var _ddconfig = DingTalkHelper.GetDingdingConfig(url, ticket); Dictionary <string, string> dic = new Dictionary <string, string>(); if (_ddconfig.Code == ResultModel.ResultCode.Success) { dic = (Dictionary <string, string>)_ddconfig.Data; ViewBag.AgentId = dic["agentId"]; ViewBag.Timestamp = dic["timeStamp"]; ViewBag.Noncestr = dic["nonceStr"]; ViewBag.Signature = dic["signature"]; return(Ok(new { token, ticket, corpId, url, agentId = dic["agentId"], timeStamp = dic["timeStamp"], nonceStr = dic["nonceStr"], signature = dic["signature"] })); } return(Ok()); }
/// <summary> /// 获取GetAccessToken /// </summary> /// <returns></returns> public DingTalkCorpConfig GetAccessToken() { if (DingTalkHelper.CorpConfig != null) { if (string.IsNullOrEmpty(DingTalkHelper.CorpConfig.CorpId) || string.IsNullOrEmpty(DingTalkHelper.CorpConfig.CorpSecret)) { DingTalkHelper.CorpConfig = GetCorpConfig(); DingTalkHelper.CorpConfig.AccessToken = DingTalkHelper.GetAccessToken(DingTalkHelper.CorpConfig.CorpId, DingTalkHelper.CorpConfig.CorpSecret); DingTalkHelper.CorpConfig.ExpiresTime = DateTime.Now; } else { TimeSpan ts = DateTime.Now - DingTalkHelper.AppConfig.ExpiresTime; if (ts.TotalSeconds >= DingTalkHelper.CorpConfig.ExpiresIn) { DingTalkHelper.CorpConfig.AccessToken = DingTalkHelper.GetAccessToken(DingTalkHelper.CorpConfig.CorpId, DingTalkHelper.CorpConfig.CorpSecret); DingTalkHelper.CorpConfig.ExpiresTime = DateTime.Now; } } return(DingTalkHelper.CorpConfig); } else { DingTalkHelper.CorpConfig = GetCorpConfig(); DingTalkHelper.CorpConfig.AccessToken = DingTalkHelper.GetAccessToken(DingTalkHelper.CorpConfig.CorpId, DingTalkHelper.CorpConfig.CorpSecret); DingTalkHelper.CorpConfig.ExpiresTime = DateTime.Now; return(DingTalkHelper.CorpConfig); } }
public GridPage <DingClassify> addNews([FromBody] DingNew newsDetail, int classifyId) { var ress = new GridPage <DingClassify>() { code = ResCode.Success }; //using (var mdReader = new StringReader(newsDetail.OriginalContent)) //{ // using (var html = new StringWriter()) // { // CommonMark.CommonMarkConverter.Convert(mdReader, html); // newsDetail.HtmlContent = html.ToString(); // } //} ress = DataBaseHelper <DingClassify> .Get(_uowProvider, ress, classifyId, x => x.Include(a => a.DingNews)); ress.data.DingNews.Add(newsDetail); ress = DataBaseHelper <DingClassify> .Create(_uowProvider, ress.data, ress, true); if (newsDetail.Status == 1) { OapiMessageCorpconversationAsyncsendV2Request.MsgDomain obj1 = new OapiMessageCorpconversationAsyncsendV2Request.MsgDomain(); obj1.Msgtype = "link"; OapiMessageCorpconversationAsyncsendV2Request.LinkDomain obj2 = new OapiMessageCorpconversationAsyncsendV2Request.LinkDomain(); obj2.PicUrl = newsDetail.Image; obj2.MessageUrl = "eapp://pages/detail/index?id=" + ress.data.Id; obj2.Text = newsDetail.SubTitle; obj2.Title = newsDetail.Title; obj1.Link = obj2; var res = DingTalkHelper.PushMessage("1814645351680963", null, "", obj1); } return(ress); }
public InfoController(IConfiguration configuration, DingTalkHelper ddHelper, IOptions <DTalkConfig> options) { _ddHelper = ddHelper; _configuration = configuration; _ddConfig = options.Value; }
public IActionResult GetUserInfo(string code, string token) { var _userid = DingTalkHelper.GetUserId(token, code); var userInfo = DingTalkHelper.GetUserInfo(token, _userid); ResultModel.ResultInfo <object> result = new ResultModel.ResultInfo <object>(); result.Data = userInfo; // 将当前钉钉用户的用户信息保存到session中 result.Code = ResultModel.ResultCode.Success; result.Message = "免登录,获取个人信息成功!"; return(Ok(result)); }
public ChatController(TokenValidationParameters validationParameters, IChatService chat, DingTalkHelper ddHelper, IRedisCachingProvider redis, IServiceRecordService record, IOptions <DTalkConfig> options) { _ddHelper = ddHelper; _record = record; _redis = redis; _validationParameters = validationParameters; _chat = chat; _ddConfig = options.Value ?? throw new ArgumentNullException(nameof(_ddConfig)); }
//[HandlerAjaxOnly] public ActionResult GetDingTalkAppConfigJson() { string url = Request.Url.PathAndQuery; DingTalkAppConfig config = ding.GetAppConfig("1"); if (config != null) { config.TimeStamp = DingTalkHelper.GetTimeStamp(); config.NonceStr = "metec"; string jsapi_ticket = DingTalkHelper.GetJsApiTicket(config.AccessToken); config.Signature = DingTalkHelper.GetAccessSignature(config.NonceStr, config.TimeStamp.ToString(), jsapi_ticket, url); } return(Content(config.ToJson())); }
public GridPage <DingNew> editNew([FromBody] DingNew newsDetail, int classifyId) { var res = new GridPage <DingClassify>() { code = ResCode.Success }; var ress = new GridPage <DingNew>() { code = ResCode.Success }; res = DataBaseHelper <DingClassify> .Get(_uowProvider, res, classifyId, x => x.Include(a => a.DingNews)); var model = res.data.DingNews.Where(a => a.Id == newsDetail.Id).FirstOrDefault(); if (model != null) { //model.Image = newsDetail.Image; //model.OriginalContent = newsDetail.OriginalContent; //model.Status = newsDetail.Status; //model.Title = newsDetail.Title; //model.UpdateTime = DateTime.Now; //model.HtmlContent = newsDetail.HtmlContent; //model.Editer = newsDetail.Editer; //model.SubTitle = newsDetail.SubTitle; newsDetail.DingClassify = res.data; newsDetail.CreateTime = model.CreateTime; newsDetail.UpdateTime = DateTime.Now; if (newsDetail.Status == 1) { OapiMessageCorpconversationAsyncsendV2Request.MsgDomain obj1 = new OapiMessageCorpconversationAsyncsendV2Request.MsgDomain(); obj1.Msgtype = "link"; OapiMessageCorpconversationAsyncsendV2Request.LinkDomain obj2 = new OapiMessageCorpconversationAsyncsendV2Request.LinkDomain(); obj2.PicUrl = newsDetail.Image; obj2.MessageUrl = "eapp://pages/detail/index?id=" + res.data.Id; obj2.Text = newsDetail.SubTitle; obj2.Title = newsDetail.Title; obj1.Link = obj2; var result = DingTalkHelper.PushMessage("1814645351680963", null, "", obj1); } ress = DataBaseHelper <DingNew> .Edit(_uowProvider, newsDetail, ress); } else { ress.code = ResCode.Error; ress.msg = "记录不存在"; } return(ress); }
private object GetDingTalkCorpConfig(string url) { DingTalkCorpConfig config = ding.GetAccessToken(); if (config != null) { config.TimeStamp = DingTalkHelper.GetTimeStamp(); config.NonceStr = DingTalkHelper.GuidTo16String(); string jsapi_ticket = DingTalkHelper.GetJsApiTicket(config.AccessToken); config.url = url; config.jsapi_ticket = jsapi_ticket; config.Signature = DingTalkHelper.GetAccessSignature(config.NonceStr, config.TimeStamp.ToString(), jsapi_ticket, url); } return(config); }
//[HandlerAjaxOnly] public ActionResult GetDingTalkCorpConfigJson(string url) { DingTalkCorpConfig config = ding.GetAccessToken(); if (config != null) { config.TimeStamp = DingTalkHelper.GetTimeStamp(); config.NonceStr = DingTalkHelper.GuidTo16String(); string jsapi_ticket = DingTalkHelper.GetJsApiTicket(config.AccessToken); config.url = url; config.jsapi_ticket = jsapi_ticket; config.Signature = DingTalkHelper.GetAccessSignature(config.NonceStr, config.TimeStamp.ToString(), jsapi_ticket, url); } return(Content(config.ToJson())); }
/// <summary> /// 定时器事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { try { ////员工编号 //string employeeNo = ConfigurationManager.AppSettings["employeeNo"]; ////循环执行,taskType参数分别为0和1 //for (int i = 0; i < 2; i++) //{ // object[] arg = { (object)"{\"userNo\":\"" + employeeNo + "\",\"taskType\":\"" + i + "\"}" }; // InvokeWebService(arg, i.ToString()); //} //需提醒的任务列表DataSet DataSet dsRmd = trBll.GetList("ISREMINDED = 0 AND DATE_SUB(CURDATE(), INTERVAL 100 DAY) <= date(CREATEDATE)"); if (dsRmd != null && dsRmd.Tables.Count > 0 && dsRmd.Tables[0].Rows.Count > 0) { //需要提醒的任务DataTable DataTable dtRmd = dsRmd.Tables[0]; StringBuilder sbTaskNos = new StringBuilder("'',"); //遍历去除需要提醒的任务的编号 for (int i = 0; i < dtRmd.Rows.Count; i++) { sbTaskNos.AppendFormat("'{0}',", dtRmd.Rows[i]["FOLDER"]); } //LogHelper.WriteLine("需要提醒的任务:" + sbTaskNos); ProjectBLL pBll = new ProjectBLL(); //根据任务编号获取相应的任务列表 DataSet dsProject = pBll.GetListSimpleUnion(string.Format(" AND TASKNO IN ({0})", sbTaskNos.ToString().TrimEnd(','))); if (dsProject == null || dsProject.Tables.Count == 0 || dsProject.Tables[0].Rows.Count == 0) { return; } DataTable dtProject = dsProject.Tables[0]; DataSet dsEmp = eBll.GetList(string.Empty, "EMPLOYEENO"); //获取所有员工列表 DataTable dtEmployees = dsEmp.Tables[0]; //需要抄送的员工的钉钉UserId string externalDingdingUserId = Convert.ToString(ConfigurationManager.AppSettings["externalDingdingUserId"]); // 任务详细页面地址 string taskDetailsPageUrl = Convert.ToString(ConfigurationManager.AppSettings["taskDetailsPageUrl"]); //遍历员工列表 for (int i = 0; i < dtEmployees.Rows.Count; i++) { //用户ID string userId = dtEmployees.Rows[i]["ID"].ToString(); //用户在钉钉系统中的UserId string dingtalkUserId = dtEmployees.Rows[i]["DINGTALKUSERID"].ToString(); //钉钉UserId为空,就没有继续执行的必要了,直接执行下一个员工 if (string.IsNullOrEmpty(dingtalkUserId)) { continue; } //员工编号 string empNo = dtEmployees.Rows[i]["EMPLOYEENO"].ToString(); //用户类型 string userType = dtEmployees.Rows[i]["TYPE"].ToString();// ConfigurationManager.AppSettings["userType"]; //筛选条件 string strDtRmdSelect = string.Empty; //用户类型为1,是客服,当时插入数据时录入的是员工ID if (userType == "1") { strDtRmdSelect = string.Format(" enteringPerson = '{0}' AND TOUSERTYPE = '{1}'", userId, userType); } //用户类型为2,是造价员,当时插入数据时录入的是员工编号 else if (userType == "2") { strDtRmdSelect = string.Format(" employeeNo = '{0}' AND TOUSERTYPE = '{1}'", empNo, userType); } //用户类型为0,是针对管理员进行的提醒 else if (userType == "0") { strDtRmdSelect = string.Format(" TOUSERTYPE = '{0}'", userType); } //客服和造价员均不是,就不提醒了 else { continue; } DataRow[] drRmd = dtRmd.Select(strDtRmdSelect); //对任务提醒列表进行遍历 for (int drEmpRmdIndex = 0 /*针对某个员工的提醒索引*/; drEmpRmdIndex < drRmd.Length; drEmpRmdIndex++) { string taskType = drRmd[drEmpRmdIndex]["taskType"].ToString(); //提醒消息文本 string remindMsg = string.Empty; string taskNo = drRmd[drEmpRmdIndex]["folder"].ToString(); string finishedEmpNo = drRmd[drEmpRmdIndex]["EMPLOYEENO"].ToString(); string kefuEmpId = Convert.ToString(drRmd[drEmpRmdIndex]["ENTERINGPERSON"]); string wangwangName = string.Empty; string shopName = string.Empty; string projectId = string.Empty; DataRow[] drProject = dtProject.Select(string.Format(" TASKNO = '{0}'", taskNo)); if (drProject.Length > 0) { wangwangName = drProject[0]["wangwangName"].ToString(); shopName = drProject[0]["shop"].ToString(); projectId = drProject[0]["ID"].ToString(); } drProject = null; //客服。如果是客服的话,是收不到任务类型为2(即任务倒计时)提醒的。虽然在数据插入时已基本杜绝这种条件同时成立,但这里还是在条件中限制一下。 if (userType == "1" && taskType != "2") { // 客服需接收的提醒类型有:普通任务的完成提醒、售后修改任务的完成提醒、新的疑问提醒和疑问答复提醒共 4 种 //普通任务 if (taskType == "0") { remindMsg = string.Format("{0}\n完成人:{1}\n客户ID:{2}\nStore ID:{3}", taskNo, finishedEmpNo, wangwangName, shopName); } //售后任务 else if (taskType == "1") { string modifyFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString(); remindMsg = string.Format("{0}的{1}\n完成人:{2}\n客户ID:{3}\nStore ID:{4}", taskNo, modifyFolder, finishedEmpNo, wangwangName, shopName); } // 新的疑问 else if (taskType == "4") { string questionFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString(); remindMsg = string.Format("【新疑问】\n任务:{0}的{1}\n提问人:客服", taskNo, questionFolder); } // 疑问答复 else if (taskType == "5") { string questionFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString(); remindMsg = string.Format("【新答复】\n任务:{0}的{1}\n答复人:{2}", taskNo, questionFolder, finishedEmpNo); } //客服和造价员均不是,就不提醒了 else { continue; } // 在这里,录入一条动态到客服的动态列表中 try { if (!string.IsNullOrEmpty(remindMsg)) { TaskTrendBLL ttBll = new TaskTrendBLL(); TaskTrend trend = new TaskTrend(); trend.ID = Guid.NewGuid().ToString(); trend.PROJECTID = ttBll.GetProjectIDByTaskNo(taskNo); trend.EMPLOYEEID = kefuEmpId;// ttBll.GetEmployeeIDByEmployeeNo(empNo); trend.DESCRIPTION = remindMsg; trend.CREATEDATE = DateTime.Now; trend.READSTATUS = false; // 客服类型 trend.TYPE = 2; ttBll.Add(trend); } } catch (Exception ex) { LogHelper.WriteLine("添加任务" + taskNo + "动态失败:" + ex.Message + ex.StackTrace); } } //员工(造价员) else if (userType == "2") { //LogHelper.Write("工程师"); // 工程师需接收的提醒有:普通任务(即新任务)提醒、售后任务(即新的修改)提醒、新的疑问和疑问答复共 4 种 string taskTrendMsg = string.Empty; //普通任务 if (taskType == "0") { remindMsg = string.Format("【新任务提醒】\r\n{0},您有一个新任务:{1}", empNo, taskNo); taskTrendMsg = string.Format("【新任务】{0}", taskNo); } //售后任务 else if (taskType == "1") { string modifyFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString(); remindMsg = string.Format("【修改任务提醒】\r\n{0},您有一个新的修改任务:{1}的{2}", empNo, taskNo, modifyFolder); taskTrendMsg = string.Format("【新修改任务】{0}的{1}", taskNo, modifyFolder); if (!string.IsNullOrEmpty(Convert.ToString(drRmd[drEmpRmdIndex]["SENTCOUNT"]))) { int sentCount = Convert.ToInt32(drRmd[drEmpRmdIndex]["SENTCOUNT"]); if (sentCount > 0) { remindMsg += string.Format("(客服{0}次提醒)", sentCount); taskTrendMsg += string.Format("(客服{0}次提醒)", sentCount); } } } else if (taskType == "2") { remindMsg = string.Format("【任务预警】\r\n{0},任务{1}距交稿时间已不足3小时", empNo, taskNo); taskTrendMsg = string.Format("【任务预警】任务{0}仅剩3小时", taskNo); } // 新的疑问 else if (taskType == "4") { string questionFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString(); remindMsg = string.Format("【新疑问提醒】\r\n任务:{0}的{1}\r\n提问人:{2}", taskNo, questionFolder, finishedEmpNo); taskTrendMsg = string.Format("【新疑问】任务{0}的{1}", taskNo, questionFolder); } // 疑问答复 else if (taskType == "5") { string questionFolder = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString(); remindMsg = string.Format("【新的疑问答复】\r\n任务:{0}的{1}\r\n答复人:客服", taskNo, questionFolder); taskTrendMsg = $"【疑问答复】任务{taskNo}的{questionFolder}"; } // 任务状态变更 else if (taskType == "6") { string taskStatusUpdateMessage = drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString(); remindMsg = string.Format("【任务状态变更】\n任务{0} {1}", taskNo, taskStatusUpdateMessage); taskTrendMsg = remindMsg; } else { continue; } // 在这里,录入一条动态到工程师主页的动态列表中 try { if (!string.IsNullOrEmpty(taskTrendMsg)) { TaskTrendBLL ttBll = new TaskTrendBLL(); TaskTrend trend = new TaskTrend(); trend.ID = Guid.NewGuid().ToString(); trend.PROJECTID = ttBll.GetProjectIDByTaskNo(taskNo); trend.EMPLOYEEID = ttBll.GetEmployeeIDByEmployeeNo(empNo); trend.DESCRIPTION = taskTrendMsg; trend.CREATEDATE = DateTime.Now; // 工程师类型 trend.TYPE = 1; ttBll.Add(trend); } } catch (Exception ex) { LogHelper.WriteLine("添加任务" + taskNo + "动态失败:" + ex.Message + ex.StackTrace); } } //管理员,只接收任务待分配的提醒 else if (userType == "0") { //LogHelper.WriteLine("管理员"); // 3 是任务待分配的 if (taskType == "3") { remindMsg = string.Format("【任务待分配提醒】任务{0}待分配", taskNo); } else { continue; } } #region 调用钉钉接口发送消息 //remindMsg = string.Empty;//测试时,置空 if (!string.IsNullOrEmpty(remindMsg)) { //首先获取accessToken string accessTokenResult = DingTalkHelper.GetAccessToken(); JObject jObj = JObject.Parse(accessTokenResult); //返回码 string errcode = jObj["errcode"].ToString(); //accessToken string accessToken = string.Empty; //获取成功 if (errcode == "0") { accessToken = jObj["access_token"].ToString(); //发送消息接口的请求地址 string postUrl = string.Format("https://oapi.dingtalk.com/message/send?access_token={0}", accessToken); //钉钉企业应用id,这个值代表以哪个应用的名义发送消息 string agentid = ConfigurationManager.AppSettings["agentid"]; //定义接收者 string toUser = dingtalkUserId; //如果额外的接收者不为空 if (!string.IsNullOrEmpty(externalDingdingUserId)) { toUser += externalDingdingUserId; } //如果任务类型为3,说明是新任务待分配提醒 if (taskType == "3") { toUser = Convert.ToString(ConfigurationManager.AppSettings["taskAllotmentTipDingdingUserId"]); } string param = ""; if (userType == "2" || userType == "0") { param = "{\"touser\": \"" + toUser + "\", \"msgtype\": \"text\", \"agentid\": \"" + agentid + "\",\"text\":{" + "\"content\": \"" + remindMsg + "\"}}"; } else if (userType == "1") { param = "{\"touser\": \"" + toUser + "\", \"msgtype\": \"link\", \"agentid\": \"" + agentid + "\",\"link\":{" + "\"messageUrl\": \"" + taskDetailsPageUrl + projectId + "\", \"picUrl\":\"@lALOACZwe2Rk\", \"title\":\"提醒\", \"text\": \"" + remindMsg + "\"}}"; } LogHelper.WriteLine(param); //接口返回结果 object msgSendResult = WebServiceHelper.Post(postUrl, param); //将Object类型结果转换为JObject JObject jsonSendResult = JObject.Parse(msgSendResult.ToString()); //返回码 errcode = jsonSendResult["errcode"].ToString(); //返回码为0,发送成功 if (errcode == "0") { LogHelper.WriteLine("发送至" + empNo + "成功"); string userIdOrEmpNo = string.Empty; //userType为1,是客服 if (userType == "1") { userIdOrEmpNo = userId; } //userType为2,是工程师 else if (userType == "2") { userIdOrEmpNo = empNo; } //将消息置为已读 bool setIsReminded = trBll.SetIsReminding(userIdOrEmpNo, taskNo, drRmd[drEmpRmdIndex]["MODIFYFOLDER"].ToString(), taskType, userType); if (!setIsReminded) { LogHelper.WriteLine("数据库设置消息已读失败,任务编号:" + taskNo); } } else { LogHelper.WriteLine("发送至" + empNo + "失败。errcode:" + errcode + ",errmsg:" + jsonSendResult["errmsg"]); } } else { string errmsg = jObj["errmsg"].ToString(); LogHelper.WriteLine("access_token获取失败,errmsg:" + errmsg); } } #endregion ////循环执行,taskType参数分别为0、1和2,分别表示普通任务、售后任务和倒计时1小时这三种提醒 //for (int j = 0; j < 3; j++) //{ // //拼接参数,用户ID、任务类型和用户类型 // object[] arg = { (object)"{\"userId\":\"" + userId + "\",\"taskType\":\"" + j + "\",\"userType\":\"" + userType + "\"}" }; // if (userType == "0") // { // InvokeWebService(arg, j.ToString()); // } // else if (userType == "1" && j < 2)//i小于2,防止客服也收到倒计时提醒 // { // InvokeWebServiceCustomerRemind(arg, j.ToString()); // } //} } drRmd = null; } dtEmployees = null; dsEmp = null; dtProject = null; dsProject = null; dtRmd = null; } dsRmd = null; ////录入人ID //string userId = ConfigurationManager.AppSettings["userId"]; ////用户类型 //string userType = ConfigurationManager.AppSettings["userType"]; ////循环执行,taskType参数分别为0、1和2,分别表示普通任务、售后任务和倒计时1小时这三种提醒 //for (int i = 0; i < 3; i++) //{ // //拼接参数,用户ID、任务类型和用户类型 // object[] arg = { (object)"{\"userId\":\"" + userId + "\",\"taskType\":\"" + i + "\",\"userType\":\"" + userType + "\"}" }; // if (userType == "0") // { // InvokeWebService(arg, i.ToString()); // } // else if (userType == "1" && i < 2)//i小于2,防止客服也收到倒计时提醒 // { // InvokeWebServiceCustomerRemind(arg, i.ToString()); // } //} } catch (Exception ex) { LogHelper.WriteLine(ex.Message + ex.StackTrace); } finally { SetWorkingSet(750000); } }
protected void btnInvokeWebService_Click(object sender, EventArgs e) { Employee emp = new Employee(); emp.NAME = "李泓霖"; emp.EMPLOYEENO = "009"; emp.MOBILEPHONE = "18862323333"; string accessTokenResult = DingTalkHelper.GetAccessToken(); JObject jObj = JObject.Parse(accessTokenResult); string errcode = jObj["errcode"].ToString(); string accessToken = string.Empty; if (errcode == "0") { accessToken = jObj["access_token"].ToString(); //object[] param ={ (object)"{\"name\":\"" + emp.NAME + "\",\"orderInDepts\":\"{1:10,2:20}\",\"department\":[1,2],\"position\":\"产品经理\",\"mobile\":\"" + emp.MOBILEPHONE + // "\",\"tel\":\"010-12333\",\"workPlace\":\"\",\"remark\":\"\",\"email\":\"\",\"jobnumber\":\"" + emp.EMPLOYEENO + "\",\"isHide\":false,\"isSenior\":false}"}; //object userCreateResult = WebServiceHelper.InvokeWebService(postUrl, null, param); //JObject jCreateResult = JObject.Parse(userCreateResult.ToString()); //errcode = jCreateResult["errcode"].ToString(); //if (errcode == "0") //{ // string dingTalkUserId = jCreateResult["userid"].ToString(); //} //else //{ //} string position = string.Empty; //总经办 if (rdbGMO.Checked) { position = rdbGMO.Text; } //客服 else if (rdbCustomerService.Checked) { position = rdbCustomerService.Text; } //造价员 else if (rdbEmployee.Checked) { position = rdbEmployee.Text; } string postUrl = string.Format("https://oapi.dingtalk.com/user/create?access_token={0}", accessToken); string param = "{\"name\":\"" + emp.NAME + "\", \"orderInDepts\":\"{1:10}\", \"department\":[1], \"position\":\"" + position + "\", \"mobile\":\"" + emp.MOBILEPHONE + "\", \"tel\":\"010-12333\", \"workPlace\":\"\", \"remark\":\"\", \"email\":\"\", \"jobnumber\":\"" + emp.EMPLOYEENO + "\", \"isHide\":false, \"isSenior\":false}"; object userCreateResult = WebServiceHelper.Post(postUrl, param); JObject jCreateResult = JObject.Parse(userCreateResult.ToString()); errcode = jCreateResult["errcode"].ToString(); if (errcode == "0") { string dingTalkUserId = jCreateResult["userid"].ToString(); emp.DINGTALKUSERID = dingTalkUserId; try { //更新钉钉UserId bool uptFlag = eBll.Update(emp); //更新成功 if (uptFlag) { ExecuteScript("AlertDialog('成功关联钉钉UserId!', null)"); return; } //更新失败 else { ExecuteScript("AlertDialog('关联钉钉UserId失败!', null)"); return; } } catch (Exception ex) { LogHelper.WriteLine("关联钉钉UserId失败。" + ex.Message + ex.StackTrace); ExecuteScript("AlertDialog('操作失败!', null)"); return; } } else { } } else { } }
/// <summary> /// 添加员工 /// </summary> private void AddEmployee() { string employeeNO = txtEmployeeNo.Text.Trim(); //员工编号 try { //判断编号是否已经使用 bool isExist = eBll.IsExist(employeeNO); if (isExist) { ExecuteScript("AlertDialog('员工编号已存在!', null);"); return; } string name = txtName.Text.Trim(); //员工姓名 int gender = 0; //员工性别 if (rdbFemale.Checked) { gender = 1; } //出生日期 string birthdate = txtBirthDate.Text.Trim(); Employee emp = new Employee(); emp.ID = Guid.NewGuid().ToString(); emp.EMPLOYEENO = employeeNO; //密码加密 emp.PASSWORD = AES.Encrypt("666666", "0512000000000512"); //姓名 emp.NAME = name == null ? null : name; //性别 emp.SEX = gender == 0; if (!string.IsNullOrEmpty(birthdate)) { emp.BIRTHDATE = Convert.ToDateTime(birthdate); } //手机号码 emp.MOBILEPHONE = txtMobilePhone.Text.Trim(); //转正日期 emp.TOREGULARDATE = Convert.ToDateTime(txtToRegularDate.Text.Trim()); //员工类型,0:总经办,1:客服,2:造价员 decimal userType = 0; //总经办 if (rdbGMO.Checked) { userType = 0; } //客服 else if (rdbCustomerService.Checked) { userType = 1; } //造价员 else if (rdbEmployee.Checked) { userType = 2; } // 其他用户类型 else if (rdbOtherUserType.Checked) { if (!string.IsNullOrEmpty(txtUserType.Text.Trim())) { userType = Convert.ToDecimal(txtUserType.Text.Trim()); } } emp.TYPE = userType; emp.ISBRANCHLEADER = rblIsBranchLeader.SelectedValue == "1"; emp.ISEXTERNAL = rblIsExternal.SelectedValue == "1"; //启用状态 emp.AVAILABLE = 1; bool flag = eBll.Add(emp); //本系统添加成功 if (flag) { if (rblAddRole.SelectedValue == "1") { // 添加角色 EmployeeRole empRole = new EmployeeRole(); empRole.ID = Guid.NewGuid().ToString(); empRole.EMPLOYEEID = emp.ID; // 1 客服 if (emp.TYPE == 1) { empRole.ROLEID = "fea3a06f-6d97-45d3-93f7-b145c158eb27"; } // 2 工程师 else if (emp.TYPE == 2) { empRole.ROLEID = "2B43010866666af2b73d78c35288d565"; } if (!string.IsNullOrEmpty(empRole.ROLEID)) { new EmployeeRoleBLL().Add(empRole); } } // 创建员工编号同名目录 string rootPath = Convert.ToString(ConfigurationManager.AppSettings["employeePath"]); string employeeFolder = Path.Combine(rootPath, emp.EMPLOYEENO); if (!Directory.Exists(employeeFolder)) { Directory.CreateDirectory(employeeFolder); } // 2018-05-19 添加 // 添加员工的任务分成配置 EmployeeProportionBLL epBll = new EmployeeProportionBLL(); EmployeeProportion empProportion = new EmployeeProportion(); empProportion.ID = Guid.NewGuid().ToString(); empProportion.EMPLOYEEID = emp.ID; empProportion.PROPORTION = 0.3m; empProportion.PARENTEMPLOYEEID = null; empProportion.ISBRANCHLEADER = emp.ISBRANCHLEADER; epBll.Add(empProportion); // 任务分成配置结束 // 2018-05-20 添加 // 添加员工的默认账户 EmployeeAccount empAcct = new EmployeeAccount(); empAcct.ID = Guid.NewGuid().ToString(); empAcct.EMPLOYEEID = emp.ID; empAcct.AMOUNT = 0m; empAcct.PAIDAMOUNT = 0m; empAcct.SURPLUSAMOUNT = 0m; empAcct.OTHERSAMOUNT = 0m; empAcct.CREATEDATE = DateTime.Now; empAcct.LASTUPDATEDATE = DateTime.Now; EmployeeAccountBLL empAcctBll = new EmployeeAccountBLL(); empAcctBll.Add(empAcct); // 员工账户结束 #region 调用钉钉接口,添加员工到钉钉 //如果选择了钉钉同步创建 if (Request.Form["sync"] == "rdbSync") { string accessTokenResult = DingTalkHelper.GetAccessToken(); JObject jObj = JObject.Parse(accessTokenResult); string errcode = jObj["errcode"].ToString(); string accessToken = string.Empty; if (errcode == "0") { accessToken = jObj["access_token"].ToString(); string postUrl = string.Format("https://oapi.dingtalk.com/user/create?access_token={0}", accessToken); //岗位 string position = string.Empty; //钉钉系统中对应的部门ID string departmentid = string.Empty; ////总经办 //if (rdbGMO.Checked) //{ // position = rdbGMO.Text; // departmentid = "37037510"; //} ////客服 //else if (rdbCustomerService.Checked) //{ // position = rdbCustomerService.Text; // departmentid = "36958636"; //} ////造价员 //else if (rdbEmployee.Checked) //{ // position = rdbEmployee.Text; // departmentid = "36961466"; //} departmentid = "110817907"; //\"orderInDepts\":\"{1:10}\", \"remark\":\"\", \"tel\":\"010-12333\", \"workPlace\":\"\", \"isHide\":false, \"isSenior\":false string param = "{\"name\":\"" + emp.NAME + "\", \"department\":[" + departmentid + "], \"position\":\"" + position + "\", \"mobile\":\"" + emp.MOBILEPHONE + "\", \"email\":\"" + emp.EMAIL + "\", \"jobnumber\":\"" + emp.EMPLOYEENO + "\",}"; object userCreateResult = WebServiceHelper.Post(postUrl, param); JObject jCreateResult = JObject.Parse(userCreateResult.ToString()); //返回码 errcode = jCreateResult["errcode"].ToString(); //返回消息 string errmsg = jCreateResult["errmsg"].ToString(); //返回码为0,成功 if (errcode == "0") { string dingTalkUserId = jCreateResult["userid"].ToString(); emp.DINGTALKUSERID = dingTalkUserId; try { //关联钉钉UserId bool uptFlag = eBll.Update(emp); //关联成功 if (uptFlag) { //弹出提示并刷新当前页面 ExecuteScript("alert('添加成功!');window.location.href='/Pages/Admin/EmployeeAdd?UserId=" + emp.ID + "'"); } else { ExecuteScript("AlertDialog('关联钉钉UserId失败!', null);"); } } //本地OA更新钉钉UserId失败 catch (Exception ex) { LogHelper.WriteLine("自动关联钉钉UserId失败。" + ex.Message + ex.StackTrace); ExecuteScript("AlertDialog('操作失败!', null)"); } } else { LogHelper.WriteLine("用户在OA系统创建成功,但在钉钉系统创建失败,原因:" + errmsg); //ExecuteScript("AlertDialog('OA系统已成功创建用户,但该用户在钉钉系统中创建失败,请人工在钉钉系统中添加。<br />钉钉系统中添加成功后,需要将其系统中的UserId填写并关联到本系统中。', null)"); ExecuteScript("alert('OA系统已成功创建用户,但该用户在钉钉系统中创建失败,请人工在钉钉系统中添加。钉钉系统中添加成功后,需要将其系统中的UserId填写并关联到本系统中。');window.location.href='EmployeeAdd?UserId=" + emp.ID + "';"); } } else { ExecuteScript("AlertDialog('用户已在本系统中成功创建,但获取钉钉token失败,并未在钉钉系统中成功添加用户,请人工添加!', null)"); } } else { ExecuteScript("alert('本系统添加成功但尚未关联钉钉UserId,请尽快关联!');window.location.href='/Pages/Admin/EmployeeAdd?UserId=" + emp.ID + "';"); } #endregion } //添加失败 else { ExecuteScript("AlertDialog('添加失败!', null)"); } } catch (Exception ex) { string exMsg = ex.Message; LogHelper.WriteLine(string.Format("员工添加出错。" + exMsg + ex.StackTrace)); //写入文本日志 string script = string.Format("AlertDialog('服务器错误,请联系管理员!<p>{0}</p>'), null", exMsg); ExecuteScript(script); } }