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