| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- <?php
- namespace App\Http\Controllers;
- use App\DeliveryAppointmentCar;
- use App\Filters\ReceivingTaskFilters;
- use App\Http\Requests\Api\ReceivingTaskRequest;
- use App\Owner;
- use App\ReceivingTask;
- use App\ReceivingTaskItem;
- use App\Services\OwnerService;
- use App\Services\ReceivingTaskService;
- use App\Warehouse;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Date;
- use Illuminate\Support\Facades\Gate;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Http;
- use Oursdreams\Export\Export;
- use Ramsey\Uuid\Uuid;
- class ReceivingTaskController extends Controller
- {
- public $service;
- public $ownerService;
- public function __construct(ReceivingTaskService $service, OwnerService $ownerService)
- {
- $this->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;
- $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,
- "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 = [
- "user_type" => 0,
- "job_type" => "开单",
- "job_name" => "开单",
- "form_number" => 1,
- "piece_time" => date("Y-m-d H:i:s"),
- "message_id" => "owner_entry" . $taskId,
- "form_scale" =>1,
- "user_id" => Auth::user()['id'],
- "warehouse_id" => $warehouseId,
- "owner_id" => $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, "开单入库");
- }
- }
|