WorkOrderController.php 9.5 KB

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