Ejemplo n.º 1
0
        /// <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 = "钉钉消息发送失败"
                });
            }
        }
Ejemplo n.º 2
0
        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);
                };
            }
        }