/// <summary> /// 获取AccessToken ToDo钉钉配置 /// </summary> /// <returns></returns> //private string GetAccessToken() //{ // DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); // OapiGettokenRequest request = new OapiGettokenRequest(); // request.Appkey = "ding7xespi5yumrzraaq"; // request.Appsecret = "idKPu4wVaZjBKo6oUvxcwSQB7tExjEbPaBpVpCEOGlcZPsH4BDx-sKilG726-nC3"; // request.SetHttpMethod("GET"); // OapiGettokenResponse response = client.Execute(request); // return response.AccessToken; //} /// <summary> /// 上传图片并返回MeadiaId /// </summary> public object UpdateAndGetMediaId(string path) { IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/media/upload"); OapiMediaUploadRequest request = new OapiMediaUploadRequest(); request.Type = "image"; request.Media = new Top.Api.Util.FileItem($@"{path}"); DingDingAppConfig ddConfig = _dingDingAppService.GetDingDingConfigByApp(DingDingAppEnum.任务拜访); string accessToken = _dingDingAppService.GetAccessToken(ddConfig.Appkey, ddConfig.Appsecret); OapiMediaUploadResponse response = client.Execute(request, accessToken); return(response); }
public async Task <DingDingUserDto> GetDingDingUserByCodeAsync(string code, DingDingAppEnum appId) { ddConfig = _dingDingAppService.GetDingDingConfigByApp(appId); //测试环境注释 var assessToken = _dingDingAppService.GetAccessToken(ddConfig.Appkey, ddConfig.Appsecret); var userId = _dingDingAppService.GetUserId(assessToken, code); //var userId = "16550049332052666774"; // var userId = "1926112826844702"; var query = await _employeeRepository.GetAsync(userId); var dduser = query.MapTo <DingDingUserDto>(); var area = await _employeeManager.GetAreaCodeByUserIdAsync(dduser.Id);//钉钉用户区县权限 dduser.Area = area.ToString(); dduser.AreaCode = area; return(dduser); }
/// <summary> /// 发送钉钉工作通知 /// </summary> public async Task <APIResultDto> SendMessageToEmployeeAsync(GetSchedulesInput input) { try { //获取消息模板配置 string messageTitle = await _systemdataRepository.GetAll().Where(v => v.ModelId == ConfigModel.烟叶服务 && v.Type == ConfigType.烟叶公共 && v.Code == GYCode.MessageTitle).Select(v => v.Desc).FirstOrDefaultAsync(); string messageMediaId = await _systemdataRepository.GetAll().Where(v => v.ModelId == ConfigModel.烟叶服务 && v.Type == ConfigType.烟叶公共 && v.Code == GYCode.MediaId).Select(v => v.Desc).FirstOrDefaultAsync(); //获取UserIds int pageIndex = 1; //skip int pageSize = 20; //take int count = await _scheduledetailRepository.GetAll().Where(v => v.ScheduleId == input.ScheduleId).Select(v => v.EmployeeId).Distinct().AsNoTracking().CountAsync(); var ids = await _scheduledetailRepository.GetAll().Where(v => v.ScheduleId == input.ScheduleId).Select(v => v.EmployeeId).Distinct().AsNoTracking().ToListAsync(); float frequency = (float)count / pageSize;//计算次数 DingDingAppConfig ddConfig = _dingDingAppService.GetDingDingConfigByApp(DingDingAppEnum.任务拜访); string accessToken = _dingDingAppService.GetAccessToken(ddConfig.Appkey, ddConfig.Appsecret); for (int i = 0; i < Math.Ceiling(frequency); i++) { var temp = ids.Skip((pageIndex - 1) * pageSize).Take(pageSize); string tempIds = string.Join(",", temp.ToArray()); //发送工作消息 /*IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"); * OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request(); * request.UseridList = tempIds; * request.ToAllUser = false; * request.AgentId = ddConfig.AgentID; * * OapiMessageCorpconversationAsyncsendV2Request.MsgDomain msg = new OapiMessageCorpconversationAsyncsendV2Request.MsgDomain(); * msg.Link = new OapiMessageCorpconversationAsyncsendV2Request.LinkDomain(); * msg.Msgtype = "link"; * msg.Link.Title = messageTitle; * msg.Link.Text = input.ScheduleName + " " + DateTime.Now.ToString(); * msg.Link.PicUrl = messageMediaId; * msg.Link.MessageUrl = "eapp://"; * request.Msg_ = msg; * OapiMessageCorpconversationAsyncsendV2Response response = client.Execute(request, accessToken);*/ var msgdto = new DingMsgDto(); msgdto.userid_list = tempIds; msgdto.to_all_user = false; msgdto.agent_id = ddConfig.AgentID; msgdto.msg.msgtype = "link"; msgdto.msg.link.title = messageTitle; msgdto.msg.link.text = input.ScheduleName + " " + DateTime.Now.ToString(); msgdto.msg.link.picUrl = messageMediaId; msgdto.msg.link.messageUrl = "eapp://"; var url = string.Format("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={0}", accessToken); var jsonString = SerializerHelper.GetJsonString(msgdto, null); using (MemoryStream ms = new MemoryStream()) { var bytes = Encoding.UTF8.GetBytes(jsonString); ms.Write(bytes, 0, bytes.Length); ms.Seek(0, SeekOrigin.Begin); var obj = Post.PostGetJson <object>(url, null, ms); }; pageIndex++; } return(new APIResultDto() { Code = 0, Msg = "钉钉消息发送成功" }); } catch (Exception ex) { Logger.ErrorFormat("SendMessageToEmployeeAsync errormsg{0} Exception{1}", ex.Message, ex); return(new APIResultDto() { Code = 901, Msg = "钉钉消息发送失败" }); } }
/// <summary> /// 获取钉钉配置根据 应用App /// </summary> public DingDingAppConfig GetDingDingConfigByApp(DingDingAppEnum app) { DingDingAppConfig config = new DingDingAppConfig(); var configList = new List <SystemData>(); switch (app) { case DingDingAppEnum.任务拜访: { configList = _systemDataRepository.GetAll() .Where(s => s.ModelId == ConfigModel.钉钉配置) .Where(s => s.Type == ConfigType.钉钉配置 || s.Type == ConfigType.任务拜访) .ToList(); } break; case DingDingAppEnum.智能报表: { configList = _systemDataRepository.GetAll() .Where(s => s.ModelId == ConfigModel.钉钉配置) .Where(s => s.Type == ConfigType.钉钉配置 || s.Type == ConfigType.智能报表) .ToList(); } break; case DingDingAppEnum.会议申请: { configList = _systemDataRepository.GetAll() .Where(s => s.ModelId == ConfigModel.钉钉配置) .Where(s => s.Type == ConfigType.钉钉配置 || s.Type == ConfigType.会议申请) .ToList(); } break; case DingDingAppEnum.资料标准库: { configList = _systemDataRepository.GetAll() .Where(s => s.ModelId == ConfigModel.钉钉配置) .Where(s => s.Type == ConfigType.钉钉配置 || s.Type == ConfigType.企业标准库) .ToList(); } break; } foreach (var item in configList) { if (item.Code == DingDingConfigCode.CorpId) { config.CorpId = item.Desc; } else if (item.Code == DingDingConfigCode.Appkey) { config.Appkey = item.Desc; } else if (item.Code == DingDingConfigCode.Appsecret) { config.Appsecret = item.Desc; } else if (item.Code == DingDingConfigCode.AgentID) { int outAgenId = 0; if (int.TryParse(item.Desc, out outAgenId)) { config.AgentID = outAgenId; } } } return(config); }
public async Task SendTaskOverdueMsgAsync() { var dateTime = DateTime.Today.AddDays(1); var query = from sd in _scheduledetailRepository.GetAll() join s in _scheduleRepository.GetAll() on sd.ScheduleId equals s.Id join t in _visittaskRepository.GetAll() on sd.TaskId equals t.Id where s.Status == ScheduleMasterStatusEnum.已发布 && s.EndTime <= dateTime && //还有1天过期 sd.CompleteNum < sd.VisitNum &&//未完成 sd.Status != ScheduleStatusEnum.已逾期 select new { sd.EmployeeId, sd.EmployeeName, t.Name, s.EndTime }; var overdueList = await query.ToListAsync(); string messageMediaId = await _systemdataRepository.GetAll().Where(v => v.ModelId == ConfigModel.烟叶服务 && v.Type == ConfigType.烟叶公共 && v.Code == GYCode.MediaId).Select(v => v.Desc).FirstOrDefaultAsync(); DingDingAppConfig ddConfig = _dingDingAppService.GetDingDingConfigByApp(DingDingAppEnum.任务拜访); string accessToken = _dingDingAppService.GetAccessToken(ddConfig.Appkey, ddConfig.Appsecret); foreach (var item in overdueList) { //发送工作消息 /*IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"); * OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request(); * request.UseridList = item.EmployeeId; * request.ToAllUser = false; * request.AgentId = ddConfig.AgentID; * * OapiMessageCorpconversationAsyncsendV2Request.MsgDomain msg = new OapiMessageCorpconversationAsyncsendV2Request.MsgDomain(); * msg.Link = new OapiMessageCorpconversationAsyncsendV2Request.LinkDomain(); * msg.Msgtype = "link"; * msg.Link.Title = "任务过期提醒"; * msg.Link.Text = string.Format("{0}:您有任务[{1}]即将过期,过期日期:{2},点击查看详细", item.EmployeeName, item.Name, item.EndTime.Value.ToString("yyyy-MM-dd")); * msg.Link.PicUrl = messageMediaId; * msg.Link.MessageUrl = "eapp://"; * request.Msg_ = msg; * OapiMessageCorpconversationAsyncsendV2Response response = client.Execute(request, accessToken);*/ var msgdto = new DingMsgDto(); msgdto.userid_list = item.EmployeeId; msgdto.to_all_user = false; msgdto.agent_id = ddConfig.AgentID; msgdto.msg.msgtype = "link"; msgdto.msg.link.title = "任务过期提醒"; msgdto.msg.link.text = string.Format("{0}:您有任务[{1}]即将过期,过期日期:{2},点击查看详细", item.EmployeeName, item.Name, item.EndTime.Value.ToString("yyyy-MM-dd")); msgdto.msg.link.picUrl = messageMediaId; msgdto.msg.link.messageUrl = "eapp://"; var url = string.Format("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={0}", accessToken); var jsonString = SerializerHelper.GetJsonString(msgdto, null); using (MemoryStream ms = new MemoryStream()) { var bytes = Encoding.UTF8.GetBytes(jsonString); ms.Write(bytes, 0, bytes.Length); ms.Seek(0, SeekOrigin.Begin); var obj = Post.PostGetJson <object>(url, null, ms); }; } }