From b4e2c3cf60e3c8149d946b998190377e13e1b43d Mon Sep 17 00:00:00 2001 From: denghy Date: Mon, 23 Sep 2019 16:10:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Domains/Virtual/Exports/CardExport.php | 12 +------- .../Concerns/OrderCardConcern.php | 10 +++++++ .../Repositories/PropertyRepository.php | 7 +++-- app/Domains/Virtual/Services/CardService.php | 28 +++++++++++-------- 4 files changed, 31 insertions(+), 26 deletions(-) diff --git a/app/Domains/Virtual/Exports/CardExport.php b/app/Domains/Virtual/Exports/CardExport.php index 54adbe38..66f576ec 100644 --- a/app/Domains/Virtual/Exports/CardExport.php +++ b/app/Domains/Virtual/Exports/CardExport.php @@ -30,17 +30,7 @@ class CardExport extends AbstractExport implements FromQuery, WithHeadings, With $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'])) { - $this->conditions['company_id'] = $properties->where('product', $this->conditions['prop_product'])->where('package', $this->conditions['prop_package'])->pluck('company_id')->toArray(); - $this->conditions['package_id'] = $properties->where('product', $this->conditions['prop_product'])->where('package', $this->conditions['prop_package'])->pluck('package_id')->toArray(); - } elseif (isset($this->conditions['prop_product'])) { - $this->conditions['company_id'] = $properties->where('product', $this->conditions['prop_product'])->pluck('company_id')->toArray(); - $this->conditions['package_id'] = $properties->where('product', $this->conditions['prop_product'])->pluck('package_id')->toArray(); - } elseif (isset($this->conditions['prop_package'])) { - $this->conditions['company_id'] = $properties->where('package', $this->conditions['prop_package'])->pluck('company_id')->toArray(); - $this->conditions['package_id'] = $properties->where('package', $this->conditions['prop_package'])->pluck('package_id')->toArray(); - } + CardService::propConditions($this->conditions); $builder = app(OrderCardPartitionRepository::class)->forceNoReset()->withConditions($this->conditions)->orderBy('sim')->applyConditions(); diff --git a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php index 91dd8d65..ea743df3 100644 --- a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php +++ b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php @@ -56,6 +56,16 @@ trait OrderCardConcern $query->whereIn('package_id', $conditions['package_id']); } + if (isset($conditions['company_and_package_id'])) { + $conditions['company_and_package_id'] = array_wrap($conditions['company_and_package_id']); + + $company_and_package_id = implode(',', array_map(function ($value) { + return "'".str_replace('"', '""', $value)."'"; + }, $conditions['company_and_package_id'])); + + $query->whereRaw("CONCAT(company_id, '_', package_id) IN (" . $company_and_package_id . ")"); + } + if (isset($conditions['carrier_operator'])) { $query->whereHas('package', function ($relation) use ($conditions) { $relation->withTrashed()->where('carrier_operator', $conditions['carrier_operator']); diff --git a/app/Domains/Virtual/Repositories/PropertyRepository.php b/app/Domains/Virtual/Repositories/PropertyRepository.php index 4d5f4612..1ca408de 100644 --- a/app/Domains/Virtual/Repositories/PropertyRepository.php +++ b/app/Domains/Virtual/Repositories/PropertyRepository.php @@ -16,7 +16,7 @@ class PropertyRepository extends Repository /** * 是否开启数据转化 - * + * * @var bool */ protected $needTransform = false; @@ -29,7 +29,8 @@ class PropertyRepository extends Repository 'created_at' => 'like', ]; - public function model() { + public function model() + { return Model::class; } @@ -59,4 +60,4 @@ class PropertyRepository extends Repository return $this; } -} \ No newline at end of file +} diff --git a/app/Domains/Virtual/Services/CardService.php b/app/Domains/Virtual/Services/CardService.php index db90dc52..0f9ba2cb 100644 --- a/app/Domains/Virtual/Services/CardService.php +++ b/app/Domains/Virtual/Services/CardService.php @@ -43,18 +43,7 @@ class CardService extends Service $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'])) { - $conditions['company_id'] = $properties->where('product', $conditions['prop_product'])->where('package', $conditions['prop_package'])->pluck('company_id')->toArray(); - $conditions['package_id'] = $properties->where('product', $conditions['prop_product'])->where('package', $conditions['prop_package'])->pluck('package_id')->toArray(); - } elseif (isset($conditions['prop_product'])) { - $conditions['company_id'] = $properties->where('product', $conditions['prop_product'])->pluck('company_id')->toArray(); - $conditions['package_id'] = $properties->where('product', $conditions['prop_product'])->pluck('package_id')->toArray(); - } elseif (isset($conditions['prop_package'])) { - $conditions['company_id'] = $properties->where('package', $conditions['prop_package'])->pluck('company_id')->toArray(); - $conditions['package_id'] = $properties->where('package', $conditions['prop_package'])->pluck('package_id')->toArray(); - } - + $this->propConditions($conditions); $select = [ 'id', @@ -190,4 +179,19 @@ class CardService extends Service return 1; } + + public static function propConditions(&$conditions) + { + $properties = app(PropertyRepository::class)->select(['company_id', 'package_id', 'product', 'package'])->get()->keyBy(function ($item) { + return $item['company_id'] . '_' . $item['package_id']; + }); + + if (isset($conditions['prop_product']) && isset($conditions['prop_package'])) { + $conditions['company_and_package_id'] = $properties->where('product', $conditions['prop_product'])->where('package', $conditions['prop_package'])->keys()->toArray(); + } elseif (isset($conditions['prop_product'])) { + $conditions['company_and_package_id'] = $properties->where('product', $conditions['prop_product'])->keys()->toArray(); + } elseif (isset($conditions['prop_package'])) { + $conditions['company_and_package_id'] = $properties->where('package', $conditions['prop_package'])->keys()->toArray(); + } + } }