WorkOrderController.php 6.5 KB

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