WorkOrderController.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Filters\WorkOrderFilters;
  4. use App\Logistic;
  5. use App\OrderIssue;
  6. use App\OrderIssueType;
  7. use App\Services\OwnerService;
  8. use App\Services\WorkOrderService;
  9. use App\WorkOrder;
  10. use Illuminate\Database\Eloquent\Builder;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Facades\Gate;
  13. class WorkOrderController extends Controller
  14. {
  15. public function index(Request $request, WorkOrderFilters $filters, WorkOrderService $service)
  16. {
  17. if (Gate::denies('订单管理-工单处理-查询')) return redirect('/');
  18. $workOrders = WorkOrder::query()->filter($filters)->defaultWith()->orderBy('created_at')->orderByDesc('status')->paginate($request['paginate'] ?? 50);
  19. $logistics = Logistic::all();
  20. $orderIssueTypes = $service->getIssueType();
  21. $owners = app('OwnerService')->getAuthorizedOwners();
  22. $service->tags($workOrders);
  23. return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes','owners'));
  24. }
  25. // 审核 api
  26. public function reviewApi(Request $request, WorkOrderService $service): array
  27. {
  28. if (Gate::denies('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应的编辑权限'];
  29. $workOrder = WorkOrder::query()->find($request['id']);
  30. return $service->review($workOrder);
  31. }
  32. // 批量审核 api
  33. public function batchReviewApi(Request $request,WorkOrderService $service): array
  34. {
  35. if(Gate::denies('订单管理-工单处理-审核'))return ['success' => false, 'message' => '没有对应的编辑权限'];
  36. if (WorkOrder::query()->whereIn('id',$request['ids'])->whereNotNull('review_at')->exists())
  37. return ['success' => false, 'message' => '选中的工单已有审核完成,刷新页面重试'];
  38. $work_orders = WorkOrder::query()->whereIn('id',$request['ids'])->get();
  39. $service->tags($work_orders);
  40. return $service->batchReview($work_orders);
  41. }
  42. // 生成问题件 api
  43. public function buildOrderIssueApi(Request $request, WorkOrderService $service): array
  44. {
  45. if (Gate::denies('订单管理-订单问题件生成'))
  46. return ['success' => false, 'message' => '没有对应权限'];
  47. $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
  48. if (count($work_orders) == 0) return ['success' => false, 'message' => '刷新当前页面重试'];
  49. if (OrderIssue::query()->whereIn('order_id',$work_orders->map(function($item){return $item['order_id'];}))->exists()){
  50. return ['success' => false, 'message' => '已有对应的问题件'];
  51. }
  52. $result = $service->buildOrderIssue($work_orders);
  53. if (!$result['success']) return $result;
  54. $workOrders = WorkOrder::query()->defaultWith()->whereIn('id',$request['ids'])->get();
  55. $service->tags($workOrders);
  56. return ['success' => true ,'data' => $workOrders];
  57. }
  58. // 创建工单 api
  59. public function storeApi(Request $request, WorkOrderService $service):array
  60. {
  61. if (Gate::denies('订单管理-订单-生成工单'))
  62. return ['success' => false, 'message' => '没有对应权限'];
  63. $params = $request->all();
  64. if (count($params) == 0) return ['success' => false,'message' => '参数异常'];
  65. app('OrderService')->syncOrderByCodes(array_map(function($param){
  66. return $param['order_no'];
  67. },$params));
  68. return $service->build($params);
  69. }
  70. // 破损工单
  71. public function damagedApi(Request $request, WorkOrderService $service): array
  72. {
  73. if (Gate::denies('订单管理-订单-生成工单'))
  74. return ['success' => false, 'message' => '没有对应权限'];
  75. app('OrderService')->syncOrderByCodes([$request->input('order_no')]);
  76. $workOrder = $service->createDamagedWorkOrder($request->all());
  77. if ($workOrder) return ['success' => true];
  78. else return ['success' => false];
  79. }
  80. // 遗失工单信息 填充
  81. public function updateLossApi(Request $request, WorkOrderService $service): array
  82. {
  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::query()->where('id',$id)->Delete();
  114. return ['success' => true];
  115. }
  116. }