Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
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 = "钉钉消息发送失败"
                });
            }
        }
Beispiel #4
0
        /// <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);
                };
            }
        }