service = $service; $this->ownerService = $ownerService; } public function index(Request $request, ReceivingTaskFilters $filter) { if (Gate::denies('入库管理-开单入库-查询')) { return redirect('/'); } $receivingTasks = ReceivingTask::query()->with(['items', 'owner', 'wareHouse', 'file', 'deliveryAppointmentCar'])->filter($filter)->orderByDesc('created_at')->paginate(50); $owners = $this->ownerService->getQuery()->select('id', 'name')->get(); $warehouses = Warehouse::query()->get(); return view("store.receivingTasks.index", compact('receivingTasks', 'owners', 'warehouses')); } public function create() { if (Gate::denies('入库管理-开单入库-创建')) { return redirect('/'); } $wareHouse = Warehouse::query()->get(); $owners = $this->ownerService->getQuery()->select("id", "code", "name")->get(); return view("store.receivingTasks.create", compact('wareHouse', 'owners')); } public function storeApi(ReceivingTaskRequest $request): array { if (Gate::denies('入库管理-开单入库-创建')) { return ['success' => false, 'message' => '没有对应权限']; } $appointment_number = $request->input('appointment_number', null); $delivery_appointment_car = DeliveryAppointmentCar::query()->with('deliveryAppointment') ->where('status', '!=', 2) ->where('appointment_number', $appointment_number) ->orderByDesc('id') ->first(); if (!$delivery_appointment_car || !$delivery_appointment_car->deliveryAppointment) { return ['success' => false, 'errors' => ['appointment_number' => ['对应预约号未找到']]]; } $ans_number_string = $delivery_appointment_car->deliveryAppointment->asn_number ?? ''; $ans_numbers = array_filter(preg_split('/[,, ]+/is', $ans_number_string)); if (count($ans_numbers) === 0 && count($request->input('asn_no', [])) == 0) { return ['success' => false, 'errors' => ['appointment_number' => ['预约号没有对应的Asn号']]]; } $asn_nos = array_unique(array_merge($ans_numbers, $request->input('asn_nos') ?? [])); if (count($asn_nos) == 0) { return ['success' => false, 'errors' => ['appointment_number' => ['预约号没有对应的Asn号']]]; } if ($delivery_appointment_car->deliveryAppointment->owner_id != $request->input('owner_id')) { return ['success' => false, 'errors' => ['appointment_number' => ['预约号与货主为必填项']]]; } if (ReceivingTask::query()->where('delivery_appointment_car_id', $delivery_appointment_car->id)->exists()) { return ['success' => false, 'errors' => ['appointment_number' => ['预约号已有对应的任务']]]; } try { $receiving_task = $this->service->createReceivingTask($delivery_appointment_car, $request->all()); if (!$receiving_task->id) return ['success' => false, 'message' => '生成入库单任务失败,请重新尝试']; $receiving_task->loadMissing(['wareHouse', 'owner', 'deliveryAppointmentCar']); $this->sendPiece($request->input('owner_id'), $receiving_task->number); $this->sendOwnerPiece($request->input('owner_id'),$receiving_task->number); return ['success' => true, 'data' => $receiving_task]; } catch (\Exception $e) { return ['success' => false, 'message' => '生成入库单任务失败,请重新尝试']; } } public function sendPiece($ownerId, $taskId) { $url = config('api.java.base') . config('api.java.piece.log.record'); $owner = Owner::query()->where("id", $ownerId)->first(); $warehouseId = $owner->warehouse_id ?? null; $warehouseCode = null; if(!is_null($warehouseId)){ $warehouse = Warehouse::query()->where('id',$warehouseId)->first(); if(!is_null($warehouse)){ $warehouseCode = $warehouse['code']; } } $request = [ "user_type" => 0, "job_type" => "开单", "job_name" => "开单", "form_number" => 1, "piece_time" => date("Y-m-d H:i:s"), "message_id" => $taskId, "user_id" => Auth::user()['id'], "warehouse_id" => $warehouseId, "warehouse_code" => $warehouseCode, "owner_id" => $ownerId, "item_number" => 0, ]; app('LogService')->log("开单", "通知服务端", json_encode($request)); $http = Http::post($url, $request); if (!$http->successful()) { app('LogService')->log("开单", "sendPiece", '发送失败:' . $http->body()); return; } $result = $http->json(); if ($result["code"] != 200) { app('LogService')->log("开单", "sendPiece", '服务端错误:' . $http->body()); } } public function sendOwnerPiece($ownerId, $taskId) { $url = config('api.java.base') . config('api.java.piece.ownerLog.entry'); $owner = Owner::query()->where("id", $ownerId)->first(); $warehouseId = $owner->warehouse_id ?? null; $request = [ "taskNo"=> $taskId, "userId" => Auth::user()['id'], "userType" => 0, "jobType" => "开单", "jobName" => "开单", "pieceTime" => date("Y-m-d H:i:s"), "messageId" => "owner_entry" . $taskId, "formNumber" => 1, "formScale" => 1, "warehouseId" => $warehouseId, "ownerId" => $ownerId, ]; app('LogService')->log("货主开单", "通知服务端", json_encode($request)); $http = Http::post($url, $request); if (!$http->successful()) { app('LogService')->log("货主开单", "sendPiece", '发送失败:' . $http->body()); return; } $result = $http->json(); if ($result["code"] != 200) { app('LogService')->log("货主开单", "sendPiece", '服务端错误:' . $http->body()); } } /** * 根据预约号获取Asn单号 * @param Request $request * @return array */ public function getAsnByAppointmentNumberApi(Request $request): array { $appointment_number = $request->input('appointment_number'); if (!$appointment_number) { return ['success' => false, 'errors' => ['appointment_number' => '预约号不能为空']]; } $delivery_appointment_car = DeliveryAppointmentCar::query()->with('deliveryAppointment')->where('appointment_number', $appointment_number)->first(); if (ReceivingTask::query()->where('delivery_appointment_car_id', $delivery_appointment_car->id)->exists()) { return ['success' => false, 'errors' => ['appointment_number' => ['预约号已有对应的任务']]]; } $ans_number_string = $delivery_appointment_car->deliveryAppointment->asn_number ?? ''; $ans_numbers = array_filter(preg_split('/[,, ]+/is', $ans_number_string)); return ['success' => true, 'data' => $ans_numbers]; } public function exportExcel(Request $request, ReceivingTaskFilters $filter) { ini_set('memory_limit', '1024M'); $items = ReceivingTask::query()->with(['items', 'owner', 'wareHouse', 'file', 'deliveryAppointmentCar'])->filter($filter)->orderByDesc('created_at')->paginate(50); $json = []; $row = ['收货任务号', '状态', '货主', 'ASN单号', '投单时间', '仓库', '预约号', '驾驶证号', '收货类型']; foreach ($items as $item) { $asnNos = []; $item->items->each(function ($receivingTaskItem) use (&$asnNos) { $asnNos[] = $receivingTaskItem->asn_no; }); $asnNos = implode(",\r\n", $asnNos); $json[] = [ $item->number, $item->status, isset($item->owner) ? $item->owner->name : '', $asnNos, isset($item->created_at) ? str_split($item->created_at, 10)[0] : '', isset($item->wareHouse) ? $item->wareHouse->name : '', isset($item->deliveryAppointmentCar) ? $item->deliveryAppointmentCar->appointment_number : '', $item->plate_number, $item->receiving_type ]; } return Export::make($row, $json, "开单入库"); } }