public async Task <APIResultDto> ExportSheduleDetailExcel(GetScheduleDetailsInput input)
        {
            try
            {
                var exportData = await GetNoPageScheduleDetailsByOtherTable(input);

                var result = new APIResultDto();
                result.Code = 0;
                result.Data = CreateSheduleDetailExcel("任务明细.xlsx", exportData);
                return(result);
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("ExportEmployeesExcel errormsg{0} Exception{1}", ex.Message, ex);
                return(new APIResultDto()
                {
                    Code = 901, Msg = "网络忙...请待会儿再试!"
                });
            }
        }
        /// <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
                       ));
        }
        /// <summary>
        /// 查询任务完成情况
        /// </summary>
        public async Task <PagedResultDto <ScheduleDetailListDto> > GetPagedScheduleDetailRecordAsync(GetScheduleDetailsInput input)
        {
            var query  = _scheduledetailRepository.GetAll().Where(v => v.ScheduleId == input.ScheduleId);
            var task   = _visittaskRepository.GetAll();
            var result = from q in query
                         join t in task on q.TaskId equals t.Id
                         select new ScheduleDetailListDto()
            {
                Id     = q.Id,
                TaskId = q.TaskId,
                Status = q.Status,

                TaskName     = t.Name + $"({t.Type})",
                ScheduleId   = q.ScheduleId,
                VisitNum     = q.VisitNum,
                CompleteNum  = q.CompleteNum,
                EmployeeName = q.EmployeeName,
                GrowerName   = q.GrowerName,
                //Percentage = (float)((float)q.CompleteNum / q.VisitNum)
                //Percentage = Math.Round((Convert.ToDecimal((double)(q.CompleteNum.Value) / q.VisitNum.Value)), 2)
            };

            var scheduledetailCount = await query.CountAsync();

            var scheduledetailListDtos = await result
                                         .OrderBy(v => v.TaskName)
                                         .ThenBy(v => v.Percentage).AsNoTracking()
                                         .PageBy(input)
                                         .ToListAsync();

            return(new PagedResultDto <ScheduleDetailListDto>(
                       scheduledetailCount,
                       scheduledetailListDtos
                       ));
        }
        /// <summary>
        /// 获取任务明细信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <List <SheduleDetailTaskListDto> > GetNoPageScheduleDetailsByOtherTable(GetScheduleDetailsInput input)
        {
            var areaCode = await GetCurrentUserAreaCodeAsync();

            var areaCodeE = areaCode.HasValue ? areaCode : input.AreaCode;
            var query     = from sd in _scheduledetailRepository.GetAll()
                            .WhereIf(!string.IsNullOrEmpty(input.EmployeeName), sd => sd.EmployeeName.Contains(input.EmployeeName))
                            .WhereIf(!string.IsNullOrEmpty(input.GrowerName), sd => sd.GrowerName.Contains(input.GrowerName))
                            join s in _scheduleRepository.GetAll()
                            .WhereIf(input.StartTime.HasValue, s => s.EndTime >= input.StartTime)
                            .WhereIf(input.EndTime.HasValue, s => s.EndTime <= input.EndTime)
                            .WhereIf(!string.IsNullOrEmpty(input.SheduleName), s => s.Desc.Contains(input.SheduleName))
                            .Where(s => s.Status == ScheduleMasterStatusEnum.已发布)
                            on sd.ScheduleId equals s.Id
                            join t in _visittaskRepository.GetAll()
                            .WhereIf(input.TaskId.HasValue, t => t.Id == input.TaskId)
                            on sd.TaskId equals t.Id
                            join g in _growerRepository.GetAll()
                            .WhereIf(areaCodeE.HasValue, g => g.AreaCode == areaCodeE)
                            on sd.GrowerId equals g.Id
                            select new SheduleDetailTaskListDto
            {
                Id           = sd.Id,
                VisitNum     = sd.VisitNum,
                CompleteNum  = sd.CompleteNum,
                Status       = sd.Status,
                TaskName     = t.Name,
                TaskType     = t.Type,
                AreaCode     = g.AreaCode,
                GrowerId     = sd.GrowerId,
                GrowerName   = sd.GrowerName,
                EmployeeName = sd.EmployeeName,
                Time         = s.BeginTime.Value.ToString("yyyy-MM-dd") + "至" + s.EndTime.Value.ToString("yyyy-MM-dd"),
                SheduleName  = s.Desc
            };
            var result = await query.OrderBy(s => s.AreaCode).ToListAsync();

            return(result);
        }
        public async Task <PagedResultDto <SheduleDetailTaskListDto> > GetPagedScheduleDetailsByOtherTable(GetScheduleDetailsInput input)
        {
            //var query = _scheduledetailRepository.GetAll();
            // TODO:根据传入的参数添加过滤条件

            var areaCode = await GetCurrentUserAreaCodeAsync();

            var areaCodeE = areaCode.HasValue ? areaCode : input.AreaCode;
            var query     = from sd in _scheduledetailRepository.GetAll()
                            .WhereIf(!string.IsNullOrEmpty(input.EmployeeName), sd => sd.EmployeeName.Contains(input.EmployeeName))
                            .WhereIf(!string.IsNullOrEmpty(input.GrowerName), sd => sd.GrowerName.Contains(input.GrowerName))
                            join s in _scheduleRepository.GetAll()
                            .WhereIf(input.StartTime.HasValue, s => s.EndTime >= input.StartTime)
                            .WhereIf(input.EndTime.HasValue, s => s.EndTime <= input.EndTime)
                            .WhereIf(!string.IsNullOrEmpty(input.SheduleName), s => s.Desc.Contains(input.SheduleName))
                            .Where(s => s.Status == ScheduleMasterStatusEnum.已发布)
                            on sd.ScheduleId equals s.Id
                            join t in _visittaskRepository.GetAll()
                            .WhereIf(input.TaskId.HasValue, t => t.Id == input.TaskId)
                            on sd.TaskId equals t.Id
                            join g in _growerRepository.GetAll()
                            .WhereIf(areaCodeE.HasValue, g => g.AreaCode == areaCodeE)
                            on sd.GrowerId equals g.Id
                            select new SheduleDetailTaskListDto
            {
                Id           = sd.Id,
                VisitNum     = sd.VisitNum,
                CompleteNum  = sd.CompleteNum,
                Status       = sd.Status,
                TaskName     = t.Name,
                TaskType     = t.Type,
                AreaCode     = g.AreaCode,
                GrowerId     = sd.GrowerId,
                GrowerName   = sd.GrowerName,
                EmployeeName = sd.EmployeeName,
                Time         = s.BeginTime.Value.ToString("yyyy-MM-dd") + "至" + s.EndTime.Value.ToString("yyyy-MM-dd"),
                SheduleName  = s.Desc
            };

            var scheduledetailCount = await query.CountAsync();

            var scheduledetails = await query
                                  //.OrderBy(input.Sorting).AsNoTracking()
                                  .OrderBy(s => s.AreaCode)
                                  .PageBy(input)
                                  .ToListAsync();

            // var scheduledetailListDtos = ObjectMapper.Map<List <ScheduleDetailListDto>>(scheduledetails);
            var scheduledetailListDtos = scheduledetails.MapTo <List <SheduleDetailTaskListDto> >();

            return(new PagedResultDto <SheduleDetailTaskListDto>(
                       scheduledetailCount,
                       scheduledetailListDtos
                       ));
        }