WorkOrderController.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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\WorkOrderService;
  8. use App\WorkOrder;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Gate;
  11. class WorkOrderController extends Controller
  12. {
  13. public function index(Request $request, WorkOrderFilters $filters, WorkOrderService $service)
  14. {
  15. if (Gate::denies('订单管理-工单处理-查询')) return redirect('/');
  16. $workOrders = WorkOrder::query()->filter($filters)->defaultWith()->orderBy('created_at')->orderByDesc('status')->paginate($request['paginate'] ?? 50);
  17. $logistics = Logistic::all();
  18. $orderIssueTypes = $service->getIssueType();
  19. $owners = app('OwnerService')->getAuthorizedOwners();
  20. $service->tags($workOrders);
  21. return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes','owners'));
  22. }
  23. // 审核 api
  24. public function reviewApi(Request $request, WorkOrderService $service): array
  25. {
  26. if (Gate::denies('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应的编辑权限'];
  27. $workOrder = WorkOrder::query()->find($request['id']);
  28. return $service->review($workOrder);
  29. }
  30. // 批量审核 api
  31. public function batchReviewApi(Request $request,WorkOrderService $service): array
  32. {
  33. if(Gate::denies('订单管理-工单处理-审核'))return ['success' => false, 'message' => '没有对应的编辑权限'];
  34. if (WorkOrder::query()->whereIn('id',$request['ids'])->whereNotNull('review_at')->exists())
  35. return ['success' => false, 'message' => '选中的工单已有审核完成,刷新页面重试'];
  36. $work_orders = WorkOrder::query()->whereIn('id',$request['ids'])->get();
  37. $service->tags($work_orders);
  38. return $service->batchReview($work_orders);
  39. }
  40. // 生成问题件 api
  41. public function buildOrderIssueApi(Request $request, WorkOrderService $service): array
  42. {
  43. if (Gate::denies('订单管理-订单问题件生成'))
  44. return ['success' => false, 'message' => '没有对应权限'];
  45. $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
  46. if (count($work_orders) == 0) return ['success' => false, 'message' => '刷新当前页面重试'];
  47. if (OrderIssue::query()->whereIn('order_id',$work_orders->map(function($item){return $item['order_id'];}))->exists()){
  48. return ['success' => false, 'message' => '已有对应的问题件'];
  49. }
  50. $result = $service->buildOrderIssue($work_orders);
  51. if (!$result['success']) return $result;
  52. $workOrders = WorkOrder::query()->defaultWith()->whereIn('id',$request['ids'])->get();
  53. $service->tags($workOrders);
  54. return ['success' => true ,'data' => $workOrders];
  55. }
  56. // 创建工单 api
  57. public function storeApi(Request $request, WorkOrderService $service):array
  58. {
  59. if (Gate::denies('订单管理-订单-生成工单'))
  60. return ['success' => false, 'message' => '没有对应权限'];
  61. $params = $request->all();
  62. if (count($params) == 0) return ['success' => false,'message' => '参数异常'];
  63. app('OrderService')->syncOrderByCodes(array_map(function($param){
  64. return $param['order_no'];
  65. },$params));
  66. return $service->build($params);
  67. }
  68. // 破损工单
  69. public function damagedApi(WorkOrderRequest $request, WorkOrderService $service): array
  70. {
  71. if (Gate::denies('订单管理-订单-生成工单'))
  72. return ['success' => false, 'message' => '没有对应权限'];
  73. app('OrderService')->syncOrderByCodes([$request->input('order_no')]);
  74. $workOrder = $service->createDamagedWorkOrder($request->all());
  75. if ($workOrder) return ['success' => true];
  76. else return ['success' => false];
  77. }
  78. // 遗失工单信息 填充
  79. public function updateLossApi(Request $request, WorkOrderService $service): array
  80. {
  81. if (Gate::denies('订单管理-工单处理-货主编辑'))
  82. return ['success' => false, 'message' => '没有对应权限'];
  83. /** @var WorkOrder $workOrder */
  84. $workOrder = WorkOrder::query()->where('id',$request->input('id'))->first();
  85. if (!$workOrder) return ['success' => false,'message' => '参数异常'];
  86. $workOrder = $service->fillLossWorkOrder($workOrder,$request->all());
  87. if(!$workOrder) return ['success' => false,'message' => '创建异常'];
  88. return ['success' => true, 'data' => $workOrder];
  89. }
  90. // 修改问题类型
  91. public function updateIssueTypeApi(Request $request): array
  92. {
  93. if (Gate::denies('订单管理-工单处理-审核'))
  94. return ['success' => false,'message' => '没有对应权限'];
  95. WorkOrder::query()->where('id',$request['id'])->update(['order_issue_type_id' => $request['type_id']]);
  96. return ['success' => true];
  97. }
  98. // 批量修改问题件类型
  99. public function batchUpdateIssueTypeApi(Request $request,WorkOrderService $service): array
  100. {
  101. if (Gate::denies('订单管理-工单处理-审核'))
  102. return ['success' => false,'message' => '没有对应权限'];
  103. WorkOrder::query()->whereIn('id',$request['ids'])->update(['order_issue_type_id' => $request['type']]);
  104. $items = WorkOrder::query()->defaultWith()->whereIn('id',$request['ids'])->get();
  105. $service->tags($items);
  106. return ['success' => true,'data' => $items];
  107. }
  108. // 删除
  109. public function destroyApi($id): array
  110. {
  111. if (Gate::denies('订单管理-工单处理-删除'))
  112. return ['success' => false,'message' => '没有对应权限'];
  113. $workOrder = WorkOrder::query()->where('id',$id)->first();
  114. if (! $workOrder)
  115. return ['success' => false,'message' => '对应工单信息未找到'];
  116. if ($workOrder->status == '已处理'){
  117. return ['success' => false,'message' => '对应工单已处理,拒绝删除'];
  118. }
  119. WorkOrder::query()->where('id',$id)->Delete();
  120. return ['success' => true];
  121. }
  122. public function updateWorkOrderStatusApi(Request $request): array
  123. {
  124. if (Gate::denies('订单管理-工单处理-宝时编辑'))
  125. return ['success' => false,'message' => '没有对应权限'];
  126. try {
  127. $workOrder = WorkOrder::query()->find($request['id']);
  128. $workOrder->work_order_status = $request['work_order_status'];
  129. $workOrder->update();
  130. } catch (\Exception $e) {
  131. return ['success' => false,'message' => '编辑工单状态失败'];
  132. }
  133. return ['success' => true];
  134. }
  135. }