WorkOrderController.php 4.2 KB

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