2016-03-02 20 views
6

Tôi đang học cách sử dụng JHipster và không thể tìm ra cách sử dụng tạo truy vấn tùy chỉnh.Cách thêm truy vấn tùy chỉnh trong JHipster?

Trong dự án của tôi, tôi có Orders bảng có các trường DeliveryDayWeek và chỉ muốn hiển thị các đơn đặt hàng cho ngày hiện tại trong tuần. DeliveryDay và Tuần là int với các giá trị (1-7 và 0-2)

Vì vậy, trong OrdersRepository.java tôi thêm truy vấn tùy chỉnh như thế này:

public interface OrdersRepository extends JpaRepository<Orders,Long> { 

Page<Orders> findByDeliveryDayAndWeek(int weekday, int week, pageable); 

trong OrdersResource.java tôi thêm này một:

@RequestMapping(value = "/today", 
     method = RequestMethod.GET, 
     produces = MediaType.APPLICATION_JSON_VALUE) 
    @Timed 
    public ResponseEntity<List<Orders>> getOrdersForToday(Pageable pageable) 
     throws URISyntaxException { 
     log.debug("REST request to get a page of Orderss"); 
     Page<Orders> page = ordersRepository.findByDeliveryDayAndWeek(1, 0, pageable); 
     HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/today"); 
     return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK); 
    } 

Tôi cũng đã thêm today.html (được sao chép orders.html) và today.js

'use strict'; 

angular.module('fruitcrmApp') 
    .config(function ($stateProvider) { 
     $stateProvider 
      .state('today', { 
       parent: 'entity', 
       url: '/today', 
       data: { 
        authorities: ['ROLE_USER'], 
        pageTitle: 'fruitcrmApp.orders.home.title' 
       }, 
       views: { 
        '[email protected]': { 
         templateUrl: 'scripts/app/custom/today.html', 
         controller: 'OrdersController' 
        } 
       }, 
       resolve: { 
        translatePartialLoader: ['$translate', '$translatePartialLoader', function ($translate, $translatePartialLoader) { 
         $translatePartialLoader.addPart('orders'); 
         $translatePartialLoader.addPart('global'); 
         return $translate.refresh(); 
        }] 
       } 
      }) 

    }); 

và thêm today.js trong index.html

My orders.controller.js trông như thế này (tạo ra bởi JHipster)

'use strict'; 

angular.module('fruitcrmApp') 
    .controller('OrdersController', function ($scope, $state, Orders, OrdersSearch, ParseLinks) { 

     $scope.orderss = []; 
     $scope.predicate = 'id'; 
     $scope.reverse = true; 
     $scope.page = 1; 
     $scope.loadAll = function() { 
      Orders.query({page: $scope.page - 1, size: 20, sort: [$scope.predicate + ',' + ($scope.reverse ? 'asc' : 'desc'), 'id']}, function(result, headers) { 
       $scope.links = ParseLinks.parse(headers('link')); 
       $scope.totalItems = headers('X-Total-Count'); 
       $scope.orderss = result; 
      }); 
     }; 
     $scope.loadPage = function(page) { 
      $scope.page = page; 
      $scope.loadAll(); 
     }; 
     $scope.loadAll(); 


     $scope.search = function() { 
      OrdersSearch.query({query: $scope.searchQuery}, function(result) { 
       $scope.orderss = result; 
      }, function(response) { 
       if(response.status === 404) { 
        $scope.loadAll(); 
       } 
      }); 
     }; 

     $scope.refresh = function() { 
      $scope.loadAll(); 
      $scope.clear(); 
     }; 

     $scope.clear = function() { 
      $scope.orders = { 
       details: null, 
       orderDate: null, 
       firstDelivery: null, 
       isActive: false, 
       id: null 
      }; 
     }; 
    }); 

Bây giờ tôi có thể truy cập http://localhost:3000/#/today nhưng nó cho thấy tất cả các dữ liệu từ Orders những gì tôi đã làm sai? Cách sử dụng phương pháp của riêng tôi từ OrdersRepository.java?

Tôi đã cố gắng tìm kiếm các ví dụ nhưng không tìm thấy bất kỳ liên quan nào. Các bước cần thiết mà tôi đã bỏ lỡ là gì? Liên kết cho một số hướng dẫn, nơi nó được bảo hiểm sẽ là tuyệt vời nếu câu trả lời sẽ được lâu dài.

Trả lời

7

Bạn cần tạo dịch vụ góc mới cho điểm cuối API today của mình. Một cái gì đó như thế này, được gọi là orders-today.service.js:

'use strict'; 

angular.module('fruitcrmApp') 
    .factory('OrdersToday', function ($resource) { 
     return $resource('api/orders/today', {}, { 
      'query': { method: 'GET', isArray: true} 
     }); 
    }); 

Sau đó, trong tập tin orders.controller.js của bạn, bạn cần phải tiêm dịch vụ OrdersToday mới của bạn:

.controller('OrdersController', function ($scope, $state, Orders, OrdersSearch, OrdersToday, ParseLinks) { 

Khi bạn muốn để có được danh sách các đơn đặt hàng ngày hôm nay, bạn cần phải sử dụng OrdersToday.query giống như bạn đã sử dụng Orders.query trong ví dụ bạn đã dán.

Có thể bạn sẽ muốn tạo một OrdersTodayController có tham chiếu đến OrdersToday và sử dụng số đó trong today.js thay vì OrdersController.

Các vấn đề liên quan