ProcessService.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace App\Services;
  3. use App\Process;
  4. use App\Services\common\QueryService;
  5. use Illuminate\Database\Eloquent\Builder;
  6. use Illuminate\Support\Facades\DB;
  7. use App\Traits\ServiceAppAop;
  8. class ProcessService
  9. {
  10. use ServiceAppAop;
  11. protected $modelClass=Process::class;
  12. /**
  13. * @param array $params
  14. * @return Builder
  15. */
  16. private function conditionQuery(array $params){
  17. $processes=Process::filterAuthorities()->with(['owner','processMethod','designate:id,name','tutorials.owner','signs','operatorLogs.user',
  18. 'signUnitPrice','processesContents'=>function($query){
  19. return $query->with(['signCommodityName','signCommoditySku','signCommodityBarcode','commodity'=>function($query){
  20. return $query->with('barcodes');
  21. }]);
  22. }])->orderBy('processes.id','DESC');
  23. if ($params['commodity_barcode'] ?? false){
  24. $barcode=$params['commodity_barcode'];
  25. $processes=$processes->whereHas('processesContents',function ($query)use($barcode){
  26. $query->whereHas('commodity',function ($builder)use($barcode){
  27. $builder->whereHas('barcodes',function ($builder)use($barcode){
  28. if (strpos($barcode, ',') || strpos($barcode, ',') || strpos($barcode, ' ')) {
  29. $arr = array_filter(preg_split('/[,, ]+/is', $barcode));
  30. $builder->whereIn('code',$arr);
  31. } else {
  32. $builder->where('code','like',$barcode);
  33. }
  34. });
  35. });
  36. });
  37. unset($params['commodity_barcode']);
  38. }
  39. if ($params['wms_code'] ?? false){
  40. $wms_code=$params['wms_code'];
  41. $processes=$processes->whereHas('processesContents',function ($builder)use ($wms_code){
  42. if (strpos($wms_code, ',') || strpos($wms_code, ',') || strpos($wms_code, ' ')) {
  43. $arr = array_filter(preg_split('/[,, ]+/is', $wms_code));
  44. $builder->whereIn('wms_code',$arr);
  45. } else {
  46. $builder->where('wms_code','like',$wms_code);
  47. }
  48. });
  49. unset($params['wms_code']);
  50. }
  51. if (!($params['is_accomplish'] ?? false)){
  52. $processes=$processes->where('status','!=','交接完成');
  53. }else unset($params['is_accomplish']);
  54. if ($params["designate"] ?? false) {
  55. $designate = $params["designate"];
  56. $processes=$processes->whereHas('designate', function ($builder)use($designate) {
  57. $builder->where('name','like','%'.$designate.'%');
  58. });
  59. unset($params['designate']);
  60. }
  61. $columnQueryRules=[
  62. 'date_start' => ['alias' => 'created_at' , 'startDate' => ' 00:00:00'],
  63. 'date_end' => ['alias' => 'created_at' , 'endDate' => ' 23:59:59'],
  64. 'code' => ['batch' => ''],
  65. 'owners' => ['alias' => 'owner_id' ,'multi' => ','],
  66. 'id' => ['multi' => ','],
  67. ];
  68. return app(QueryService::class)->query($params,$processes,$columnQueryRules,"processes");
  69. }
  70. public function paginate(array $params){
  71. return $this->conditionQuery($params)->paginate($request->paginate ?? 50);
  72. }
  73. public function get(array $params){
  74. return $this->conditionQuery($params)->get();
  75. }
  76. public function getSql(array $params){
  77. return $this->conditionQuery($params)->whereNull('processes.deleted_at')
  78. ->selectRaw('processes.code,processes.amount,processes.completed_amount,processes.status,processes.remark,processes.unit_price,processes.created_at')
  79. ->leftJoin('owners','processes.owner_id','owners.id')
  80. ->selectRaw('owners.name owner_name')
  81. ->leftJoin('users','processes.designate_id','users.id')
  82. ->selectRaw('users.name designate')
  83. ->leftJoin('process_methods','processes.process_method_id','process_methods.id')
  84. ->selectRaw('process_methods.name process_method_name')
  85. ->leftJoin('processes_contents','processes.id','processes_contents.process_id')
  86. ->selectRaw('processes_contents.bill_type content_bill_type,processes_contents.wms_code content_wms_code,processes_contents.amount content_amount')
  87. ->leftJoin('commodities','processes_contents.commodity_id','commodities.id')
  88. ->selectRaw('commodities.name commodity_name,commodities.sku commodity_sku')
  89. ->leftJoin('commodity_barcodes','commodities.id','commodity_barcodes.commodity_id')
  90. ->selectRaw(DB::raw("GROUP_CONCAT(commodity_barcodes.code) commodity_barcode_code"))
  91. ->groupBy("processes_contents.id","processes_contents.commodity_id")
  92. ->leftJoin('signs as sign_commodity_sku',function ($join){
  93. $join->on('sign_commodity_sku.signable_type',DB::raw("'processes_contents'"))
  94. ->on('sign_commodity_sku.signable_id','processes_contents.id')
  95. ->on('sign_commodity_sku.field',DB::raw("'commodity_sku'"));
  96. })
  97. ->selectRaw('sign_commodity_sku.mark sign_commodity_sku_mark')
  98. ->leftJoin('signs as sign_commodity_name',function ($join){
  99. $join->on('sign_commodity_name.signable_type',DB::raw("'processes_contents'"))
  100. ->on('sign_commodity_name.signable_id','processes_contents.id')
  101. ->on('sign_commodity_name.field',DB::raw("'commodity_name'"));
  102. })
  103. ->selectRaw('sign_commodity_name.mark sign_commodity_name_mark')
  104. ->leftJoin('signs as sign_commodity_barcode',function ($join){
  105. $join->on('sign_commodity_barcode.signable_type',DB::raw("'processes_contents'"))
  106. ->on('sign_commodity_barcode.signable_id','processes_contents.id')
  107. ->on('sign_commodity_barcode.field',DB::raw("'commodity_barcode'"));
  108. })
  109. ->selectRaw('sign_commodity_barcode.mark sign_commodity_barcode_mark')
  110. ->sql();
  111. }
  112. public function createInstantBill(Process $process)
  113. {
  114. /** @var \stdClass $process */
  115. if (!$process || $process->status!="交接完成")return false;
  116. if (!$process->processStatistic)$process->load("processStatistic");
  117. if (app("OwnerFeeDetailService")->create([
  118. "owner_id" => $process->owner_id,
  119. "worked_at" => $process->processStatistic ? $process->processStatistic->ended_at : '',
  120. "type" => "增值服务",
  121. "operation_bill" => $process->code,
  122. "commodity_amount" => $process->completed_amount,
  123. "process_method_id" => $process->process_method_id,
  124. "work_fee" => $process->processStatistic ? $process->processStatistic->revenue : null,
  125. "created_at" => date('Y-m-d H:i:s'),
  126. "outer_id" => $process->id,
  127. "outer_table_name" => "processes",
  128. ]))return true;
  129. return false;
  130. }
  131. }