currentUser($request); $supplier = $this->ensureSupplierBound($user); $purchaseIds = PurchaseOrderItemModel::query() ->where('supplier_id', $supplier->id) ->where('is_sent', PurchaseOrderItemModel::SENT) ->distinct() ->pluck('purchase_id'); $data = PurchaseOrderModel::query() ->whereIn('id', $purchaseIds) ->orderBy('purchase_date', 'desc') ->orderBy('id', 'desc') ->paginate((int) $request->input('pageSize', 10)) ->toArray(); return $this->success($data); } /** 采购单明细:仅本供应商且已发送的明细行 */ #[GetRoute('/supplier/purchases/{id}', authorize: true, where: ['id' => '[0-9]+'])] public function detail(int $id, Request $request): JsonResponse { $user = $this->currentUser($request); $supplier = $this->ensureSupplierBound($user); $purchase = PurchaseOrderModel::find($id); if ($purchase === null) { throw new RepositoryException('采购单不存在'); } $items = $purchase->items() ->where('supplier_id', $supplier->id) ->where('is_sent', PurchaseOrderItemModel::SENT) ->get(); if ($items->isEmpty()) { throw new RepositoryException('该采购单无贵司的采购明细'); } return $this->success([ 'id' => $purchase->id, 'purchase_no' => $purchase->purchase_no, 'purchase_date' => $purchase->purchase_date?->toDateString(), 'remark' => $purchase->remark, 'items' => $items->toArray(), ]); } /** 确认接单:本供应商已发送明细批量记录 supplier_confirmed_at(幂等) */ #[PutRoute('/supplier/purchases/{id}/confirm', authorize: true, where: ['id' => '[0-9]+'])] public function confirm(int $id, Request $request): JsonResponse { $user = $this->currentUser($request); $supplier = $this->ensureSupplierBound($user); $purchase = PurchaseOrderModel::find($id); if ($purchase === null) { throw new RepositoryException('采购单不存在'); } $items = $purchase->items() ->where('supplier_id', $supplier->id) ->where('is_sent', PurchaseOrderItemModel::SENT) ->get(); if ($items->isEmpty()) { throw new RepositoryException('该采购单无贵司的采购明细'); } $now = now(); $confirmed = 0; foreach ($items as $item) { if ($item->supplier_confirmed_at === null) { $item->supplier_confirmed_at = $now; $item->save(); $confirmed++; } } return $this->success(['confirmed' => $confirmed], '已确认接单'); } }