ReceivingTaskController.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\DeliveryAppointmentCar;
  4. use App\Filters\ReceivingTaskFilters;
  5. use App\Http\Requests\Api\ReceivingTaskRequest;
  6. use App\ReceivingTask;
  7. use App\Services\OwnerService;
  8. use App\Services\ReceivingTaskService;
  9. use App\Warehouse;
  10. use Illuminate\Support\Facades\Gate;
  11. use Illuminate\Http\Request;
  12. class ReceivingTaskController extends Controller
  13. {
  14. public $service;
  15. public $ownerService;
  16. public function __construct(ReceivingTaskService $service, OwnerService $ownerService)
  17. {
  18. $this->service = $service;
  19. $this->ownerService = $ownerService;
  20. }
  21. public function index(Request $request, ReceivingTaskFilters $filter)
  22. {
  23. if (Gate::denies('入库管理-开单入库-查询')) {
  24. return redirect('/');
  25. }
  26. $receivingTasks = ReceivingTask::query()->with(['items', 'owner', 'wareHouse', 'file', 'deliveryAppointmentCar'])->filter($filter)->orderByDesc('created_at')->paginate(50);
  27. $owners = $this->ownerService->getQuery()->select('id', 'name')->get();
  28. $warehouses = Warehouse::query()->get();
  29. return view("store.receivingTasks.index", compact('receivingTasks', 'owners', 'warehouses'));
  30. }
  31. public function create()
  32. {
  33. if (Gate::denies('入库管理-开单入库-创建')) {
  34. return redirect('/');
  35. }
  36. $wareHouse = Warehouse::query()->get();
  37. $owners = $this->ownerService->getQuery()->select("id", "code", "name")->get();
  38. return view("store.receivingTasks.create", compact('wareHouse', 'owners'));
  39. }
  40. public function storeApi(ReceivingTaskRequest $request): array
  41. {
  42. if (Gate::denies('入库管理-开单入库-创建')) {
  43. return ['success' => false, 'message' => '没有对应权限'];
  44. }
  45. $appointment_number = $request->input('appointment_number', null);
  46. $delivery_appointment_car = DeliveryAppointmentCar::query()->with('deliveryAppointment')->where('appointment_number', $appointment_number)->first();
  47. if (!$delivery_appointment_car || !$delivery_appointment_car->deliveryAppointment) {
  48. return ['success' => false, 'errors' => ['appointment_number' => ['对应预约号未找到']]];
  49. }
  50. $ans_number_string = $delivery_appointment_car->deliveryAppointment->asn_number ?? '';
  51. $ans_numbers = array_filter(preg_split('/[,, ]+/is', $ans_number_string));
  52. if (count($ans_numbers) === 0 && count($request->input('asn_no')) == 0) {
  53. return ['success' => false, 'errors' => ['appointment_number' => ['预约号没有对应的Asn号']]];
  54. }
  55. if ($delivery_appointment_car->deliveryAppointment->owner_id != $request->input('owner_id')) {
  56. return ['success' => false, 'errors' => ['appointment_number' => ['预约号与货主未对应']]];
  57. }
  58. if (ReceivingTask::query()->where('delivery_appointment_car_id', $delivery_appointment_car->id)->exists()) {
  59. return ['success' => false, 'errors' => ['appointment_number' => ['预约号已有对应的任务']]];
  60. }
  61. try {
  62. $receiving_task = $this->service->createReceivingTask($delivery_appointment_car, $request->all());
  63. if (!$receiving_task->id) return ['success' => false, 'message' => '生成入库单任务失败,请重新尝试'];
  64. $receiving_task->loadMissing(['wareHouse', 'owner', 'deliveryAppointmentCar']);
  65. return ['success' => true, 'data' => $receiving_task];
  66. } catch (\Exception $e) {
  67. return ['success' => false, 'message' => '生成入库单任务失败,请重新尝试'];
  68. }
  69. }
  70. /**
  71. * 根据预约号获取Asn单号
  72. * @param Request $request
  73. * @return array
  74. */
  75. public function getAsnByAppointmentNumberApi(Request $request): array
  76. {
  77. $appointment_number = $request->input('appointment_number');
  78. if (!$appointment_number) {
  79. return ['success' => false, 'errors' => ['appointment_number' => '预约号不能为空']];
  80. }
  81. $delivery_appointment_car = DeliveryAppointmentCar::query()->with('deliveryAppointment')->where('appointment_number', $appointment_number)->first();
  82. if (ReceivingTask::query()->where('delivery_appointment_car_id', $delivery_appointment_car->id)->exists()) {
  83. return ['success' => false, 'errors' => ['appointment_number' => ['预约号已有对应的任务']]];
  84. }
  85. $ans_number_string = $delivery_appointment_car->deliveryAppointment->asn_number ?? '';
  86. $ans_numbers = array_filter(preg_split('/[,, ]+/is', $ans_number_string));
  87. return ['success' => true, 'data' => $ans_numbers];
  88. }
  89. }