*/ public function sheets(): array { // 本采购单内有明细的供应商(按订货明细快照 supplier_id 归集) $query = StoreOrderItemModel::query() ->join('store_order', 'store_order.id', '=', 'store_order_item.order_id') ->where('store_order_item.purchase_id', $this->purchase->id) ->whereNull('store_order.deleted_at') ->where('store_order_item.supplier_id', '>', 0); if ($this->supplierId > 0) { $query->where('store_order_item.supplier_id', $this->supplierId); } $supplierIds = $query->distinct()->pluck('store_order_item.supplier_id'); if ($supplierIds->isEmpty()) { throw new RepositoryException( $this->supplierId > 0 ? '该供应商在此采购单中无采购明细' : '该采购单无供应商采购明细,无法导出' ); } $suppliers = SupplierModel::withTrashed() ->whereIn('id', $supplierIds) ->orderBy('id') ->get(['id', 'name']); $usedNames = []; $sheets = []; foreach ($suppliers as $supplier) { $sheets[] = new PurchaseSupplierSheet( $this->purchase, $supplier, SheetName::make((string) $supplier->name, (int) $supplier->id, $usedNames), ); } return $sheets; } }