WorkOrderController.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Filters\WorkOrderFilters;
  4. use App\Order;
  5. use App\Services\OrderService;
  6. use App\Services\WorkOrderService;
  7. use App\WorkOrder;
  8. use App\WorkOrderChildType;
  9. use App\WorkOrderType;
  10. use Carbon\Carbon;
  11. use Illuminate\Database\Eloquent\Builder;
  12. use Illuminate\Http\Request;
  13. use Illuminate\Support\Facades\Auth;
  14. use Illuminate\Support\Facades\Gate;
  15. class WorkOrderController extends Controller
  16. {
  17. public function index(Request $request, WorkOrderFilters $filters)
  18. {
  19. if (!Gate::allows('订单管理-工单处理-查询')) return redirect('/');
  20. $workOrders = WorkOrder::query()->filter($filters)->with(['type', 'childType', 'creator','order'=>function($query){
  21. /** @var $query Builder */
  22. $query->with('packages','issue');
  23. },'order.issue', 'reviewer'])->orderByDesc('created_at', 'grad', 'status')->paginate($request['paginate'] ?? 50);
  24. return view('order.workOrder.index', compact('workOrders'));
  25. }
  26. public function create()
  27. {
  28. if (!Gate::allows('订单管理-工单处理-创建')) return redirect('/');
  29. $workOrderTypes = WorkOrderType::query()->with('childTypes')->get();
  30. $grads = WorkOrder::$enums['grad'];
  31. array_shift($grads);
  32. return view('order.workOrder.create', compact('workOrderTypes', 'grads'));
  33. }
  34. public function store(Request $request, WorkOrderService $service)
  35. {
  36. if (!Gate::allows('订单管理-工单处理-创建')) return redirect('/');
  37. $result = $service->createWordOrder($request->all());
  38. $workOrderTypes = WorkOrderType::query()->with('childTypes')->get();
  39. $grads = WorkOrder::$enums['grad'];
  40. array_shift($grads);
  41. return view('order.workOrder.create', compact('workOrderTypes', 'result', 'grads'));
  42. }
  43. // 创建
  44. public function storeApi(Request $request): array
  45. {
  46. if (!Gate::allows('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应的创建权限'];
  47. $order_nos = $request['order_nos'];
  48. app(OrderService::class)->syncOrderInfoByWmsOrderNos($order_nos);
  49. $orders = Order::query()->whereIn('code', $order_nos)->get();
  50. $work_orders = WorkOrder::query()->with('order')->where('outer_table_name', 'orders')->whereIn('outer_table_id', $orders->map(function ($item) {
  51. return $item['id'];
  52. }))->get();
  53. $exists_nos = $work_orders->map(function ($item) {
  54. return $item->order->code;
  55. });
  56. if (count($exists_nos) > 0)
  57. return ['success' => false, 'message' => join(',', $exists_nos->toArray()) . ' 已有对应的工单'];
  58. $inner_params = [];
  59. $creator_id = Auth::user()['id'];
  60. $work_order_type = WorkOrderType::query()->firstOrCreate(['name' => '订单']);
  61. $work_order_child_type = WorkOrderChildType::query()->firstOrCreate(['name' => '拦截', 'work_order_type_id' => $work_order_type['id'], 'table_name' => 'orders']);
  62. $datetime = Carbon::now();
  63. foreach ($orders as $order) {
  64. $inner_params[] = [
  65. 'work_order_type_id' => $work_order_type['id'],
  66. 'work_order_child_type_id' => $work_order_child_type['id'],
  67. 'outer_table_name' => $work_order_child_type['table_name'],
  68. 'outer_table_id' => $order['id'],
  69. 'remark' => "拦截订单:{$order['code']}",
  70. 'creator_id' => $creator_id,
  71. 'grad' => $request['grad'] ?? 1,
  72. 'status' => 1,
  73. 'updated_at' => $datetime,
  74. 'created_at' => $datetime,
  75. ];
  76. }
  77. WorkOrder::query()->insert($inner_params);
  78. return ['success' => true];
  79. }
  80. // 审核
  81. public function reviewApi(Request $request, WorkOrderService $service): array
  82. {
  83. if (!Gate::allows('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应的编辑权限'];
  84. $workOrder = WorkOrder::query()->find($request['id']);
  85. return $service->reviewWordOrder($workOrder);
  86. }
  87. /**
  88. * 生成对应问题件
  89. */
  90. public function createOrderIssueApi(Request $request,WorkOrderService $service): array
  91. {
  92. if (!Gate::allows('订单管理-订单问题件生成'))
  93. return ['success' => false, 'message' => '没有对应权限'];
  94. $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
  95. if (count($work_orders) == 0) return ['success' => false,'message' => '刷新当前页面重试'];
  96. return $service->orderIssueByWorkOrder($work_orders);
  97. }
  98. public function show(WorkOrder $workOrder)
  99. {
  100. //
  101. }
  102. public function edit(WorkOrder $workOrder)
  103. {
  104. //
  105. }
  106. public function update(Request $request, WorkOrder $workOrder)
  107. {
  108. //
  109. }
  110. public function destroy(WorkOrder $workOrder)
  111. {
  112. //
  113. }
  114. }