WorkOrderController.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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. /**
  93. * 删除工单
  94. * @param $id
  95. * @return array|bool[]
  96. */
  97. public function destroyApi($id): array
  98. {
  99. if (Gate::denies('订单管理-工单处理-删除'))
  100. return ['success' => false, 'message' => '没有对应权限'];
  101. $workOrder = $this->service->find($id);
  102. if (!$workOrder){
  103. return ['success' => false, 'message' => '对应工单信息未找到'];
  104. } else {
  105. if ($workOrder->status == '已处理') {
  106. return ['success' => false, 'message' => '对应工单已处理,拒绝删除'];
  107. }
  108. }
  109. WorkOrder::query()->where('id', $id)->Delete();
  110. return ['success' => true];
  111. }
  112. /**
  113. * 校验工单是否存在
  114. * @param Request $request
  115. * @return array
  116. */
  117. public function checkWorkOrderApi(Request $request): array
  118. {
  119. $nos = $request->input('no','');
  120. if (is_string($nos)){
  121. $nos = [$nos];
  122. }
  123. $data = $this->service->checkWorkOrder($nos);
  124. return ['success' => true,'data' => $data];
  125. }
  126. /**
  127. * 货主完结工单
  128. * @param Request $request
  129. * @return array
  130. */
  131. public function ownerEndWorkOrderApi(Request $request): array
  132. {
  133. if (Gate::denies('订单管理-工单处理-货主编辑'))
  134. return ['success' => false, 'message' => '没有对应权限'];
  135. $detail_id = $request->input('detail_id');
  136. $detail = WorkOrderDetail::query()->with('workOrder')->where('id',$detail_id)->first();
  137. if (!$detail || !$detail->workOrder){
  138. return ['success'=>false,'message' => '参数异常'];
  139. }
  140. try {
  141. $this->service->ownerEndWorkOrderDetail($detail);
  142. return ['success'=>true];
  143. } catch (\Exception $e) {
  144. return ['success' => false,'message' => '工单完结异常'];
  145. }
  146. }
  147. /**
  148. * 货主批量完结工单
  149. * @param Request $request
  150. * @return array
  151. */
  152. public function ownerBatchEndWorkOrderApi(Request $request): array
  153. {
  154. if (Gate::denies('订单管理-工单处理-货主编辑'))
  155. return ['success' => false, 'message' => '没有对应权限'];
  156. $detail_ids = $request->input('detail_ids',[]);
  157. if (count($detail_ids) == 0) return ['success' => false,'message' => '参数异常'];
  158. $details = WorkOrderDetail::query()->find($detail_ids);
  159. if (count($details) == 0 ) return ['success' => false,'message' => '参数异常'];
  160. try {
  161. $this->service->ownerBatchEndWorkOrderDetails($details);
  162. return ['success' => true];
  163. } catch (\Exception $e) {
  164. return ['success' => false, 'message' => '工单完结异常,请刷新后重试'];
  165. }
  166. }
  167. }