/// <summary> /// 计划汇总 /// </summary> public async Task <List <ScheduleSummaryDto> > GetScheduleSummaryAsync(string userId, AreaCodeEnum areaCode) { //获取当前用户区县 //var area = await _employeeManager.GetAreaCodeByUserIdAsync(userId); return(await Task.Run(() => { var dataList = new List <ScheduleSummaryDto>(); var query = from sd in _scheduleDetailRepository.GetAll() join s in _scheduleRepository.GetAll() on sd.ScheduleId equals s.Id join g in _growerRepository.GetAll() on sd.GrowerId equals g.Id where s.Status == ScheduleMasterStatusEnum.已发布 && (areaCode == AreaCodeEnum.广元市 || g.AreaCode == areaCode) &&//区县数据过滤 s.EndTime >= DateTime.Today select sd; //总数 var tnum = query.Sum(q => q.VisitNum); tnum = tnum ?? 0; //完成数 var cnum = query.Sum(q => q.CompleteNum); cnum = cnum ?? 0; var cpercent = tnum == 0 ? 0 : Math.Round(cnum.Value / (decimal)tnum.Value, 2); //百分比 dataList.Add(new ScheduleSummaryDto() { Num = cnum, Name = "完成", ClassName = "complete", Percent = cpercent * 100, Seq = 1, Status = 2 }); //逾期数 var etnum = query.Where(q => q.Status == ScheduleStatusEnum.已逾期).Sum(q => q.VisitNum - q.CompleteNum); etnum = etnum ?? 0; var etpercent = tnum == 0 ? 0 : Math.Round(etnum.Value / (decimal)tnum.Value, 2); //百分比 dataList.Add(new ScheduleSummaryDto() { Num = etnum, Name = "逾期", ClassName = "overdue", Percent = etpercent * 100, Seq = 3, Status = 0 }); //待完成数 var pnum = tnum - cnum - etnum; var ppercent = tnum == 0 ? 0 : (1M - cpercent - etpercent); dataList.Add(new ScheduleSummaryDto() { Num = pnum, Name = "待完成", ClassName = "process", Percent = ppercent * 100, Seq = 2, Status = 3 }); return dataList.OrderBy(d => d.Seq).ToList(); })); }
/// <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> /// 获取ScheduleDetail的分页列表信息 ///</summary> /// <param name="input"></param> /// <returns></returns> public async Task <PagedResultDto <ScheduleDetailListDto> > GetPagedScheduleDetails(GetScheduleDetailsInput input) { var query = _scheduledetailRepository.GetAll(); // TODO:根据传入的参数添加过滤条件 var scheduledetailCount = await query.CountAsync(); var scheduledetails = await query .OrderBy(input.Sorting).AsNoTracking() .PageBy(input) .ToListAsync(); // var scheduledetailListDtos = ObjectMapper.Map<List <ScheduleDetailListDto>>(scheduledetails); var scheduledetailListDtos = scheduledetails.MapTo <List <ScheduleDetailListDto> >(); return(new PagedResultDto <ScheduleDetailListDto>( scheduledetailCount, scheduledetailListDtos )); }