Ejemplo n.º 1
0
        /// <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();
            }));
        }
Ejemplo n.º 2
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
                       ));
        }
Ejemplo n.º 3
0
        /// <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
                       ));
        }