WorkOrderController.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Filters\WorkOrderFilters;
  4. use App\Http\Requests\WorkOrder\WorkOrderRequest;
  5. use App\Logistic;
  6. use App\OrderIssue;
  7. use App\Services\OrderService;
  8. use App\Services\OwnerService;
  9. use App\Services\WorkOrderCommoditiesService;
  10. use App\Services\WorkOrderDetailService;
  11. use App\Services\WorkOrderLogService;
  12. use App\Services\WorkOrderService;
  13. use App\WorkOrder;
  14. use Illuminate\Http\Request;
  15. use Illuminate\Support\Facades\Gate;
  16. class WorkOrderController extends Controller
  17. {
  18. /**
  19. * @var WorkOrderService $service
  20. * @var WorkOrderCommoditiesService $commoditiesService
  21. * @var WorkOrderDetailService $detailService
  22. * @var WorkOrderLogService $logService
  23. * @var OrderService $orderService
  24. * @var OwnerService $ownerService
  25. */
  26. public $service;
  27. public $detailService;
  28. public $commoditiesService;
  29. public $logService;
  30. public $orderService;
  31. public $ownerService;
  32. public function __construct()
  33. {
  34. $this->service = app(WorkOrderService::class);
  35. $this->detailService = app('WorkOrderDetailService');
  36. $this->commoditiesService = app(WorkOrderCommoditiesService::class);
  37. $this->logService = app(WorkOrderLogService::class);
  38. $this->orderService = app(OrderService::class);
  39. $this->ownerService = app(OwnerService::class);
  40. }
  41. public function index(Request $request, WorkOrderFilters $filters)
  42. {
  43. if (Gate::denies('订单管理-工单处理-查询')) return redirect('/');
  44. $workOrders = WorkOrder::query()->filter($filters)->defaultWith()->orderByDesc('work_order_status')->orderBy('created_at')->paginate($request['paginate'] ?? 50);
  45. $logistics = Logistic::all();
  46. $orderIssueTypes = $this->service->getIssueType();
  47. $owners = $this->ownerService->getAuthorizedOwners();
  48. $this->service->tags($workOrders);
  49. return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes', 'owners'));
  50. }
  51. /**
  52. * 工单生成问题件
  53. * @param Request $request
  54. * @return array
  55. */
  56. public function buildOrderIssueApi(Request $request): array
  57. {
  58. if (Gate::denies('订单管理-订单问题件生成'))
  59. return ['success' => false, 'message' => '没有对应权限'];
  60. $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
  61. if (count($work_orders) == 0) return ['success' => false, 'message' => '刷新当前页面重试'];
  62. if (OrderIssue::query()->whereIn('order_id', $work_orders->map(function ($item) {
  63. return $item['order_id'];
  64. }))->exists()) {
  65. return ['success' => false, 'message' => '已有对应的问题件'];
  66. }
  67. $result = $this->service->buildOrderIssue($work_orders);
  68. if (!$result['success']) return $result;
  69. $workOrders = WorkOrder::query()->defaultWith()->whereIn('id', $request['ids'])->get();
  70. $this->service->tags($workOrders);
  71. return ['success' => true, 'data' => $workOrders];
  72. }
  73. public function updateIssueTypeApi(Request $request): array
  74. {
  75. if (Gate::denies('订单管理-工单处理-审核'))
  76. return ['success' => false, 'message' => '没有对应权限'];
  77. WorkOrder::query()->where('id', $request['id'])->update(['order_issue_type_id' => $request['type_id']]);
  78. return ['success' => true];
  79. }
  80. public function batchUpdateIssueTypeApi(Request $request): array
  81. {
  82. if (Gate::denies('订单管理-工单处理-审核'))
  83. return ['success' => false, 'message' => '没有对应权限'];
  84. WorkOrder::query()->whereIn('id', $request['ids'])->update(['order_issue_type_id' => $request['type']]);
  85. $items = WorkOrder::query()->defaultWith()->whereIn('id', $request['ids'])->get();
  86. $this->service->tags($items);
  87. return ['success' => true, 'data' => $items];
  88. }
  89. public function destroyApi($id): array
  90. {
  91. if (Gate::denies('订单管理-工单处理-删除'))
  92. return ['success' => false, 'message' => '没有对应权限'];
  93. $workOrder = $this->service->find($id);
  94. if (!$workOrder)
  95. return ['success' => false, 'message' => '对应工单信息未找到'];
  96. if ($workOrder->status == '已处理') {
  97. return ['success' => false, 'message' => '对应工单已处理,拒绝删除'];
  98. }
  99. WorkOrder::query()->where('id', $id)->Delete();
  100. return ['success' => true];
  101. }
  102. public function checkWorkOrderApi(Request $request): array
  103. {
  104. $nos = $request->input('no','');
  105. if (is_string($nos)){
  106. $nos = [$nos];
  107. }
  108. $data = $this->service->checkWorkOrder($nos);
  109. return ['success' => true,'data' => $data];
  110. }
  111. }