diff --git a/app/Domains/Virtual/Exports/CardExport.php b/app/Domains/Virtual/Exports/CardExport.php index e42587d8..d46a12f1 100644 --- a/app/Domains/Virtual/Exports/CardExport.php +++ b/app/Domains/Virtual/Exports/CardExport.php @@ -11,6 +11,7 @@ use Illuminate\Database\Eloquent\Collection; use App\Domains\Virtual\Services\CardService; use Dipper\Excel\Concerns\WithColumnFormatting; use PhpOffice\PhpSpreadsheet\Style\NumberFormat; +use App\Domains\Virtual\Repositories\PropertyRepository; use App\Domains\Virtual\Repositories\OrderCardPartitionRepository; class CardExport extends AbstractExport implements FromQuery, WithHeadings, WithRows, WithColumnFormatting @@ -27,6 +28,23 @@ class CardExport extends AbstractExport implements FromQuery, WithHeadings, With public function query() { $this->conditions['type'] = 0; + + // 添加卡属性匹配查找 + $properties = app(PropertyRepository::class)->select(['company_id', 'package_id', 'product', 'package'])->get(); + if (isset($this->conditions['prop_product']) && isset($this->conditions['prop_package'])) { + $props = $properties->where('product', $this->conditions['prop_product'])->where($this->conditions['prop_package'])->get(); + $this->conditions['company_id'] = $props->pluck('company_id')->toArray(); + $this->conditions['package_id'] = $props->pluck('package_id')->toArray(); + } elseif (isset($this->conditions['prop_product'])) { + $props = $properties->where('product', $this->conditions['prop_product'])->get(); + $this->conditions['company_id'] = $props->pluck('company_id')->toArray(); + $this->conditions['package_id'] = $props->pluck('package_id')->toArray(); + } elseif (isset($this->conditions['prop_package'])) { + $props = $properties->where('package', $this->conditions['prop_package'])->get(); + $this->conditions['company_id'] = $props->pluck('company_id')->toArray(); + $this->conditions['package_id'] = $props->pluck('package_id')->toArray(); + } + $builder = app(OrderCardPartitionRepository::class)->forceNoReset()->withConditions($this->conditions)->orderBy('sim')->applyConditions(); return $builder; @@ -52,6 +70,8 @@ class CardExport extends AbstractExport implements FromQuery, WithHeadings, With $item['carrier_operator'], $item['company_name'], $item['package_name'], + $item['prop_product'], + $item['prop_package'], $item['virtual_activated_at'], $item['status_name'], $item['created_at'], @@ -73,6 +93,8 @@ class CardExport extends AbstractExport implements FromQuery, WithHeadings, With '运营商', '企业名称', '套餐名称', + '产品类型', + '套餐类型', '激活时间', '状态', '创建时间', diff --git a/app/Domains/Virtual/Services/CardService.php b/app/Domains/Virtual/Services/CardService.php index 98e06b3a..2654fdc9 100644 --- a/app/Domains/Virtual/Services/CardService.php +++ b/app/Domains/Virtual/Services/CardService.php @@ -9,6 +9,7 @@ use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Request; use Illuminate\Pagination\LengthAwarePaginator; use App\Domains\Card\Repositories\CardRepository; +use App\Domains\Virtual\Repositories\PropertyRepository; use App\Domains\Virtual\Repositories\OrderCardPartitionRepository; class CardService extends Service @@ -41,6 +42,21 @@ class CardService extends Service $page = Request::get('page', 1); $conditions['type'] = isset($conditions['card_status']) ? [0, 1, 2] : 0; + // 添加卡属性匹配查找 + $properties = app(PropertyRepository::class)->select(['company_id', 'package_id', 'product', 'package'])->get(); + if (isset($conditions['prop_product']) && isset($conditions['prop_package'])) { + $props = $properties->where('product', $conditions['prop_product'])->where($conditions['prop_package'])->get(); + $conditions['company_id'] = $props->pluck('company_id')->toArray(); + $conditions['package_id'] = $props->pluck('package_id')->toArray(); + } elseif (isset($conditions['prop_product'])) { + $props = $properties->where('product', $conditions['prop_product'])->get(); + $conditions['company_id'] = $props->pluck('company_id')->toArray(); + $conditions['package_id'] = $props->pluck('package_id')->toArray(); + } elseif (isset($conditions['prop_package'])) { + $props = $properties->where('package', $conditions['prop_package'])->get(); + $conditions['company_id'] = $props->pluck('company_id')->toArray(); + $conditions['package_id'] = $props->pluck('package_id')->toArray(); + } $select = [ @@ -140,6 +156,11 @@ class CardService extends Service $data['status'] = $status; $data['status_name'] = $cardStatus[$status]; + // 添加卡属性匹配字段 + $property = PropertyService::load($item->company_id, $item->package_id); + $data['prop_product'] = $property['product'] ?? ''; + $data['prop_package'] = $property['package'] ?? ''; + return collect($data); }); diff --git a/app/Domains/Virtual/Services/PropertyService.php b/app/Domains/Virtual/Services/PropertyService.php index 4b61543f..9c388776 100644 --- a/app/Domains/Virtual/Services/PropertyService.php +++ b/app/Domains/Virtual/Services/PropertyService.php @@ -44,6 +44,8 @@ class PropertyService extends Service 'updated_at' => null, ]; + protected static $properties; + /** * 构造函数 * @@ -294,4 +296,18 @@ class PropertyService extends Service return null; } + + public static function load($company_id, $package_id) + { + if (!self::$properties) { + $properties = app(PropertyRepository::class) + ->select(['company_id', 'package_id', 'product', 'package'])->get(); + + self::$properties = $properties->keyBy(function ($item) { + return $item['company_id'] . '_' . $item['package_id']; + })->toArray(); + } + + return self::$packages[$company_id] . '_' . $package_id; + } } diff --git a/frontend/src/views/virtual/cards/index.vue b/frontend/src/views/virtual/cards/index.vue index 9fc1f54e..f60ca60b 100644 --- a/frontend/src/views/virtual/cards/index.vue +++ b/frontend/src/views/virtual/cards/index.vue @@ -74,6 +74,16 @@ + +