WorkOrderController.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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 editOrderReceiveInfoApi(Request $request,WorkOrderService $service): array
  76. {
  77. if (!Gate::allows('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应的创建权限'];
  78. if (is_array($request['order_nos'])) return ['success' => false,'message' => '参数错误'];
  79. $uniquely_tag = $request['order_nos'];
  80. $work_order_type = app(WorkOrderTypeService::class)->findOrCreate('订单收件信息修改', 'orders', '订单', '订单收件信息修改');
  81. $result = $service->exists($work_order_type['id'], $uniquely_tag); // 检查订单号和工单类型是否有对应的工单
  82. if($result['success'])
  83. return ['success' => false,'message' => join(",", array($result['data'])) . "已有对应的订单信息修改工单"];
  84. return $service->editOrder($work_order_type,$uniquely_tag,$request['remake']);
  85. }
  86. /**
  87. * 工单审核
  88. * @param Request $request
  89. * @param WorkOrderService $service
  90. * @return array
  91. */
  92. public function reviewApi(Request $request, WorkOrderService $service): array
  93. {
  94. if (!Gate::allows('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应的编辑权限'];
  95. $workOrder = WorkOrder::query()->find($request['id']);
  96. return $service->review($workOrder);
  97. }
  98. /**
  99. * 生成问题件
  100. * @param Request $request
  101. * @param WorkOrderService $service
  102. * @return array
  103. */
  104. public function createOrderIssueApi(Request $request, WorkOrderService $service): array
  105. {
  106. if (!Gate::allows('订单管理-订单问题件生成'))
  107. return ['success' => false, 'message' => '没有对应权限'];
  108. $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
  109. if (count($work_orders) == 0) return ['success' => false, 'message' => '刷新当前页面重试'];
  110. return $service->createOrderIssue($work_orders);
  111. }
  112. public function show(WorkOrder $workOrder)
  113. {
  114. //
  115. }
  116. public function edit(WorkOrder $workOrder)
  117. {
  118. //
  119. }
  120. public function update(Request $request, WorkOrder $workOrder)
  121. {
  122. //
  123. }
  124. public function destroy(WorkOrder $workOrder)
  125. {
  126. //
  127. }
  128. }