/// <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 = "钉钉消息发送失败" }); } }
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); }; } }