WorkOrderController.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Filters\WorkOrderFilters;
  4. use App\Logistic;
  5. use App\Services\WorkOrderService;
  6. use App\Services\WorkOrderTypeService;
  7. use App\WorkOrder;
  8. use App\WorkOrderType;
  9. use Illuminate\Contracts\Foundation\Application;
  10. use Illuminate\Contracts\View\Factory;
  11. use Illuminate\Database\Eloquent\Builder;
  12. use Illuminate\Http\RedirectResponse;
  13. use Illuminate\Http\Request;
  14. use Illuminate\Routing\Redirector;
  15. use Illuminate\Support\Facades\Gate;
  16. use Illuminate\View\View;
  17. class WorkOrderController extends Controller
  18. {
  19. /**
  20. * 工单主页
  21. *
  22. * @param Request $request
  23. * @param WorkOrderFilters $filters
  24. * @return Application|Factory|RedirectResponse|Redirector|View
  25. */
  26. public function index(Request $request, WorkOrderFilters $filters)
  27. {
  28. if (!Gate::allows('订单管理-工单处理-查询')) return redirect('/');
  29. $workOrders = WorkOrder::query()->filter($filters)->with(['type', 'creator', 'order' => function ($query) {
  30. /** @var $query Builder */
  31. $query->with('packages', 'issue','logistic');
  32. }, 'reviewer'])->orderByDesc('created_at', 'grad', 'status')->paginate($request['paginate'] ?? 50);
  33. $logistics = Logistic::all();
  34. return view('order.workOrder.index', compact('workOrders','logistics'));
  35. }
  36. public function create()
  37. {
  38. if (!Gate::allows('订单管理-工单处理-创建')) return redirect('/');
  39. $workOrderTypes = WorkOrderType::query()->with('childTypes')->get();
  40. $grads = WorkOrder::$enums['grad'];
  41. array_shift($grads);
  42. return view('order.workOrder.create', compact('workOrderTypes', 'grads'));
  43. }
  44. public function store(Request $request, WorkOrderService $service)
  45. {
  46. if (!Gate::allows('订单管理-工单处理-创建')) return redirect('/');
  47. $result = $service->create($request->all());
  48. $workOrderTypes = WorkOrderType::query()->with('childTypes')->get();
  49. $grads = WorkOrder::$enums['grad'];
  50. array_shift($grads);
  51. return view('order.workOrder.create', compact('workOrderTypes', 'result', 'grads'));
  52. }
  53. /**
  54. * 生成订单拦截工单
  55. * @param Request $request
  56. * @param WorkOrderService $service
  57. * @return array
  58. */
  59. public function interceptOrderApi(Request $request,WorkOrderService $service): array
  60. {
  61. if (!Gate::allows('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应的创建权限'];
  62. $uniquely_tags = $request['order_nos'];
  63. $work_order_type = app(WorkOrderTypeService::class)->findOrCreate('订单拦截','orders','订单','订单拦截');
  64. $result = $service->exists($work_order_type['id'],$uniquely_tags); // 检查订单号和工单类型是否有对应的工单
  65. if ($result['success'])
  66. return ['success' => false,'message' => join(",", array($result['data'])) . "已有对应的订单拦截工单"];
  67. return $service->interceptOrder($work_order_type,$uniquely_tags,$request['grad']);
  68. }
  69. /**
  70. * 工单审核
  71. * @param Request $request
  72. * @param WorkOrderService $service
  73. * @return array
  74. */
  75. public function reviewApi(Request $request, WorkOrderService $service): array
  76. {
  77. if (!Gate::allows('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应的编辑权限'];
  78. $workOrder = WorkOrder::query()->find($request['id']);
  79. return $service->review($workOrder);
  80. }
  81. /**
  82. * 生成问题件
  83. * @param Request $request
  84. * @param WorkOrderService $service
  85. * @return array
  86. */
  87. public function createOrderIssueApi(Request $request, WorkOrderService $service): array
  88. {
  89. if (!Gate::allows('订单管理-订单问题件生成'))
  90. return ['success' => false, 'message' => '没有对应权限'];
  91. $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
  92. if (count($work_orders) == 0) return ['success' => false, 'message' => '刷新当前页面重试'];
  93. return $service->createOrderIssue($work_orders);
  94. }
  95. public function show(WorkOrder $workOrder)
  96. {
  97. //
  98. }
  99. public function edit(WorkOrder $workOrder)
  100. {
  101. //
  102. }
  103. public function update(Request $request, WorkOrder $workOrder)
  104. {
  105. //
  106. }
  107. public function destroy(WorkOrder $workOrder)
  108. {
  109. //
  110. }
  111. }