WorkOrderController.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Filters\WorkOrderFilters;
  4. use App\Logistic;
  5. use App\OrderIssue;
  6. use App\Services\OrderIssueTypeService;
  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 App\WorkOrderDetail;
  15. use Illuminate\Http\Request;
  16. use Illuminate\Support\Facades\Gate;
  17. class WorkOrderController extends Controller
  18. {
  19. /**
  20. * @var WorkOrderService $service
  21. * @var WorkOrderCommoditiesService $commoditiesService
  22. * @var WorkOrderDetailService $detailService
  23. * @var WorkOrderLogService $logService
  24. * @var OrderService $orderService
  25. * @var OwnerService $ownerService
  26. * @var OrderIssueTypeService $orderIssueTypeService
  27. */
  28. public $service;
  29. public $detailService;
  30. public $commoditiesService;
  31. public $logService;
  32. public $orderService;
  33. public $ownerService;
  34. public $orderIssueTypeService;
  35. public function __construct()
  36. {
  37. $this->service = app(WorkOrderService::class);
  38. $this->detailService = app(WorkOrderDetailService::class);
  39. $this->commoditiesService = app(WorkOrderCommoditiesService::class);
  40. $this->logService = app(WorkOrderLogService::class);
  41. $this->orderService = app(OrderService::class);
  42. $this->ownerService = app(OwnerService::class);
  43. $this->orderIssueTypeService = app(OrderIssueTypeService::class);
  44. }
  45. /**
  46. * 承运商标记处理中
  47. * @param Request $request
  48. * @return array
  49. */
  50. public function logisticHandlerTagApi(Request $request): array
  51. {
  52. if (Gate::denies('订单管理-工单处理-承运商编辑'))
  53. return ['success' => false, 'message' => '没有对应权限'];
  54. $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
  55. if($detail->status === '完成') return ['success' => false, 'message' => '工单已完成,请刷新重试'];
  56. $this->service->logisticHandlerTag($detail);
  57. $data = $this->service->getDefaultWith($detail->work_order_id);
  58. return ['success' => true,'data' => $data];
  59. }
  60. public function index(Request $request, WorkOrderFilters $filters)
  61. {
  62. if (Gate::denies('订单管理-工单处理-查询')) return redirect('/');
  63. $workOrders = WorkOrder::query()->filter($filters)->defaultWith()->paginate($request['paginate'] ?? 50);
  64. $logistics = Logistic::all();
  65. $orderIssueTypes = $this->orderIssueTypeService->getWorkOrderIssueType();
  66. $owners = $this->ownerService->getAuthorizedOwners();
  67. $this->service->tags($workOrders);
  68. return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes', 'owners'));
  69. }
  70. /**
  71. * 工单生成问题件
  72. * @param Request $request
  73. * @return array
  74. */
  75. public function buildOrderIssueApi(Request $request): array
  76. {
  77. if (Gate::denies('订单管理-订单问题件生成'))
  78. return ['success' => false, 'message' => '没有对应权限'];
  79. $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
  80. if (count($work_orders) == 0) return ['success' => false, 'message' => '刷新当前页面重试'];
  81. if (OrderIssue::query()->whereIn('order_id', $work_orders->map(function ($item) {
  82. return $item['order_id'];
  83. }))->exists()) {
  84. return ['success' => false, 'message' => '已有对应的问题件'];
  85. }
  86. $result = $this->service->buildOrderIssue($work_orders);
  87. if (!$result['success']) return $result;
  88. $workOrders = WorkOrder::query()->defaultWith()->whereIn('id', $request['ids'])->get();
  89. $this->service->tags($workOrders);
  90. return ['success' => true, 'data' => $workOrders];
  91. }
  92. public function destroyApi($id): array
  93. {
  94. if (Gate::denies('订单管理-工单处理-删除'))
  95. return ['success' => false, 'message' => '没有对应权限'];
  96. $workOrder = $this->service->find($id);
  97. if (!$workOrder){
  98. return ['success' => false, 'message' => '对应工单信息未找到'];
  99. } else {
  100. if ($workOrder->status == '已处理') {
  101. return ['success' => false, 'message' => '对应工单已处理,拒绝删除'];
  102. }
  103. }
  104. WorkOrder::query()->where('id', $id)->Delete();
  105. return ['success' => true];
  106. }
  107. public function checkWorkOrderApi(Request $request): array
  108. {
  109. $nos = $request->input('no','');
  110. if (is_string($nos)){
  111. $nos = [$nos];
  112. }
  113. $data = $this->service->checkWorkOrder($nos);
  114. return ['success' => true,'data' => $data];
  115. }
  116. /**
  117. * 货主完结工单
  118. * @param Request $request
  119. * @return array
  120. */
  121. public function ownerEndWorkOrderApi(Request $request): array
  122. {
  123. if (Gate::denies('订单管理-工单处理-货主编辑'))
  124. return ['success' => false, 'message' => '没有对应权限'];
  125. $detail_id = $request->input('detail_id');
  126. $detail = WorkOrderDetail::query()->with('workOrder')->where('id',$detail_id)->first();
  127. if (!$detail || !$detail->workOrder){
  128. return ['success'=>false,'message' => '参数异常'];
  129. }
  130. try {
  131. $this->service->ownerEndWorkOrderDetail($detail);
  132. return ['success'=>true];
  133. } catch (\Exception $e) {
  134. return ['success' => false,'message' => '工单完结异常'];
  135. }
  136. }
  137. /**
  138. * 货主批量完结工单
  139. * @param Request $request
  140. * @return array
  141. */
  142. public function ownerBatchEndWorkOrderApi(Request $request): array
  143. {
  144. if (Gate::denies('订单管理-工单处理-货主编辑'))
  145. return ['success' => false, 'message' => '没有对应权限'];
  146. $detail_ids = $request->input('detail_ids',[]);
  147. if (count($detail_ids) == 0) return ['success' => false,'message' => '参数异常'];
  148. $details = WorkOrderDetail::query()->find($detail_ids);
  149. if (count($details) == 0 ) return ['success' => false,'message' => '参数异常'];
  150. try {
  151. $this->service->ownerBatchEndWorkOrderDetails($details);
  152. return ['success' => true];
  153. } catch (\Exception $e) {
  154. return ['success' => false, 'message' => '工单完结异常,请刷新后重试'];
  155. }
  156. }
  157. }