WorkOrderController.php 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Filters\WorkOrderFilters;
  4. use App\Logistic;
  5. use App\OrderIssue;
  6. use App\OrderIssueType;
  7. use App\Services\WorkOrderService;
  8. use App\WorkOrder;
  9. use Illuminate\Database\Eloquent\Builder;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\Gate;
  12. class WorkOrderController extends Controller
  13. {
  14. const ORDER_ISSUE_TYPES = 'orderIssueTypes';
  15. public function index(Request $request, WorkOrderFilters $filters, WorkOrderService $service)
  16. {
  17. if (Gate::denies('订单管理-工单处理-查询')) return redirect('/');
  18. $workOrders = WorkOrder::query()->filter($filters)->with(['type', 'creator', 'order' => function ($query) {
  19. /** @var $query Builder */
  20. $query->with('packages', 'issue', 'logistic');
  21. }, 'reviewer','issueType'])->orderByDesc( 'status')->paginate($request['paginate'] ?? 50);
  22. $logistics = Logistic::all();
  23. $orderIssueTypes = OrderIssueType::all();
  24. $service->tags($workOrders);
  25. return view('order.workOrder.index', compact('workOrders', 'logistics', '' . self::ORDER_ISSUE_TYPES . ''));
  26. }
  27. // 审核 api
  28. public function reviewApi(Request $request, WorkOrderService $service): array
  29. {
  30. if (Gate::denies('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应的编辑权限'];
  31. $workOrder = WorkOrder::query()->find($request['id']);
  32. return $service->review($workOrder);
  33. }
  34. // 批量审核 api
  35. public function batchReviewApi(Request $request,WorkOrderService $service): array
  36. {
  37. if(Gate::denies('订单管理-工单处理-审核'))return ['success' => false, 'message' => '没有对应的编辑权限'];
  38. if (WorkOrder::query()->whereIn('id',$request['ids'])->whereNotNull('review_at')->exists())
  39. return ['success' => false, 'message' => '选中的工单已有审核完成,刷新页面重试'];
  40. $work_orders = WorkOrder::query()->whereIn('id',$request['ids'])->get();
  41. $service->tags($work_orders);
  42. return $service->batchReview($work_orders);
  43. }
  44. // 生成问题件 api
  45. public function buildOrderIssueApi(Request $request, WorkOrderService $service): array
  46. {
  47. if (Gate::denies('订单管理-订单问题件生成'))
  48. return ['success' => false, 'message' => '没有对应权限'];
  49. $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
  50. if (count($work_orders) == 0) return ['success' => false, 'message' => '刷新当前页面重试'];
  51. if (OrderIssue::query()->whereIn('order_id',$work_orders->map(function($item){return $item['order_id'];}))->exists()){
  52. return ['success' => false, 'message' => '已有对应的问题件'];
  53. }
  54. $result = $service->buildOrderIssue($work_orders);
  55. if (!$result['success']) return $result;
  56. $workOrders = WorkOrder::query()->with(['type', 'creator', 'order' => function ($query) {
  57. /** @var $query Builder */
  58. $query->with('packages', 'issue', 'logistic');
  59. }, 'reviewer','issueType'])->whereIn( 'id',$request['ids'])->get();
  60. $service->tags($workOrders);
  61. return ['success' => true ,'data' => $workOrders];
  62. }
  63. // 创建工单 api
  64. public function storeApi(Request $request, WorkOrderService $service):array
  65. {
  66. if (Gate::denies('订单管理-订单-生成工单'))
  67. return ['success' => false, 'message' => '没有对应权限'];
  68. $params = $request['params'];
  69. if (count($params) == 0) return ['success' => false,'message' => '参数异常'];
  70. app('OrderService')->syncOrderByCodes(array_map(function($param){
  71. return $param['order_no'];
  72. },$params));
  73. return $service->build($request['params']);
  74. }
  75. // 修改问题类型
  76. public function updateIssueTypeApi(Request $request): array
  77. {
  78. if (Gate::denies('订单管理-工单处理-审核'))
  79. return ['success' => false,'message' => '没有对应权限'];
  80. WorkOrder::query()->where('id',$request['id'])->update(['order_issue_type_id' => $request['type_id']]);
  81. return ['success' => true];
  82. }
  83. }