PackageStatisticsService.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. namespace App\Services;
  3. use App\OrderPackage;
  4. use App\Services\common\QueryService;
  5. use Illuminate\Database\Eloquent\Builder;
  6. use Illuminate\Support\Facades\Auth;
  7. use Illuminate\Support\Facades\DB;
  8. Class PackageStatisticsService
  9. {
  10. /**
  11. * @param array $params
  12. * @return Builder
  13. */
  14. private function conditionQuery(array $params){
  15. $ownerIds = Auth::user()->getPermittingOwnerIdsAttribute();
  16. $query = DB::table('order_packages')->select(DB::raw('COUNT(*) AS count'))
  17. ->whereIn('owner_id',$ownerIds)
  18. ->whereNotNull('logistic_id')
  19. ->leftJoin('orders','order_packages.order_id','orders.id')
  20. ->selectRaw('owner_id,logistic_id');
  21. $columnQueryRules=[
  22. 'created_at_start' => ['alias' => 'created_at','startDate' => ":00"],
  23. 'created_at_end' => ['alias' => 'created_at','endDate' => ":59"],
  24. 'logistic_id' => ['multi' => ','],
  25. 'owner_id' => ['multi' => ','],
  26. ];
  27. $query = $query->groupBy('owner_id','logistic_id');
  28. return app(QueryService::class)->query($params,$query,$columnQueryRules);
  29. }
  30. public function get(array $params){
  31. return $this->conditionQuery($params)->get();
  32. }
  33. public function getPackageStatistic(array $params)
  34. {
  35. $query = $this->conditionQuery($params);
  36. return DB::table(DB::raw("({$query->sql()}) AS p"))->selectRaw('p.*')
  37. ->leftJoin('owners','p.owner_id','owners.id')
  38. ->selectRaw('owners.name owner_name')
  39. ->leftJoin('logistics','p.logistic_id','logistics.id')
  40. ->selectRaw('logistics.name logistic_name')
  41. ->get();
  42. }
  43. }