ProcessStatisticService.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Services;
  3. use App\ProcessStatistic;
  4. use App\Services\common\QueryService;
  5. use Illuminate\Database\Eloquent\Builder;
  6. Class ProcessStatisticService
  7. {
  8. private function conditionQuery(array $params){
  9. $query = ProcessStatistic::with(['process'])->orderBy('process_statistics.process_id','DESC')
  10. ->has('process');
  11. if ($params["owner_id"] ?? false){
  12. $owner_id=$params["owner_id"];
  13. $query=$query->whereHas('process',function (Builder $builder)use($owner_id){
  14. $builder->where('owner_id',$owner_id);
  15. });
  16. unset($params["owner_id"]);
  17. }
  18. if ($params["code"] ?? false){
  19. $code=$params["code"];
  20. $query=$query->whereHas('process',function (Builder $builder)use($code){
  21. $builder->where('code','like',$code."%");
  22. });
  23. unset($params["code"]);
  24. }
  25. if ($params["status"] ?? false){
  26. $status=$params["status"];
  27. $query=$query->whereHas('process',function (Builder $builder)use($status){
  28. $builder->where('status',$status);
  29. });
  30. unset($params["status"]);
  31. }
  32. $columnQueryRules=[
  33. 'started_at' => ['startDate' => ' 00:00:00'],
  34. 'ended_at' => ['endDate' => ' 23:59:59'],
  35. 'process_id' => ['multi' => ','],
  36. ];
  37. $query = app(QueryService::class)->query($params,$query,$columnQueryRules,"process_statistics");
  38. return $query;
  39. }
  40. public function paginate(array $params){
  41. return $this->conditionQuery($params)->paginate($params["paginate"] ?? 50);
  42. }
  43. public function getSql(array $params){
  44. return $this->conditionQuery($params)->selectRaw('process_statistics.*')
  45. ->leftJoin('processes','process_statistics.process_id','processes.id')
  46. ->selectRaw('processes.code process_code,processes.unit_price process_unit_price,processes.amount process_amount,processes.completed_amount process_completed_amount,processes.status process_status')
  47. ->leftJoin('owners','processes.owner_id','owners.id')
  48. ->selectRaw('owners.name owner_name')
  49. ->leftJoin('process_methods','processes.process_method_id','process_methods.id')
  50. ->selectRaw('process_methods.name process_method_name')
  51. ->sql();
  52. }
  53. }