ProcessService.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace App\Services;
  3. use App\Process;
  4. use App\Services\common\QueryService;
  5. use Carbon\Carbon;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\DB;
  8. Class ProcessService
  9. {
  10. private function conditionQuery(array $params){
  11. $processes=Process::filterAuthorities()->with(['tutorials','signs',
  12. 'signUnitPrice','processesContents'=>function($query){
  13. return $query->with(['signCommodityName','signCommoditySku','signCommodityBarcode','commodity'=>function($query){
  14. return $query->with('barcodes');
  15. }]);
  16. }])->orderBy('processes.id','DESC');
  17. if ($params['commodity_barcode'] ?? false){
  18. $barcode=$params['commodity_barcode'];
  19. $processes=$processes->whereHas('processesContents',function ($query)use($barcode){
  20. $query->whereHas('commodity',function ($builder)use($barcode){
  21. $builder->whereHas('barcodes',function ($builder)use($barcode){
  22. $builder->where('code','like',$barcode);
  23. });
  24. });
  25. });
  26. unset($params['commodity_barcode']);
  27. }
  28. if ($params['wms_code'] ?? false){
  29. $wms_code=$params['wms_code'];
  30. $processes=$processes->whereHas('processesContents',function ($builder)use ($wms_code){
  31. $builder->where('wms_code','like',$wms_code);
  32. });
  33. unset($params['wms_code']);
  34. }
  35. if (!($params['is_accomplish'] ?? false)){
  36. $processes=$processes->where('status','!=','交接完成');
  37. }else unset($params['is_accomplish']);
  38. $columnQueryRules=[
  39. 'date_start' => ['alias' => 'created_at' , 'startDate' => ' 00:00:00'],
  40. 'date_end' => ['alias' => 'created_at' , 'endDate' => ' 23:59:59'],
  41. 'code' => ['like' => ''],
  42. 'owner_id' => ['multi' => ','],
  43. 'id' => ['multi' => ','],
  44. ];
  45. $processes = app(QueryService::class)->query($params,$processes,$columnQueryRules,"processes");
  46. return $processes;
  47. }
  48. public function paginate(array $params){
  49. return $this->conditionQuery($params)->paginate($request->paginate ?? 50);
  50. }
  51. public function get(array $params){
  52. return $this->conditionQuery($params)->get();
  53. }
  54. public function getSql(array $params){
  55. return $this->conditionQuery($params)->selectRaw('processes.code,processes.amount,processes.completed_amount,processes.status,processes.remark,processes.unit_price,processes.created_at')
  56. ->leftJoin('owners','processes.owner_id','owners.id')
  57. ->selectRaw('owners.name owner_name')
  58. ->leftJoin('process_methods','processes.process_method_id','process_methods.id')
  59. ->selectRaw('process_methods.name process_method_name')
  60. ->leftJoin('processes_contents','processes.id','processes_contents.process_id')
  61. ->selectRaw('processes_contents.bill_type content_bill_type,processes_contents.wms_code content_wms_code,processes_contents.amount content_amount')
  62. ->leftJoin('commodities','processes_contents.commodity_id','commodities.id')
  63. ->selectRaw('commodities.name commodity_name,commodities.sku commodity_sku')
  64. ->leftJoin('commodity_barcodes','commodities.id','commodity_barcodes.commodity_id')
  65. ->selectRaw(DB::raw("GROUP_CONCAT(commodity_barcodes.code) commodity_barcode_code"))
  66. ->groupBy("processes_contents.id","processes_contents.commodity_id")
  67. ->leftJoin('signs as sign_commodity_sku',function ($join){
  68. $join->on('sign_commodity_sku.signable_type',DB::raw("'processes_contents'"))
  69. ->on('sign_commodity_sku.signable_id','processes_contents.id')
  70. ->on('sign_commodity_sku.field',DB::raw("'commodity_sku'"));
  71. })
  72. ->selectRaw('sign_commodity_sku.mark sign_commodity_sku_mark')
  73. ->leftJoin('signs as sign_commodity_name',function ($join){
  74. $join->on('sign_commodity_name.signable_type',DB::raw("'processes_contents'"))
  75. ->on('sign_commodity_name.signable_id','processes_contents.id')
  76. ->on('sign_commodity_name.field',DB::raw("'commodity_name'"));
  77. })
  78. ->selectRaw('sign_commodity_name.mark sign_commodity_name_mark')
  79. ->leftJoin('signs as sign_commodity_barcode',function ($join){
  80. $join->on('sign_commodity_barcode.signable_type',DB::raw("'processes_contents'"))
  81. ->on('sign_commodity_barcode.signable_id','processes_contents.id')
  82. ->on('sign_commodity_barcode.field',DB::raw("'commodity_barcode'"));
  83. })
  84. ->selectRaw('sign_commodity_barcode.mark sign_commodity_barcode_mark')
  85. ->sql();
  86. }
  87. }