From 1392e2ee524fe680cea2627d1374e6ae73895f69 Mon Sep 17 00:00:00 2001 From: denghy Date: Fri, 22 Mar 2019 11:00:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Console/Kernel.php | 2 +- app/Dicts.php | 1 - app/Domains/Card/Jobs/MongoCardJob.php | 78 + .../Card/Repositories/BlocRepository.php | 62 - .../Card/Repositories/CardRepository.php | 4 +- app/Domains/Card/Services/CardService.php | 43 + .../Real/Commands/Sync/ActivatedSync.php | 81 + .../Real/Commands/Sync/AddedOrderSync.php | 2 +- app/Domains/Real/Commands/Sync/BlocSync.php | 42 - .../Real/Commands/Sync/CancelledSync.php | 71 + app/Domains/Real/Commands/Sync/MongoSync.php | 58 - .../Real/Commands/Sync/OrderBaseSync.php | 2 +- .../Real/Commands/Sync/PackageSync.php | 2 +- app/Domains/Real/Commands/Sync/RefundSync.php | 40 + app/Domains/Real/Jobs/MongoSyncJob.php | 110 - .../Real/Providers/RealServiceProvider.php | 5 +- .../Virtual/Commands/Sync/ProductSync.php | 2 +- .../Http/Controllers/FetchController.php | 18 +- .../Jobs/CreateRealVirtualRelation.php | 67 - app/Domains/Virtual/Services/OrderService.php | 144 +- app/Models/Artisan/Artisan.php | 3 - app/Models/Card/Bloc.php | 48 - app/Models/Card/Card.php | 2 - app/Models/Real/FlowPool.php | 1 - app/Models/Real/Order.php | 1 - app/Models/Virtual/Order.php | 2 - .../2018_12_24_164210_create_blocs_table.php | 46 - .../2018_12_24_164218_create_cards_table.php | 1 - ...4_164434_create_real_order_cards_table.php | 1 + ...0946_create_virtual_order_cards_tables.php | 1 + ..._03_08_110806_create_company_relations.php | 42 - .../create_virtaul_order_cards_func.pgsql | 28 +- .../create_virtual_order_cards_table.pgsql | 15 + database/migrations/migrate_from_old.pgsql | 6 +- frontend/src/api/virtual/fetch.js | 19 +- frontend/src/mixins/complete.js | 15 +- frontend/src/mixins/index.js | 64 +- .../src/views/artisan/real-sync/js/edit.js | 16 +- .../src/views/artisan/real-sync/js/index.js | 1 - frontend/src/views/virtual/orders/cards.vue | 8 + frontend/src/views/virtual/orders/js/cards.js | 2 +- frontend/src/views/virtual/orders/js/edit.js | 25 +- tests/ArtisanTest.php | 6 +- tests/CsvTest.php | 199 +- tests/ExampleTest.php | 13 +- tests/TestCase.php | 2 +- tests/change_card_renew_at.csv | 115 + tests/db.csv | 132504 --------------- .../src/Database/PostgresGrammar.php | 37 +- 49 files changed, 722 insertions(+), 133335 deletions(-) create mode 100644 app/Domains/Card/Jobs/MongoCardJob.php delete mode 100644 app/Domains/Card/Repositories/BlocRepository.php create mode 100644 app/Domains/Real/Commands/Sync/ActivatedSync.php delete mode 100644 app/Domains/Real/Commands/Sync/BlocSync.php create mode 100644 app/Domains/Real/Commands/Sync/CancelledSync.php delete mode 100644 app/Domains/Real/Commands/Sync/MongoSync.php create mode 100644 app/Domains/Real/Commands/Sync/RefundSync.php delete mode 100644 app/Domains/Real/Jobs/MongoSyncJob.php delete mode 100644 app/Domains/Virtual/Jobs/CreateRealVirtualRelation.php delete mode 100644 app/Models/Card/Bloc.php delete mode 100644 database/migrations/2018_12_24_164210_create_blocs_table.php delete mode 100644 database/migrations/2019_03_08_110806_create_company_relations.php create mode 100644 tests/change_card_renew_at.csv delete mode 100644 tests/db.csv diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 218d16af..e7bb8c10 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -26,7 +26,7 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule) { $logPath = storage_path('logs/artisan.log'); - $schedule->command('real:sync-mongo')->cron('*/5 * * * *')->withoutOverlapping()->appendOutputTo($logPath); + $schedule->command('real:sync-activated')->cron('* */4 * * *')->withoutOverlapping()->appendOutputTo($logPath); } /** diff --git a/app/Dicts.php b/app/Dicts.php index b7f0dc52..705d9426 100644 --- a/app/Dicts.php +++ b/app/Dicts.php @@ -22,7 +22,6 @@ class Dicts extends Repository 'carrier_operator' => ['联通', '移动', '电信', '全网'], 'service_type' => ['套餐开通', '套餐续费', '套餐更换', '套餐销售'], 'card_status' => ['测试期', '沉默期', '服务期', '已注销'], - 'bloc_channel' => ['运营商', '中间商'], 'package_type' => ['基础套餐', '续费包', '加油包', '可选包', '附加包'], 'tables' => ['real' => 'RD', 'virtual' => 'VD'], 'order_status' => ['已下单', '已取消', '已排单', '已出库', '已发货', '已签收'], diff --git a/app/Domains/Card/Jobs/MongoCardJob.php b/app/Domains/Card/Jobs/MongoCardJob.php new file mode 100644 index 00000000..380f4e4a --- /dev/null +++ b/app/Domains/Card/Jobs/MongoCardJob.php @@ -0,0 +1,78 @@ +simArray = $simArray; + } + + /** + * + */ + public function handle() + { + foreach (array_chunk($this->simArray, 1000) as $simArray) { + Log::notice('MongoCardJob #:' . implode(',', $simArray)); + $this->cardsJob($simArray); + } + } + + public function cardsJob($simArray) + { + $values = CardService::getMongoCardsInfo($simArray); + + if (empty($values)) { + Log::notice('MongoCardJob not result!'); + return ; + } + + $builder = Card::query()->toBase(); + + $sql = $builder->getGrammar()->compileInsert($builder, $values); + + $sql .= ' on conflict (sim) do update set + imsi=excluded.imsi, + iccid=excluded.iccid, + carrier_operator=excluded.carrier_operator, + activated_at=excluded.activated_at, + virtual_activated_at=COALESCE(cards.virtual_activated_at, excluded.activated_at), + created_at=excluded.created_at + updated_at=excluded.updated_at + '; + + $builder->connection->insert($sql, Arr::flatten($values, 1)); + + app(CardRepository::class)->forgetCached(); + + $simArray = implode(',', array_keys($values)); + + DB::statement("select fix_timelines('{{$simArray}}'::INT8[]);"); + + app(OrderCardPartitionRepository::class)->forgetCached(); + } +} diff --git a/app/Domains/Card/Repositories/BlocRepository.php b/app/Domains/Card/Repositories/BlocRepository.php deleted file mode 100644 index c6fb5d99..00000000 --- a/app/Domains/Card/Repositories/BlocRepository.php +++ /dev/null @@ -1,62 +0,0 @@ - '=', - 'created_at' => 'like', - ]; - - public function model() { - return Model::class; - } - - /** - * 数据格式化 - * - * @param mixed $result - * - * @return mixed - */ - public function transform($model) - { - return $model->toArray(); - } - - /** - * 查询条件 - * - * @return void - */ - public function withConditions(array $conditions = []) - { - if (isset($conditions['id'])) { - $conditions['id'] = array_wrap($conditions['id']); - $this->model = $this->model->whereIn('id', $conditions['id']); - } - - return $this; - } -} diff --git a/app/Domains/Card/Repositories/CardRepository.php b/app/Domains/Card/Repositories/CardRepository.php index ebb6654d..407ca1d8 100644 --- a/app/Domains/Card/Repositories/CardRepository.php +++ b/app/Domains/Card/Repositories/CardRepository.php @@ -16,7 +16,7 @@ class CardRepository extends Repository /** * 是否开启数据转化 - * + * * @var bool */ protected $needTransform = false; @@ -59,4 +59,4 @@ class CardRepository extends Repository return $this; } -} \ No newline at end of file +} diff --git a/app/Domains/Card/Services/CardService.php b/app/Domains/Card/Services/CardService.php index 3f0d5b31..cca050b3 100644 --- a/app/Domains/Card/Services/CardService.php +++ b/app/Domains/Card/Services/CardService.php @@ -1,10 +1,14 @@ whereIn('cNo', $simArray)->get(); + + $values = []; + + foreach ($res as $value) { + $activated_at = $value['saDate'] ? $value['saDate']->toDateTime()->format('Y-m-d H:i:s') : null; + + if ($activated_at && Carbon::parse($activated_at) < Carbon::parse('2000-01-01 00:00:00')) { + $activated_at = null; + } + + $sim = intval(preg_replace('/\D/', '', $value['cNo'])); + + $values[$sim] = [ + 'sim' => $sim, + 'imsi' => $value['imsi'] ?? '', + 'iccid' => $value['iccid'] ?? '', + 'carrier_operator' => self::$carrierOperators[$value['oType']] ?? 255, + 'activated_at' => $activated_at, + 'virtual_activated_at' => $activated_at, + 'created_at' => $value['sDate'] ? $value['sDate']->toDateTime()->format('Y-m-d H:i:s') : null, + 'updated_at' => date('Y-m-d H:i:s'), + ]; + } + + return $values; + } } diff --git a/app/Domains/Real/Commands/Sync/ActivatedSync.php b/app/Domains/Real/Commands/Sync/ActivatedSync.php new file mode 100644 index 00000000..f395c2b0 --- /dev/null +++ b/app/Domains/Real/Commands/Sync/ActivatedSync.php @@ -0,0 +1,81 @@ +getDay(); + $startMicrotime = new UTCDateTime($day->startOfDay()); + $endMicrotime = new UTCDateTime($day->endOfDay()); + + $query = TblCard::where('pNo', 'No00000000768')->where('isDel', 0) + ->where('saDate', 'exists', true) + ->where('bNo', 'exists', true) + ->where('saDate', '>=', $startMicrotime) + ->where('saDate', '<=', $endMicrotime); + + $total = $query->count(); + + $this->line('待同步条数:'.$total); + + $page = 1; + + while ($total) { + if (($page - 1) * $this->limit >= $total) { + break; + } + + $res = $query->select(['cNo', 'saDate']) + ->forPage($page, $this->limit)->get(); + + $array = $res->map(function ($item) { + return [ + 'sim' => $item['cNo'], + 'activated_at' => $item['saDate'] ? $item['saDate']->toDateTime()->format('Y-m-d H:i:s') : null, + ]; + })->all(); + + $table = app(Card::class)->getTable(); + $as = 'as_table'; + $reference = 'sim'; + + $updates = "activated_at={$as}.activated_at::timestamp, + virtual_activated_at=COALESCE({$table}.activated_at, {$as}.activated_at::timestamp)::timestamp"; + + $parameters = collect($array)->map(function ($item) { + return "({$item['sim']}, '{$item['activated_at']}')"; + })->implode(', '); + + $from = "FROM (VALUES $parameters) AS {$as}(sim, activated_at)"; + + $where = "WHERE {$table}.{$reference} = {$as}.{$reference}::int8"; + + $sql = trim("UPDATE {$table} SET {$updates} {$from} {$where}"); + $simArray = implode(',', array_pluck($array, 'sim')); + + DB::statement($sql); + DB::statement("select fix_timelines('{{$simArray}}'::INT8[]);"); + + $page++; + } + + app(CardRepository::class)->forgetCached(); + app(OrderCardPartitionRepository::class)->forgetCached(); + } +} diff --git a/app/Domains/Real/Commands/Sync/AddedOrderSync.php b/app/Domains/Real/Commands/Sync/AddedOrderSync.php index 741060d4..f6df457b 100644 --- a/app/Domains/Real/Commands/Sync/AddedOrderSync.php +++ b/app/Domains/Real/Commands/Sync/AddedOrderSync.php @@ -98,7 +98,7 @@ class AddedOrderSync extends Command } } - DB::table($table)->upsert($data, ['sim', 'order_id'], true); + DB::table($table)->upsert($data, ['sim', 'order_id'], []); } } diff --git a/app/Domains/Real/Commands/Sync/BlocSync.php b/app/Domains/Real/Commands/Sync/BlocSync.php deleted file mode 100644 index ec3a2f40..00000000 --- a/app/Domains/Real/Commands/Sync/BlocSync.php +++ /dev/null @@ -1,42 +0,0 @@ - 0, 'yd' => 1, 'dx' => 2, 'qw' => 3]; - - public function handle() - { - $select = ['id', 'bloc_code as sn', "bloc_name as name", 'carrieroperator as carrier_operator', 'create_time as created_at', 'del']; - - $blocs = DB::connection('real')->table('jxc_bloc_manage')->select($select)->get()->collect()->toArray(); - $carders = DB::connection('real')->table('jxc_carder_manage')->select(['bloc_code', 'inside_card_from_sn'])->get()->collect()->toArray(); - $carders = array_pluck($carders, 'inside_card_from_sn', 'bloc_code'); - - foreach ($blocs as &$item) { - $item['shorthand'] = $carders[$item['sn']] ?? ''; - $item['carrier_operator'] = $this->carrier_operator[$item['carrier_operator']]; - $item['created_at'] = Carbon::createFromTimestamp($item['created_at']); - $item['updated_at'] = date('Y-m-d H:i:s'); - $item['deleted_at'] = $item['del'] ? date('Y-m-d H:i:s') : null; - unset($item['del']); - } - - $blocs = array_values(array_keyBy($blocs, 'id')); - - Bloc::upsert($blocs, 'id'); - - app(BlocRepository::class)->forgetCached(); - } -} diff --git a/app/Domains/Real/Commands/Sync/CancelledSync.php b/app/Domains/Real/Commands/Sync/CancelledSync.php new file mode 100644 index 00000000..b3acc226 --- /dev/null +++ b/app/Domains/Real/Commands/Sync/CancelledSync.php @@ -0,0 +1,71 @@ +getDay(); + + $cancelRecords = DB::connection('real')->table('jxc_cancel_card') + ->where('cn_date', $day->format('Y-m-d')) + ->where('cn_status', 1)->get(); + + $this->line('待同步条数:'.count($cancelRecords)); + + if (empty($cancelRecords)) { + return; + } + + $cards = DB::connection('real')->table('jxc_cancel_card_item') + ->whereIn('item_cn_id', $cancelRecords->pluck('cn_id')->toArray())->get(); + + $array = []; + + foreach ($cards as $item) { + $array[] = [ + 'sim' => $item->item_sim, + 'cancelled_at' => $day, + ]; + } + + Card::updateBatch($array, 'sim::int8'); + + app(CardRepository::class)->forgetCached(); + app(OrderCardPartitionRepository::class)->forgetCached(); + } + + protected function getDay() + { + if ($day = $this->argument('day')) { + if (!preg_match('/\d{4}-\d{1,2}-\d{1,2}/', $day)) { + throw new \App\Exceptions\InvalidArgumentException('请输入正确的日期 #示例: 2018-10-01'); + } + + return Carbon::parse($day)->startOfDay(); + } + + return Carbon::yesterday()->startOfDay(); + } + + protected function getArguments() + { + return [ + ['day', InputArgument::OPTIONAL, '要同步的数据日期,默认昨天 #示例: 2018-10-01'], + ]; + } +} diff --git a/app/Domains/Real/Commands/Sync/MongoSync.php b/app/Domains/Real/Commands/Sync/MongoSync.php deleted file mode 100644 index 1afdc8dc..00000000 --- a/app/Domains/Real/Commands/Sync/MongoSync.php +++ /dev/null @@ -1,58 +0,0 @@ -get(self::CURSOR_KEY) ?: intval(microtime(true) * 1000); - $nextMicrotime = intval(microtime(true) * 1000); - - $utcDateTime = new UTCDateTime($microtime); - - $total = TblCard::where('pNo', 'No00000000768')->where('oRDate', '>', $utcDateTime)->where('sDate', 'exists', true)->count(); - - $this->line('待同步条数:'.$total); - - if ($total) { - Artisan::call('real:sync-bloc'); - Artisan::call('real:sync-company'); - } - - $page = 2; - - $jobs = new Collection(); - - while ($total) { - if (($page - 1) * $this->limit >= $total) { - break; - } - - $jobs->push(new MongoSyncJob($page, $this->limit, $utcDateTime)); - - $page++; - } - - $total && MongoSyncJob::withChain($jobs->toArray()) - ->dispatch(1, $this->limit, $utcDateTime) - ->allOnQueue('sync'); - - app(ConfigService::class)->set(self::CURSOR_KEY, intval($nextMicrotime)); - } -} diff --git a/app/Domains/Real/Commands/Sync/OrderBaseSync.php b/app/Domains/Real/Commands/Sync/OrderBaseSync.php index ba094015..e4691133 100644 --- a/app/Domains/Real/Commands/Sync/OrderBaseSync.php +++ b/app/Domains/Real/Commands/Sync/OrderBaseSync.php @@ -53,7 +53,7 @@ class OrderBaseSync extends Command $value['virtual_order_id'] = $orders[$value['sim']] ?? 0; } - DB::table('real_order_cards')->upsert($data, ['sim', 'deleted_at'], true); + DB::table('real_order_cards')->upsert($data, ['sim', 'deleted_at'], []); } app(OrderCardPartitionRepository::class)->forgetCached(); $this->line('插入订单关联数据成功'); diff --git a/app/Domains/Real/Commands/Sync/PackageSync.php b/app/Domains/Real/Commands/Sync/PackageSync.php index 26c7b0c8..4fdba2ad 100644 --- a/app/Domains/Real/Commands/Sync/PackageSync.php +++ b/app/Domains/Real/Commands/Sync/PackageSync.php @@ -107,7 +107,7 @@ class PackageSync extends Command } $item->parent_id = $basePackage['id']; - $item->carrier_operator = $basePackage['carrier_operator']; + $item->carrier_operator = array_flip(self::$carrier_operator)[$basePackage['carrier_operator']] ?? 'qw'; $item->flows = $basePackage['flows']; $item->voices = $basePackage['voices']; $item->messages = $basePackage['messages']; diff --git a/app/Domains/Real/Commands/Sync/RefundSync.php b/app/Domains/Real/Commands/Sync/RefundSync.php new file mode 100644 index 00000000..2db0a87d --- /dev/null +++ b/app/Domains/Real/Commands/Sync/RefundSync.php @@ -0,0 +1,40 @@ +getDateTime(); + + $starttime = $datetime->copy()->startOfMonth()->startOfDay(); + $endtime = $datetime->copy()->endOfMonth()->endOfDay(); + + $refunds = DB::connection('real')->table('jxc_back_card') + ->select(['sim', 'create_time']) + ->where('status', 2) + ->where('create_time', '>=', $starttime) + ->where('create_time', '<=', $endtime) + ->get(); + + $refunds->map(function ($item) { + $item->sim = str_to_array($item->sim, ','); + }); + + DB::transaction(function () use ($refunds) { + foreach ($refunds as $item) { + DB::table('real_order_cards')->whereIn('sim', $item['sim'])->where('created_at', '<=', $item['create_time'])->delete(); + DB::table('virtual_order_cards')->whereIn('sim', $item['sim'])->where('created_at', '<=', $item['create_time'])->delete(); + } + }); + } +} diff --git a/app/Domains/Real/Jobs/MongoSyncJob.php b/app/Domains/Real/Jobs/MongoSyncJob.php deleted file mode 100644 index 91e32f4a..00000000 --- a/app/Domains/Real/Jobs/MongoSyncJob.php +++ /dev/null @@ -1,110 +0,0 @@ -page = $page; - $this->limit = $limit; - $this->utcDateTime = $utcDateTime; - } - - /** - * - */ - public function handle() - { - Log::info("MongoSyncJob #: utcDateTime {$this->utcDateTime} - page {$this->page}"); - - $query = TblCard::select(['cNo', 'bNo', 'iccid', 'imsi', 'comId', 'oType', 'saDate', 'sDate', 'oRDate']) - ->where('pNo', 'No00000000768') - ->where('oRDate', '>', $this->utcDateTime) - ->where('sDate', 'exists', true) - ->orderBy('sDate'); - - $res = $query->forPage($this->page, $this->limit)->get(); - - if (empty($res)) { - Log::notice('MongoSyncJob not result!'); - return ; - } - - $companies = app(CompanyRepository::class)->withTrashed()->get()->keyBy('sn'); - $blocs = app(BlocRepository::class)->withTrashed()->get()->pluck('id', 'sn')->toArray(); - - $values = []; - - foreach ($res as $key => $value) { - $activated_at = $value['saDate'] ? $value['saDate']->toDateTime()->format('Y-m-d H:i:s') : null; - - if ($activated_at && Carbon::parse($activated_at) < Carbon::parse('2000-01-01 00:00:00')) { - $activated_at = null; - } - - $sim = intval(preg_replace('/\D/', '', $value['cNo'])); - $values[$sim] = [ - 'sim' => $sim, - 'imsi' => $value['imsi'] ?? '', - 'iccid' => $value['iccid'] ?? '', - 'bloc_id' => $blocs[$value['comId']] ?? 0, - 'carrier_operator' => self::$carrierOperators[$value['oType']] ?? 255, - 'activated_at' => $activated_at, - 'virtual_activated_at' => $activated_at, - 'created_at' => $value['sDate'] ? $value['sDate']->toDateTime()->format('Y-m-d H:i:s') : null, - 'updated_at' => date('Y-m-d H:i:s'), - ]; - } - - $builder = Card::query()->toBase(); - - $sql = $builder->getGrammar()->compileInsert($builder, $values); - - $sql .= ' on conflict (sim) do update set - activated_at=excluded.activated_at, - virtual_activated_at=COALESCE(cards.virtual_activated_at, excluded.activated_at)'; - - $builder->connection->insert($sql, Arr::flatten($values, 1)); - - app(CardRepository::class)->forgetCached(); - - $simArray = implode(',', array_keys($values)); - - DB::statement("select fix_timelines('{{$simArray}}'::INT8[]);"); - - app(OrderCardPartitionRepository::class)->forgetCached(); - - Log::info("MongoSyncJob END #: utcDateTime {$this->utcDateTime} - page {$this->page}"); - } -} diff --git a/app/Domains/Real/Providers/RealServiceProvider.php b/app/Domains/Real/Providers/RealServiceProvider.php index 0dcafd12..99890f25 100644 --- a/app/Domains/Real/Providers/RealServiceProvider.php +++ b/app/Domains/Real/Providers/RealServiceProvider.php @@ -21,13 +21,14 @@ class RealServiceProvider extends ServiceProvider // $this->mergeConfigFrom(realpath(__DIR__ . '/../config.php'), 'domain.real'); $this->commands([ - \App\Domains\Real\Commands\Sync\MongoSync::class, \App\Domains\Real\Commands\Sync\CompanySync::class, - \App\Domains\Real\Commands\Sync\BlocSync::class, \App\Domains\Real\Commands\Sync\PackageSync::class, \App\Domains\Real\Commands\Sync\OrderBaseSync::class, \App\Domains\Real\Commands\Sync\AddedOrderSync::class, \App\Domains\Real\Commands\Sync\FlowPoolSync::class, + \App\Domains\Real\Commands\Sync\RefundSync::class, + \App\Domains\Real\Commands\Sync\ActivatedSync::class, + \App\Domains\Real\Commands\Sync\CancelledSync::class, ]); } diff --git a/app/Domains/Virtual/Commands/Sync/ProductSync.php b/app/Domains/Virtual/Commands/Sync/ProductSync.php index ac0aa931..2e09cbb9 100644 --- a/app/Domains/Virtual/Commands/Sync/ProductSync.php +++ b/app/Domains/Virtual/Commands/Sync/ProductSync.php @@ -64,7 +64,7 @@ class ProductSync extends Command - Product::upsert($products, ['sn', 'deleted_at'], true); + Product::upsert($products, ['sn', 'deleted_at'], []); $subSql = 'SELECT DISTINCT ON (company_id, package_id) id FROM virtual_products ORDER BY company_id, package_id, updated_at DESC'; diff --git a/app/Domains/Virtual/Http/Controllers/FetchController.php b/app/Domains/Virtual/Http/Controllers/FetchController.php index e74b06cf..75336085 100644 --- a/app/Domains/Virtual/Http/Controllers/FetchController.php +++ b/app/Domains/Virtual/Http/Controllers/FetchController.php @@ -35,8 +35,16 @@ class FetchController extends Controller */ public function packages(PackageRepository $packageRepository) { - $type = $this->request->ids('type'); - return res($this->search($packageRepository->whereIn('type', $type), ['name', 'carrier_operator']), '', 201); + $packages = $this->search($packageRepository, ['type', 'name', 'carrier_operator']); + + if ($this->request->has('type')) { + $type = $this->request->ids('type'); + $packages = $packages->filter(function ($item) use ($type) { + return !in_array($item->type, $type); + }); + } + + return res($packages, '', 201); } /** @@ -78,11 +86,7 @@ class FetchController extends Controller }); } - $sorted = $results->sortBy($field)->values()->all(); - - if ($limit) { - return array_slice($sorted, 0, $limit); - } + $sorted = $results->sortBy($primaryKey)->values()->all(); return $sorted; } diff --git a/app/Domains/Virtual/Jobs/CreateRealVirtualRelation.php b/app/Domains/Virtual/Jobs/CreateRealVirtualRelation.php deleted file mode 100644 index 0910dbd5..00000000 --- a/app/Domains/Virtual/Jobs/CreateRealVirtualRelation.php +++ /dev/null @@ -1,67 +0,0 @@ -virtualOrderId = $virtualOrderId; - $this->realOrderIds = $realOrderIds; - } - - /** - * - */ - public function handle(RealOrderRepository $realOrderRepository, VirtualOrderRepository $virtualOrderRepository) - { - $select = ['id', 'company_id', 'package_id']; - - if (!$virtualOrder = $virtualOrderRepository->select($select)->find($this->virtualOrderId)) { - return ; - } - - $realOrders = $realOrderRepository->select($select)->whereIn('id', $this->realOrderIds)->get(); - - if (empty($realOrders)) { - return ; - } - - $array = []; - - foreach ($realOrders as $value) { - $k = implode(',', [$value['company_id'], $value['package_id'], $virtualOrder['company_id'], $virtualOrder['package_id']]); - $array[$k] = [ - 'real_company_id' => $value['company_id'], - 'real_package_id' => $value['package_id'], - 'virtual_company_id' => $virtualOrder['company_id'], - 'virtual_package_id' => $virtualOrder['package_id'], - 'times' => 1, - 'updated_at' => date('Y-m-d H:i:s'), - ]; - } - - $builder = RealVirtual::query()->toBase(); - - $sql = $builder->getGrammar()->compileInsert($builder, $array); - - $sql .= ' on conflict (real_company_id,real_package_id,virtual_company_id,virtual_package_id) do update set - times=real_virtual_relations.times+excluded.times, - updated_at=excluded.updated_at'; - - $builder->connection->insert($sql, Arr::flatten($array, 1)); - } -} diff --git a/app/Domains/Virtual/Services/OrderService.php b/app/Domains/Virtual/Services/OrderService.php index b79a124f..997867e8 100644 --- a/app/Domains/Virtual/Services/OrderService.php +++ b/app/Domains/Virtual/Services/OrderService.php @@ -15,13 +15,13 @@ use Illuminate\Database\Query\Grammars\Grammar; use App\Domains\Virtual\Services\CompanyService; use App\Domains\Virtual\Services\PackageService; use App\Domains\Virtual\Repositories\OrderRepository; -use App\Domains\Virtual\Jobs\CreateRealVirtualRelation; use App\Domains\Virtual\Repositories\ProductRepository; use App\Models\Real\OrderCardPartition as RealOrderCardPartition; use App\Domains\Virtual\Repositories\OrderCardPartitionRepository; use App\Domains\Real\Repositories\OrderRepository as RealOrderRepository; use App\Domains\Real\Repositories\OrderCardPartitionRepository as RealOrderCardPartitionRepository; use App\Exceptions\InvalidArgumentException; +use App\Models\Card\Card; class OrderService extends Service { @@ -119,6 +119,7 @@ class OrderService extends Service 'order_status' => ['in:0,1,2,3,4,5'], 'transaction_status' => ['in:0,1,2'], 'extends' => ['array'], + 'selected' => ['array'], ]; $message = [ @@ -165,61 +166,48 @@ class OrderService extends Service Validator::validate($attributes, $rule, $message); - DB::beginTransaction(); - - if (isset($attributes['sign']) && $attributes['sign'] == 2) { - if (empty($attributes['selected'])) { - throw new InvalidArgumentException('请选择卡'); - } - - // 改企业的卡新增一批虚拟卡,并替换原有订单里的卡 - $simArray = implode(',', array_pluck($attributes['selected'], 'sim')); - - try { - DB::statement("select change_cards('{{$simArray}}'::INT8[]);"); - } catch (\Exception $e) { - DB::rollBack(); - throw $e; - } + if (isset($attributes['selected']) && empty('selected')) { + throw new InvalidArgumentException('请选择卡'); } - // 转销售和改企业的都立即激活卡 - if (isset($attributes['sign']) && in_array($attributes['sign'], [1, 2])) { - $params = array_pluck($attributes['selected'], 'sim'); - $sql = 'UPDATE cards SET virtual_activated_at = ? WHERE sim IN (%s)'; - $sql = sprintf($sql, app(Grammar::class)->parameterize($params)); - array_unshift($params, $attributes['order_at']); - DB::update($sql, $params); - $attributes['type'] = 0; - $originType = $attributes['type']; + DB::beginTransaction(); - // 销售订单,如果单卡使用多次,仅第一次为销售,其他改续费。 - $extras = []; - $selected = $attributes['selected']; - $attributes['counts'] = count($selected); + try { + // 改企业的卡新增一批虚拟卡,并替换原有订单里的卡 + if (isset($attributes['sign']) && $attributes['sign'] == 2) { + $simArray = implode(',', array_pluck($attributes['selected'], 'sim')); + DB::statement("select change_cards('{{$simArray}}'::INT8[]);"); + } - foreach ($selected as &$card) { - if ($card['counts'] > 1) { - array_push($extras, [ - 'sim' => $card['sim'], - 'counts' => $card['counts'] - 1, - ]); + // 转销售和改企业的都立即激活卡 + if (isset($attributes['sign']) && in_array($attributes['sign'], [1, 2])) { + $array = array_map(function ($item) use ($attributes) { + return ['sim' => $item['sim'], 'virtual_activated_at' => $attributes['order_at']]; + }, $attributes['selected']); - $card['counts'] = 1; + Card::upsert($array, ['sim', 'deleted'], ['virtual_activated_at']); + + $attributes['type'] = 0; + $originType = $attributes['type']; + + // 销售订单,如果单卡使用多次,仅第一次为销售,其他改续费。 + $extras = []; + $selected = $attributes['selected']; + $attributes['counts'] = count($selected); + + foreach ($selected as &$card) { + if ($card['counts'] > 1) { + array_push($extras, [ + 'sim' => $card['sim'], + 'counts' => $card['counts'] - 1, + ]); + $card['counts'] = 1; + } } + + $attributes['selected'] = $selected; } - $attributes['selected'] = $selected; - - if (!empty($extras)) { - $extraOrderData = $attributes; - $extraOrderData['type'] = $originType; - $extraOrderData['counts'] = array_sum(array_pluck($extras, 'counts')); - $extraOrderData['total_price'] = $attributes['unit_price'] * $extraOrderData['counts']; - $extraOrderData['custom_price'] = $attributes['unit_price'] * $extraOrderData['counts']; - $extraOrder = $this->orderRepository->create($attributes); - $this->upsertOrderCards($extras, $extraOrder); - } if (!$attributes['id']) { if ($product->company_id != $attributes['company_id']) { throw new NotAllowedException('非法操作'); @@ -233,35 +221,43 @@ class OrderService extends Service $node = $this->orderRepository->create($attributes); } - } - if ($attributes['id']) { - if (!$node = $this->orderRepository->find($attributes['id'])) { - throw new NotExistException('订单不存在或已删除'); - } - - if (!empty($attributes['extends']) && is_array($attributes['extends'])) { - $attributes['extends'] = array_merge($node->extends ?: [], $attributes['extends']); - } - - $this->orderRepository->setModel($node)->update($attributes); - } - - if ($attributes['selected']) { - try { - $this->upsertOrderCards($attributes['selected'], $node); - $this->orderRepository->forgetCached(); - $this->orderCardPartitionRepository->forgetCached(); - app(RealOrderCardPartitionRepository::class)->forgetCached(); - - // 销售订单创建企业套餐关联 - if ($node['type'] === 0) { - CreateRealVirtualRelation::dispatch($node->id, array_pluck($attributes['selected'], 'order_id')); + if ($attributes['id']) { + if (!$node = $this->orderRepository->find($attributes['id'])) { + throw new NotExistException('订单不存在或已删除'); } - } catch (\Exception $e) { - DB::rollBack(); - throw new HttpException('操作失败'); + + if (!empty($attributes['extends']) && is_array($attributes['extends'])) { + $attributes['extends'] = array_merge($node->extends ?: [], $attributes['extends']); + } + + $this->orderRepository->setModel($node)->update($attributes); } + + if ($attributes['selected']) { + try { + $this->upsertOrderCards($attributes['selected'], $node); + $this->orderRepository->forgetCached(); + $this->orderCardPartitionRepository->forgetCached(); + app(RealOrderCardPartitionRepository::class)->forgetCached(); + } catch (\Exception $e) { + DB::rollBack(); + throw new HttpException('操作失败'); + } + } + + if (!empty($extras)) { + $extraOrderData = $attributes; + $extraOrderData['type'] = $originType; + $extraOrderData['counts'] = array_sum(array_pluck($extras, 'counts')); + $extraOrderData['total_price'] = $attributes['unit_price'] * $extraOrderData['counts']; + $extraOrderData['custom_price'] = $attributes['unit_price'] * $extraOrderData['counts']; + $extraOrder = $this->orderRepository->create($attributes); + $this->upsertOrderCards($extras, $extraOrder); + } + } catch (\Exception $e) { + DB::rollBack(); + throw $e; } DB::commit(); diff --git a/app/Models/Artisan/Artisan.php b/app/Models/Artisan/Artisan.php index 89b773d0..f2163c2f 100644 --- a/app/Models/Artisan/Artisan.php +++ b/app/Models/Artisan/Artisan.php @@ -35,14 +35,11 @@ class Artisan extends Model public static $names = [ 'real:sync-added-order' => '同步RD企业订单数据', - 'real:sync-bloc' => '同步RD集团数据', 'real:sync-company' => '同步RD企业数据', 'real:sync-mongo' => '同步卡基础信息数据', 'real:sync-order' => '同步RD基础订单数据', 'real:sync-package' => '同步RD套餐数据', - 'virtual:sync-card' => '同步VD卡信息数据', 'virtual:sync-company' => '同步VD企业数据', - 'virtual:sync-log' => '同步VD订单数据', 'virtual:sync-package' => '同步VD套餐数据', 'virtual:sync-product' => '同步VD定价', ]; diff --git a/app/Models/Card/Bloc.php b/app/Models/Card/Bloc.php deleted file mode 100644 index 1968356f..00000000 --- a/app/Models/Card/Bloc.php +++ /dev/null @@ -1,48 +0,0 @@ -hasMany(Card::class, 'bloc_id', 'id'); - } -} diff --git a/app/Models/Card/Card.php b/app/Models/Card/Card.php index c5bb48c0..ab3d8d96 100644 --- a/app/Models/Card/Card.php +++ b/app/Models/Card/Card.php @@ -10,7 +10,6 @@ use App\Core\Model; * @property int $sim sim号 * @property string $imsi imsi号 * @property string $iccid iccid号 - * @property int $bloc_id 来源集团ID * @property int $carrier_operator 运营商(0:联通 1:移动 2:电信) * @property \Illuminate\Support\Carbon|null $activated_at 激活时间 * @property \Illuminate\Support\Carbon|null $virtual_activated_at 虚拟激活时间 @@ -23,7 +22,6 @@ use App\Core\Model; * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Card\Card newQuery() * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Card\Card query() * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Card\Card whereActivatedAt($value) - * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Card\Card whereBlocId($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Card\Card whereCancelledAt($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Card\Card whereCarrierOperator($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Card\Card whereCreatedAt($value) diff --git a/app/Models/Real/FlowPool.php b/app/Models/Real/FlowPool.php index 591b8338..c944ec9d 100644 --- a/app/Models/Real/FlowPool.php +++ b/app/Models/Real/FlowPool.php @@ -3,7 +3,6 @@ namespace App\Models\Real; use App\Core\Model; -use App\Models\Card\Card; /** * App\Models\Real\FlowPool diff --git a/app/Models/Real/Order.php b/app/Models/Real/Order.php index f1e66dbf..ee731eed 100644 --- a/app/Models/Real/Order.php +++ b/app/Models/Real/Order.php @@ -3,7 +3,6 @@ namespace App\Models\Real; use App\Core\Model; -use App\Models\Card\Card; /** * App\Models\Real\Order diff --git a/app/Models/Virtual/Order.php b/app/Models/Virtual/Order.php index 4cebc3a7..8b44c245 100644 --- a/app/Models/Virtual/Order.php +++ b/app/Models/Virtual/Order.php @@ -4,9 +4,7 @@ namespace App\Models\Virtual; use App\Core\Model; use App\Models\Card\Card; -use App\Models\Real\OrderCard; use Illuminate\Database\Eloquent\SoftDeletes; -use App\Models\Virtual\Relations\OrderRelations; /** * App\Models\Virtual\Order diff --git a/database/migrations/2018_12_24_164210_create_blocs_table.php b/database/migrations/2018_12_24_164210_create_blocs_table.php deleted file mode 100644 index be3731b0..00000000 --- a/database/migrations/2018_12_24_164210_create_blocs_table.php +++ /dev/null @@ -1,46 +0,0 @@ -increments('id')->comment('集团ID'); - $table->string('sn', 32)->comment('集团编号'); - $table->string('name', 32)->comment('集团名称'); - $table->string('shorthand', 32)->comment('英文简称'); - $table->tinyInteger('carrier_operator')->unsigned()->default(255)->comment('运营商(0:联通 1:移动 2:电信)'); - $table->timestamps(); - $table->softDeletes(); - - $table->unique(['sn', 'deleted_at']); - $table->index('name'); - $table->index('carrier_operator'); - - $table->comment('卡源集团'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('blocs'); - } -} diff --git a/database/migrations/2018_12_24_164218_create_cards_table.php b/database/migrations/2018_12_24_164218_create_cards_table.php index 739b59e5..886bb61c 100644 --- a/database/migrations/2018_12_24_164218_create_cards_table.php +++ b/database/migrations/2018_12_24_164218_create_cards_table.php @@ -21,7 +21,6 @@ class CreateCardsTable extends Migration $table->bigInteger('sim')->unsigned()->default(0)->comment('sim号'); $table->string('imsi', 32)->default('')->comment('imsi号'); $table->string('iccid', 32)->default('')->comment('iccid号'); - $table->integer('bloc_id')->unsigned()->default(0)->comment('来源集团ID'); $table->tinyInteger('carrier_operator')->unsigned()->default(255)->comment('运营商(0:联通 1:移动 2:电信)'); $table->timestamp('activated_at')->nullable()->comment('激活时间'); $table->timestamp('virtual_activated_at')->nullable()->comment('虚拟激活时间'); diff --git a/database/migrations/2018_12_24_164434_create_real_order_cards_table.php b/database/migrations/2018_12_24_164434_create_real_order_cards_table.php index 3cb97e8f..f6225e34 100644 --- a/database/migrations/2018_12_24_164434_create_real_order_cards_table.php +++ b/database/migrations/2018_12_24_164434_create_real_order_cards_table.php @@ -27,6 +27,7 @@ class CreateRealOrderCardsTable extends Migration $table->integer('counts')->unsigned()->default(0)->comment('数量'); $table->integer('unit_price')->unsigned()->default(0)->comment('单价'); $table->integer('virtual_order_id')->unsigned()->default(0)->comment('VD 订单ID'); + $table->tinyInteger('refunded')->unsigned()->default(0)->comment('退货标志 0:未退货 1:已退货'); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2018_12_31_170946_create_virtual_order_cards_tables.php b/database/migrations/2018_12_31_170946_create_virtual_order_cards_tables.php index 7325de21..fba8c4d8 100644 --- a/database/migrations/2018_12_31_170946_create_virtual_order_cards_tables.php +++ b/database/migrations/2018_12_31_170946_create_virtual_order_cards_tables.php @@ -35,6 +35,7 @@ class CreateVirtualOrderCardsTables extends Migration $table->timestamp('service_start_at')->nullable()->comment('服务开始时间'); $table->timestamp('service_end_at')->nullable()->comment('服务结束时间'); $table->bigInteger('original_sim')->unsigned()->default(0)->comment('原始sim号'); + $table->tinyInteger('refunded')->unsigned()->default(0)->comment('退货标志 0:未退货 1:已退货'); $table->timestamps(); $table->softDeletes(); diff --git a/database/migrations/2019_03_08_110806_create_company_relations.php b/database/migrations/2019_03_08_110806_create_company_relations.php deleted file mode 100644 index 2fb064bf..00000000 --- a/database/migrations/2019_03_08_110806_create_company_relations.php +++ /dev/null @@ -1,42 +0,0 @@ -integer('real_company_id')->unsigned()->default(0)->comment('RD企业ID'); - $table->integer('real_package_id')->unsigned()->default(0)->comment('RD套餐ID'); - $table->integer('virtual_company_id')->unsigned()->default(0)->comment('VD企业ID'); - $table->integer('virtual_package_id')->unsigned()->default(0)->comment('VD套餐ID'); - $table->integer('times')->unsigned()->default(0)->comment('关联次数'); - $table->timestamp('updated_at')->comment('更新时间'); - - $table->primary(['real_company_id', 'real_package_id', 'virtual_company_id', 'virtual_package_id']); - - $table->comment('RD VD关系关联'); - }); - } - } - - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('real_virtual_relations'); - } -} diff --git a/database/migrations/create_virtaul_order_cards_func.pgsql b/database/migrations/create_virtaul_order_cards_func.pgsql index fa7c6fcd..46709555 100644 --- a/database/migrations/create_virtaul_order_cards_func.pgsql +++ b/database/migrations/create_virtaul_order_cards_func.pgsql @@ -20,10 +20,21 @@ BEGIN SELECT array_to_json(array_agg(row_to_json(t))) INTO activate_cards FROM (SELECT cards.sim, cards.virtual_activated_at FROM vd.cards WHERE cards.sim = ANY ($1)) t; - query := 'SELECT virtual_order_cards_partition.id, virtual_order_cards_partition.type, virtual_order_cards_partition.sim, virtual_order_cards_partition.package_id, virtual_order_cards_partition.created_at, virtual_packages.service_months, virtual_packages.effect_months, virtual_packages.delay_months, virtual_order_cards_partition.counts - FROM vd.virtual_order_cards_partition JOIN vd.virtual_packages ON virtual_order_cards_partition.package_id = virtual_packages."id" - WHERE virtual_order_cards_partition.sim = ANY($1) - ORDER BY sim ASC, created_at ASC'; + query := 'SELECT + virtual_order_cards_partition.id, + virtual_order_cards_partition.type, + virtual_order_cards_partition.sim, + virtual_order_cards_partition.package_id, + virtual_order_cards_partition.created_at, + virtual_packages.service_months, + virtual_packages.effect_months, + virtual_packages.delay_months, + virtual_order_cards_partition.counts, + virtual_order_cards_partition.service_start_at, + virtual_order_cards_partition.service_end_at + FROM vd.virtual_order_cards_partition JOIN vd.virtual_packages ON virtual_order_cards_partition.package_id = virtual_packages."id" + WHERE virtual_order_cards_partition.sim = ANY($1) + ORDER BY sim ASC, created_at ASC'; FOR order_row IN EXECUTE query USING $1 LOOP @@ -80,8 +91,8 @@ BEGIN sim := order_row.sim::INT8; "type" := order_row."type"::INT2; package_id := order_row."package_id"::INT; - service_start_at := temp_service_start_at::TIMESTAMP; - service_end_at := temp_service_end_at::TIMESTAMP; + service_start_at := COALESCE(order_row.service_start_at::TIMESTAMP, temp_service_start_at::TIMESTAMP); + service_end_at := COALESCE(order_row.service_end_at::TIMESTAMP, temp_service_end_at::TIMESTAMP); RETURN NEXT; END LOOP; RETURN; @@ -97,7 +108,6 @@ BEGIN service_end_at=tmp.service_end_at FROM (SELECT * FROM GET_TIMELINES($1)) as tmp WHERE tmp.id = virtual_order_cards_partition.id; - END; $$ LANGUAGE plpgsql SET synchronous_commit TO OFF; @@ -157,12 +167,12 @@ BEGIN OVERLAY(cards.sim::TEXT PLACING (4 + t.counts)::TEXT FROM 4 FOR 1)::INT8 as sim, OVERLAY(imsi::TEXT PLACING (1 + t.counts)::TEXT FROM 3 FOR 1) as imsi, OVERLAY(iccid::TEXT PLACING (1 + t.counts)::TEXT FROM 5 FOR 1) as iccid, - bloc_id, carrier_operator, activated_at, virtual_activated_at, type, real_company_id, cancelled_at, created_at, updated_at + carrier_operator, activated_at, virtual_activated_at, type, real_company_id, cancelled_at, created_at, updated_at FROM cards JOIN ( SELECT OVERLAY(sim::TEXT PLACING $1 FROM 4 FOR 1), COUNT ( * ) AS counts, MIN ( sim ) AS sim FROM cards WHERE sim::TEXT SIMILAR TO $2 GROUP BY 1 ) AS t ON t.sim = cards.sim ), new_inserts AS ( - INSERT INTO cards SELECT sim,imsi,iccid,bloc_id, carrier_operator, activated_at, virtual_activated_at, type, real_company_id, cancelled_at, created_at, updated_at FROM new_cards + INSERT INTO cards SELECT sim,imsi,iccid, carrier_operator, activated_at, virtual_activated_at, type, real_company_id, cancelled_at, created_at, updated_at FROM new_cards ) UPDATE virtual_order_cards_partition SET original_sim=t.original_sim,sim=t.sim FROM (SELECT sim,original_sim FROM new_cards) as t WHERE virtual_order_cards_partition.sim=t.original_sim'; diff --git a/database/migrations/create_virtual_order_cards_table.pgsql b/database/migrations/create_virtual_order_cards_table.pgsql index b4e080e6..1c177b7e 100644 --- a/database/migrations/create_virtual_order_cards_table.pgsql +++ b/database/migrations/create_virtual_order_cards_table.pgsql @@ -30,3 +30,18 @@ OR DELETE ON cards FOR EACH ROW EXECUTE PROCEDURE REINDEX_TIMELINES (); + + +CREATE OR REPLACE VIEW real_virtual_relations AS +SELECT + r.type as type, + r.company_id as real_company_id, + r.package_id as real_package_id, + v.company_id as virtual_company_id, + v.package_id as virtual_package_id, + COUNT(*) as times, + MAX(v.created_at) as updated_at + FROM real_order_cards_partition as r + JOIN virtual_order_cards as v ON v.id = r.virtual_order_id + WHERE r.virtual_order_id <> 0 + GROUP BY r.type,r.company_id,r.package_id,v.company_id,v.package_id diff --git a/database/migrations/migrate_from_old.pgsql b/database/migrations/migrate_from_old.pgsql index d40542e5..7e2f53b9 100644 --- a/database/migrations/migrate_from_old.pgsql +++ b/database/migrations/migrate_from_old.pgsql @@ -94,25 +94,21 @@ CREATE MATERIALIZED VIEW logs AS ckb_custom_handle_log.pay_type; -- 第三步:同步卡数据 -INSERT INTO vd.cards (sim, imsi, iccid, bloc_id, carrier_operator, "type", activated_at, virtual_activated_at, cancelled_at, created_at, updated_at) +INSERT INTO vd.cards (sim, imsi, iccid, carrier_operator, "type", virtual_activated_at, cancelled_at, created_at, updated_at) ( SELECT card_number::BIGINT as sim, imsi, iccid, - COALESCE(blocs.id, 0) as bloc_id, CASE carrieroperator WHEN 10 THEN 0 WHEN 11 THEN 1 WHEN 12 THEN 2 ELSE 255 END AS carrier_operator, CASE WHEN substr(card_number, 4, 1)::INT >= 5 THEN 1 ELSE 0 END AS "type", - CASE card_cycle_start::int WHEN 0 THEN NULL ELSE to_timestamp(card_cycle_start::int) END AS activated_at, CASE card_cycle_start::int WHEN 0 THEN NULL ELSE to_timestamp(card_cycle_start::int) END AS virtual_activated_at, CASE custom_state WHEN 13 THEN to_timestamp(update_time) ELSE NULL END AS cancelled_at, to_timestamp(create_time) as created_at, to_timestamp(update_time) as updated_at FROM ckb_custom - LEFT JOIN vd.blocs ON blocs.sn = ckb_custom.card_from ) ON CONFLICT (sim) DO UPDATE SET - activated_at=COALESCE(cards.activated_at, excluded.virtual_activated_at), virtual_activated_at=excluded.virtual_activated_at, cancelled_at=excluded.cancelled_at; diff --git a/frontend/src/api/virtual/fetch.js b/frontend/src/api/virtual/fetch.js index e3a19f89..0d662230 100644 --- a/frontend/src/api/virtual/fetch.js +++ b/frontend/src/api/virtual/fetch.js @@ -7,13 +7,8 @@ * @param {[type]} name [description] * @return {[type]} [description] */ -export function companies(name, limit = 5) { - return service.get('api/virtual/fetch/companies', { - params: { - search: name, - limit - } - }); +export function companies() { + return service.get('api/virtual/fetch/companies'); } /** @@ -21,12 +16,6 @@ export function companies(name, limit = 5) { * @param {[type]} name [description] * @return {[type]} [description] */ -export function packages(type = 0, name, limit = 5) { - return service.get('api/virtual/fetch/packages', { - params: { - type: type, - search: name, - limit - } - }); +export function packages() { + return service.get('api/virtual/fetch/packages'); } diff --git a/frontend/src/mixins/complete.js b/frontend/src/mixins/complete.js index 22dc0287..74fb1964 100644 --- a/frontend/src/mixins/complete.js +++ b/frontend/src/mixins/complete.js @@ -38,7 +38,7 @@ export default { return new Promise((resolve, reject) => { if (!this.completeCompanyInitialized) { this.completeCompanyInitialized = true; - FETCH.companies(null, 0).then(res => { + FETCH.companies().then(res => { if (res.code === 0) { this.completeCompanies = res.data; resolve(res.data); @@ -59,14 +59,19 @@ export default { }); }); }, - initCompletePackages(type = 0) { + initCompletePackages(type = null) { return new Promise((resolve, reject) => { if (!this.completePackageInitialized) { - FETCH.packages(type, null, 0).then(res => { + FETCH.packages().then(res => { if (res.code === 0) { this.completePackageInitialized = true; - this.completePackages = res.data; - resolve(res.data); + this.completePackages = res.data.filter(el => { + if (type !== null && el.type !== type) { + return false; + } + return true; + }); + resolve(this.completePackages); } reject(res); diff --git a/frontend/src/mixins/index.js b/frontend/src/mixins/index.js index 61896056..9402b7f3 100644 --- a/frontend/src/mixins/index.js +++ b/frontend/src/mixins/index.js @@ -77,7 +77,7 @@ export default { let search = []; let init_options = { - orderBy: 'created_at', + orderBy: 'updated_at', sortedBy: 'desc' }; @@ -165,24 +165,24 @@ export default { * @return {[type]} [description] */ return h('p', { - style: { - fontSize: '14px', - marginTop: '15px' - } - }, + style: { + fontSize: '14px', + marginTop: '15px' + } + }, [ h('span', data.message + ' 请点击下载:'), h('span', { - domProps: { - innerHTML: '导入失败.xls' - }, - class: ['primary-color', 'c-p'], - on: { - click: () => { - this.downloadExcel(tHeader, this.formatJson(filterVal, data.result), '导入失败'); - } + domProps: { + innerHTML: '导入失败.xls' + }, + class: ['primary-color', 'c-p'], + on: { + click: () => { + this.downloadExcel(tHeader, this.formatJson(filterVal, data.result), '导入失败'); } - }) + } + }) ]); }, exportExcelInfo(h, data) { @@ -194,28 +194,28 @@ export default { */ return h('p', { - style: { - fontSize: '14px', - marginTop: '15px' - } - }, + style: { + fontSize: '14px', + marginTop: '15px' + } + }, [ h('span', data.message + ' 请点击下载:'), h('span', { - domProps: { - innerHTML: '导入失败.xls' - }, - class: ['primary-color', 'c-p'], - on: { - click: () => { - if (data.url !== '') { - window.open(data.url); - } else { - this.$Message.info('无数据可下载'); - } + domProps: { + innerHTML: '导入失败.xls' + }, + class: ['primary-color', 'c-p'], + on: { + click: () => { + if (data.url !== '') { + window.open(data.url); + } else { + this.$Message.info('无数据可下载'); } } - }) + } + }) ] ); }, diff --git a/frontend/src/views/artisan/real-sync/js/edit.js b/frontend/src/views/artisan/real-sync/js/edit.js index 0f3e7a8b..07ed5c6a 100644 --- a/frontend/src/views/artisan/real-sync/js/edit.js +++ b/frontend/src/views/artisan/real-sync/js/edit.js @@ -22,35 +22,29 @@ export default { loading: false, disabled: false, steps: [ - { - 'title': '同步集团', - 'content': '所有卡源集团的数据', - 'command': 'real:sync-bloc', - 'max': 5 - }, { 'title': '同步企业', 'content': '所有企业数据', 'command': 'real:sync-company', - 'max': 10 + 'max': 5 }, { 'title': '同步套餐', 'content': '所有套餐数据', 'command': 'real:sync-package', - 'max': 25 + 'max': 10 }, { 'title': '同步流量池', 'content': '所有流量池的数据', 'command': 'real:sync-flow-pool', - 'max': 30 + 'max': 20 }, { 'title': '同步订单', 'content': '指定月份的销售订单数据', 'command': 'real:sync-order', - 'max': 70, + 'max': 60, 'datePicker': true }, { @@ -105,7 +99,7 @@ export default { if (this.circle.percent < max) { this.circle.percent++; } - }, 1500); + }, 1000); service.post('/api/artisan/call', params).then(res => { if (res.code == 0) { diff --git a/frontend/src/views/artisan/real-sync/js/index.js b/frontend/src/views/artisan/real-sync/js/index.js index 4ec054b4..2b034f54 100644 --- a/frontend/src/views/artisan/real-sync/js/index.js +++ b/frontend/src/views/artisan/real-sync/js/index.js @@ -7,7 +7,6 @@ export default { return { commands: { 'real:sync-added-order': '同步RD企业订单数据', - 'real:sync-bloc': '同步RD集团数据', 'real:sync-company': '同步RD企业数据', 'real:sync-mongo': '同步卡基础信息数据', 'real:sync-order': '同步RD基础订单数据', diff --git a/frontend/src/views/virtual/orders/cards.vue b/frontend/src/views/virtual/orders/cards.vue index 3e100058..3e5c8891 100644 --- a/frontend/src/views/virtual/orders/cards.vue +++ b/frontend/src/views/virtual/orders/cards.vue @@ -19,6 +19,14 @@ +
  • + +
  • +