예제 #1
0
        public async Task <PopularResult <List <VeComStaDto> > > GetVeComStaAsync(VeComStaQueryDto dto)
        {
            var result                 = new PopularResult <List <VeComStaDto> >();
            var oilCostQuery           = _oilCostRepoitory.Where(x => x.RefuelingTime >= dto.StartTime && x.RefuelingTime <= dto.EndTime).GroupBy(x => x.VehicleId).Select(x => new { VeId = x.Key, OilCost = x.Sum(i => i.Expend) });
            var mileageQuery           = _vehicleMileageRepository.Where(x => x.RecordDate >= dto.StartTime && x.RecordDate <= dto.EndTime).GroupBy(x => x.VehicleId).Select(x => new { VeId = x.Key, Mileage = (x.Max(i => i.Mileage) - x.Min(i => i.Mileage)) });
            var maintenanceExpendQuery = _maintenanceRepository.Where(x => x.RecordTime >= dto.StartTime && x.RecordTime <= dto.EndTime).GroupBy(x => x.VehicleId).Select(x => new { VeId = x.Key, maintenanceExpend = x.Sum(i => i.Expend) });
            var all = from v in _vehicleRepository.Where(x => x.IsDelete == 0).WhereIf(dto.UnitId.HasValue, x => x.UnitId == dto.UnitId.Value)
                      join oil in oilCostQuery on v.Id equals oil.VeId into voil
                      from newvoil in voil.DefaultIfEmpty()
                      join mil in mileageQuery on v.Id equals mil.VeId into vmil
                      from newvmil in vmil.DefaultIfEmpty()
                      join mai in maintenanceExpendQuery on v.Id equals mai.VeId into vmai
                      from newvmai in vmai.DefaultIfEmpty()
                      select new VeComStaDto()
            {
                License     = v.License,
                OilCost     = newvoil.OilCost,
                Mileage     = newvmil.Mileage,
                Maintenance = newvmai.maintenanceExpend
            };

            var list = await AsyncExecuter.ToListAsync(all);

            result.Success(list);
            return(result);
        }
예제 #2
0
        public async Task <PopularResult <PagedResultDto <MaintenanceDto> > > GetListAsync(MaintenanceQueryDto dto)
        {
            var result = new PopularResult <PagedResultDto <MaintenanceDto> >();

            var countQuery = _maintenanceRepository.Where(x => x.IsDelete == dto.IsDelete);
            //.WhereIf(!dto.License.IsNullOrWhiteSpace(), maintenance => maintenance.Vehicle.License.Contains(dto.License));

            var query = from m in _maintenanceRepository.OrderBy(x => x.CreateTime).PageBy(dto.ToSkipCount(), dto.ToMaxResultCount()).Where(x => x.IsDelete == dto.IsDelete)
                        join v in _vehicleRepository on m.VehicleId equals v.Id into cls
                        from c in cls.DefaultIfEmpty()
                        join d in _dictRepository on m.CostTypeId equals d.Id into md
                        from s in md.DefaultIfEmpty()
                        select new MaintenanceEntity(m.Id)
            {
                Address    = m.Address,
                CostType   = s,
                CostTypeId = m.CostTypeId,
                Expend     = m.Expend,
                RecordTime = m.RecordTime,
                Vehicle    = c,
                VehicleId  = m.VehicleId,
                //IsDelete = m.IsDelete,
                CreateTime = m.CreateTime,
                Creator    = m.Creator,
                Remark     = m.Remark,
            };

            var maintenances = await AsyncExecuter.ToListAsync(query);

            var totalCount = await AsyncExecuter.CountAsync(countQuery);

            var dtos = ObjectMapper.Map <List <MaintenanceEntity>, List <MaintenanceDto> >(maintenances);

            result.Success(new PagedResultDto <MaintenanceDto>(totalCount, dtos));
            return(result);
        }