OrderIssueWorkLoadService.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace App\Services;
  3. use App\Exports\Export;
  4. use App\OrderIssue;
  5. use App\OrderIssueProcessLog;
  6. use App\Owner;
  7. use App\Services\common\QueryService;
  8. use App\User;
  9. use Illuminate\Support\Facades\Auth;
  10. use Maatwebsite\Excel\Facades\Excel;
  11. class OrderIssueWorkLoadService
  12. {
  13. public function getQuery(array $queryParam)
  14. {
  15. $user = Auth::user();
  16. $owner_ids = $user ? app('UserService')->getPermittingOwnerIds($user) : [];
  17. $query = OrderIssue::with(['logs.user','order' => function ($query) {
  18. $query->with(['packages', 'owner']);
  19. }])->whereHas('order', function ($query) use (&$queryParam, $owner_ids) {
  20. if ($queryParam['logistic_number'] ?? false) {
  21. $query->whereHas('packages',function($query)use (&$queryParam){
  22. $query->where('order_packages.logistic_number','like',$queryParam['logistic_number']);
  23. });
  24. }
  25. if ($queryParam['owner_id'] ?? false && in_array($queryParam['owner_id'], $owner_ids)) {
  26. $query->where('owner_id', $queryParam['owner_id']);
  27. } else {
  28. $query->whereIn('owner_id', $owner_ids);
  29. }
  30. });
  31. if($queryParam['end_date'] ?? false){
  32. $query->whereHas('logs',function($query) use(&$queryParam){
  33. $query->where('type','结束')
  34. ->where('created_at','<=',$queryParam['end_date'].' 23:59:59')
  35. ->where('created_at','>=',$queryParam['end_date'].' 00:00:00');
  36. });
  37. }
  38. if($queryParam['end_date'] ?? false){
  39. $query->whereHas('logs',function($query) use(&$queryParam){
  40. $query->where('type','结束')
  41. ->where('created_at','<=',$queryParam['end_date'].' 23:59:59')
  42. ->where('created_at','>=',$queryParam['end_date'].' 00:00:00');
  43. });
  44. }
  45. if($queryParam['create_user_id'] ?? false ?? $queryParam['end_user_id'] ?? false){
  46. if($queryParam['create_user_id'] ?? false){
  47. $query->whereHas('logs',function($query) use ($queryParam){
  48. $query->where('user_id',$queryParam['create_user_id'])->where('type', '创建');
  49. });
  50. }
  51. if($queryParam['end_user_id'] ?? false){
  52. $query->whereHas('logs',function($query) use ($queryParam){
  53. $query->where('user_id',$queryParam['end_user_id'])->where('type', '结束');
  54. });
  55. }
  56. }
  57. $query->orderByDesc('id');
  58. unset($queryParam['create_user_id'], $queryParam['end_user_id'], $queryParam['client_no'],
  59. $queryParam['owner_id'],$queryParam['end_date'],$queryParam['logistic_number']);
  60. $columnQueryRules = [
  61. 'create_start' => ['alias' => 'created_at', 'startDate' => ' 00:00:00'],
  62. 'order_issue_id'=>['alias' => 'id','multi'=>','],
  63. 'id' =>['multi' => ','],
  64. ];
  65. $query = app(QueryService::class)->query($queryParam, $query, $columnQueryRules);
  66. return $query;
  67. }
  68. public function paginate(array $params)
  69. {
  70. return $this->getQuery($params)->paginate($params['paginate'] ?? 50);
  71. }
  72. public function getUsers()
  73. {
  74. $query = OrderIssueProcessLog::query()->selectRaw('user_id')->groupBy('user_id')->get();
  75. $user_ids = $query->map(function($value){
  76. return $value->user_id;
  77. });
  78. return User::whereIn('id', $user_ids)->get();
  79. }
  80. public function getOwners(){
  81. $owner_ids = app('UserService')->getPermittingOwnerIds(auth()->user())??[];
  82. return Owner::whereIn('id', $owner_ids)->get();
  83. }
  84. public function getOptions(array $arr){
  85. return [
  86. 'create_user_id' =>$arr['create_user_id'] ?? '',
  87. 'end_user_id' => $arr['end_user_id'] ?? '',
  88. 'client_no' => $arr['client_no'] ?? '',
  89. 'owner_id' => $arr['owner_id'] ?? '',
  90. 'create_start' => $arr['owner_id'] ?? '',
  91. 'create_end' => $arr['create_end'] ?? '',
  92. 'order_issue_id' => $arr['order_issue_id'] ?? '',
  93. 'logistic_number'=> $arr['logistic_number'] ?? ''
  94. ];
  95. }
  96. public function exportWorkLoad(array $params)
  97. {
  98. unset($params['checkAllSign']);
  99. if($params['data']??false){
  100. $params = ['id'=>$params['data']];
  101. }
  102. $workLoads = $this->getQuery($params)->get();
  103. $row = [[
  104. 'id' => '问题件ID',
  105. 'createDate' => '创建时间',
  106. 'endDate' => '完结时间',
  107. 'created_user' => '创建人',
  108. 'end_user' => '结束人',
  109. 'owner' => '客户',
  110. 'logisticNumbers' => '快递单号',
  111. 'processingTime' => '处理时效']];
  112. $data = [];
  113. foreach ($workLoads as $workLoad) {
  114. $logisticNumbers = '';
  115. if($workLoad['order']['logisticNumbers'] ?? false){
  116. foreach ($workLoad['order']['logisticNumbers'] as $str){
  117. $logisticNumbers.=$str.' ';
  118. }
  119. }
  120. $temp = [
  121. 'id' => $workLoad['id'],
  122. 'createDate' => $workLoad['createLog']['created_at'] ?? '',
  123. 'endDate' => $workLoad['endLog']['created_at'] ?? '',
  124. 'created_user' => $workLoad['createLog']['user']['name'] ?? '',
  125. 'end_user' => $workLoad['endLog']['user']['name'] ?? '',
  126. 'owner' => $workLoad['order']['owner']['name'] ?? '',
  127. 'logisticNumbers' => $logisticNumbers,
  128. 'processingTime' => $workLoad['processingTime'],
  129. ];
  130. array_push($data,$temp);
  131. }
  132. return Excel::download(new Export($row,$data),date('YmdHis', time()).'-工作量.xlsx');
  133. }
  134. }