WorkOrderInterceptController.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Order;
  4. use App\OrderPackage;
  5. use App\Services\OrderService;
  6. use App\Services\WorkOrderInterceptService;
  7. use App\WorkOrder;
  8. use App\WorkOrderDetail;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Gate;
  11. class WorkOrderInterceptController extends Controller
  12. {
  13. private $service;
  14. private $orderService;
  15. public function __construct( WorkOrderInterceptService $service,OrderService $orderService)
  16. {
  17. $this->service = $service;
  18. $this->orderService = $orderService;
  19. }
  20. public function storeApi(Request $request): array
  21. {
  22. if (Gate::denies('订单管理-订单-生成工单'))
  23. return ['success' => false, 'message' => '没有对应权限'];
  24. $this->orderService->syncOrderByCodes([$request->input('order_no')]);
  25. if ($this->service->checkWorkOrder($request->input('order_no')))
  26. return ['success' => false, 'message' => '当前订单已有相同类型的工单'];
  27. $this->service->store($request->all());
  28. return ['success' => true];
  29. }
  30. // 拦截工单批量生成
  31. public function batchStoreApi(Request $request): array
  32. {
  33. if (Gate::denies('订单管理-订单-生成工单'))
  34. return ['success' => false, 'message' => '没有对应权限'];
  35. $this->orderService->syncOrderByCodes($request->input('order_nos'));
  36. if ($this->service->checkWorkOrders($request->input('order_nos'))) {
  37. return ['success' => false, 'message' => '当前订单已有相同类型的工单'];
  38. }
  39. $this->service->batchStore($request->all());
  40. return ['success' => true];
  41. }
  42. /**
  43. * 承运商处理和重新编辑
  44. * @param Request $request
  45. * @return array
  46. */
  47. public function logisticHandlerApi(Request $request): array
  48. {
  49. if (Gate::denies('订单管理-工单处理-承运商编辑')){
  50. return ['success' => false, 'message' => '没有对应权限'];
  51. }
  52. $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
  53. if (!$detail) {
  54. return ['success' => false, 'message' => '参数异常'];
  55. }
  56. if ($detail->status === '完成') {
  57. return ['success' => false, 'message' => '工单已完成,请刷新重试'];
  58. }
  59. $this->service->logisticHandler($detail, $request->all());
  60. $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
  61. return ['success' => true, 'data' => $data];
  62. }
  63. /**
  64. * 承运商批量处理
  65. * @param Request $request
  66. * @return array
  67. */
  68. public function logisticBatchHandlerApi(Request $request): array
  69. {
  70. if (Gate::denies('订单管理-工单处理-承运商编辑')){
  71. return ['success' => false, 'message' => '没有对应权限'];
  72. }
  73. $detail_ids = $request->input('detail_ids', []);
  74. if (count($detail_ids) == 0) {
  75. return ['success' => false, 'message' => '参数异常'];
  76. }
  77. $details = WorkOrderDetail::query()->where('status', '3')->find($detail_ids);
  78. if (count($details) == 0 || count($details) < count($detail_ids)) {
  79. return ['success' => false, 'message' => '检查工单当前状态,刷新后重试'];
  80. }
  81. $this->service->logisticBatchHandler($details, $request->all());
  82. $data = WorkOrder::query()->defaultWith()->find($details->map(function ($item) {
  83. return $item->work_order_id;
  84. })->toArray());
  85. return ['success' => true, 'data' => $data];
  86. }
  87. /**
  88. * 宝时终审
  89. * @param Request $request
  90. * @return array
  91. */
  92. public function baoShiReviewApi(Request $request): array
  93. {
  94. if (Gate::denies('订单管理-工单处理-宝时编辑')){
  95. return ['success' => false, 'message' => '没有对应权限'];
  96. }
  97. $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
  98. if (!$detail) {
  99. return ['success' => false, 'message' => '参数异常'];
  100. }
  101. $this->service->baoShiReviewIntercept($detail, $request->all());
  102. $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
  103. return ['success' => true, 'data' => $data];
  104. }
  105. /**
  106. * 宝时批量审核
  107. * @param Request $request
  108. * @return array
  109. */
  110. public function baoShiBatchReviewApi(Request $request): array
  111. {
  112. if (Gate::denies('订单管理-工单处理-宝时编辑')){
  113. return ['success' => false, 'message' => '没有对应权限'];
  114. }
  115. $detail_ids = $request->input('detail_ids', []);
  116. if (count($detail_ids) == 0) {
  117. return ['success' => false, 'message' => '参数异常'];
  118. }
  119. $details = WorkOrderDetail::query()->where('status', '4')->find($detail_ids);
  120. if (count($details) < count($detail_ids)) {
  121. return ['success' => false, 'message' => '参数异常,请刷新页面重试'];
  122. }
  123. $this->service->baoShiBatchReview($details, $request->all());
  124. $data = WorkOrder::query()->defaultWith()->find($details->map(function ($item) {
  125. return $item->work_order_id;
  126. })->toArray());
  127. $this->service->tags($data);
  128. return ['success' => true, 'data' => $data];
  129. }
  130. public function createBatchApi(Request $request):array
  131. {
  132. if (Gate::denies('订单管理-订单-生成工单')){
  133. return ['success' => false, 'message' => '没有对应权限'];
  134. }
  135. $logisticNumbers = array_unique(array_filter(preg_split('/[,, \n]+/u',$request->input('logistic_numbers') )));
  136. $result = $this->service->check($logisticNumbers,'拦截');
  137. if($result['success'] == false) return $result;
  138. $orderPackageQuery = OrderPackage::query()->select("order_id")->whereIn("logistic_number",$logisticNumbers);
  139. $orders = Order::query()->whereIn("id",$orderPackageQuery)->get();
  140. $params = [
  141. "remark" => $request->input("remark"),
  142. "order_nos" => $orders->map(function($item){return $item->code;})->toArray(),
  143. ];
  144. $this->service->batchStore($params);
  145. return ['success' => true];
  146. }
  147. public function checkLogisticNumberApi(Request $request){
  148. $logisticNumbers = array_unique(array_filter(preg_split('/[,, \n]+/u', $request->input('logistic_numbers'))));
  149. $result = $this->service->check($logisticNumbers, '拦截');
  150. if (!$result['success']) {
  151. return $result;
  152. }
  153. return ['success' => true];
  154. }
  155. }