コード例 #1
0
        /// <summary>
        /// 获取Schedule的分页列表信息
        ///</summary>
        public async Task <PagedResultDto <ScheduleListDto> > GetPagedSchedulesAsync(GetSchedulesInput input)
        {
            var isAdmin = await CheckAdminAsync();

            var query = _scheduleRepository.GetAll()
                        .WhereIf(!string.IsNullOrEmpty(input.Name), u => u.Name.Contains(input.Name))
                        .WhereIf(input.ScheduleType.HasValue, r => r.Type == input.ScheduleType)
                        .WhereIf(!isAdmin, s => s.Status == ScheduleMasterStatusEnum.已发布 || (s.Status == ScheduleMasterStatusEnum.草稿 && s.CreatorUserId == AbpSession.UserId));

            var user   = _userRepository.GetAll();
            var entity = from q in query
                         join u in user on q.CreatorUserId equals u.Id
                         //into table
                         //from t in table.DefaultIfEmpty()
                         select new ScheduleListDto()
            {
                Id             = q.Id,
                Name           = q.Name,
                Type           = q.Type,
                Status         = q.Status,
                PublishTime    = q.PublishTime,
                CreateUserName = u.Name,
                //Area = t.Area != null ? t.Area : " - ",
                BeginTime = q.BeginTime,
                EndTime   = q.EndTime
            };


            var scheduleCount = query.Count();

            var schedules = entity
                            .OrderBy(v => v.Status).ThenByDescending(v => v.PublishTime).AsNoTracking()
                            .PageBy(input)
                            .ToList();
            var ids = schedules.Select(s => s.Id).ToArray();

            var detail          = _scheduledetailRepository.GetAll();
            var percentageQuery = (from d in detail
                                   where ids.Contains(d.ScheduleId)
                                   group new
            {
                d.ScheduleId,
                d.VisitNum,
                d.CompleteNum
            } by new
            {
                d.ScheduleId
            } into g
                                   select new
            {
                Id = g.Key.ScheduleId,
                CompleteCount = g.Sum(v => v.CompleteNum),
                VisitCount = g.Sum(v => v.VisitNum),
            });
            var percentageList = percentageQuery.ToList();

            foreach (var item in schedules)
            {
                var percentage = percentageList.Where(p => p.Id == item.Id).FirstOrDefault();
                if (percentage != null)
                {
                    item.VisitCount    = percentage.VisitCount;
                    item.CompleteCount = percentage.CompleteCount;
                }
            }
            return(new PagedResultDto <ScheduleListDto>(
                       scheduleCount,
                       schedules
                       ));
        }
コード例 #2
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 = "钉钉消息发送失败"
                });
            }
        }